Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Численные Методы (часть 2).doc
Скачиваний:
11
Добавлен:
14.11.2019
Размер:
540.16 Кб
Скачать

3.4.Итерационно – интерполяционный метод Эйткена.

- используется для вычисления многочлена, без его аппроксимации с применением итераций. Пусть интерполяционный многочлен, определяемый парами точек:

, , , …,

так что в этих точках он совпадает с , т.е. .

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

(3. 4)

(3.5)

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

Логика построения интерполяционных многочленов такова, что сначала проводится линейная интерполяция между соответствующими точками и для функций и ,

Что видно из формулы (3.4). Точно также весь ряд этих формул (строка) даёт линейную интерполяцию между соответствующими точками. Далее следует линейная интерполяция (3.5) по трём точкам, но с учётом полученных значений функций, т.е. практически квадратичная интерполяция по трём точкам. И далее процесс повторяется, вовлекая в расчёт большее количество точек и повышая степень интерполяционного полинома.

3.5. Полиномы Чебышева.

Полиномы Чебышева определяются следующим образом: , где .

Поэтому .

n=0

n=1

n=2

Получим рекуррентное соотношение между и .

Запишем и .

Складываем полученные равенства: и запишем в рекуррентном виде: (3.6)

Таким образом, зная и , по (3.6) можно получить полином Чебышева любого порядка. Обычно они приведены в приложениях математических справочниках.

Приведем программу интерполяции функции полиномом Чебышева:

function [C,X,Y]=cheby0(n,a,b)

%n степень интерполирующего полинома

%[a,b]-интервал

%Вектор абсцисс X

%Вектор ординат Y

%Вектор коэффициентов интерполирующего полинома С

%Обращение из МАTLAB: [C,X,Y]=cheby0(3,-1,1)

d=pi/(2*n+2);

C=zeros(1,n+1);

for k=1:n+1

X(k)=cos((2*k-1)*d);

end

X=(b-a)*X/2+(a+b)/2;

x=X;

Y=eval('exp(x)');

for k=1:n+1

z=(2*k-1)*d;

for j=1:n+1

C(j)=C(j)+Y(k)*cos((j-1)*z);

end

end

C=2*C/(n+1);

C(1)=C(1)/2;

%Проверка интерполирующего полинома 3-го порядка

X=0:0.1:2;

Z=C(1)+C(2)*X+C(3)*(2*X.^2-1)+C(4)*(4*X.^3-3*X);

Z1=exp(X);

plot(X,Z,'r',X,Z1,'b')

3.6.Сплайны.

Если функция имеет много локальных максимумов и точек перегиба, то часто интерполирование ее по точкам бывает неудовлетворительным. Поэтому появились методы кусочной или многоинтервальной интерполяции. Они заключаются в том, что значение функции , определяется в ряде промежуточных узлов [a,b],[b,c] и т.д. на широком интервале с помощью полиномов невысокой степени (1,2 или 3 порядка).

Использование полиномов высокой степени на всем выбранном интервале приводит к большему объёму вычислений и не обеспечивает высокой точности.

Наиболее распространенны:

1. Применение кусочно – линейной интерполяции при равномерном расположении узлов.

Имеем: шаг и , для функции . Вычисление функции

где .

Обычно степень полинома росла вместе с ростом числа узлов, здесь она неизменна. Уменьшение монотонно снижает погрешность интерполяции, но массив растёт. Формула неизменна.

2. Квадратичная интерполяция – требует чётного числа парных интервалов (n – чётное число).

Имеем: , - шаг, и массив .

Если использовать формулу Лагранжа для трёх ординат, то получим

где и +1

В узлах i значения y(x) и совпадают.

3 . Кубическая интерполяция (также локальная) - это интерполяция полиномом третьей степени.

где , - первые производные y(x).

Производные могут вычисляться с помощью формул численного дифференцирования по трём точкам:

Значения можно вычислить и запасти в массив.

У кубичного локального сплайна обеспечивается непрерывность нулевой и первой производных. Поэтому они не учитывают точек перегиба и не обеспечивают совпадения по кривизне в узловых точках.

Далее приведены примеры использования функций MATLAB с расчетом сплайна для таблицы и для функции (splayn_tabl.m, splayn _fun.m)

function splayn_tabl

x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];

cs = spline(x,[0 y 0]);

xx = linspace(-4,4,101);

plot(x,y,'o',xx,ppval(cs,xx),'-')

function splayn_fun

x = 0:10;

y = sin(x);

xx = 0:.25:10;

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)