拉格朗日插值Python代碼實現

來源:互聯網
上載者:User

標籤:org   3.3   對象   2.0   應用   特性   網站   官方網站   class   

1. 數學原理

對某個多項式函數有已知的k+1個點,假設任意兩個不同的都互不相同,那麼應用拉格朗日插值公式所得到的拉格朗日插值多項式為:

  其中每個lj(x)為拉格朗日基本多項式(或稱插值基函數),其運算式為:

 

2. 輕量級實現

 利用

直接編寫程式,可以直接插值,並且得到對應的函數值。但是不能得到係數,也不能對其進行各項運算。

def h(x,y,a):    ans=0.0     for i in range(len(y)):        t=y[i]        for j in range(len(y)):            if i !=j:                t*=(a-x[j])/(x[i]-x[j])        ans +=t    return ansx=[1,0]y=[0,2]print(h(x,y,2))

 上述代碼中,h(x,y,a)就是插值函數,直接調用就行。參數說明如下:

  • x,y分別是對應點的x值和y值。具體詳解下解釋。
  • a為想要取得的函數的值。

事實上,最簡單的拉格朗日插值就是兩點式得到的一條直線。

例如:

p點(1,0)q點(0,2)

這兩個點決定了一條直線,所以當x=2的時候,y應該是-2

該代碼就是利用這兩個點插值,然後a作為x=2調用函數驗證的。

3. 引用庫3.1 庫的安裝

主要依賴與 scipy。官方網站見:https://www.scipy.org/install.html

安裝的方法很簡單,就是使用pip install scipy 如果失敗,則將whl檔案下載到本地再利用命令進行安裝。

可能如果沒有安裝numpy

3.2 庫的使用

from scipy.interplotate import lagrange

直接調用lagrange(x,y)這個函數即可,返回 一個對象。

參數x,y分別是對應各個點的x值和y值。

例如:(1,2) (3,5) (5,9)這三個點,作為函數輸入應該這麼寫:

x=[1,3,5]

y =[2, 5, 9]

a=lagrange(x,y)

直接輸出該對象,就能看到插值的函數。

利用該對象,能得到很多特性。具體參見:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.poly1d.html

  • a.order得到階
  • a[]得到係數
  • a()得到對應函數值
  • 此外可以對其進行加減乘除運算
3.3 代碼實現
from scipy.interpolate import lagrangex=[1,2,3,4,7]y=[5,7,10,3,9]a=lagrange(x,y)print(a)print(a(1),a(2),a(3))print(a[0],a[2],a[3])

結果是:

<class ‘numpy.lib.polynomial.poly1d‘> 4
            4            3              2
0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13
5.0 7.0 10.0
28.1333333333 30.6527777778 -7.30555555556

解釋:

<class ‘numpy.lib.polynomial.poly1d‘> 4

這一行是輸出a的類型,以及最高次冪。

              4            3              2
0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13

第二行和第三行就是插值的結果,顯示出的函數。

第二行的數字是對應下午的x的冪,如果對應不齊,則是排版問題。

5.0 7.0 10.0

第四行是代入的x值,得到的結果。

也就是說,用小括弧f(x)的這種形式,可以直接得到計算結果。

28.1333333333 30.6527777778 -7.30555555556

最後一行是提取出的係數。也就是說,可以用f[a]這種形式,來提取出來對應冪的係數。

拉格朗日插值Python代碼實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.