数值分析读书笔记(5)数值逼近问题(I)—-插值极其数值计算
给出一般性的插值概念
给定 f(x),x∈[a,b] f ( x ) , x ∈ [ a , b ] ,已知它在n+1个互异的节点 x0,x1,… x 0 , x 1 , … 上的函数值为 y0,y1,… y 0 , y 1 , …
目的即寻求 φ(x) φ ( x ) ,使得 φ(xi)=f(xi)=yi φ ( x i ) = f ( x i ) = y i
令所有的 φ(x) φ ( x ) 组成 Φ Φ ,通常 Φ Φ 是有限维线性空间,记
Φ=span{φi(x)}ni=0 Φ = s p a n { φ i ( x ) } i = 0 n
其中 φi(x) φ i ( x ) 为一组基, 于是有φ(x)=∑i=0naiφi(x) φ ( x ) = ∑ i = 0 n a i φ i ( x )
故我们可以利用序列 {ai}ni=0 { a i } i = 0 n 来确定 φ(x) φ ( x ) , 这里的 φ(x) φ ( x ) 就是 插值函数
通过概念我们可以看出来,目的就是让插值函数去接近给定的函数
1.关于多项式插值
当给定插值函数是多项式函数的时候, 我们可以产生一种插值的方案, 下面介绍一下Lagrange插值
令 P(x)=a0+a1x+a2x2+⋯+anxn=∑ni=0aixi P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n = ∑ i = 0 n a i x i
由于P(xi)=yi,i=0,1,2,…,n P ( x i ) = y i , i = 0 , 1 , 2 , … , n
⎧⎩⎨⎪⎪⎪⎪a0+a1x0+⋯+anxn0⋮a0+a1xn+⋯+anxnn=y0=y0 { a 0 + a 1 x 0 + ⋯ + a n x 0 n = y 0 ⋮ a 0 + a 1 x n + ⋯ + a n x n n = y 0
得系数阵为A=⎛⎝⎜⎜1⋮1x0⋮xn⋯⋱⋯xn0⋮xnn⎞⎠⎟⎟ A = ( 1 x 0 ⋯ x 0 n ⋮ ⋮ ⋱ ⋮ 1 x n ⋯ x n n )
由Vandermonde行列式的特性,我们可以知道|A|=∏0≤i<j≤n(xj−xi) | A | = ∏ 0 ≤ i < j ≤ n ( x j − x i )
若 xi x i 互异,则有唯一解
构造插值基函数li(xj)=δij={10i=ji≠j l i ( x j ) = δ i j = { 1 i = j 0 i ≠ j
i≠j i ≠ j 时, li(xj)=0 l i ( x j ) = 0 ,故
li(x)=ci∏k=0,k≠in(x−xk) l i ( x ) = c i ∏ k = 0 , k ≠ i n ( x − x k )
又对于 ci c i 由于 li(xj)=1 l i ( x j ) = 1 当仅当 i=j i = j ,故
li(xi)=ci∏k=0,k≠in(xi−xk)=1 l i ( x i ) = c i ∏ k = 0 , k ≠ i n ( x i − x k ) = 1
所以可以得到ci=∏k=0,k≠in(xi−xk)−1 c i = ∏ k = 0 , k ≠ i n ( x i − x k ) − 1
我们将 ci c i 回代回去,则有
li(x)=∏k=0,k≠in(x−xk)(xi−xk) l i ( x ) = ∏ k = 0 , k ≠ i n ( x − x k ) ( x i − x k )
令Ln(x)=∑i=0nyili(x)=∑i=0n(yi∏k=0,k≠in(x−xk)(xi−xk)) L n ( x ) = ∑ i = 0 n y i l i ( x ) = ∑ i = 0 n ( y i ∏ k = 0 , k ≠ i n ( x − x k ) ( x i − x k ) )
上式即为所求的 Lagarange插值函数
这里为了运算记录方便, 记
则有
故
下面继续讨论Lagrange插值的误差,引入误差余项
我们引入一个辅助函数
令
这里面对于辅助函数的构造,其中末尾一项是保证当x等于节点中的一个时,误差为0
其中
注意到Rolle定理
φ(x),x∈[a,b],φ(a)=φ(b)=0,其中φ(x)满足连续等条件,则必有ξ∈[a,b],使得φ′(ξ)=0 φ ( x ) , x ∈ [ a , b ] , φ ( a ) = φ ( b ) = 0 , 其 中 φ ( x ) 满 足 连 续 等 条 件 , 则 必 有 ξ ∈ [ a , b ] , 使 得 φ ′ ( ξ ) = 0
以上是关于Lagrange插值的介绍,针对Lagrange插值,节点个数的增加或者减少的时候,插值基函数需要变动,为了解决这一问题,我们引入Newton插值
Nn(x)=a0+a1(x−x0)+⋯+an(x−x0)(x−x1)⋯(x−xn)also defineNn−1(x)=a0+a1(x−x0)+⋯+an−1(x−x0)(x−x1)⋯(x−xn−1)For xi (i=0,1,⋯,n−1) Nn−1(x)=Nn(x)=yiSo Nn(x)−Nn−1(x)=c(x−x0)(x−x1)⋯(x−xn−1)When x=xnNn(xn)−Nn−1(xn)=yn−Nn−1(xn)=c∏i=0n−1(x−xi)We can get c=[yn−Nn−1(x)]∏i=0n−1(x−xi)−1Pay attention to thatNn−1(x)=∑i=0n−1yili(xn)=∑i=0n−1(yi∏k=0,k≠in−1(xn−xkxi−xk))So c=yn∏i=0n−1(xn−xi)−1−Nn−1(xn)∏i=0n−1(xn−xi)−1Nn−1(xn)∏i=0n−1(xn−xi)−1=∑i=0n−1(yi∏k=0,k≠in−1(xn−xkxi−xk))/∏i=0n−1(xn−xi)SoNn−1(xn)∏i=0n−1(xn−xi)−1=−∑i=0n−1(yi∏k=0,k≠in(xi−xk)−1)We can get c=yn∏i=0n−1(xn−xi)−1+∑i=1n−1(yi∏k=0,k≠in(xi−xk)−1)Because of thatWe get. Nn(x)−Nn−1(x)=c∏i=0n−1(x−xi)=[∑i=1n−1(yi∏k=0,k≠in(xi−xk)−1)]∑i=0n−1(x−xi) N n ( x ) = a 0 + a 1 ( x − x 0 ) + ⋯ + a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) a l s o d e f i n e N n − 1 ( x ) = a 0 + a 1 ( x − x 0 ) + ⋯ + a n − 1 ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) F o r x i ( i = 0 , 1 , ⋯ , n − 1 ) N n − 1 ( x ) = N n ( x ) = y i S o N n ( x ) − N n − 1 ( x ) = c ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) W h e n x = x n N n ( x n ) − N n − 1 ( x n ) = y n − N n − 1 ( x n ) = c ∏ i = 0 n − 1 ( x − x i ) W e c a n g e t c = [ y n − N n − 1 ( x ) ] ∏ i = 0 n − 1 ( x − x i ) − 1 P a y a t t e n t i o n t o t h a t N n − 1 ( x ) = ∑ i = 0 n − 1 y i l i ( x n ) = ∑ i = 0 n − 1 ( y i ∏ k = 0 , k ≠ i n − 1 ( x n − x k x i − x k ) ) S o c = y n ∏ i = 0 n − 1 ( x n − x i ) − 1 − N n − 1 ( x n ) ∏ i = 0 n − 1 ( x n − x i ) − 1 N n − 1 ( x n ) ∏ i = 0 n − 1 ( x n − x i ) − 1 = ∑ i = 0 n − 1 ( y i ∏ k = 0 , k ≠ i n − 1 ( x n − x k x i − x k ) ) / ∏ i = 0 n − 1 ( x n − x i ) S o N n − 1 ( x n ) ∏ i = 0 n − 1 ( x n − x i ) − 1 = − ∑ i = 0 n − 1 ( y i ∏ k = 0 , k ≠ i n ( x i − x k ) − 1 ) W e c a n g e t c = y n ∏ i = 0 n − 1 ( x n − x i ) − 1 + ∑ i = 1 n − 1 ( y i ∏ k = 0 , k ≠ i n ( x i − x k ) − 1 ) B e c a u s e o f t h a t W e g e t . N n ( x ) − N n − 1 ( x ) = c ∏ i = 0 n − 1 ( x − x i ) = [ ∑ i = 1 n − 1 ( y i ∏ k = 0 , k ≠ i n ( x i − x k ) − 1 ) ] ∑ i = 0 n − 1 ( x − x i )
这里引入差商(Difference Quotient)的概念
Let. f[x0,⋯,xn]=∑i=1n−1(yi∏k=0,k≠in(xi−xk)−1)Nn(x)=f[x0]+f[x0,x1](x0−x1)+⋯+f[x0,x1,⋯,xn]∏i=0n−1(x−xi)The Difference Quotient is like thatf[xi,xj]=f(xi)−f(xj)xi−xj , f[xi,xj,xk]=f[xi,xj]−f[xj,xk]xi−xk L e t . f [ x 0 , ⋯ , x n ] = ∑ i = 1 n − 1 ( y i ∏ k = 0 , k ≠ i n ( x i − x k ) − 1 ) N n ( x ) = f [ x 0 ] + f [ x 0 , x 1 ] ( x 0 − x 1 ) + ⋯ + f [ x 0 , x 1 , ⋯ , x n ] ∏ i = 0 n − 1 ( x − x i ) T h e D i f f e r e n c e Q u o t i e n t i s l i k e t h a t f [ x i , x j ] = f ( x i ) − f ( x j ) x i − x j , f [ x i , x j , x k ] = f [ x i , x j ] − f [ x j , x k ] x i − x k
我们可以利用这里的差商的概念写出Newton插值公式
其实Newton插值公式和Lagrange插值公式其实本质上是一样的,只不过是书写的方式不同,但是这样的不同的书写方式在实际操作中带来了很大的便利,当需要增加一个插值点的时候,只需要在原插值多项式的后面再添加一个新的项就可以了
有时候我们不但要求插值函数P(x)在节点处的函数值与被插值函数f(x)的值相等,而且要求在节点处的导数值也相等,这就引出了了一种新的插值方案Hermit插值
我们这次要构造的多项式比起之前的lagrange多项式,多了导数值相等的条件,那我们就利用两组基函数来试着构造这一多项式
这里我们需要提及的是,使用上述方法对各个节点进行插值的时候,很有可能在端点处产生一定程度的Runge现象,解决的手段可以使用分段线性插值构造出一系列的分段函数,对于分段线性插值,我们可以理解为对于多个划分的子区间进行Lagrange插值得到的一系列分段函数,当然分段插值也有非线性的,例如分段的二次插值,就是在划分的多个子区间上使用Lagrange2次插值.
这里由于某些教材的不同,可能介绍了Hermit三次插值的方案,在上述的公式中可以令n=1即可.