作业帮 > 综合 > 作业

Matlab程序,请问错误在哪?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/26 00:59:20
Matlab程序,请问错误在哪?
function s=lag(x,y,t)
%采用符号推导,这样可以给出插值具体公式
syms p;
%读取x向量维数
n=length(x);
s=0;
for(k=1:n)
la=y(k);
%构造基函数
for(j=1:k-1)
la=la*(p-x(j))/(x(k)-x(j));
end;
for(j=k+1:n)
la=la*(p-x(j))/(x(k)-x(j));
end;
s=s+la;
simplify(s);
end

%对输入参数个数做判断,如果只有两个参数
%直接给出插值多项式
%如果三个参数 则给出插值点的插值结果
%第三个参数可以为向量

if(nargin==2)
s=subs(s,'p','x');
%展开多项式
s=collect(s);
%把系数取到6位精度表达
s=vpa(s,4);
else
%读取t长度
m=length(t);
%分别对t的每一个分量插值
for i=1:m
temp(i)=subs(s,'p',t(i));
end
%得到的是系列插值点的插值结果
%既得到的是向量,赋值给s
s=temp;
end
经检验该程序可运行,
例如:
>> x = 1:10;
>> y = rand(1,10);
>> lag(x,y)
ans =

159.1-.2114e-3*x^9+.1064e-1*x^8-.2291*x^7+2.757*x^6-20.32*x^5+94.42*x^4-274.1*x^3+473.7*x^2-435.1*x