function yi=Lagrange(x,y,xi)
% 函数说明:用拉格朗日插值多项式求值
% 参数说明:x为已知值,y为x对应的函数值,x,y均为向量,xi为所求插值点
% 返回值说明:yi为xi对应的函数值
%
% 作者:野渡无人
% 最后修改日期:2008.4.24
%
%>> x=[1 2 3];
%>> xi=2.1;
%>> y=[0.367879441 0.135335283 0.049787068];
%>> yi=Lagrange(x,y,xi)
%
% yi =
%
% 0.12016564406500
[m1,n]=size(x);
[m2,n2]=szie(y);
if m1>1 || m2>1
error('请输入向量,而非矩阵!');
end
d_x=xi-x;
L=zeros(1,n);
if prod(x(1)-x(2:n))==0 || prod(x(n)-x(1:n-1))==0
error('错误:除0操作!请重新输入参数!')
return
end
L(1)=prod(d_x(2:n))/prod(x(1)-x(2:n));
L(n)=prod(d_x(1:n-1))/prod(x(n)-x(1:n-1));
for i=2:n-1
fenzi=prod(d_x(1:i-1))*prod(d_x(i+1:n));
fenmu=prod(x(i)-x(1:i-1))*prod(x(i)-x(i+1:n));
if fenmu==0
error('错误:除0操作!请重新输入参数!')
return
end
L(i)=fenzi/fenmu;
end
yi=sum(L.*y);