一、实验内容
给出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
运行结果如下:
三、实验总结
在这次的实验中,我将编写的算法的功能扩大,使之不仅仅限于能够完成进行四次牛顿插值,而是能够完成任意次的牛顿插值,节点由控制台手动创立一个矩阵来输入,而所求的插值点以及插值次数也能在控制台输入,达到了普遍适用的目的。