分段二次插值 用Python進行數值計算

2022-03-14 13:17:19 字數 2150 閱讀 8600

事實上在實際使用中,高次插值顯然是很不適合的,高次插值將所有樣點包涵進乙個插值函式中,這是次冪高的原因。高次計算複雜,而且剛開始的一點誤差會被方的很大。因此將整個區間分為若干個小區間,在每乙個小區間進行插值這樣更好,實現容易,也方便在一些嵌入式裝置上使用。有不少需要插值方法的場景是在嵌入式的應用中。

我以等距節點的二次插值為例,以每三個節點為乙個子區間。

等距節點二次插值很好寫,由於每個區間只有三個插值節點,計算差商也不必使用拉格朗日插值中使用的遞迴,直接列表示式也很簡單(實際上等距節點二次插值就是只有三個節點的拉格朗日插值,只是此時在定義域內,有很多個拉格朗日插值函式,每個子區間對應乙個)。遞迴的***相當的明顯,儘管寫成尾遞迴可以減小***,但是能避免遞迴還是避免吧。

分段插值函式可以表示為:

每乙個插值函式表示式:

如上,不需要用遞迴求差商,方便很多。乙個函式即可搞定。

"""

@brief: 獲得分段二次插值函式

@param: x 插值節點的橫座標集合

@param: fx 插值節點的縱座標集合

@return: 引數所指定的插值節點集合對應的插值函式

''' 插值節點, 這裡用二次函式生成插值節點,每兩個節點x軸距離位10 '''

sr_x = [i for i in range(-50, 51, 10)]

sr_fx = [i**2 for i in sr_x]

lx = get_sub_two_interpolation_func(sr_x, sr_fx) # 獲得插值函式

tmp_x = [i for i in range(-45, 45)] # 測試用例

tmp_y = [lx(i) for i in tmp_x] # 根據插值函式獲得測試用例的縱座標

''' 畫圖 '''

import matplotlib.pyplot as plt

plt.figure("play")

ax1 = plt.subplot(111)

plt.sca(ax1)

plt.plot(sr_x, sr_fx, linestyle = ' ', marker='o', color='b')

plt.plot(tmp_x, tmp_y, linestyle = '--', color='r')

plt.show()

插值函式影象:

分段二次插值例題 分段三次插值

摘 要用函式來表示變數間的數量關係廣泛應用於各學科領域,但是在實際 問題中,往往是通過實驗 觀測以及計算等方法,得到的是函式在一些點 上的函式值。如何通過這些離散資料找到函式的乙個滿足精度要求且便於 使用的近似表示式,是經常遇到的問題。對於這類問題我們解決的方法為插值法,而最常用也最簡單的插值方 法...

二次樣條插值

encoding utf 8 import numpy as np import matplotlib.pyplot as plt 關鍵點 x 2.0,4.5,7.0,9.0,11.0 y 1.5,2.5,1.5,0.5,5.0 def main 檢查長度 if len x len y print ...

拉格朗日插值 分段線性插值 三次樣條插值

本篇主要介紹在三種插值方法 拉格朗日插值 分段線性插值 三次樣條插值,以及這三種方法在matlab中如何實現。令上式稱為 matlab沒有現成的lagrange函式,需要手動寫,如下 x0,y0為原始座標點,維度必須相同。x為待插值的點。y是返回值,是最終插值結果。function y lagran...