作业帮 > 综合 > 作业

拉格朗日插值总是不对matlab

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/09 09:47:56
拉格朗日插值总是不对matlab
找了很多个拉格朗日插值的代码,比如下面这个
function y=lag(x0,y0,x)
n=length(x0);
m=length(x);
for i=1:m
z=x;
s=0;
for k=1:n
L=1;
for j=1:n
if =k
L=L.*abs((z-x0(j)))/(x0(k)-x0(j));
end
end
s=s+L*y0(k);
end
y=s;
end
输入
>> x0=[4 8 12 16 20 24];
>> y0=[1590 1320 1000 900 650 560];
我要求x=0处的插值,输入lag(x0,y0,0)
各种程序答案均为420,晕,可是显然应该是2000左右才对呀
这个函数大体是正确的,但有小错误两个1  L=L.*abs((z-x0(j)))/(x0(k)-x0(j));这行不需要abs.2  x是个数值的话 就不需要m=length(x);和下面的循环输出了;我开始认同你的看法,但作图后发现,不能这样想当然.不同函数不一样,这个被插值函数在0附近的值下降很快.完整图像我给你看看. 今天看了下这个问题,可能用拟合更好(因为你的数值线性度较大,拉格朗日插值条件不好,Matlab里面称为Bad Condition.)用拟合方法如下(线性拟合)clear>> x0=[4 8 12 16 20 24];y0=[1590 1320 1000 900 650 560];p=polyfit(x0,y0,1);>>  x=-1:30;y=polyval(p,x);>> plot(x,y) %显示0处拟合值>> polyval(p,0)%----------------------------结果为1729因为只能放一个图 我就把第一个图删除了