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後で を変更しても、後で修正されたままになるため、現在行っている方法は機能しませんxx後で自分で変更できるようにしたい場合は、上記のようにクラスを実装するのが最善の方法です。

それが役立つことを願っています!

于 2013-09-09T16:32:44.620 に答える