2

別の変数に依存する変数の値を更新する方法はありますか?

次の簡単な例を見てください。

コード:

variable1 = 1;

variable2 = 2 * variable1

variable1 = 3;

variable2

出力:

variable2 =

     2


variable2 =

     2

variable1 の値を変更した後、variable2 は次のように再定義する必要なく変更されることを望みます。

コード:

variable1 = 1;

variable2 = 2 * variable1

variable1 = 3;

variable2 = 2 * variable1

出力:

variable2 =

     2

variable2 =

     6
4

6 に答える 6

1

あなたが本当にしたいのであれば、そうすべきではありませんが、variable2etc を関数にしevalinて、 の現在の値を取得するために使用できますvariable1:

variable2 = @() 2 * evalin('caller', 'variable1')
variable1 = 1;
variable2() % output: 2
variable1 = 15;
variable2() % output: 30

これはかなり醜い解決策であり、私自身は使用しません。コードが関数内にある場合は、少し良い解決策があります (eval を使用しないという意味で):

function [ ... ] = myFun( ... )
variable1 = 1;
variable2() % output: 2
variable1 = 15;
variable2() % output: 30
    function v2 = variable2; v2 = 2 * variable1; end
end

update_varsそれでも、個人的には Robert P のスクリプトに似たものを使用します。繰り返しますが、関数内にいる場合は、ネストされた関数が親のすべての変数にアクセスして変更できるという事実を使用できます。

function [ ... ] = myFun( ... )
variable1 = 1;
updateVars();
variable2 % 2
variable1 = 15;
updateVars();
variable2 % 30

    function updateVars
        variable2 = 2 * variable1;
    end
end
于 2013-06-04T18:46:06.753 に答える
1

私の知る限り、これは MATLAB で自動的に行うことはできません。

すべての更新を行うスクリプトを作成し、変更されるたびにそれを呼び出しますvariable1

variable1 = 1;
update_vars

それは私が考えることができる最良の方法です。書きやすいし、読みやすい。

于 2013-06-04T14:40:45.770 に答える
0

なぜ関数を使いたくないのですか?

function [Out1, Out2] =  setVariables(Arg1);
   Out1 = Arg1;
   Out2 = 2*Arg1;
end


[Variable1, Variable2] = setVariables(2)

またはsymsを使用します(もちろん、これは関数でも実行できます)

syms Variable2(d);
Variable2(d) = 2*d;

Variable2(Variable1)
于 2013-06-04T15:02:27.837 に答える
0

variable2通常の変数からネストされた関数に変更することで、非常に近づけることができます。Matlab では、変数と関数呼び出しの構文が同じであるため (「均一アクセス原則」の変形)、直接置き換えることができます。これは、Matlab のネストされた関数が「クロージャー」であるため、囲んでいるワークスペース内のすべての変数のライブで更新された値にアクセスできるため、この場合に機能します。

これは、スクリプトやコマンドラインではなく、関数内でのみ機能します。

function foo

v1 = 1;

% Define v2 in terms of the "live" v1 value
function v2_val = v2()
v2_val = 2 * v1;
end

v2  % evaluates to 1
v1 = 3;
v2  % evaluates to 6

end
于 2013-06-08T05:04:10.233 に答える
0

eval 関数を使用できます。

variable2 = eval('2*eval(''variable1'')')
于 2013-06-04T15:48:06.987 に答える