ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

subexpr

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

構文

  • [r,sigma] = subexpr(expr)
  • [r,var] = subexpr(expr,'var')
  • [r,var] = subexpr(expr,var)

説明

[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 =
sigma^(1/3) - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/sigma^(1/3)
(- b^2/(9*a^2) + c/(3*a))/(2*sigma^(1/3)) -...
    sigma^(1/3)/2 - (3^(1/2)*(sigma^(1/3) +...
(- b^2/(9*a^2) + c/(3*a))/sigma^(1/3))*1i)/2 - b/(3*a)
(- b^2/(9*a^2) + c/(3*a))/(2*sigma^(1/3)) -...
    sigma^(1/3)/2 + (3^(1/2)*(sigma^(1/3) +...
(- b^2/(9*a^2) + c/(3*a))/sigma^(1/3))*1i)/2 - b/(3*a)
 
sigma =
((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) +...
  c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2)

省略変数のカスタム化

2 次方程式を解きます。

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

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

syms s
[abbrSolutions,s] = subexpr(solutions,s)
abbrSolutions =
 -(b + s)/(2*a)
 -(b - s)/(2*a)
 
s =
(b^2 - 4*a*c)^(1/2)

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

[abbrSolutions,s] = subexpr(solutions,'s')
abbrSolutions =
 -(b + s)/(2*a)
 -(b - s)/(2*a)
 
s =
(b^2 - 4*a*c)^(1/2)

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

subs(abbrSolutions,s,0)
ans =
 -(b + s)/(2*a)
 -(b - s)/(2*a)

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

syms s
[abbrSolutions,t] = subexpr(solutions,'s')
abbrSolutions =
 -(b + s)/(2*a)
 -(b - s)/(2*a)
 
t =
(b^2 - 4*a*c)^(1/2)
subs(abbrSolutions,s,0)
ans =
 -b/(2*a)
 -b/(2*a)

関連する例

入力引数

すべて折りたたむ

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

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

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

出力引数

すべて折りたたむ

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

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

参考

| |

R2006a より前に導入

この情報は役に立ちましたか?