牛顿插值在MATLAB的实现

一、实验内容

给出f(x)的函数表(见下表),求4次牛顿插值多项式,并由此计算f(0.596)的近似值。

x

f(x)

0.40

0.41075

0.55

0.57815

0.65

0.69675

0.80

0.88811

0.90

1.02652

1.05

1.25382

二、程序与运行结果

M文件代码如下:

function y=N_Inter(x,n,C)
% x为插值点,n为插值次数,C为节点的X和Y形成的矩阵
% N_Inter输出牛顿均差得到的近似值
% 本函数可自动判断输入值是否合法
% 例如:C=[0.40,0.55,0.65,0.80,0.90,1.05;0.41075,0.57815,0.69675,0.88811,1.02652,1.25382]'
%       y=N_Inter(0.596,4,C)
%       C =
%
%           0.4000    0.4108         0         0         0         0         0
%           0.5500    0.5782    1.1160         0         0         0         0
%           0.6500    0.6967    1.1860    0.2800         0         0         0
%           0.8000    0.8881    1.2757    0.3589    0.1973         0         0
%           0.9000    1.0265    1.3841    0.4335    0.2130    0.0312         0
%           1.0500    1.2538    1.5153    0.5249    0.2287    0.0314    0.0003
%
%
%       R =
%
%           8.8479e-09
%
%
%       y =
%
%           0.6319
 
% 判断均插点是否足够
[r c]=size(C);
number=r*c;
if number~=2*(n+2)
    error("输入节点不足")
end
 
% 判断输入参数是否足够
if nargin~=3
    error("输入参数不足")
end
 
% 以下为计算均插表的代码
for j=3:n+3
    for i=j-1:n+2
        C(i,j)=( C(i,j-1)-C(i-1,j-1) )/( C(i,1)-C(i+2-j,1) );
    end
end
C
 
% 核心计算的代码
y=0;
for i=1:n+2
    S=1;
    for j=i-1:-1:1
        S=S*(x-C(j,1));
    end
y=y+C(i,i+1)*S;
end
 
% 以下为求解截断误差的代码
K=1;R=1;
for i=1:n+1
    K=K*(x-C(i,1));
end
R=abs(C(n+2,n+3)*K)
end

运行结果如下:

牛顿插值在MATLAB的实现_第1张图片

三、实验总结

在这次的实验中,我将编写的算法的功能扩大,使之不仅仅限于能够完成进行四次牛顿插值,而是能够完成任意次的牛顿插值,节点由控制台手动创立一个矩阵来输入,而所求的插值点以及插值次数也能在控制台输入,达到了普遍适用的目的。

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