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

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

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