【MATLAB代码】Lagrange插值多项式和Newdon插值函数

用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)

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_62775411/article/details/127398149
今日推荐