- •Содержание
- •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;
- •Литература
- •Простейшие способы интерполяции
- •Интерполяционные полиномы
- •Сплайн-интерполяция
- •Тригонометрическая интерполяция
- •Неклассические методы интерполяции
- •Реконструкция функций
- •Всюду гладкая интерполяция
Var r, s, l : Vect;
H, D, F, E, P : RealType;
k : Integer;
begin
D:=X[2]-X[1]; E:=(Y[2]-Y[1])/D;
L[1]:=0; L[N1]:=0; R[1]:=0; R[N1]:=0; S[1]:=0; S[N1]:=0;
for k:=2 to N1-1 do
begin
H:=D; D:=X[k+1]-X[k];
F:=E; E:=(Y[k+1]-Y[k])/D; L[k]:=D/(D+H);
R[k]:=1-L[k]; S[k]:=6*(E-F)/(H+D);
end; (* for *)
for k:=2 to N1-1 do
begin
P:=1/(R[k]*L[k-1]+2); L[k]:=-L[k]*P;
S[k]:=(S[k]-R[k]*S[k-1])*P;
end; (* for *)
M[N1]:=0; L[N1-1]:=S[N1-1];
M[N1-1]:=L[N1-1];
for k:=N1-2 downto 1 do
begin
L[k]:=L[k]*L[k+1]+S[k]; M[k]:=L[k];
end; (* for *)
end; (* Spline.CalculateSpline *)
function SplineInterpolate.Interpolate(XX:RealType) : RealType;
Var l, I, j : Integer;
YY, D, H, P, R : RealType;
begin
if XX <= X[1] then l:=-1 else if XX > X[N1] then l:=1 else l:=0;
case l of
1 : Begin
D:=X[N1]-X[N1-1];
YY:=D*M[N1-1]/6+(Y[N1]-Y[N1-1])/D;
YY:=YY*(XX-X[N1-1])+Y[N1-1];
end;
0 : Begin
{i:=1; while XX > X[i] do i:=i+1;}
j:=1; i:=N1;
While j < i-1 do if XX >= X[Trunc((i+j)/2)] then j:=Trunc((i+j)/2)
else i:=Trunc((i+j)/2);
j:=i-1; D:=X[i]-X[j]; H:=XX-X[j]; R:=X[i]-XX;
P:=D*D/6; YY:=(M[j]*R*R*R+M[i]*H*H*H)/6/D;
YY:=YY+((Y[j]-M[j]*P)*R+(Y[i]-M[i]*P)*H)/D;
end;
-1: begin
D:=X[2]-X[1]; YY:=-D*M[2]/6+(Y[2]-Y[1])/D;
YY:=YY*(XX-X[1])+Y[1];
end;
end; (* case *)
Interpolate:=YY;
end; (* Spline.Interpolate *)
procedure SplineInterpolate.Output;
Var XX:RealType;
begin
Write(' XX : '); Read(XX); WriteLn(Interpolate(XX):5:5);
end;
function SplineInterpolate.GetX(I:Integer) : RealType;
begin
GetX:=X[I];
end;
function SplineInterpolate.GetY(I:Integer) : RealType;
begin
GetY:=Y[I];
end;
Destructor SplineInterpolate.Done;
begin
end;
begin
end.
3.2.13. Кривые Безье. Сплайны
Важной задачей в машинном проектировании
является функциональное описание кривой
(или поверхности), заданной графически.
Введем множества функций, называемых
базисными функциями Бернштейна.
Предположим, что все точки данных
находятся в интервале
.
Тогда
я
базисная функция Бернштейна является
полиномом степени
вида
.
Например, для
четыре кубические функции базиса
Бернштейна имеют вид
На самом деле для вычисления значения берншейновской базисной функции в точке определение не применяют. Вместо этого используют рекуррентные формулы
,
которые менее чувствительны к ошибкам округления.
Поскольку каждая функция
представляет собой полином степени
,
то и их линейная комбинация
является таким же полиномом.
Основная идея – определение
графически. С этой целью ставят в
соответствие каждому
на плоскости точку
,
которая называется управляющей точкой,
при этом
.
По этим точкам строят ломаную Безье.
Одна трудность, связанная с этим
подходом, состоит в том, что невозможно
сдвигать управляющие точки вправо или
влево. Как только выбрано
,
точки
фиксируются. Чтобы обеспечить такую
возможность, сделаем обобщение. Пусть
- точка на плоскости; определить векторную
кривую Безье
.
Когда
изменяется от
до
,
кривая
описывает траекторию на плоскости,
начинающуюся в
и кончающуюся в
.
В этом варианте
могут быть произвольными точками, т. е.
- это просто параметр, изменяющийся
вдоль кривой.
Для многих приложений полезно уметь записывать интерполянт в виде линейной комбинации функций, которые сами являются сплайнами - это сплайны (кусочно-полиномиальная функция с двумя непрерывными производными).
Коэффициенты при сплайнах имеют физическое значение, аналогичное коэффициентам кривой Безье.
