數值分析讀書筆記(5)數值逼近問題(I)—-插值極其數值計算
給出一般性的插值概念
給定f(x),x∈[a,b] ,已知它在n+1個互異的節點x0,x1,… 上的函數值爲y0,y1,…
目的即尋求φ(x) ,使得φ(xi)=f(xi)=yi
令所有的φ(x) 組成Φ ,通常Φ 是有限維線性空間,記
Φ=span{φi(x)}ni=0
其中φi(x) 爲一組基, 於是有φ(x)=∑i=0naiφi(x)
故我們可以利用序列{ai}ni=0 來確定φ(x) , 這裏的φ(x) 就是插值函數
通過概念我們可以看出來,目的就是讓插值函數去接近給定的函數
1.關於多項式插值
當給定插值函數是多項式函數的時候, 我們可以產生一種插值的方案, 下面介紹一下Lagrange插值
令P(x)=a0+a1x+a2x2+⋯+anxn=∑ni=0aixi
由於
P(xi)=yi,i=0,1,2,…,n
⎧⎩⎨⎪⎪⎪⎪a0+a1x0+⋯+anxn0⋮a0+a1xn+⋯+anxnn=y0=y0
得係數陣爲A=⎛⎝⎜⎜1⋮1x0⋮xn⋯⋱⋯xn0⋮xnn⎞⎠⎟⎟
由Vandermonde行列式的特性,我們可以知道|A|=∏0≤i<j≤n(xj−xi)
若xi 互異,則有唯一解
構造插值基函數li(xj)=δij={10i=ji≠j
i≠j 時,li(xj)=0 ,故
li(x)=ci∏k=0,k≠in(x−xk)
又對於ci 由於li(xj)=1 當僅當i=j ,故
li(xi)=ci∏k=0,k≠in(xi−xk)=1
所以可以得到ci=∏k=0,k≠in(xi−xk)−1
我們將ci 回代回去,則有
li(x)=∏k=0,k≠in(x−xk)(xi−xk)
令Ln(x)=∑i=0nyili(x)=∑i=0n(yi∏k=0,k≠in(x−xk)(xi−xk))
上式即爲所求的Lagarange插值函數
這裏爲了運算記錄方便, 記
ωn+1(x)=∏k=0n(x−xk)
則有
ω′n+1(xi)=∏k=0,k≠in(xi−xk),ωn+1(x)x−xi=∏k=0,k≠in(x−xk)
故
Ln(x)=∑i=0n(yiωn+1(x)(x−xi)ω′n+1(xi))
下面繼續討論Lagrange插值的誤差,引入誤差餘項
R(x)≡f(x)−Ln(x)
我們引入一個輔助函數
令
F(t)=f(t)−Ln(t)−K(x)ωn+1(t),t∈[a,b],x≠xi,i=0,1,2,…
這裏面對於輔助函數的構造,其中末尾一項是保證當x等於節點中的一個時,誤差爲0
其中
K(x)ωn+1(x)=f(x)−Ln(x)
t=x0,x1,…,xn
是輔助函數的n+2個相異的零點
注意到Rolle定理
φ(x),x∈[a,b],φ(a)=φ(b)=0,其中φ(x)滿足連續等條件,則必有ξ∈[a,b],使得φ′(ξ)=0
F(t)=f(t)−Ln(t)−K(x)ωn+1(t),對F(t),F′(t),....應用Rolle定理
必有ξ∈[a,b],使得F(n+1)(ξ)=0,故f(n+!)(ξ)−K(x)(n+1)!=0故K(x)=f(n+1)(x)(n+1)!從而Rn(x)=f(n+1)(x)(n+1)!ωn+!(x)
以上是關於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)
這裏引入差商(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
我們可以利用這裏的差商的概念寫出Newton插值公式
Nn(x)=f(x0)+f[x0,x1](x0−x1)+⋯+f[x0,x1,⋯,xn](x−x0)(x−x1)⋯(x−xn−1)
其實Newton插值公式和Lagrange插值公式其實本質上是一樣的,只不過是書寫的方式不同,但是這樣的不同的書寫方式在實際操作中帶來了很大的便利,當需要增加一個插值點的時候,只需要在原插值多項式的後面再添加一個新的項就可以了
有時候我們不但要求插值函數P(x)在節點處的函數值與被插值函數f(x)的值相等,而且要求在節點處的導數值也相等,這就引出了了一種新的插值方案Hermit插值
Given f(x), and n+1 different points x0,x1,⋯,xnLet f(xi)=yi f′(xi)=y′iWe can construct a polynomialH2n+1(xi)=yi H′2n+1(xi)=y′i
我們這次要構造的多項式比起之前的lagrange多項式,多了導數值相等的條件,那我們就利用兩組基函數來試着構造這一多項式
l0j(xi)=δij, l′0j(xi)=0l1j(xi)=0, l′1j(xi)=δijSo we get the simple polynomial : H2n+1(x)=∑j=0nyjl0j(x)+∑j=0ny′jl1j(x)When i≠j ,l0j(xi) and l0j(xi)′ always equal zeroBecause of that ,Assume l0j(x)=(ax+b)l2j(x){(axj+b)l2j(xj)=1lj(xj)[alj(xj)+2(axj+b)l′j(xj)]=0(3)(4)About the second formula , turned from "al2j(xj)+2lj(xj)l′j(xj)(axj+b)"That means we just to solve the following:axj+b=1 and a+2(axj+b)l′j(xj)=0We get that : a=−2l′j(xj), b=1+2xjl′j(xj)Similarly l1j(x)=(cx+d)lj(xj)And we also get c=1 and d=−xjSo we can easily build H2n+1(x)The result is that H2n+1(x)=∑j=0nyj[2(xj−x)l′j(x)+1]l2j(x)+∑j=0ny′j[(x−xj)l2j(x)]Do some job about making formula neatWe get that H2n+1(x)=∑j=0nl2j(x)[yj+(x−xj)(y′j−2yj)l′j(xj)]
這裏我們需要提及的是,使用上述方法對各個節點進行插值的時候,很有可能在端點處產生一定程度的Runge現象,解決的手段可以使用分段線性插值構造出一系列的分段函數,對於分段線性插值,我們可以理解爲對於多個劃分的子區間進行Lagrange插值得到的一系列分段函數,當然分段插值也有非線性的,例如分段的二次插值,就是在劃分的多個子區間上使用Lagrange2次插值.
這裏由於某些教材的不同,可能介紹了Hermit三次插值的方案,在上述的公式中可以令n=1即可.