Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7_файлы функций.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
282.11 Кб
Скачать

Лекция 7

Решение типовых математических задач

Действия с полиномами (многочленами)

Среди математических задач часто возникает необходимость использовать полиномы или как их еще называют степенные многочлены. В ML предусмотрены функции для работы с ними. С помощью этих функций можно вычислить значение полинома, найти его корни, выполнить операции умножения и деления полиномов и т.д.

Полином (многочлен) определяется выражением вида:

P(x)=a1xn+a2xn-1+…..+anx+an+1

В системе Matlab полином задаётся и хранится в виде вектора, элементами которого являются коэффициенты полинома:

P=[a1 a2an an+1]

Число элементов вектора должно быть на единицу больше степени полинома. Если в полиноме отсутствует слагаемое, соответствующее какой-либо степени х, то в этом случае в векторе в качестве значения коэффициента записывается ноль.

Например, пусть задан полином x7+3.2x5-5.2x4+0.5x2+x-3. Вектор коэффициентов полинома будет иметь вид:

p=[1, 0 , 3.2 , -5.2 , 0 , 0.5 , 1 , -3]

Вычислить корни полинома можно с помощью функции roots. Число корней определяется степенью полинома:

>> p=[1 , 0, 3.2, -5.2, 0, 0.5, 1, -3];

>> x=roots(p)

x =

-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

Результат – вектор-столбец. Число корней должно совпадать со степенью полинома. В данном случае найдены семь корней, из которых один вещественный и шесть комплексных.

Для построения графика надо задать 2 вектора вектор значений и вектор аргумента (например, x=roots(p); a=-1:0.05:3;).

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

for i=1:length(x) % цикл по количеству элементов

if imag(x(i))==0

plot(x(i),0,'*r')

end;

end;

Можно вычислить значения полинома при некотором значении аргумента. Для этого предназначена функция polyval(p, x), где p – вектор коэффициентов полинома; х – значение аргумента, при котором надо вычислить значение полинома.

Например,

>>p=[1 0 3.2 -5.2 0 0.5 1 -3];

>>Y=polyval(p,1)

Y =

-2.5000

В результате будет вычислено значение полинома p при x=1.

В качестве аргумента х может быть указан вектор или матрица. В результате получится вектор или матрица того же размера, что и аргумент:

>> p=[1 0 3.2 -5.2 0 0.5 1 -3]; x=1:4;

Y=polyval(p,x)

Y =

1.0e+004 * %Это множитель, на который надо умножить каждый элемент

-0.0003 0.0148 0.2548 1.8339

Элементы вектора Y – значения полинома, вычисленные для каждого элемента вектора X.

Текст скрипт-файла:

p=[1 , 0, 3.2, -5.2, 0, 0.5, 1, -3];

x=roots(p);

a=-1:0.05:3;

y=polyval(p,a);

plot(a,y);

hold on

for i=1:length(x) % цикл по количеству элементов

if imag(x(i))==0

plot(x(i),0,'*r')

end;

end;

Можно восстановить коэффициенты полинома, применив функцию

>> p1=poly(X)

p1 =

Columns 1 through 5

1.0000 0.0000 3.2000 -5.2000 0.0000

Columns 6 through 8

0.5000 1.0000 -3.0000

Однако, если коэффициент у старшей степени не 1, то полученный вектор надо умножить на коэффициент, равный старшей степени (p1*n).

Чтобы вычислить производную от полинома, следует использовать функцию polyder. Результатом этой функции является вектор, элементы которого представляют собой коэффициенты полинома-производной от исходного полинома:

>> p=[1 0 3.2 -5.2 0 0.5 1 -3];

>> polyder(p)

ans =

Columns 1 through 5

7.0000 0 16.0000 -20.8000 0

Columns 6 through 7

1.0000 1.0000

Для выполнения умножения и деления полиномов предназначены функции conv и deconv:

Z=conv(P1,P2),

где P1, P2 – полиномы, заданные векторами; Z результирующий вектор коэффициентов полинома, полученного в результате перемножения полиномов, заданных векторами P1, P2.

[R1, R2]=deconv(P1,P2)

Результат работы этой функции – два вектора R1, R2, где R1, R2 – векторы коэффициентов полинома-частного и полинома-остатка, полученного в результате деления полиномов, заданных векторами P1,P2.