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
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.
您可以尝试以下方法;
x=10;
y='x'
y
y =
x
eval(y)
x =
10
您还可以x
通过定义函数y
并引用它来定义隐式句柄:
x = 1;
y = @(x) x;
y(x) % displays 1
x = 10;
y(x) % displays 10
在 MATLAB 中,这是不可能的。但是,有很多方法可以获得类似的行为。例如,您可以有一个数组a = [1, 5, 3, 1]
,然后使用 and 对其进行x
索引y
。对于x = 2
, 您可以分配a(x) = 7
, y = x
, 并且一旦更改a(x) = 4
, a(y) == 4
。
所以索引可能是模拟引用的最快方法,但如果你想要一些优雅的解决方案,你可以通过@natan 指出的符号变量。重要的是,MATLAB 中没有指针。