ドキュメンテーション

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

simplify

構文

simplify(S)
simplify(S,Name,Value)

説明

simplify(S) は、S の代数的な単純化を行います。S がシンボリック ベクトルまたはシンボリック行列である場合、この関数は S の各要素を単純化します。

simplify(S,Name,Value) は、1 つ以上の引数ペア Name,Value で指定された追加オプションを使用して、S の代数的な単純化を行います。

式の単純化

次のシンボリック式を単純化します。

syms x a b c
simplify(sin(x)^2 + cos(x)^2)
simplify(exp(c*log(sqrt(a+b))))
ans =
1

ans =
(a + b)^(c/2)

行列要素の単純化

このシンボリック行列に対して simplify を呼び出します。入力引数がベクトルまたは行列である場合、simplify は、そのベクトルまたは行列の各要素を単純化した形式を求めます。

syms x
M = [(x^2 + 5*x + 6)/(x + 2), sin(x)*sin(2*x) + cos(x)*cos(2*x);
		(exp(-x*i)*i)/2 - (exp(x*i)*i)/2, sqrt(16)];
simplify(M)
ans =
[  x + 3, cos(x)]
[ sin(x),      4]

対数とべき乗の結果の単純化

次の式の単純化を試みます。既定では、simplify でべき数と対数が結合されることはありません。これは、この結合が一般的な複素数値に有効でないためです。

syms x
s = (log(x^2 + 2*x + 1) - log(x + 1))*sqrt(x^2);
simplify(s)
ans =
-(log(x + 1) - log((x + 1)^2))*(x^2)^(1/2)

単純化ルールを適用して関数 simplify でべき乗と対数を結合するには、IgnoreAnalyticConstraintstrue に設定します。

simplify(s, 'IgnoreAnalyticConstraints', true)
ans =
x*log(x + 1)

更なる単純化ステップによる結果の単純化

次の式を単純化します。

syms x
f = ((exp(-x*i)*i)/2 - (exp(x*i)*i)/2)/(exp(-x*i)/2 + ...
                                         exp(x*i)/2);
simplify(f)
ans =
-(exp(x*2i)*1i - 1i)/(exp(x*2i) + 1)

既定では、simplify は内部単純化ステップを 1 つ使用します。単純化ステップの数を増やすことで、さまざまな単純化の結果をより簡潔な形式で取得できます。

simplify(f,'Steps',10)
simplify(f,'Steps',30)
simplify(f,'Steps',50)
ans =
2i/(exp(x*2i) + 1) - 1i
 
ans =
((cos(x) - sin(x)*1i)*1i)/cos(x) - 1i
 
ans =
tan(x)

目的の結果を返せない場合、代わりの単純化関数を試してください。関数を選択して式を再編するを参照してください。

実数部と虚数部の分離

Criterion の値を preferReal に設定することで、式の実数部と虚数部を分離します。

syms x
f = (exp(x + exp(-x*i)/2 - exp(x*i)/2)*i)/2 -...
    (exp(- x - exp(-x*i)/2 + exp(x*i)/2)*i)/2;
simplify(f, 'Criterion','preferReal', 'Steps', 100)
ans =
sin(sin(x))*cosh(x) + cos(sin(x))*sinh(x)*1i

CriterionpreferReal に設定されない場合、simplify はより短いが、実数部と虚数部が分離されていない結果を返します。

simplify(f,'Steps',100)
ans =
sin(sin(x) + x*1i)

CriterionpreferReal に設定した場合、単純化関数によって、複素数値が部分式内に表示される形式の式の優先度が低くなります。入れ子になっている部分式の場合、複素数値が表示される式の階層が深くなるほど、その形式を取る式の優先度は低くなります。

べき指数内の虚数項を回避する

CriterionpreferReal に設定することで、べき指数内の虚数項を回避します。

CriterionpreferReal に設定した場合としなかった場合とで複雑なシンボリック式を単純化して、この振る舞いを見ていきます。CriterionpreferReal に設定されている場合、simplify によって虚数項が指数の外に置かれます。

expr = sym(i)^(i+1);
withoutPreferReal = simplify(expr,'Steps',100)
withoutPreferReal =
(-1)^(1/2 + 1i/2)
withPreferReal = simplify(expr,'Criterion','preferReal','Steps',100)
withPreferReal =
exp(-pi/2)*1i

単位の単純化

simplify を使用して、等しい次元のシンボリック単位を含む式を単純化します。

u = symunit;
expr = 300*u.cm + 40*u.inch + 2*u.m;
expr = simplify(expr)
expr =
(3008/5)*[cm]

simplify は書き換える単位を自動的に選択します。特定の単位を選ぶには、rewrite を使用します。

入力引数

すべて折りたたむ

入力式。シンボリックな式、関数、ベクトルまたは行列として指定します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'Seconds',60 では、単純化プロセスが 60 秒間に制限されます。

単純化条件。'Criterion' および次のいずれかの文字ベクトルから成るコンマ区切りペアで指定します。

'default'既定の (内部) 単純化条件を使用します。
'preferReal'複素数値を含む形式より、実数値を含む形式の S を優先します。いずれかの形式の S に複素数が含まれている場合、単純化関数によって、複素数値が部分式内に表示される形式の式の優先度が低くなります。入れ子になっている部分式の場合、複素数値が表示される式の階層が深くなるほど、その形式を取る式の優先度は低くなります。

単純化ルール。'IgnoreAnalyticConstraints' および次の値のいずれかで構成されるコンマ区切りペアとして指定します。

false厳格な単純化ルールを使用します。simplify は常に、最初の式と等価な結果を返します。
true式に対して純粋に代数的な単純化を適用します。simplify は、これを使用しないとより複雑な結果が返される式にも、単純な結果を返すことができます。IgnoreAnalyticConstraintstrue に設定すると、最初の式と等価ではない結果が導かれる場合があります。

単純化プロセスの制限時間。'Seconds' と秒単位で最大時間を表す正の値で構成される、コンマ区切りペアとして指定します。

単純化ステップの数。'Steps' と内部単純化ステップの最大数を表す正の値とで構成される、コンマ区切りペアとして指定します。単純化ステップの数を増やすと計算が遅くなる可能性があることに注意してください。

simplify(S,'Steps',n)simplify(S,n) と等価であり、n は単純化ステップの数です。

ヒント

  • 数式の単純化は明確に定義されているわけではありません。どの形式の式が最も単純かに関しては、一般的な考え方はありません。ある問題については最も単純な数式の形式が、別の問題については複雑で不適切となる場合があります。

アルゴリズム

IgnoreAnalyticConstraintsを使用する場合、simplify は次のルールに従います。

  • 任意の a および b について、log(a) + log(b) = log(a·b) が成り立つ。特に、a、b、c のすべての値に対して、次の等式が有効である。

      (a·b)c = ac·bc.

  • 任意の a および b について、log(ab) = b·log(a) が成り立つ。特に、a、b、c のすべての値に対して、次の等式が有効である。

      (ab)c = ab·c.

  • f および g が標準的な数学関数、かつ任意の微小な正数について f(g(x)) = x である場合、すべての複素数 x に対してf(g(x)) = x が有効であるものとする。以下に例を示します。

    • log(ex) = x

    • asin(sin(x)) = x, acos(cos(x)) = x, atan(tan(x)) = x

    • asinh(sinh(x)) = x, acosh(cosh(x)) = x, atanh(tanh(x)) = x

    • 任意の k の値について Wk(x·ex) = x

R2006a より前に導入