您好我有一个关于如何在Matlab中实现以下行为的问题。
A.x=pi
A.sin=@()sin(A.x)
A.sin() % Returns 1.2246e-16, essentially 0 so all good so far.
% Now for the problem
A.x = pi/2
A.sin() % Returns 1.2246e-16, meaning the new A.x is not used. It should return 1.
有没有人有任何想法如何实现这一目标。我知道我可以将A.sin定义为@(x) sin(x)
然后提供A.x但是宁愿找到替代方案。
感谢。
答案 0 :(得分:1)
创建此类:
classdef mytrig
properties
x
end
methods
function out = sin(obj)
out = sin(obj.x);
end
end
end
然后在命令行:
>> A = mytrig;
>> A.x = pi;
>> A.sin
ans =
1.2246e-016
>> A.x = pi/2;
>> A.sin
ans =
1
您当前的操作方式不起作用,因为当您创建函数句柄A.sin=@()sin(A.x)
时,函数句柄会捕获当前工作空间的副本,包括x
,其中然后,即使您随后更改x
,也会保持不变。如果您希望自己之后能够更改x
,那么最好的方法就是实现上述课程。
希望有所帮助!
答案 1 :(得分:0)
在Matlab中为变量赋值后,它是固定的。
如果您想要自动更新某些内容,请查看课程。
如果你不喜欢课程,你也可以定义一个功能,例如
myAsin = @()sin(A.x)
现在无法对其进行测试,但由于它是一个功能,因此在A.x
更新后调用时,您应该获取更新后的值。