13

google、matlab文档用起来一直很困难,花了几个小时,还是学不会

x = 1
y = x
x = 10
y

ans = 10

相反,发生的是:

x = 1
y = x
x = 10
y

ans = 1

x 的值存储到 y 中。但我想动态更新 y 的值等于 x。

我用什么操作来做到这一点?

谢谢。M

4

4 回答 4

17

Matlab 是 99% 的按值传递环境,这就是您刚才演示的。通过引用传递的 1% 是句柄,可以是句柄图形(此处不相关)或句柄类,它们与您想要的非常接近。

要使用句柄类来执行您描述的操作,请将以下内容放入文件 callRefValue中。

classdef RefValue < handle
    properties
        data = [];
    end
end

这将创建一个“句柄”类,具有一个名为“数据”的属性。

现在您可以尝试:

x = RefValue;
x.data = 1;
y = x;
x.data = 10;
disp(y.data)   %Displays 10.
于 2013-02-10T01:35:40.180 回答
8

您可以尝试以下方法;

x=10;
y='x'
y

y = 
    x

eval(y)
x =
    10
于 2013-02-10T01:26:07.153 回答
5

您还可以x通过定义函数y并引用它来定义隐式句柄:

x = 1;
y = @(x) x;
y(x) % displays 1
x = 10;
y(x) % displays 10
于 2013-02-10T21:34:20.673 回答
1

在 MATLAB 中,这是不可能的。但是,有很多方法可以获得类似的行为。例如,您可以有一个数组a = [1, 5, 3, 1],然后使用 and 对其进行x索引y。对于x = 2, 您可以分配a(x) = 7, y = x, 并且一旦更改a(x) = 4, a(y) == 4

所以索引可能是模拟引用的最快方法,但如果你想要一些优雅的解决方案,你可以通过@natan 指出的符号变量。重要的是,MATLAB 中没有指针

于 2013-02-10T01:28:28.593 回答