Сократите распространенные слова в долгих выражениях

Часто, долгие выражения содержат несколько экземпляров того же подвыражения. Такие выражения выглядят короче, если вы заменяете подвыражение на сокращение. Например, решите это уравнение.

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, это не поддерживает вложенные сокращения. Это также не позволяет вам выбрать который подвыражения заменить.

Используйте второй входной параметр subexpr задавать имя переменной, которое заменяет общее подвыражение. Например, замените общее подвыражение в 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

Для синтаксиса с одним входным параметром, 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