Интерполяционный многочлен Лагранжа
Пусть функция задана таблицей (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.