exponenta event banner

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

В этом примере показано, как изменить формат вывода символьных результатов в редакторе 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' предпочтение. '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 Scripts представляют собой набор типов в стандартной математической нотации, длинные выражения сокращаются, а матрицы задаются в скобках (круглых скобках). Формат отображения выходных данных можно изменить, задав символьные настройки.

Найти корни или нули многочлена третьей степени с помощью 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[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)]

Для отображения результатов без сокращения установите '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))[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)]

Чтобы отобразить символьную матрицу в квадратных скобках, а не в скобках, установите '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)][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)]

Для отображения результатов в 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[root(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); root(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); root(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');