拉格朗日(Lagrange)插值
程序:matlab
clear;clc
%%***********************************************************************%%
%%输入数据
Data=[60 70 80 90 100 110 120;...
180671 205052 227225 249623 282162 309327 329484];
%%变量声明
m=size(Data,2);
for i=1:m
syms(['x',num2str(i)])
end
syms x
%%拉格朗日插值基函数
l={};
for i=1:m
start=1;
for j=1:m
if i~=j
start=start*(x-Data(1,j))/(Data(1,i)-Data(1,j));
end
end
l=[l,start];
end
%%拉格朗日插值方程
L=0;
for i=1:size(l,2)
L=L+Data(2,i)*l(1,i);
end
LL=simplify(L);
%%绘制拉格朗日插值得到的多项式
fplot(LL,'Color','red','LineWidth',1.5)
title('拉格朗日插值结果')
xlabel('x')
ylabel('y')
xlim([20 160]);
%%对50、105、130进行预测
Result=[];
x=50;
y=subs(LL,x);
Result=[Result,[x;double(y)]];
x=105;
y=subs(LL);
Result=[Result,[x;double(y)]];
x=130;
y=subs(LL);
Result=[Result,[x;double(y)]];