2

変数を他の変数間の操作として書きたいと思います。

たとえばa = c + b 、aが内部に保持する値を入れると、cとbの間の合計の演算の数値結果になります。

c = 4 で b = 2 の場合、a が保持する値は 6 です。

しかし、数値ではなく記号式を保持することを望みます。コマンド ウィンドウに a を書き込むたびに、matlab は c の数値と b の数値を wowspace 変数にキャッシュし、それらを合計します。

通常、a と書くと、matlab はこの変数にある数値を表示します。誰もこれを行う方法を知っていますか?

4

2 に答える 2

5

これは、シンボリック ツールボックスを使用して行うことができます。次に例を示します。

syms a b c %# declare a b c to be symbolic variables
a = b + c;

b=3;c=4; %# now set values for b and c
eval(a)  %# evaluate the expression in a

ans =

    7

b=5;c=9; %# change the values of b and c
eval(a)

ans =

    14

したがって、 の定義aはそのままで (コマンド ウィンドウでb + c入力してこれを確認できます)、 を使用して評価すると、 と の現在の値を使用してが計算されます。とはシンボリック変数ではなくなり、double に変換されることに注意してください。ただし、デフォルトでは、シンボリック変数の式は評価されずに保持されるため、定義は保持されます。aevalbcabca

于 2011-09-03T17:00:05.710 に答える
2

シンボリック ツールボックスがない場合は、無名関数を使用して同様の結果を得ることができます。

b=2; c=4; 
a=@()(evalin('caller','b+c')); 
a(), 

ans =

     6

b=1; 

a()


ans =

     5

理想的ではありませんが、役立つ場合があります。

次の関数を使用すると、これを簡単に行うことができます。

function [ anonFunction ] = AnonEval( expression )
%AnonEval Create an anonymous function that evaluates an expression
   anonFunction = @()(evalin('caller',expression)); 
end

b=2,c=4, 
a=AnonEval('b+c'); 
a(),
b=1; 
a()
于 2011-09-04T10:55:48.180 に答える