ドキュメンテーション

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

長い式の共通項の略記

長い式は、同一部分式のインスタンスをいくつか含むことがよくあります。こういった式は、部分式を略語で置き換えるとより短く見えます。たとえば、次の方程式を解きます。

syms x
s = solve(sqrt(x) + 1/x == 1, x) 
s =
 (1/(18*(25/54 - (23^(1/2)*108^(1/2))/108)^(1/3)) -...
 (3^(1/2)*(1/(9*(25/54 - (23^(1/2)*108^(1/2))/108)^(1/3)) -...
 (25/54 - (23^(1/2)*108^(1/2))/108)^(1/3))*1i)/2 +...
 (25/54 - (23^(1/2)*108^(1/2))/108)^(1/3)/2 + 1/3)^2
 ...
 ((3^(1/2)*(1/(9*(25/54 - (23^(1/2)*108^(1/2))/108)^(1/3)) -...
 (25/54 - (23^(1/2)*108^(1/2))/108)^(1/3))*1i)/2 + 1/(18*(25/54 -...
 (23^(1/2)*108^(1/2))/108)^(1/3)) +...
 (25/54 - (23^(1/2)*108^(1/2))/108)^(1/3)/2 + 1/3)^2

返された結果は、解析に苦労しそうな長い式です。より見慣れた表記形式で表すため pretty を使用します。結果の表示で、関数 pretty は略語を使用して長い式を短くできます。

pretty(s) 
/ /   1          #2   1 \2 \
| | ----- - #1 + -- + - |  |
| \ 18 #2         2   3 /  |
|                          |
| /        1     #2   1 \2 |
| | #1 + ----- + -- + - |  |
\ \      18 #2    2   3 /  /

where

                 /   1       \
         sqrt(3) | ---- - #2 | 1i
                 \ 9 #2      /
   #1 == ------------------------
                     2

         / 25   sqrt(23) sqrt(108) \1/3
   #2 == | -- - ------------------ |
         \ 54           108        /

pretty は内部アルゴリズムを使用して略記する部分式を選択します。また、入れ子になった略語を使うこともできます。たとえば、項 #1#2 として略記された部分式を含みます。この関数では、略語の有効、無効または制御のオプションが提供されていません。

subexpr は長い式を短くするために使用できる別の関数です。この関数は、pretty とは異なり、1 つの共通の部分式のみを略記し、入れ子になった略語はサポートしません。また、置き換える部分式を選択できません。

subexpr の 2 番目の入力引数を使用して、共通の部分式を置き換える変数名を指定します。たとえば、s 内の共通の部分式を変数 t に置き換えます。

[s1,t] = subexpr(s,'t')
s1 =
 (1/(18*t^(1/3)) - (3^(1/2)*(1/(9*t^(1/3)) -...
 t^(1/3))*1i)/2 + t^(1/3)/2 + 1/3)^2
 ...
 ((3^(1/2)*(1/(9*t^(1/3)) - t^(1/3))*1i)/2 +...
 1/(18*t^(1/3)) + t^(1/3)/2 + 1/3)^2

t = 
25/54 - (23^(1/2)*108^(1/2))/108

1 つの入力引数をもつ構文のため、subexpr は変数 sigma を使用して共通の部分式を略記します。出力引数は略語変数の選択に影響しません。

[s2,sigma] = subexpr(s)
s2 =
 (1/(18*sigma^(1/3)) - (3^(1/2)*(1/(9*sigma^(1/3)) -...
 sigma^(1/3))*1i)/2 + sigma^(1/3)/2 + 1/3)^2
 ...
 ((3^(1/2)*(1/(9*sigma^(1/3)) - sigma^(1/3))*1i)/2 +...
 1/(18*sigma^(1/3)) + sigma^(1/3)/2 + 1/3)^2

sigma = 
25/54 - (23^(1/2)*108^(1/2))/108