这个MATLAB中实现拉格朗日插值的程序有什么问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/15 16:10:52
这个MATLAB中实现拉格朗日插值的程序有什么问题
这个是拉格朗日插值的程序:
function f=Language(x,y,x0)
syms t;
if(length(x)==length(y))
n=length(x);
else
disp('vx!=vy');
return;
end
f=0.0;
for(i=1:n)
l=y(i);
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
f=f+1;
simplify(f);
if(i==n)
if(nargin==3)
f=subs(f,'t',x0);
else
f=collect(f);
f=vpa(f,6);
end
end
end
存为M文件后,我尝试调用,如下:
x=[0.40 0.50 0.60 0.70 0.80 0.90];
y=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144 -0.153265];
f=Language(x,y)
结果显示:
Function 'simplify' is not defined for values of class 'double'.
Error in ==> Language at 22
simplify(f);
这是怎么回事?我的MATLAB的版本是7.0.0.那个拉格朗日插值的程序该怎么变才能正确呢?
这个是拉格朗日插值的程序:
function f=Language(x,y,x0)
syms t;
if(length(x)==length(y))
n=length(x);
else
disp('vx!=vy');
return;
end
f=0.0;
for(i=1:n)
l=y(i);
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));
end;
f=f+1;
simplify(f);
if(i==n)
if(nargin==3)
f=subs(f,'t',x0);
else
f=collect(f);
f=vpa(f,6);
end
end
end
存为M文件后,我尝试调用,如下:
x=[0.40 0.50 0.60 0.70 0.80 0.90];
y=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144 -0.153265];
f=Language(x,y)
结果显示:
Function 'simplify' is not defined for values of class 'double'.
Error in ==> Language at 22
simplify(f);
这是怎么回事?我的MATLAB的版本是7.0.0.那个拉格朗日插值的程序该怎么变才能正确呢?
这个是MATLAB版本问题,7.0没有收录simplify和double函数,而7.9有,所以出现问题,谢谢!