Интерполяционный многочлен Лагранжа

 

Пусть функция задана таблицей (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('Введите количество узлов интерполирования - ');

readln(n);

writeln('Введите парами значения Х и Y');

for i:=1 to n do readln(X[i],y[i]);

repeat

write('Введите заданное значение аргумента - ');

readln(A);

F:=0;

for i:=1 to n do

begin L:=1;

for j:=1 to n do

if i<>j then L:=L*(A-X[j])/(X[i]-X[j]);

L:=L*Y[i];

F:=F+L;

end;

writeln('При Х=',A:5:3,' F(',A:5:3,') = ',F:10:6);

writeln;

writeln('Если хотите продолжить, введите 1,');

writeln('в противном случае введите 0'); readln(m)

until M=0

end.

Введите количество узлов интерполирования - 7

Введите парами значения Х и Y

1.2 0.3486

1.9 2.0537

3.3 2.7844

4.7 3.2103

5.4 3.3712

6.8 3.6322

7.5 3.7411

Введите заданное значение аргумента - 5.1

При Х=5.100 F(5.100) = 3.309311

Если хотите продолжить вычисление, введите 1,

в противном случае введите 0

Введите заданное значение аргумента - 7.2

При Х=7.200 F(7.200) = 3.711743

Если хотите продолжить вычисление, введите 1,

в противном случае введите 0

 

Для сравнения f(x) = ln(2.3*x)-0.8/x+1;

F(5.1) = 3.305286918;

F(7.2) = 3.695879038.