目前在上《数值分析》课程,出于兴趣就把多项式插值的程序编出来了,但是功能还比较有限。此函数是输入n个点的坐标和对应的函数值,matlab软件会通过拉格朗日多项式插值的方法生成一个多项式,同时也会输出多项式的函数图像。如有错误,请指正。
函数程序如下:
function L = lagrangecz(x,y)
%实现拉格朗日插值多项式,并输出拟合的多项式、图像,输入n个点,得到最多n-1次插值
m = numel(x);
l = zeros(1,m);
for i = 1:m
fm = 1;
fz = [1];
for j = 1:m
if i == j
j = j;
else
fm = fm*(x(i)-x(j));
fz = conv(fz,[1 -x(j)]);
cj = y(i)*(fz/fm);
end
end
l= [l;cj];
end
c = cumsum(l);
L = c(m+1,:);
%以下为画图
x1 = 0:0.02:max(x);
y1 = polyval(L,x1);
plot(x,y,'*',x1,y1,'k');
end