Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начала прогаммирования в среде MatLab / Начала программирования в среде MatLab.pdf
Скачиваний:
254
Добавлен:
02.05.2014
Размер:
5.66 Mб
Скачать

1.4. Функции прикладной численной математики

62

Входными переменными этой процедуры являются р+1 квадратные матрицы A0, A1, ... Ap порядка n. Исходными переменными - матрица собственных векторов R размером (n*(n*p)) и вектор d собственных значений размером (n*p).

Функция polyvalm предназначена для вычисления матричного полинома

вида

Y (X ) = pn X n + pn1 X n1 +...+p2 X 2 + p1 X + p0

по заданному значению матрицы Х и вектора p = [pn, pn-1, ... , p0] коэффициентов полинома. Для этого достаточно обратиться к этой процедуре по схеме:

Y = polyvalm(p, X).

Пример:

p = 1 8 31 80 94 20

» X

X =

1 2 3

0 -1 3

22 -1

»disp(polyvalm(p,X))

2196

2214

2880

882

864

1116

1332

1332

1746

Примечание. Следует различать процедуры polyval и polyvalm. Первая вычисляет значение полинома для любого из элементов матрицы аргумента, а вторая при вычислении полинома возводит в соответствующую степень всю матрицу аргумента.

Процедура subspace(А,В) вычисляет угол между двумя подпространствами, которые "натянуты на столбцы" матриц А и В. Если аргументами являются не матрицы, а векторы A и B, вычисляется угол между этими векторами.

1.4.4. Аппроксимация и интерполяция данных

Полиномиальная аппроксимация данных измерений, которые сформированы как некоторый вектор Y, при некоторых значениях аргумента, которые образуют вектор Х такой же длины, что и вектор Y, осуществляется процедурой polyfit(X, Y, n). Здесь n - порядок аппроксимирующего полинома. Результатом действия этой процедуры является вектор длиной (n +1) из коэффициентов аппроксимирующего полинома.

Пусть массив значений аргумента имеет вид: x = [1 2 3 4 5 6 7 8],

а массив соответствующих значений измеренной величины - вид: y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1].

Тогда, применяя указанную функцию при разных значениях порядка аппроксимирующего полинома, получим:

»x = [1 2 3 4 5 6 7 8];

»y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1];

1.4. Функции прикладной численной математики

63

» polyfit(x,y,1)

 

 

 

 

 

ans =

0. 1143

-0. 2393

 

 

 

 

 

» polyfit(x,y,2)

 

 

 

 

 

ans =

-0. 1024

1. 0357

-1. 7750

 

 

 

 

» polyfit(x,y,3)

 

 

 

 

 

ans =

0. 0177

-0. 3410

1. 9461

-2.

6500

 

 

» polyfit(x,y,4)

 

 

 

 

 

ans =

-0. 0044

0. 0961

-0. 8146

3.

0326

-3. 3893.

 

Это означает, що заданную зависимость можно аппроксимировать или пря-

мой

y(x) = 0,1143x 0,2393 ,

или квадратной параболой

y(x) = −0,1024x2 +1,0357x 1,775 ,

или кубической параболой

y(x) = 0,0177x3 0,341x2 +1,9461x 2,65 ,

или параболой четвертой степени

y(x) = −0,0044x4 + 0,0961x3 0,8146x2 + 3,0326x 3,3893 .

Построим в одном графическом поле графики заданной дискретной функции и графики всех полученных при аппроксимации полиномов:

x = [1 2 3 4 5 6 7 8];

y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]; P1=polyfit(x,y,1) ; P2=polyfit(x,y,2); P3=polyfit(x,y,3);

P4=polyfit(x,y,4) ; stem(x,y);

x1 = 0.5 : 0.05 : 8.5; y1=polyval(P1,x1); y2=polyval(P2,x1); y3=polyval(P3,x1); y4=polyval(P4,x1); hold on

plot(x1,y1,x1,y2,x1,y3,x1,y4),

grid, set(gca, 'FontName', 'Arial Cyr', 'FontSize', 16), title('Полиномиальная аппроксимация '); xlabel('Аргумент');

ylabel('Функция')

Результат представлен на рис. 1.18.

Функция spline(X,Y,Xi) осуществляет интерполяцию кубическими сплай-

нами. При обращении

Yi = spline(X,Y,Xi)

1.4. Функции прикладной численной математики

64

 

 

 

 

 

 

 

 

Рис. 1.18

она интерполирует значение вектора Y, заданного при значениях аргумента, представленных в векторе Х, и выдает значение интерполирующей функции в виде вектора Yi при значениях аргумента, заданных вектором Xi. В случае, если вектор Х не указан, по умолчанию принимается, что он имеет длину вектора Y и любой его элемент равен номеру этого элемента.

Вкачестве примера рассмотрим интерполяцию вектора

x= -0.5:0.1:0.2;

y= [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1];

x1 = -0.5:0.01:0.2;

y2 = spline(x,y,x1); plot (x,y,x1,y2), grid

set(gca,'FontName','Arial Cyr','FontSize',16), title('Интерполяция процедурой SPLINE '); xlabel('Аргумент');

ylabel('Функция')

Результат приведен на рис. 1.19.

Одномерную табличную интерполяцию осуществляет процедура interp1.

Обращение к ней в общем случае имеет вид: Yi = interp1(X,Y,Xi,’<метод>’),

и позволяет дополнительно указать метод интерполяции в четвертом входном аргументе:

'nearest' - ступенчатая интерполяция; 'linear' - линейная;

‘cubic' - кубическая;

‘spline' - кубическими сплайнами.

1.4. Функции прикладной численной математики

65

 

 

 

 

 

 

 

 

Рис. 1.19

Если метод не указан, осуществляется по умолчанию линейная интерполяция. Например, (для одного и того же вектора):

x = -0.5:0.1:0.2;

y = [-1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1]; x1 = -0.5:0.01:0.2;

y1 = interp1(x,y,x1);

y4 = interp1(x,y,x1,'nearest');

y2 = interp1(x,y,x1,'cubic');

y3 = interp1(x,y,x1,'spline');

plot (x1,y1,x1,y2,x1,y3,x1,y4), grid

plot (x1,y1,x1,y2,'.',x1,y3,'--',x1,y4,':'), grid set(gca,'FontName','Arial Cyr','FontSize',8), legend('линейная','кубическая','сплайновая','ступенчатая',0) set(gca,'FontName','Arial Cyr','FontSize',14), set(gcf,'color','white')

title('Интерполяция процедурой INTERP1 '); xlabel('Аргумент');

ylabel('Функция')

Результаты приведены на рис.1.20.