数值计算之 插值法(2)多项式插值——牛顿插值法

数值计算之 插值法(2)多项式插值——牛顿插值法

拉格朗日插值法

上篇指出函数 f ( x ) f(x) f(x)的插值可以用一个多阶多项式 P ( x ) P(x) P(x)表示:
P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n P(x)=a_0+a_1x+a_2x^2+\dots+a_nx^n P(x)=a0+a1x+a2x2++anxn

拉格朗日插值法将一个多阶多项式拆分为多个多阶多项式的和,当出现新的节点值时,需要重新计算各多项式,提升了计算量。牛顿插值法解决了重新计算的问题。

牛顿插值的递推

牛顿插值法使用了递推的思想。对于未知表达式的函数 f ( x ) f(x) f(x),知道其节点 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , … , ( x n , f ( x n ) ) (x_0,f(x_0)),(x_1,f(x_1)),\dots,(x_n,f(x_n)) (x0,f(x0)),(x1,f(x1)),,(xn,f(xn))

假设 f k ( x ) f_k(x) fk(x)是采样完一个节点后的插值结果。第一次插值需要满足节点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))
f 0 ( x ) = f ( x 0 ) f 0 ( x 0 ) = f ( x 0 ) f_0(x)=f(x_0) \\ f_0(x_0)=f(x_0) f0(x)=f(x0)f0(x0)=f(x0)
对于第二次插值,需要满足节点 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) (x_0,f(x_0)),(x_1,f(x_1)) (x0,f(x0)),(x1,f(x1))
f 1 ( x ) = f 0 ( x ) + b 1 ( x − x 0 ) f 1 ( x 0 ) = f ( x 0 ) f i n d : b 1 s . t . f 1 ( x 1 ) = f 0 ( x 1 ) + b 1 ( x 1 − x 0 ) = f ( x 1 ) b 1 = f ( x 1 ) − f ( x 0 ) x 1 − x 0 f_1(x)=f_0(x)+b_1(x-x_0) \\ f_1(x_0)=f(x_0) \\ \quad \\ find:\quad b_1 \\ s.t.\quad f_1(x_1)=f_0(x_1)+b_1(x_1-x_0)=f(x_1) \\ \quad \\ b_1=\frac{f(x_1)-f(x_0)}{x_1-x_0} f1(x)=f0(x)+b1(xx0)f1(x0)=f(x0)find:b1s.t.f1(x1)=f0(x1)+b1(x1x0)=f(x1)b1=x1x0f(x1)f(x0)
对于第三次插值,需要满足节点 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) , ( x 2 , f ( x 2 ) ) ) (x_0,f(x_0)),(x_1,f(x_1),(x_2,f(x_2))) (x0,f(x0)),(x1,f(x1),(x2,f(x2)))
f 2 ( x ) = f 1 ( x ) + b 2 ( x − x 0 ) ( x − x 1 ) f 2 ( x 0 ) = f 1 ( x 0 ) = f ( x 0 ) f 2 ( x 1 ) = f 1 ( x 1 ) = f ( x 1 ) f i n d : b 2 s . t . f 2 ( x 2 ) = f 1 ( x 2 ) + b 2 ( x 2 − x 0 ) ( x 2 − x 1 ) = f ( x 2 ) b 2 = f ( x 2 ) − f ( x 1 ) x 2 − x 1 − f ( x 1 ) − f ( x 0 ) x 1 − x 0 x 2 − x 0 f_2(x)=f_1(x)+b_2(x-x_0)(x-x_1) \\ f_2(x_0)=f_1(x_0)=f(x_0) \\ f_2(x_1)=f_1(x_1)=f(x_1) \\ \quad \\ find:\quad b_2 \\ s.t.\quad f_2(x_2)=f_1(x_2)+b_2(x_2-x_0)(x_2-x_1)=f(x_2) \\ \quad \\ b_2=\frac{\frac{f(x_2)-f(x_1)}{x_2-x_1} -\frac{f(x_1)-f(x_0)}{x_1-x_0}}{x_2-x_0} f2(x)=f1(x)+b2(xx0)(xx1)f2(x0)=f1(x0)=f(x0)f2(x1)=f1(x1)=f(x1)find:b2s.t.f2(x2)=f1(x2)+b2(x2x0)(x2x1)=f(x2)b2=x2x0x2x1f(x2)f(x1)x1x0f(x1)f(x0)
于是,每次插值的结果都可以看成是上次插值的结果加上本次插值的影响,从而大幅减少了计算量:
P ( x ) = f n − 1 ( x ) + b n ( x − x 0 ) ( x − x 1 ) … ( x − x n − 1 ) P(x)=f_{n-1}(x)+b_n(x-x_0)(x-x_1)\dots(x-x_{n-1}) \\ P(x)=fn1(x)+bn(xx0)(xx1)(xxn1)

我们要做的就是计算系数 b b b的表达式。

差商

上面计算出了 b 1 , b 2 b_1,b_2 b1,b2的表达式。实际上系数 b b b符合差商形式。差商的计算如下所示:
一 阶 差 商 : b 1 = f [ x 0 , x 1 ] = f ( x 1 ) − f ( x 0 ) x 1 − x 0 二 阶 差 商 : b 2 = f [ x 0 , x 1 , x 2 ] = f [ x 0 , x 1 ] − f [ x 1 , x 2 ] x 0 − x 2 = f ( x 2 ) − f ( x 1 ) x 2 − x 1 − f ( x 1 ) − f ( x 0 ) x 1 − x 0 x 2 − x 0 三 阶 差 商 : b 3 = f [ x 0 , x 1 , x 2 , x 3 ] = f [ x 0 , x 1 , x 2 ] − f [ x 1 , x 2 , x 3 ] x 0 − x 3 n 阶 差 商 : b n = f [ x 0 , x 1 , … , x n ] = f [ x 0 , x 1 , … , x n − 1 ] − f [ x 1 , x 2 , … , x n ] x 0 − x n 一阶差商:\\ \quad \\ b_1=f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0} \\ \quad \\ 二阶差商:\\ \quad \\ b_2=f[x_0,x_1,x_2] =\frac{f[x_0,x_1]-f[x_1,x_2]}{x_0-x_2} = \frac{\frac{f(x_2)-f(x_1)}{x_2-x_1} -\frac{f(x_1)-f(x_0)}{x_1-x_0}}{x_2-x_0} \\ \quad \\ 三阶差商:\\ \quad \\ b_3 = f[x_0,x_1,x_2,x_3] = \frac{f[x_0,x_1,x_2]-f[x_1,x_2,x_3]}{x_0-x_3} \\ \quad \\ n阶差商: \\ \quad \\ b_n = f[x_0,x_1,\dots,x_n]=\frac{f[x_0,x_1,\dots,x_{n-1}]-f[x_1,x_2,\dots,x_{n}]}{x_0-x_n} b1=f[x0,x1]=x1x0f(x1)f(x0)b2=f[x0,x1,x2]=x0x2f[x0,x1]f[x1,x2]=x2x0x2x1f(x2)f(x1)x1x0f(x1)f(x0)b3=f[x0,x1,x2,x3]=x0x3f[x0,x1,x2]f[x1,x2,x3]nbn=f[x0,x1,,xn]=x0xnf[x0,x1,,xn1]f[x1,x2,,xn]
对于差商 f [ x 1 , x 2 , … , x n ] f[x_1,x_2,\dots,x_n] f[x1,x2,,xn]而言,序号下标的顺序不影响差商的值。

牛顿插值法

把差商代入牛顿插值递推中,就得出了牛顿插值多项式的一般形式:
P ( 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 ] ( x − x 0 ) ( x − x 1 ) … ( x − x n − 1 ) P(x)=f(x_0)+f[x_0,x_1](x-x_0)\\ \quad\quad\quad +f[x_0,x_1,x_2](x-x_0)(x-x_1) \\ \quad +\dots \\ +f[x_0,x_1,\dots,x_n](x-x_0)(x-x_1)\dots(x-x_{n-1}) P(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)++f[x0,x1,,xn](xx0)(xx1)(xxn1)
实际插值时,只需要把上一次采样后插值的结果 P n − 1 P_{n-1} Pn1存储下来,下一次采样时直接求 P n − 1 P_{n-1} Pn1与新项的和就行了,节省了计算量和存储空间。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值