牛顿插值(Newton)
牛顿插值(newton)的matlab程序
%%--------------------------------牛顿插值-------------------------------%%
clear;clc
%%输入数据
Data=[60 70 80 90 100 110 120;...
180671 205052 227225 249623 282162 309327 329484];
m=size(Data,2);
%%前插表
CSTable=mat2cell(Data',ones(1,m),ones(1,2));
for i=1:m-1
for j=i+1:m
CSTable{j,i+2}=(CSTable{j,i+1}-CSTable{j-1,i+1});
end
end
%%公式输出
syms t
N=0;
for i=1:m
k=1;
if i>1
for j=1:i-1
k=k*(t-j+1)/j;
end
end
N=N+CSTable{i,i+1}*k;
end
%%变量替换
syms x
NN=simplify(subs(N,t,(x-Data(1,1))/(Data(1,2)-Data(1,1))));
%绘制拉格朗日插值得到的多项式
fplot(NN,'Color','red','LineWidth',1.5)
title('牛顿插值结果')
xlabel('x')
ylabel('y')
xlim([20 160]);
%对50、105、130进行预测
Result=[];
x=50;
y=subs(NN);
Result=[Result,[x;double(y)]];
x=105;
y=subs(NN);
Result=[Result,[x;double(y)]];
x=130;
y=subs(NN);
Result=[Result,[x;double(y)]];