Newton插值多项式拟合

Newton插值法

引子:在工程应用中,函数 y = f ( x ) y=f(x) y=f(x)可能不是一个具体的解析表达式,而是通过实验、测量或者中间计算得到的一组数据;或者解析表达式较复杂,不便于计算和使用。因此需要一个简单函数 y = y ( x ) y=y(x) y=y(x)来近似代替函数 y = f ( x ) y=f(x) y=f(x),使得

y ( x i ) = f ( x i ) , i = 0 , 1 , 2 , . . , n y(x_i)=f(x_i),i=0,1,2,..,n y(xi)=f(xi),i=0,1,2,..,n
称函数 y = y ( x ) y=y(x) y=y(x)为函数 y = f ( x ) y=f(x) y=f(x)在点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,,xn处的插值函数。

插商

设函数 f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]上有定义, [ a , b ] [a,b] [a,b]上互异的节点 x 0 , x 1 , … , x n x_0,x_1,\dots ,x_n x0,x1,,xn的函数值为 f ( x 0 ) , f ( x 1 ) , f ( x 2 ) , … , f(x_0),f(x_1),f(x_2),\dots , f(x0),f(x1),f(x2),,
f [ x 0 , x 1 ] = f ( x 0 ) − f ( x 1 ) x 0 − x 1 f[x_0,x_1]=\frac{f(x_0)-f(x_1)}{x_0-x_1} f[x0,x1]=x0x1f(x0)f(x1)
f ( x ) f(x) f(x) x 0 , x 1 x_0,x_1 x0,x1处的一阶差商。
f [ x 0 , x 1 , x 2 ] = f [ x 0 , x 1 ] − f [ x 1 , x 2 ] x 0 − x 2 f[x_0,x_1,x_2]=\frac{f[x_0,x_1]-f[x_1,x_2]}{x_0-x_2} f[x0,x1,x2]=x0x2f[x0,x1]f[x1,x2] f ( x ) f(x) f(x)在$x_0,x_1,x_2处的二阶差商。

插值多项式

由差商的定义 f ( x ) = f ( x 0 ) + f [ x , x 0 ] ( x − x 0 ] f(x)=f(x_0)+f[x,x_0](x-x_0] f(x)=f(x0)+f[x,x0](xx0]
f [ x , x 0 ] = f [ x 0 , x 1 ] + f [ x , x 0 , x 1 ] ( x − x 1 ) f[x,x_0]=f[x_0,x_1]+f[x,x_0,x_1](x-x_1) f[x,x0]=f[x0,x1]+f[x,x0,x1](xx1)
f [ x , x 0 , x 1 ] = f [ x 0 , x 1 , x 2 ] = f [ x 0 , x 1 , x 2 ] ( x − x 2 ) f[x,x_0,x_1]=f[x_0,x_1,x_2]=f[x_0,x_1,x_2](x-x_2) f[x,x0,x1]=f[x0,x1,x2]=f[x0,x1,x2](xx2)
… \dots
f [ x , x 0 , x 1 , … , x n − 1 ] = f [ x 0 , x 1 , … , x n − 1 , x n ] + f [ x , x 0 , x 1 , … , x n − 1 , x n ] ( x − x n ) f[x,x_0,x_1,\dots,x_{n-1}]=f[x_0,x_1,\dots,x_{n-1},x_n]+f[x,x_0,x_1,\dots,x_{n-1},x_n](x-x_n) f[x,x0,x1,,xn1]=f[x0,x1,,xn1,xn]+f[x,x0,x1,,xn1,xn](xxn)
依次将后一个灯饰代入前一个等式就有
f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + ⋯ + f [ x 0 , x 1 , … , x n − 1 , x n ] ( x − x 0 ) ( x − x 1 ) … ( x − x n − 1 ) + f [ x , x 0 , x 1 , … , x n ] ( x − x 0 ) ( x − x 1 ) … ( x − x n ) f(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\dots+f[x_0,x_1,\dots,x_{n-1},x_n](x-x_0)(x-x_1)\dots(x-x_{n-1})+f[x,x_0,x_1,\dots,x_n](x-x_0)(x-x_1)\dots(x-x_n) f(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)++f[x0,x1,,xn1,xn](xx0)(xx1)(xxn1)+f[x,x0,x1,,xn](xx0)(xx1)(xxn)
记为 f ( x ) = N n ( x ) + f [ x , x 0 , x 1 , … , x n − 1 , x n ] P n + 1 ( x ) f(x)=N_n(x)+f[x,x_0,x_1,\dots,x_{n-1},x_n]P_{n+1}(x) f(x)=Nn(x)+f[x,x0,x1,,xn1,xn]Pn+1(x)
P n + 1 ( x ) = ∏ i = 0 n ( x − x i ) P_{n+1}(x)=\prod_{i=0}^n(x-x_i) Pn+1(x)=i=0n(xxi)
将上式中的x取为插值节点,由 N n ( x i ) = f ( x i ) , i = 0 , 1 , …   n N_n(x_i)=f(x_i),i=0,1,\dots\,n Nn(xi)=f(xi),i=0,1,n,即 N n ( x ) N_n(x) Nn(x)是满足插值条件的 n n n次多项式,称之为 N e w t o n Newton Newton插值多项式,其余项为
E ( x ) = f ( x ) − N n ( x ) = f [ x , x 0 , x 1 , … , x n ] p n + 1 ( x ) E(x)=f(x)-N_n(x)=f[x,x_0,x_1,\dots,x_n]p_{n+1}(x) E(x)=f(x)Nn(x)=f[x,x0,x1,,xn]pn+1(x)

差商表

插值节点零阶差商一阶差商二阶差商三阶差商 … \dots
x 0 x_0 x0 f ( x 0 ) f(x_0) f(x0)
x 1 x_1 x1 f ( x 1 ) f(x_1) f(x1) f [ x 0 , x 1 ] f[x_0,x_1] f[x0,x1]
x 2 x_2 x2$f(x_2) f [ x 1 , x 2 ] f[x_1,x_2] f[x1,x2] f [ x 0 , x 1 , x 2 ] f[x_0,x_1,x_2] f[x0,x1,x2]
x 3 x_3 x3 f ( x 3 ) f(x_3) f(x3) f [ x 2 , x 3 ] f[x_2,x_3] f[x2,x3] f [ x 1 , x 2 , x 3 ] f[x_1,x_2,x_3] f[x1,x2,x3] f [ x 0 , x 1 , x 2 , x 3 ] f[x_0,x_1,x_2,x_3] f[x0,x1,x2,x3]
… \dots … \dots … \dots … \dots … \dots

例题

设有如下表的数据,求f(0.596)的近似值

x i x_i xi0.400.550.650.800.901.05
f ( x i ) f(x_i) f(xi)0.410750.578150.696750.888110.1026521.25382

代码实现

X=input('请输入X的值');
Y=input('请输入Y的值');
x=input('请输入要拟合的节点的值');
n=length(X);
A=zeros(n,n+1);
A(:,1)=X;
A(:,2)=Y;
%计算差商表
for i=3:n+1
    A(i-1:n,i)=(A(i-2:n-1,i-1)-A(i-1:n,i-1))./(A(1:n+2-i,1)-A(i-1:n,1));
end

%计算插值多项式
B=A(:,2:n+1);
disp(A);
disp(B);
C=zeros(n);
C(1,1)=1;
for i=2:n
    C(i,i) = C(i-1,i-1)*(x-X(i-1));
end
disp(C);
f=0;
for j=1:n
    f=f+B(j,j)*C(j,j);
end
%展示计算结果
disp("f(0.596)的拟合值为:");
disp(f);
%运行结果
请输入X的值[0.40,0.55,0.65,0.80,0.90,1.05]
请输入Y的值[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382]
请输入要拟合的节点的值0.596
    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

    0.4108         0         0         0         0         0
    0.5782    1.1160         0         0         0         0
    0.6967    1.1860    0.2800         0         0         0
    0.8881    1.2757    0.3589    0.1973         0         0
    1.0265    1.3841    0.4335    0.2130    0.0312         0
    1.2538    1.5153    0.5249    0.2287    0.0314    0.0003

    1.0000         0         0         0         0         0
         0    0.1960         0         0         0         0
         0         0    0.0090         0         0         0
         0         0         0   -0.0005         0         0
         0         0         0         0    0.0001         0
         0         0         0         0         0   -0.0000

  f(0.596)的拟合值为:
    0.6319
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值