Main Content

subexpr

共通の部分式によるシンボリック式の書き換え

説明

[r,sigma] = subexpr(expr) は、共通の部分式をシンボリック変数 sigma に代入することにより、シンボリック式 expr を共通の部分式で書き換えます。入力式 expr は変数 sigma を含むことができません。

[r,var] = subexpr(expr,'var') は、共通の部分式に var を代入します。入力式 expr はシンボリック変数 var を含むことができません。

シンボリック変数 var が MATLAB® ワークスペースに既に存在している必要がある点を除いて、[r,var] = subexpr(expr,var)[r,var] = subexpr(expr,'var') と等価です。

この構文は変数 var の値に expr の中で見つかった共通の部分式を上書きします。var の値への上書きを防ぐには、2 番目の出力引数に別の変数名を使用します。たとえば、[r,var1] = subexpr(expr,var) を使用します。

すべて折りたたむ

次の方程式を解きます。解は非常に長い式になります。解を表示するには、solve コマンドの最後のセミコロンを削除します。

syms a b c d x
solutions = solve(a*x^3 + b*x^2 + c*x + d == 0, x, 'MaxDegree', 3);

これらの長い式には共通の部分式があります。式を短くするには、subexpr を使用して共通の部分式を略記します。省略に使用する変数を subexpr の 2 番目の入力引数として指定しない場合は、subexpr は変数 sigma を使用します。

[r, sigma] = subexpr(solutions)
r = 

(σ-b3a-σ2σσ22σ-b3a-σ2-σ1σ22σ-b3a-σ2+σ1)where  σ1=3σ+σ2σi2  σ2=c3a-b29a2

sigma = 

d2a+b327a3-bc6a22+c3a-b29a23-b327a3-d2a+bc6a21/3

2 次方程式を解きます。

syms a b c x
solutions = solve(a*x^2 + b*x + c == 0, x)
solutions = 

(-b+b2-4ac2a-b-b2-4ac2a)

syms を使用してシンボリック変数 s を作成し、結果の共通の部分式をこの変数に置き換えます。

syms s
[abbrSolutions,s] = subexpr(solutions,s)
abbrSolutions = 

(-b+s2a-b-s2a)

s = b2-4ac

代わりに、's' を使用して略語変数を指定することもできます。

[abbrSolutions,s] = subexpr(solutions,'s')
abbrSolutions = 

(-b+s2a-b-s2a)

s = b2-4ac

2 つの構文は共に、変数 s 値に共通の部分式を上書きします。したがって、たとえば、s をある値と置き換えることはできません。

subs(abbrSolutions,s,0)
ans = 

(-b+s2a-b-s2a)

変数 s の値への上書きを防ぐには、2 番目の出力引数に別の変数名を使用します。

syms s
[abbrSolutions,t] = subexpr(solutions,'s')
abbrSolutions = 

(-b+s2a-b-s2a)

t = b2-4ac
subs(abbrSolutions,s,0)
ans = 

(-b2a-b2a)

入力引数

すべて折りたたむ

共通の部分式を含む長い式。シンボリック式またはシンボリック関数として指定します。

共通の部分式の代入で使用する変数。文字ベクトルまたはシンボリック変数として指定します。

入力式 expr が既に var を含んでいる場合は、subexpr はエラーをスローします。

出力引数

すべて折りたたむ

共通の部分式を略語で置き換えた式。シンボリック式またはシンボリック関数として返します。

略語に使用される変数。シンボリック変数として返します。

バージョン履歴

R2006a より前に導入