插值與擬合的概念
首先對兩種說法進行闡明。
插值:做一條指定類型的曲線(如多項式),使其通過所有數據點。
擬合:做一條指定類型的曲線,使其在一定意義下逼近該組數據點。
兩種概念的不同,可以看到,對於插值,很可能會出現對所有數據點都通過,但是並不一定很好的擬合真實數據的情況。
幾種常見插值方法
下給定如下插值的數學語言表示:
代數多項式插值
Lagrange插值
Lagrange插值是一種線性插值,其具體定義如下:
上述定義含義,即Lagrange插值是構造一個線性多項式,使得通過所有的數據點。
此外,根據定義,Lagrange插值存在着缺陷:如果數據點增加,就需要重新計算插值基函數。
Newton插值
Lagrange插值存在的缺點,Newton插值借助差商來優化。
那么什么是差商呢?
由差商概念,引出Newton插值公式為:
借用這種方式,即使節點增加,原計算結果仍有用,新節點的計算借助於原節點的差商結果。
Hermite插值
分段插值
由於Lagrange高次多項式插值存在Runge現象,這個會在后面說明。為了緩解這一問題,采用分段低次插值。
分段線性插值
分段線性插值的基本思想實際上是用一個低次分段函數來插值兩個數據點。
分段拋物插值
分段三次Hermite保形插值
該方法有要求限定,即需要在分段點處連續可導。然后再每兩個相鄰數據點之間采用三次Hermite插值。
三次樣條插值
樣條插值的曲線是二階導數連續的插值曲線,其定義為:
等距插值的問題----Runge現象
對於等間距插值,會引發Runge現象,在mathmatic中運行下圖程序,具體表現為:
可以看到,在邊緣處,會產生震盪,難以擬合整個函數曲線,且數據點越多,震盪越劇烈。可見多項式插值並不能很好的收斂到函數本身。
幾種常見插值的python實現
代碼后面補上。