matlab 拉格朗日插值法

functionf=Language(x,y,x0)%求已知数据点的拉格朗日插值多项式%已知数据点的x坐标向量:x%已知数据点的y坐标向量:y%插值点的x坐标:x0%求得... 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);
展开
 我来答
ccvcgdsss
2010-06-05 · TA获得超过124个赞
知道答主
回答量:42
采纳率:0%
帮助的人:79.4万
展开全部
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式