Полиномы в Matlab представляются в виде вектора коэффициентов. Например, для определения полинома
следует использовать команду
>> p=[1 0 3.2 -5.2 0 0.5 1 -3]
p =
1.0000 0 3.2000 -5.2000 0 0.5000 1.0000 -3.0000
Число элементов вектора, т.е. число коэффициентов полинома, всегда на единицу больше его степени, нулевые коэффициенты должны содержаться в векторе.
Функция polyval предназначена для вычисления значения полинома от некоторого аргумента:
>> polyval(p,1)
ans =
-2.5000
Аргумент может быть матрицей или вектором, в этом случае производится поэлементное вычисление значений полинома и результат представляет матрицу или вектор того же размера, что и аргумент.
Пример 2. Построение графика функции на отрезке .
% задание аргумента - узлов полинома
x=0:0.01:1;
% вычисление функции в узлах полинома
F=polyval(p,x);
% построение графика
plot(x,F,'rs','LineWidth',3,'MarkerSize',2)
grid on
xlabel('x')
ylabel('p(x)')
График функции представлен на рис. 2.
Рис. 2.
Нахождение всех корней полиномов осуществляется при помощи функции roots, в качестве аргумента которой указывается вектор с коэффициентами полинома. Функция roots возвращает вектор корней полинома, в том числе и комплексных:
>> r=roots(p)
r =
-0.5668 + 2.0698i
-0.5668 - 2.0698i
-0.6305 + 0.5534i
-0.6305 - 0.5534i
1.2149
0.5898 + 0.6435i
0.5898 - 0.6435i
Функция polyder с одним аргументом предназначена для вычисления производной полинома
>> dp=polyder(p)
dp =
7.0000 0 16.0000 -20.8000 0 1.0000 1.0000
Задание 2. Найти корни и производную полинома из табл. 1. Построить график полинома на произвольном интервале с произвольным шагом. Сравните значения корней, полученных с помощью функции roots, с точками пересечения графика полинома с осью абсцисс.
Табл. 1. К заданию 2.
№
3x4+4x3-12x2-5=0
2x3-9x2-60x+1=0
x4-x-1=0
2x4 - x2-10=0
3x4+8x3+6x2-10=0
x4 -18x2+5x-8=0
x4+4x3-12x2+1=0
x4 - x3-2x2+3x-3=0
3x4+4x3-12x2+1=0
3x4-8x3-18x2+2=0
2x4-8x3+8x2-1=0
2x4+8x3+8x2-1=0
x4-4x3-8x2+1=0
2x4-9x3-60x2+1=0
x5 +x2-5=0
3x4+4x3-12x2-7=0
3x4+8x3+6x2-11=0
x4 -18x3-10=0
3x4-8x3-18x2+2=0
x4 -18x -10=0
Умножение двух полиномов осуществляется при помощи conv. Например, для вычисления произведения полиномов и следует создать два вектора их коэффициентов и использовать их в качестве аргументов conv:
>> p=[1 0 1 0 0 1];
>> q=[1 2 3];
>> s=conv(p,q)
s =
1 2 4 2 3 1 2 3
В результате получается полином седьмой степени, соответствующий вектору s
.
Пример 3. Найти произведение полиномов: .
% файл-сценарий вычисления произведения полиномов
clear all
close all
clc
% очистка памяти, рабочей области и закрытие графиков
% 1 способ (с использованием цикла)
% задание полиномов в виде строк матрицы p
p(1,:)=[0 1 5];
p(2,:)=[0 1 -4];
p(3,:)=[0 2 3];
p(4,:)=[1 2 5];
PPoly=1;
% перемножение полиномов в цикле
for i=1:4
PPoly=conv(PPoly,p(i,:));
end
disp('1 способ')
% отображение полинома в виде массива коэффициентов
PPoly
% 2 способ
% задание полиномов в виде отдельных массивов
p1=[1 5];
p2=[1 -4];
p3=[2 3];
p4=[1 2 5];
disp('2 способ')
% перемножение полиномов
PPoly2=conv(conv(p1,p2),conv(p3,p4))
Для сложения и вычитания полиномов нет специальной функции. В то же время использование знака «+» для нахождения суммы полиномов разной степени приведет к ошибке, т.к. нельзя складывать векторы разных размеров. Алгоритм сложения полиномов достаточно прост:
1. Выбрать максимальный размер из двух векторов.
2. Соответствующим образом преобразовать каждый из двух векторов к максимальному размеру.