拉格朗日插值总是不对matlab找了很多个拉格朗日插值的代码,比如下面这个function y=lag(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x;s=0;for k=1:nL=1;for j=1:nif =kL=L.*abs((z-x0(j)))/(x0(k)-x0(j));endends=s+L*y0(k);endy=s;en
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/01 09:08:36
拉格朗日插值总是不对matlab找了很多个拉格朗日插值的代码,比如下面这个function y=lag(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x;s=0;for k=1:nL=1;for j=1:nif =kL=L.*abs((z-x0(j)))/(x0(k)-x0(j));endends=s+L*y0(k);endy=s;en
拉格朗日插值总是不对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左右才对呀
拉格朗日插值总是不对matlab找了很多个拉格朗日插值的代码,比如下面这个function y=lag(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x;s=0;for k=1:nL=1;for j=1:nif =kL=L.*abs((z-x0(j)))/(x0(k)-x0(j));endends=s+L*y0(k);endy=s;en
这个函数大体是正确的,但有小错误两个
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
因为只能放一个图 我就把第一个图删除了