问题
Lagrange插值简单易用,但若要增加或减少节点时,全部基函数lk(x)都需要重新计算,不太方便。
解决方法:
设计一个可以逐次生成插值多项式的算法,即
pn(x)=pn−1(x)+un(x)
其中,pn(x)和pn−1(x)分别为n次和n−1次插值多项式。
拉格朗日插值多项式,一点零次插值多项式为
L0(x)=y0
拉格朗日两点一次插值(线性插值)多项式为
L1(x)=x0−x1x−x1y0+x1−x0x−x0y1=y0⋅1+x0−x1y0−y1(x−x0)
前者是由两点式表达的拉格朗日线性插值,而后者使用的是点斜式。
提示
无论是两点式还是点斜式只是在不同基函数情况下表征的同一线性函数
拉格朗日三点二次插值(抛物插值)多项式为
L2(x)=(x0−x1)(x0−x2)(x−x1)(x−x2)y0+(x1−x0)(x1−x2)(x−x0)(x−x2)y1+(x2−x0)(x2−x1)(x−x0)(x−x1)y2=L1(x)+c2⋅(x−x0)(x−x1)
根据线性插值递推,我们希望抛物插值也得到如上的类似点斜式形式,如何求c2?
C2=(x0−x1)(x0−x2)y0+(x1−x0)(x1−x2)y1+(x2−x0)(x2−x1)y2=x0−x2x0−x1y0−y1−x1−x2y1−y2
以此类推,推导
拉格朗日插值虽然容易计算,但若是要增加一个节点时,全部基函数lk(x)都需要重新计算。
如果能将Ln(x)改写成c0+c1(x−x0)+c2(x−x0)(x−x1)+⋯+cn(x−x0)…(x−xn−1)的形式,则每增加一个节点都只附加一项上去。
差商(亦称均差):
一阶差商:
f[xi,xj]=xi−xjf(xi)−f(xj)(i=j,xi=xj)
二阶差商:
f[xi,xj,xk]=xi−xkf[xi,xj]−f[xj,xk](i=k)
(k+1)阶差商:
f[x0,…,xk+1]=x0−xk+1f[x0,x1,…,xk]−f[x1,…,xk,xk+1]=xk−xk+1f[x0,x1,…,xk]−f[x0,…,xk,xk+1]
重要
k阶差商必须由k+1个节点构成,k个节点是构造不出k阶差商的。
为了统一起见,补充定义函数f(x0)为零阶差商