Newton插值方法的matlab实现

首先需要先建立几个函数
注意:下述代码均为Matlab代码。
第一个函数

function a=chashang(xx,yy)
%此函数用于求Newton插值法的差商表,返回值是差商表所组成的矩阵
%xx为插值点的自变量组成的行向量
%yy为插值点的因变量组成的行向量
[m,n]=size(xx);
a=zeros(n,n+1);%先创建一个矩阵
a(:,1)=xx';
a(:,2)=yy';
for j=3:n+1%i代表行标,j代表列标
    for i=j-1:n
        a(i,j)=(a(i,j-1)-a(i-1,j-1))/(a(i,1)-a(i-(j-2),1));%i-(j-2)是一个关键
    end
end
end

第二个函数

function f=nw(x,k,xx)
%此函数的作用是求(x-x(i))i=1,2,..,n+1;的连乘积,返回值是连乘积的数值(n+1为插值点的个数)
%此处的x为所求的函数值对应的自变量
%xx为插值点的自变量组成的行向量
[m,n]=size(xx);
f=1;
for i=1:k
    f=(x-xx(i))*f;
end
end


第三个函数

function f=N(x,xx,yy)
%此函数用于实现Newton插值,返回值f是插值结果
%此处的x为所求的函数值对应的自变量
%xx为插值点的自变量组成的行向量
%yy为插值点的因变量组成的行向量
[m,n]=size(xx);
a=chashang(xx,yy);
for i=1:n
    if(i==1)
        f=a(i,2);
    else
        f=f+a(i,i+1)*nw(x,i-1,xx);
end
end


有了上述三个函数,把这三个函数放到你的matlab工作目录下面,仅引用第三个函数N(N函数其实还要调用其它两个函数)即可进行Newton插值
下面利用以上的代码进行Newton插值

clear
xx=[2 2.1 2.2];
yy=[1.414214 1.449138 1.483240];
N(2.15,xx,yy)%直接计算2.15处的插值函数值
syms x;
y=vpa(collect(N(x,xx,yy)),4)%先计算插值函数,collect:合并同类项,vpa:保留一定位数的有效数字
vpa(subs(y,x,2.15),4)%再计算插值函数在2.15处的函数值,subs:2.15的值赋给x

下面给出此程序的运行结果
Newton插值方法的matlab实现_第1张图片

另外说明一点,Matlab其实有专门的插值函数,此处构建上述三个函数的目的仅仅是为了数值分析的学习需要。
本程序代码,在matlaR2016a上均已运行通过;

你可能感兴趣的:(Matlab,数值分析,matlab)