- •Содержание
- •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. Кривые Безье. Сплайны
Важной задачей в машинном проектировании является функциональное описание кривой (или поверхности), заданной графически. Введем множества функций, называемых базисными функциями Бернштейна. Предположим, что все точки данных находятся в интервале . Тогда я базисная функция Бернштейна является полиномом степени вида
.
Например, для четыре кубические функции базиса Бернштейна имеют вид
На самом деле для вычисления значения берншейновской базисной функции в точке определение не применяют. Вместо этого используют рекуррентные формулы
,
которые менее чувствительны к ошибкам округления.
Поскольку каждая функция представляет собой полином степени , то и их линейная комбинация
является таким же полиномом.
Основная идея – определение графически. С этой целью ставят в соответствие каждому на плоскости точку , которая называется управляющей точкой, при этом . По этим точкам строят ломаную Безье.
Одна трудность, связанная с этим подходом, состоит в том, что невозможно сдвигать управляющие точки вправо или влево. Как только выбрано , точки фиксируются. Чтобы обеспечить такую возможность, сделаем обобщение. Пусть - точка на плоскости; определить векторную кривую Безье
.
Когда изменяется от до , кривая описывает траекторию на плоскости, начинающуюся в и кончающуюся в . В этом варианте могут быть произвольными точками, т. е. - это просто параметр, изменяющийся вдоль кривой.
Для многих приложений полезно уметь записывать интерполянт в виде линейной комбинации функций, которые сами являются сплайнами - это сплайны (кусочно-полиномиальная функция с двумя непрерывными производными).
Коэффициенты при сплайнах имеют физическое значение, аналогичное коэффициентам кривой Безье.