0

您好我有一个关于如何在 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)然后提供 Ax ,但宁愿找到替代方案。

谢谢。

4

2 回答 2

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以后能够自己进行更改,那么最好的方法是实现上述类。

希望有帮助!

于 2013-09-09T16:32:44.620 回答
0

在 Matlab 中为变量赋值后,它是固定的。

如果您想要自动更新的内容,请查看课程。


如果你不喜欢类,你也可以定义一个函数,例如

myAsin = @()sin(A.x)

现在无法对其进行测试,但是由于它是一个函数,因此您应该在更新后调用它时获取更新的值A.x

于 2013-09-09T16:19:31.547 回答