數值分析-插值法


我們能得到一個函數f在區間[a,b]上某些點的值或者這些點上的高階導數

我們就能通過插值法去得到一個函數g,g與f是非常相近的

一般來說g分為三類,一類是n次多項式 an*xn + an-1*xn-1 + .......+a0,一類是三角多項式,最后一類是分段n次多項式

 

多項式插值

這個可以說是最簡單的插值了

 對於an*xn + an-1*xn-1 + .......+a0,我們有n+1個未知數,我只需要知道n+1個點的函數值就可以解出這n+1個未知數

將解出的值帶入即可

 

優點:簡單粗暴

缺點:要解n+1個方程,時間復雜度較高,n不好確定,若n過大,容易過擬合,若n過小,容易欠擬合

 

拉格朗日插值

先說一階多項式

我們有兩點式

f(x) = yk*(xk+1 - x) / (xk-xk+1) + yk+1*(x-xk) / (xk+1 - xk

此兩點式可以看做∂ * yk + (1-∂) * yk+1

那么自然的在x=xk的時候 ∂=0  在x=xk+1的時候∂=1

這里的∂其實是與x相關的一階多項式

再說二階多項式

對於一個二次函數,我們有三個點(xk-1,yk-1) ,(xk,yk) ,(xk+1,yk+1)

我們有lk-1,lk,lk+1

f(x) = lk-1*yk-1 + lk*yk  +  lk+1*yk+1

其中l是與x相關的二次多項式

我們可以把l當作基函數

這樣的話就有

x = xk-1 時lk-1 = 1, lk=0, lk+1 = 0

x = xk時   lk-1 = 0, lk=1, lk+1 = 0

x = xk+1時lk-1 = 0, lk=0, lk+1 = 1

那么這個插值基函數是很好求的

因為每個插值函數都有兩個零點

對於lk-1來說有零點xk,xk+1

那么lk-1就可以表示為lk-1 = A*(x-xk)*(x-xk+1)

因為x=xk-1時lk-1 = 1

所以A = 1 / ((xk-1 - xk)* (xk-1 - xk+1) )

那么同理lk和lk+1也能求出來了

那我們得到二階的拉格朗日插值多項式

 

現在將二階推廣到n階

得到n接的拉格朗日插值多項式

 

余項:

Rn(x) = f(x) - Ln(x)  Rn(x)表示n次拉格朗日多項式的插值余項

Rn(x) = fn+1(e)/(n+1)!  * wn+1(x)    e屬於[a,b]且依賴與x  wn+1(x) = (x-x0)(x-x1).......(x-xn)

 

 

優點:算法較為簡單

缺點:無法處理動態增加節點的情況

 

牛頓插值

還是先從一階到二階進行說明

我先得到了一階差值多項式P1(x),P1(x) 滿足過點(x1, f(x1)), (x2,f(x2))

假設現在有第三個點(x3,f(x3))我們要通過這個點去得到二階差值多項式P2(x) 使得P2(x)過這三個點

可以設P2(x) = P1(x) + a2*(x-x0)*(x-x1)

通過第三個點解出a2就行了

推廣到多階

那么可以得到Pn(x) = a0 + a1(x-x0) + a2(x-x0)(x-x1) + a3(x-x0)(x-x1)(x-x2) + ......

求這個插值多項式的值可以通過遞推一步一步的求

這樣就實現了動態增刪

可以看到計算ak需要計算(k-1)2次,那么牛頓插值法就是一個快速的計算方法   

 

均差

一階均差  f[x0, xk] = ( f(xk) - f(x0)  ) / (xk - x0)

二階均差  f[x0, x1, x2] = (f[x0, x2] -f[x0, x1]  ) / (x2 - x1)

可以看到一階均差就是簡單的求斜率

二階均差就是對一階均差求斜率

那么k階均差就是

f[x0, x1,,,,,,xk] = (f[x0,,,,,xk-2, xk] -f[x0, ,,,,,,,xk-2,xk-1]  ) / (xk - xk-1)

f[x0, x1,,,,,,xk] = fn(ε) / n!

 

均差的性質

k階均差可表示為f(x0),f(x1), f(x2),,,,,,,,, f(xk)的線性組合

 

 

牛頓插值中的a就是均差,可以從一階開始推,然后使用數學歸納法證明

那么牛頓插值多項式就是:

在計算f[x0,x1,,,,,,,,,,xn]時,一般使用均差表

 

均差表的計算方式為

a[i,j] = (  a[i-1][j] - a[i-1][j-1]  )  / (末尾的x - 最開始的x)

 

 

誤差:

誤差為最后一階的均差 * w(x)

  

優點:可動態增刪節點

缺點:無法處理要求導數相同的情況

 

埃爾米特插值法實驗報告

一個點,多個導數:

牛頓插值中的均差在xi->x0時其實分別是i階導數,這樣就是我們熟悉的泰勒多項式

此時的插值函數就是泰勒多項式

 

兩個點,一個導數

我們有三個條件,也就是說我們能求出三次插值多項式

這時我們先寫出過這兩個點的牛頓插值多項式

在這個多項式的基礎上我們再加上一個三次項

 

搞定,可以觀察到,這三個項數其實可以算是正交的,因為當x=x1或者x=x2時最后一項是0滿足條件的

兩個點,兩個導數

這也是題目所要求的情況

因為有兩個導數,所以牛頓插值法無法解決,這里只能使用基函數方法

設插值函數為H(x), 點與導數分別為(x1,y1,m1),(x2,y2,m2)

H(x)滿足:H(x1) =y1, H(x2) = y2, H(x1)’ = m1,H(x2)=m2

H(x) = a1*x1 + a2*x2 + b1*m1 + b2*m2

其中 a1,  a2,  b1,  b2均為三層插值多項式

X=x1 a1(x1) = 1,a2(x1) = 0, b1(x1) = 0,b2(x1) = 0,a1’(x1) = 1,a2’(x1) = 0

X=x2 a1(x2) = 0,a2(x2) = 1, b1(x2) = 0,b2(x2) = 0,a1’(x2) = 1,a2’(x2) = 0

X=x1 b1’(x1) = 1,b2’(x1) = 0

X=x2b1’(x1) = 0,b2’(x1) = 1

 

然后用了一個很巧妙的方法設基函數,解出來值和就是這樣子的

 

R3(x) = 1/4! * (x-xk)2(x-xk+1)2*f4(ε)

 

 

兩個點,兩個導數2

直接使用泰勒多項式,並把將余項改為未知數,使用多余的一個條件去求余項的值

例如:

求次數小於等於3的多項式P(x),使滿足條件

  P(x0)=f(x0),P'(x0)=f'(x0),P"(x0)=f"(x0),P(x1)=f(x1)。

 

 

 

 

多個點,多個一階導數,三次

兩個點作為一個區間每個區間分別求就好啦

這樣子還保證了導數的連續性

 

優點:可保證一階導數連續

 

三次樣條插值

三次樣條插值就是使用 ax3+bx2+cx + d = 0去做擬合

一共有4個未知數,也就是說 對於每個小區間,我需要至少4個方程

假設我有n個點, 那么就一共有n-1個小區間,一共就是4n - 4個方程

 

因為n個點中,我們有n個點的函數值  n個方程

每個區間相鄰點函數值相等                 n-2個方程

每個區間相鄰點一階導相等      n-2個方程

每個區間相鄰點二階導相等      n-2個方程

 

 

還差兩個條件 

剩下的兩個條件一般為     

  區間兩端點的一階導已知

  區間兩端點的二階導為0

 

那么一共是4n - 2個方程,搞定

 

具體解法:

這里放一個例題

 

 

 

 

 

優點:三次樣條插值得到的插值函數二階導,一階導均連續,此為三次樣條插值的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM