跳至主要內容

牛顿插值

岁杪二四...大约 2 分钟计算方法/数值分析学习笔记

问题

LagrangeLagrange插值简单易用,但若要增加或减少节点时,全部基函数lk(x)l_k(x)都需要重新计算,不太方便。

解决方法:

设计一个可以逐次生成插值多项式的算法,即

pn(x)=pn1(x)+un(x) p_n(x) = p_{n-1}(x)+u_n(x)

其中,pn(x)p_n(x)pn1(x)p_n-1(x)分别为nn次和n1n-1次插值多项式。

牛顿(NewtonNewton)插值思想

拉格朗日插值多项式,一点零次插值多项式为

L0(x)=y0 L_0(x)=y_0

拉格朗日两点一次插值(线性插值)多项式为

L1(x)=xx1x0x1y0+xx0x1x0y1=y01+y0y1x0x1(xx0) L_1(x)=\frac{x-x_1}{x_0-x_1}y_0+\frac{x-x_0}{x_1-x_0}y_1 = y_0 \cdot \boxed1 + \frac{y_0-y_1}{x_0-x_1}\boxed{(x-x_0)}

前者是由两点式表达的拉格朗日线性插值,而后者使用的是点斜式。

提示

无论是两点式还是点斜式只是在不同基函数情况下表征的同一线性函数

拉格朗日三点二次插值(抛物插值)多项式为

L2(x)=(xx1)(xx2)(x0x1)(x0x2)y0+(xx0)(xx2)(x1x0)(x1x2)y1+(xx0)(xx1)(x2x0)(x2x1)y2=L1(x)+c2(xx0)(xx1) \begin{align} L_2(x)&=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0+\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2 \\ &= L_1(x)+c_2\cdot \boxed{(x-x_0)(x-x_1)} \end{align}

根据线性插值递推,我们希望抛物插值也得到如上的类似点斜式形式,如何求c2c_2

C2=y0(x0x1)(x0x2)+y1(x1x0)(x1x2)+y2(x2x0)(x2x1)=y0y1x0x1y1y2x1x2x0x2 \begin{align} C_2 &=\frac{y_0}{(x_0-x_1)(x_0-x_2)}+\frac{y_1}{(x_1-x_0)(x_1-x_2)}+\frac{y_2}{(x_2-x_0)(x_2-x_1)}\\ &=\frac{\frac{y_0-y_1}{x_0-x_1}-\frac{y_1-y_2}{x_1-x_2}}{x_0-x_2} \end{align}

以此类推,推导

牛顿插值

拉格朗日插值虽然容易计算,但若是要增加一个节点时,全部基函数lk(x)l_k(x)都需要重新计算。

如果能将Ln(x)L_n(x)改写成c0+c1(xx0)+c2(xx0)(xx1)++cn(xx0)(xxn1)c_0+c_1(x-x_0)+c_2(x-x_0)(x-x_1)+\dots+c_n(x-x_0)\dots(x-x_{n-1})的形式,则每增加一个节点都只附加一项上去。

差商(亦称均差)

一阶差商:

f[xi,xj]=f(xi)f(xj)xixj(ij,xixj) f[x_i,x_j]=\frac{f(x_i)-f(x_j)}{x_i-x_j}\qquad(i\neq j,x_i\neq x_j)

二阶差商:

f[xi,xj,xk]=f[xi,xj]f[xj,xk]xixk(ik) f[x_i,x_j,x_k]=\frac{f[x_i,x_j]-f[x_j,x_k]}{x_i-x_k}\qquad(i\neq k)

(k+1)(k+1)阶差商:

f[x0,,xk+1]=f[x0,x1,,xk]f[x1,,xk,xk+1]x0xk+1=f[x0,x1,,xk]f[x0,,xk,xk+1]xkxk+1 \begin{align} f[x_0,\dots,x_{k+1}]&=\frac{f[x_0,x_1,\dots,x_k]-f[x_1,\dots,x_k,x_{k+1}]}{x_0-x_{k+1}} \\ &=\frac{f[x_0,x_1,\dots,x_k]-f[x_0,\dots,x_k,x_{k+1}]}{x_k-x_{k+1}} \end{align}

重要

kk阶差商必须由k+1k+1个节点构成,kk个节点是构造不出kk阶差商的。

为了统一起见,补充定义函数f(x0)f(x_0)为零阶差商

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.2.0