Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект.pdf
Скачиваний:
51
Добавлен:
23.07.2020
Размер:
2.68 Mб
Скачать

3.Функция может быть определена как анонимная и записана следу-

ющим выражением:

f = @ (x) (sin(x).^2);

В этом случае в fplot передается указатель на функцию, которая

должна быть отображена на графике.

>> f = @ (X) (sin(X).^2)); % функция задана как анонимная

>> fplot (f, [0 2*pi])

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

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

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

Среди математических задач часто возникает необходимость использовать полиномы или как их еще называют степенные многочлены. В

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

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

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

В системе Matlab полином задаётся и хранится в виде вектора,

элементами которого являются коэффициенты полинома:

P=[a1 a2 …an an+1]

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

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

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

15

коэффициентов полинома будет: p=[1, 0 , 3.2 , -5.2 , 0 , 0.5 , 1 , -3]

Для вычисления значения полинома при некотором значении аргумента предназначена функция 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.

Вычислить корни полинома можно с помощью функции roots.

Результатом является вектор из корней. Число корней определяется степенью полинома:

>> X=roots(p) X =

-0.5668 + 2.0698i -0.5668 - 2.0698i -0.6305 + 0.5534i -0.6305 - 0.5534i 1.2149

16

0.5898 + 0.6435i

0.5898 - 0.6435i

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

Для построения графика надо задать 2 вектора: вектор значений аргумента и вектор значений полинома и построить график

a=-3:0.05:3; y=polyval(p,a); plot(a,y)

Если необходимо выделить на графике корни полинома, то для того,

чтобы отметить только действительные корни, можно проверять каждый корень (есть ли у него мнимая часть):

x=roots(p);

for i=1:length(x)% цикл по количеству корней if imag(x(i))==0

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

end;

end;

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

x=roots(p);

x1=x(imag(x)==0);

plot(x1,0,'*r')

17

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

>> 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 – векторы коэффициентов полиномачастного и полинома-остатка, полученного в результате деления полиномов, заданных векторам

Следующий полином 8 степени имеет 2 вещественных корня, которые тоже можно показать на графике

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

18