Лабораторная работа: Интерполяция функций 2
Полагая x=x0 , находим a0 =P(x0 )=y0 ;
Далее подставляя значения x1 , x2 , ...,xn получаем:
a1 =Δy0 /h
a2 =Δ2 y0 /2!h2
a3 =Δ3 y0 /3!h3
....................
an =Δn y0 /n!hn
Такимобразом:
Pn(x)=y0 + Δy0 /h*(x-x0 )+ Δ2 y0 /2!h2 *(x-x0 )(x-x1 )+...+ Δn y0 /n!hn *(x-x0 )(x-x1 )...(x-xn -1 ) (1)
Практически формула (1) применяется в несколько ином виде:
Возьмем: t=(x-x0 )/h, тогда x=x0 +th и формула (1) переписывается как:
Pn (x)=y0 +t Δ y0 + t(t-1) / 2! Δ 2 y0 +...+ t(t-1)...(t-n+1) / n! Δ n y0 (2)
Формула (2) называется интерполяционнойформулой Ньютона.
Погрешность метода Ньютона оценивается следующим образом:
(3)
Интерполяция сплайнами.
При большом количестве узлов интерполяции сильно возрастает степень интерполяционных многочленов, что делает их неудобными для проведения вычислений.
Высокой степени многочленов можно избежать, разбив отрезок интерполирования на несколько частей, с построением в каждой части своего интерполяционного полинома. Такой метод называется интерполяцией сплайнами. Наиболее распространенным является построение на каждом отрезке [xi , xi +1 ], i=0..n-1 кубической функции. При этом сплайн – кусочная функция, на каждом отрезке заданная кубической функцией, является кусочно-непрерывной, вместе со своими первой и второй производной.
Будем искать кубический сплайн на каждом из частичных отрезков [xi , xi +1 ] в виде:
, где ai ,bi ,ci ,di – неизвестные.
Из того что Si (xi )=yi получим:
В силу непрерывности потребуем совпадения значений в узлах, т.е.:
,i=0..n-1; (1)
Также потребуем совпадения значений первой и второй производной:
,i=0..n-2; (2)
,i=0..n-2; (3)
Из (1) получим n линейных уравнений с 3n неизвестными
,i=0..n-1; (1*)
Из (2) и (3) получим 2(n-1) линейных уравнений с теми же неизвестными:
,i=0..n-1; (2*)
,i=1..n-1; (3*)
Недостающие два уравнения определим следующим образом. Предположим, что в точках х0 и хn производная равна нулю и получим еще два уравнения. Получим систему из 3*n линейных уравнений с 3*n неизвестными. Решим ее любым из методов и построим интерполяционную функцию, такую что на отрезке [xi , xi +1 ] она равна Si .
Метод Лагранжа
procedure TForm1.Button1Click(Sender: TObject);
type tip=array of real;
var x,y:tip;
i,j,n:byte;
p,s,xx:real;