線性插值, 雙線性插值講解


1 線性插值(Linear Interpolation):

  原理:已知一組(x, y)數據點,如[(x0, y0), (x1, y1), ......, (xn, yn)],通過在每一對點之間建立直線方程,來求解出未知點x所對應的y值,如圖1.1,圖1.2所示:

  *注:該方式其實也就是線性樣條法,這與如Lagrange插值的插值方式,有一個本質性的區別。

    對多個點使用Lagrange插值,其實是使用 “1個” 綜合性的多項式,來擬合出一個過這些點的曲線;

    使用線性樣條,則是通過使用 “多個” 更為簡單基本的多項式,來擬合出一個曲線。

圖1.1

圖1.2

  如上圖中的例子,已知數據 (x2, y2) 與 (x3, y3),要計算 [x2, x3] 區間內某一位置 x 在直線上的y值,則根據(x2, y2) 與 (x3, y3)兩點,得出直線方程公式1:

公式1

  變換一下,即的到公式2:

(*:其實這就是2個點情況下的Lagrange插值公式)

公式2

  因此,在代碼實現時,可以通過對每段區間應用公式2,即可計算出每個區間內的線性插值結果。

  *注:其實就是對“每個”區間段,使用2個點情況下的Lagrange插值公式,從而得到“每個”區間段的一個多項式,這些多項式組成的方程組,即完整的曲線公式。

 

  在具體的代碼實現中,有一個比較麻煩的地方是如何快速的確定出x在哪一個(x_i, y_i)區間,如圖1.3所示,對於該問題,我采用了"二分法"進行的搜索,這相比於直接遍歷搜索,能夠很好的提高區間搜索的時間效率

圖1.3

  對於落在插值點之外的情況,需要進行“外推”計算,如圖1.4所示(*:像上面講的那種待求解點位於插值點范圍內的情況所進行的插值運算,我們一般也可稱為“內插”)

 

圖1.4

  外推法一般預測的誤差比較大。一般應用中,我們可以選擇下面如圖1.5(最鄰近插值的方式),1.6(繼續使用線性方式進行外推)所示的兩種外推方式:

圖1.5 對范圍之外的點,使用最鄰近插值

圖1.6 繼續使用線性方式進行外推

 

2 雙線性插值(Bilinear Interpolation):

  原理:雙線性插值,其實就是線性插值在2維數據空間上的拓展

  如圖2.1所示,先在x方向上:

   對點(x0, y0),(x1, y0)進行1次線性插值,得到點(x, y0)的值z_0
   對點(x0, y1),(x1, y1)進行1次線性插值,得到點(x, y1)的值z_1

圖2.1

  接着,如圖2.2所示,在y方向上:

   對點(x, y0),(x, y1)進行1次線性插值,得到點(x, y)的值z

圖2.2

    總計使用了3次線性插值

    如圖2.3,圖2.4所示,是更為詳細的數據產生過程圖

圖2.3

圖2.4

   對於落在插值點之外的情況,需要進行“外推”計算,總共有8個區域,如圖2.5中的棕色區域所示

圖2.5 對邊界之外的區域,可以使用最鄰近方式、線性方式進行外推計算

   使用最鄰近方式進行外推,如圖2.6所示:

 

圖2.6 使用最鄰近方式外推

  使用線性方式進行外推,如圖2.7所示:

圖2.7 使用線性方式外推

 

3 ***思考過程中產生的一些誤區:

  這里有一個我在看插值算法過程中,所產生過的一個思維錯誤,在這里分享一下:

  為什么如圖3.1的方式,不能做到2-D數據的線性插值?

圖3.1

   原因:

  如圖3.2所示,若采用上面的那種思路,則則在(x, y)處,則沒有值可計算了,因為2維空間(x, y)對應的是一個面,因此待求解的坐標點所在區間其實是一個面區域,因此,上述那種思路,其實只能投影到面區域中的一條線上,這是錯誤的

圖3.2

  本文原創,轉載請注明出處

 


免責聲明!

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



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