Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_3(Интерполяция).doc
Скачиваний:
43
Добавлен:
08.11.2019
Размер:
1.28 Mб
Скачать

I, j, n : Integer;

p, L, x1 : RealType;

x, y : Vec;

ch : Char;

Begin

ClrScr;

WriteLn ('Введите N - порядок многочлена Лагранжа');

Read (n);

WriteLn('Введите пары значений xi, yi; i= 0,...,N');

For i:= 0 to N do

begin

Read (x[i],y[i]);

WriteLn;

end;

writeLn ('Введите x');

Read (x1);

L:= 0;

For i:= 0 to N do

begin

p:= 1;

For j:= 0 to N do

If j<>i then p:= p*(x1-x[j])/(x[i]-x[j]);

L:= L + y[i]*p;

end;

WriteLn ('x = ', x1:8:4, ' L(x) = ',L:8:4);;

Repeat Until KeyPressed; {Ожидает нажатия любой клавиши, модуль Crt}

{Используется для задержки информации на экране}

ClrScr;{Очищает экран, модуль Crt}

End.

3.2.8. Ошибки полиномиальной интерполяции

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

,

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

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

  • факториал и произведение разностей с увеличением уменьшают ошибку;

  • порядок производной при этом растёт.

Для большинства функций величины производных увеличиваются быстрее, чем . В результате полиномиальные интерполянты редко сходятся к обычной непрерывной функции.

Практический эффект выражается в том, что полиномиальный интерполянт высокой степени может вести себя очень плохо в точках , отличных от узловых . Поэтому используются интерполянты степени не выше 4 или 5.

Полиномиальная интерполяция высокой степени – плохая идея.

3.2.9. Кусочно-линейная интерполяция

Глобальная интерполяция – это интерполяция по всем точкам интервала .

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

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

Кусочно-полиномиальная интерполяция – локальна, только на интервале .

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

Правило для вычисления :

Пример.

Uses Crt;

Const n=2;

Var X,y : Array[0..N] of Real;

I,j : Integer;

Function Interpolate(x1:real):Real;

Var f:Real;

begin

f:= y[i] + (y[i+1] - y[i])/(x[i+1] - x[i])*(x1-x[i]);

Interpolate:=f;

end;

Begin

ClrScr;

Writeln('Линейная интерполяция');

For i:=1 to n do

begin

Write('X(',i:2,'), Y(',i:2,')= '); ReadLn(x[i],y[i]);

end;

for i:=1 to n do

begin

Writeln('X(',i:2,')= ',x[i]:5:5,' Y(',i:2,')= ',y[i]:5:5,

' Y*(',i:2,')= ',interpolate(x[i]):5:5);

end;

Write('Для продолжения нажмите <Enter>'); Readln;

end.