用Lagrange插值多项式求近似值
function s=Lagrange(x,y,x0)
%% LagrangeInter:求拉格朗日插值多项式函数
% x为节点X坐标向量
% y为节点Y坐标向量
% x0为待计算点的x坐标
syms p;
n=length(x); %读取x向量维数
s=0;
for i=1:n
Li=y(i);
%构造基函数
for j=1:i-1
Li=Li*(p-x(j))/(x(i)-x(j));
end
for j=i+1:n
Li=Li*(p-x(j))/(x(i)-x(j));
end
s=s+Li;
simplify(s);
end
if(nargin==2)
s=subs(s,'p','x');
s=collect(s); %展开多项式
% s=vpa(s,4); %把系数取到6位精度表达
else
s = subs(s,'p',x0);
% m=length(x0); %读取t长度
end
命令台输入:
x = [144 169 225]
y = [12 13 15]
p = double(Lagrange(x,y,x0))
类型转换double()
用Newton插值多项式求近似值
function yi=Newton(x,y,xi)
%Newton插值方法,给定一系列的点(x,y),得到在x=xi处的,牛顿插值多项的值yi
n=length(x);
A=zeros(n); %定义差商表
A(:,1)=y; %差商表第一列为y
for i=2:n
A(i,2)=(A(i,1)-A(i-1,1))/(x(i)-x(i-1));
end
for j=3:n %j为列标
for i=j:n %i为行标
A(i,j)=(A(i,j-1)-A(i-1,j-1))/(x(i)-x(i-j+1)); %计算差商表
end
end
%根据差商表,求对应的牛顿插值多项式在x=xi处的值yi
N(1)=A(1,1);
for j=2:n
T=1;
for i=1:j-1
T=T*(xi-x(i));
end
N(j)=A(j,j)*T;
end
yi=sum(N); %将x=xi带入牛顿插值多项式,得到的yi的值
end
命令台输入:
x = [0.0 0.1 0.2 0.3 0.4 0.5 0.6]
y = [1.0000 0.99500 0.98007 0.95534 0.92106 0.87758 0.82534]
p = Newton(x,y,0.048)
运行结果: