Изменение формата вывода символьных результатов в Live Editor

В этом примере показано, как изменить формат вывода символьных результатов в MATLAB ® Live Editor с помощью sympref функция. Чтобы продемонстрировать использование функции, в этом примере используется полином третьей степени.

Изменение выходного порядка полинома третьей степени

Создайте полином третьей степени, состоящий из одной переменной и трех коэффициентов. Определите переменную и коэффициенты как символьные переменные при помощи syms команда.

syms x a b c
f(x) = (a*x^2 + b)*(b*x - a) + c
f(x) = c-ax2+ba-bxc - (a * x ^ 2 + b) * (a - b * x)

Символические настройки сохраняются через последующие сеансы MATLAB ®. Восстановите значения по умолчанию для всех символьных настроек. Разверните полином и верните выход в порядке по умолчанию.

sympref('default');
poly = expand(f)
poly(x) = -a2x2+abx3-ab+b2x+c- a ^ 2 * x ^ 2 + a * b * x ^ 3 - a * b + b ^ 2 * x + c

Формат выхода по умолчанию отображает условия символьного полинома в алфавитном порядке, не выделяя различные символьные переменные в каждом мономиальном члене.

Чтобы изменить выходной порядок полинома, установите 'PolynomialDisplayStyle' выбор. The 'ascend' опция сортирует выход в порядке возрастания на основе стандартного математического обозначения для полиномов. Здесь переменная x с наивысшим порядком в мономиальном выражении отображается последним.

sympref('PolynomialDisplayStyle','ascend');
poly
poly(x) = c-ab+b2x-a2x2+abx3c - a * b + b ^ 2 * x - a ^ 2 * x ^ 2 + a * b * x ^ 3

Изменение выхода отображения полиномиальных корней

По умолчанию символьные результаты в Live скрипты набраны в стандартном математическом обозначении, длинные выражения сокращены, а матрицы установлены в круглые скобки. Формат вывода можно изменить путем установки символьных настроек.

Найдите корни или нули полинома третьей степени, используя solve. В Symbolic Math Toolbox root функция представляет корни полинома.

sols = solve(poly,x)
sols = 

(root(σ1,z,1)root(σ1,z,2)root(σ1,z,3))where  σ1=abz3-a2z2+b2z-ab+c[корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 1); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 2); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 3)]

Чтобы отобразить результаты без сокращения, установите 'AbbreviateOutput' выбор false.

sympref('AbbreviateOutput',false);
sols
sols = 

(root(abz3-a2z2+b2z-ab+c,z,1)root(abz3-a2z2+b2z-ab+c,z,2)root(abz3-a2z2+b2z-ab+c,z,3))[корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 1); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 2); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 3)]

Чтобы отобразить символьную матрицу с квадратными скобками, а не с круглыми скобками, установите 'MatrixWithSquareBrackets' выбор true.

sympref('MatrixWithSquareBrackets',true);
sols
sols = 

[root(abz3-a2z2+b2z-ab+c,z,1)root(abz3-a2z2+b2z-ab+c,z,2)root(abz3-a2z2+b2z-ab+c,z,3)][корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 1); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 2); корень (a * b * z ^ 3 - a ^ 2 * z ^ 2 + b ^ 2 * z - a * b + c, z, 3)]

Чтобы отобразить результаты в символах ASCII вместо в наборе типов математического обозначения, установите 'TypesetOutput' выбор false.

sympref('TypesetOutput',false);
sols
 
sols =
 
root(a*b*z^3 - a^2*z^2 + b^2*z - a*b + c, z, 1)
root(a*b*z^3 - a^2*z^2 + b^2*z - a*b + c, z, 2)
root(a*b*z^3 - a^2*z^2 + b^2*z - a*b + c, z, 3)
 

Настройки, которые вы задаете используя sympref сохраняются через текущие и будущие сеансы работы с MATLAB. Восстановите символические настройки к значениям по умолчанию для следующего шага.

sympref('default');

Отображение выхода символьных чисел с плавающей точкой

Замените полиномиальные коэффициенты символьными числами с помощью subs. Функция возвращает решения без какого-либо приближению.

numSols = subs(sols,[a b c],[sqrt(2) pi 0.001])
numSols = 

(root(σ1,z,1)root(σ1,z,2)root(σ1,z,3))where  σ1=1000π2z3-2000z2+1000zπ2-1000π2+1[корень (1000 * sym (pi) * sqrt (sym (2)) * z ^ 3 - 2000 * z ^ 2 + 1000 * z * sym (pi) ^ 2 - 1000 * sym (pi) * sqrt (sym (2)) + 1, z, 1); корень (1000 * sym (pi) * sqrt (sym (2)) * z ^ 3 - 2000 * z ^ 2 + 1000 * z * sym (pi) ^ 2 - 1000 * sym (pi) * sqrt (sym (2)) + 1, z, 2); корень (1000 * sym (pi) * sqrt (sym (2)) * z ^ 3 - 2000 * z ^ 2 + 1000 * z * sym (pi) ^ 2 - 1000 * sym (pi) * sqrt (sym (2)) + 1, z, 3)]

Чтобы отобразить результаты в формате с плавающей точкой, задайте 'FloatingPointOutput' выбор true. Эта опция отображает символьные числа в десятичном формате с фиксированным числом цифр 4 после десятичной точки. Для комплексного результата 'sym' классов, этот выбор влияет на действительную и мнимую части независимо.

sympref('FloatingPointOutput',true);
numSols
numSols = 

(0.45014.6427e-05-1.4904i4.6427e-05+1.4904i)[vpa ('0,4501'); vpa ('4.6427e-05') - vpa ('1.4904i'); vpa ('4.6427e-05') + vpa ('1.4904i')]

Настройки отображения, которые вы задаете, не влияют на расчет символьных результатов. Можно использовать vpa функция для аппроксимации символьных чисел в точности с плавающей точностью с 4 значащими цифрами.

vpaSols = vpa(numSols,4)
vpaSols = 

(0.4501-1.4904i1.4904i)[vpa ('0.4501'); -vpa ('1.4904i'); vpa ('1.4904i')]

Восстановите значение по умолчанию 'FloatingPointOutput' путем определения 'default' опция.

sympref('FloatingPointOutput','default');