Часто, долгие выражения содержат несколько экземпляров того же подвыражения. Такие выражения выглядят короче, если вы заменяете подвыражение на сокращение. Например, решите это уравнение.
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