Пусть известны значения функции f в некоторых точках:
x
x0
x0
x0
…
(1)
x0
f(x)
y0
y0
y0
…
y0
Требуется получить y=f(x) для xÏ[x0,xn], где x¹xi. При этом аналитическое выражение
· не пригодно ля вычислений либо
· неизвестно.
В этом случае строим приближающую функцию F(x) » f(x), такую что F(x) = f(x) при x=xi (i=0,1,…,n), т.е. F(x0)=y0, F(x1)=y1, …, F(xn)=yn (2)
Нахождение приближенной функции называется интерполяцией (интерполированием), точки x0, x1, …, xnузлами интерполяции.
Будим искать функцию F(x) в виде многочлена степени n:
Pn(x) = a0 xn + a1 xn-1 + … + an-1 x + an
Этот многочлен имеет n+1 коэффициент. Наложим на него n+1 условий (2). Таким образом можно однозначно определить коэффициенты многочлена.
Рассмотрим получившуюся систему уравнений: .
Ее определитель (определитель Вандермонда) отличен от нуля:
Значит, интерполяционный многочлен Pn(x) для функции f, заданной таблично, существует и единственный. При этом какие-то коэффициенты могут равняться нулю (в том числе и a0); следовательно, интерполяционный многочлен имеет степень не большую, чем n.
Пусть функция задана таблицей (1). Построим интерполяционный многочлен Ln(x), чья степень не превосходит n, и для которого выполнены условия (2).
Ln(x) ищем в виде Ln(x)= l0(x)+ l1(x)+ l2(x)+…+ ln(x),
где li(x) – многочлен степени n, причем
Многочлен li(x) составлен следующим образом:
li(x)=ci (x-x0) (x-x1)… (x-xi-1) (x-xi+1)… (x-xn), где ci=const.
Таким образом, получим интерполяционный многочлен Лагранжа:
.
Погрешность вычисляется по формуле:
, где
.
Составим интерполяционный многочлен Лагранжа для трех точек:
i
xi
yi
-4
Программа вычисления значения интерполяционного многочлена Лагранжа:
program lagrang;
const k=30;
type vektor=array[1..k] of real;
var x,y: vektor;
n,i,j: byte;
l,f,a,m: real;
begin write('Вв. кол-во узлов интерполирования - ');