Длинные выражения часто содержат несколько образцы одного и того же подэкспрессии. Такие выражения выглядят короче, если та же подэкспрессия заменена на сокращение. Можно использовать sympref
для определения необходимости использования сокращенного выходного формата символьных выражений в live скриптах.
Для примера решите уравнение использование solve
.
syms x
sols = solve(sqrt(x) + 1/x == 1, x)
sols =
The solve
функция возвращает точные решения в виде символьных выражений. По умолчанию live скрипты отображают символические выражения в сокращенном формате выхода. Настройка символьных выборов использует внутренний алгоритм, чтобы выбрать, какие подэкспрессии сокращать, которые также могут включать вложенные сокращения. Для примера, термин содержит подэкспрессию сокращенно как . Настройка символьных выборов не предоставляет никаких опций, чтобы выбрать, какие подэкспрессии сокращать.
Можно выключить сокращенный выход путем установки 'AbbreviateOutput'
выбор false
. Возвращенный результат является длинным выражением, которое трудно считать.
sympref('AbbreviateOutput',false);
sols
sols =
Настройки, которые вы задаете используя sympref
продолжайте работать с текущими и будущими сеансами MATLAB ®. Восстановите значения по умолчанию 'AbbreviateOutput'
путем определения 'default'
опция.
sympref('AbbreviateOutput','default');
subexpr
является другой функцией, которую можно использовать для сокращения длинных выражений. Эта функция сокращает только одну общую подэкспрессию, и в отличие от sympref
, он не поддерживает вложенные сокращения. Как sympref
, subexpr
также не позволяет вам выбрать подэкспрессии для замены.
Используйте второй входной параметр subexpr
чтобы задать имя переменной, которая заменяет общую подэкспрессию. Для примера замените общую подэкспрессию в sols
с переменной t
.
[sols1,t] = subexpr(sols,'t')
sols1 =
t =
Хотя sympref
и subexpr
не предоставляйте способ выбрать, какие подэкспрессии заменить в решении, можно задать эти подэкспрессии как символьные переменные и вручную переписать решение.
Для примера задайте новые символьные переменные a1
и a2
.
syms a1 a2
Перепишите решения sols
с точки зрения a1
и a2
перед присвоением значений a1
и a2
чтобы избежать оценки sols
.
sols = [(1/2*a1 + 1/3 + sqrt(3)/2*a2*1i)^2;...
(1/2*a1 + 1/3 - sqrt(3)/2*a2*1i)^2]
sols =
Присвоение значений и на a1
и a2
, соответственно.
a1 = t + 1/(9*t)
a1 =
a2 = t - 1/(9*t)
a2 =
Оценка sols
использование subs
. Результат идентичен первому выходу в этом примере.
sols_eval = subs(sols)
sols_eval =