多項式函數是變量的整數次冪與系數的乘積之和,可以用下面的數學公式表示:
f(x) = a[n]*x^n + a[n-1]*x^(n-1) + … + a[2]*x^2 + a[1]*x + a[0]
由於多項式函數只包含加法和乘法運算,因此它很容易計算,並且可以用於計算其他數學函數的近似值。多項式函數的應用非常廣泛,例如在嵌入式系統中經常會用它計算正弦、余弦等函數。在Numpy中,多項式函數的系數可以用一維數組表示。
例:f(x)=x^3 - 2x + 1可以用下面數組表示,其中a[0]是最高次的系數,a[-1]是常數項,注意x^2的系數為0。
1 #-*- coding:utf-8 -*- 2 3 ''' 4 導入函數庫 5 ''' 6 import numpy as np 7 8 #f(x) = x^3 -2x + 1 9 a = np.array([1,0,-2,1]) 10 #調用poly1d(a)將系數轉換為一元多項式 11 f = np.poly1d(a) 12 print(type(f)) 13 print('傳入值得到的具體結果',f([1,2,3,4])) 14 #多項式的加法 15 newp = f + [1,1,3] 16 print(newp)
多項式對象的deriv()和integ()方法分別計算多項式函數的微分和積分
1 #求微分和積分 2 f.deriv() 3 f.integ()
多項式的根可以用roots()函數來計算
而poly()函數可以將根轉換回多項式的系數
1 roots = np.roots(f) 2 np.poly(roots)
polyfit()函數可以對一組數據使用多項式函數進行擬合,找到和這組數據最接近的多項式的系數。我們來計算-π/2~π/2區間與sin(x)函數最接近的多項式的系數:
1 x = np.linspace(-np.pi/2,np.pi/2, 1000) 2 y = np.sin(x) 3 for arg in [3,5,7]: 4 print(np.polyfit(x, y, arg))
第一步:通過linespace()將-π/2~π/2區間分為1000-1份。
第二步:計算擬合目標函數sin(x)的值。
第三步:將目標函數的數組傳遞給polyfit()進行擬合,第三個參數arg為多項式函數的最高階數。polyfit()所得到的多項式和目標函數在給定的1000個點之間的誤差最小,polyfit()返回多項式的系數數組。
第四步:使用polyval()計算多項式函數的值,並計算與目標函數的差的絕對值。