作业帮 > 综合 > 作业

matlab 拉格朗日插值法

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/05/01 09:16:40
matlab 拉格朗日插值法
function f = Language(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量: x
%已知数据点的y坐标向量: y
%插值点的x坐标: x0
%求得的拉格朗日插值多项式或在x0处的插值: f
syms t;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
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;
f=f+1;
simplify(f);
if(i==n)
if(nargin == 3)
f = subs (f,'t',x0); %计算插值点的函数值
else
f=collect(f);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end
end
end
在matlab中输入
x=[18 31 66 68 70 72 70;]
y=[23 33 52 51 43 40 46];
f=Language(x,y)
plot(x,y)
x =
18 31 66 68 70 72 70
出现错误
? Function 'collect' is not defined for values of class 'double'.
Error in ==> Language at 32
f=collect(f);
怎么解决,谢谢了,急!
还是不行,
? Error using ==> sym.maple
at offset 12, `)` unexpected
Error in ==> sym.collect at 34
r = maple('collect',s,x);
Error in ==> Language at 32
f=collect(f);
matlab 拉格朗日插值法
function f = Language(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量:x
%已知数据点的y坐标向量:y
%插值点的x坐标:x0
%求得的拉格朗日插值多项式或在x0处的插值:f
syms t;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
return; %检错
end
f=0.0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%改为 f=sym(0);
for(i=1:n)
l=y(i); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%改为 l=sym(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;
f=f+1;
simplify(f);
if(i==n)
if(nargin == 3)
f = subs (f,'t',x0); %计算插值点的函数值
else
f=collect(f);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end
end
end
-------------------------------------------------------
下面的这个应该可以:
function f = Language(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量:x
%已知数据点的y坐标向量:y
%插值点的x坐标:x0
%求得的拉格朗日插值多项式或在x0处的插值:f
syms t l;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
return; %检错
end
h=sym(0);
for (i=1:n)
l=sym(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;
h=h+l;
end
simplify(h);
if(nargin == 3)
f = subs (h,'t',x0); %计算插值点的函数值
else
f=collect(h);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end