function y=LagrangePolynomial(xi,yi)
% 函数说明:求拉格朗日插值多项式
% 参数说明:xi为观测点,yi为相应观测值,均为向量形式
% 返回值说明:y为关于x的多项式
%
% 作者:野渡无人
% 最后修改日期:2008.4.24
%
%>> xi=[0 1 2];
%>> yi=[1 2 3];
%>> y=LagrangePolynomial(xi,yi)
%
% y =
%
% x+1
syms x L
[m1,n]=size(xi);
[m2,n2]=size(yi);
if m1>1 || m2>1
error('请输入向量,而非矩阵!');
end
d_x=x-xi;
L=sym(prod(d_x(2:n))/prod(xi(1)-xi(2:n)));
for i=2:n-1
fenzi=prod(d_x(1:i-1))*prod(d_x(i+1:n));
fenmu=prod(xi(i)-xi(1:i-1))*prod(xi(i)-xi(i+1:n));
if fenmu==0
error('错误:除0操作!请重新输入参数!')
return
end
L=[L,sym(fenzi/fenmu)];
end
L=[L,sym(prod(d_x(1:n-1))/prod(xi(n)-xi(1:n-1)))];
y=collect(sum(L.*yi));%合并同类项