作业帮 > 综合 > 作业

用matlab实现lagrange插值多项式.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 11:30:28
用matlab实现lagrange插值多项式.
源程序如下:
function [f,y0]=lagrange_interpolation(x,y,x0)
% f lagrange插值函数
% x,y 数据点
% x0 插值的x坐标
syms t;
if length(x) == length(y) %检错
n=length(x);
else
error('x和y的维数不相等,请重新输入')
end
w1=1;
w=ones(n,1);
for k=1:n %开始计算插值函数f
w1=w1*(t-x(k));
for m=1:k-1
w(k)=w(k)*(x(k)-x(m));
end
for l=k+1:n
w(k)=w(k)*(x(k)-x(l));
end
end
f=0.0;
for h=1:n
f=f+w1/((t-x(h))*w(h))*y(h); %得插值函数
end
x1=[x,x0];
y1=subs(f,t,x1); %计算插值函数的值
y0=y1(n+1); %提取插值点的函数值
plot(x,y1(1:n),'g','linewidth',1.5) %绘制插值函数的图像
hold on
plot(x,y,'*','markersize',6) %原数据散点图
plot(x0,y0,'+c','markersize',10) %插值点
hold off
legend('原数据点','插值函数',['插值点','(',num2str(x0) ,',' ,num2str(y0) ,')'],'location','northeast')
搞了一个晚上,程序运行后,在“y1=subs(f,t,x1); %计算插值函数的值”这一行语句上出现问题,把分号可以发现y1除了最后一个,其它结果都是nan(非数),思考了好久都不知道为什么,为什么结果是nan.其它都没问题.
在T处加引号试试,即“y1=subs(f,'t',x1); %计算插值函数的值”