- •Содержание
- •3. Интерполялия, экстрополяция, аппроксимация, сглаживание 5
- •3. Интерполялия, экстрополяция, аппроксимация, сглаживание
- •3.1. Введение
- •3.2. Интерполяция
- •3.2.1. Полиномиальная интерполяция
- •Аппроксимационная теорема Вейерштрасса.
- •3.2.2. Вычисление значений многочлена. Схема Горнера
- •3.2.3. Линейная интерполяция
- •3.2.4. Квадратичная интерполяция
- •3.2.5. Построение других базисных функций
- •3.2.6. Многочлены Тейлора
- •3.2.7. Лагранжева интерполяция
- •I, j, n : Integer;
- •3.2.8. Ошибки полиномиальной интерполяции
- •3.2.9. Кусочно-линейная интерполяция
- •Var X,y : Array[0..N] of Real;
- •I,j : Integer;
- •Var f:Real;
- •3.2.10. Кусочно-кубическая интерполяция
- •3.2.11. Эрмитов кубический интерполянт
- •3.2.12. Кубические сплайны
- •Var r, s, l : Vect;
- •Var l, I, j : Integer;
- •1 : Begin
- •0 : Begin
- •Var XX:RealType;
- •3.2.13. Кривые Безье. Сплайны
- •3.2.14. Итерационный способ вычисления интерполяционного полинома (способ Эйткена)
- •3.2.15. Интерполяционный многочлен Ньютона
- •3.2.16. Интерполяционный многочлен Гаусса
- •3.2.17. Интерполяционный многочлен Стирлинга
- •3.2.18. Интерполяционный многочлен Эверетта
- •3.3. Аппроксимация данных методом наименьших квадратов
- •3.3.1. Аппроксимация данных методом наименьших квадратов
- •3.3.2. Аппроксимация данных с другими нормами
- •3.3.3. Аппроксимация данных многочленом заданной степени
- •Var X,y:array[1..Nmax] of real;
- •I,n:integer;
- •Литература
- •Простейшие способы интерполяции
- •Интерполяционные полиномы
- •Сплайн-интерполяция
- •Тригонометрическая интерполяция
- •Неклассические методы интерполяции
- •Реконструкция функций
- •Всюду гладкая интерполяция
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.