Matlab,函数句柄自动使用参数

时间:2013-09-09 15:51:56

标签: matlab function-handle

您好我有一个关于如何在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但是宁愿找到替代方案。

感谢。

2 个答案:

答案 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更新后调用时,您应该获取更新后的值。