一、簡介
Numpy是一個功能強大的Python科學計算庫,其中包含了很多常用的數學函數和方法。其中numpy.polyfit函數就是一個非常常用的函數,它可以用於多項式擬合。多項式擬合是指將一組數據用一個n階多項式進行擬合,得到一個多項式函數,從而實現對數據的擬合和預測的目的。其中n階多項式的係數就是擬合函數的參數。
二、numpy.polyfit函數使用方法
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
1. 參數說明
- x:1-D或2-D數組表示的x坐標系的數據。
- y:1-D數組,表示y坐標系的數據,與x的維度也應該一致。
- deg:擬合多項式的階數,即多項式的次數。
- rcond:用於確定奇異值的容差。也就是說,如果最小奇異值已經小於這個容差值,那麼將放棄行列式的計算。默認值是len(x)*eps,其中eps是浮點數的機器精度。
- full:如果為True,則返回擬合函數的一些附加信息,包括擬合殘差、排名、奇異值和秩的值。默認值是False。
- w:與y具有相同長度的1-D數組或None,用於指定相應的y值的權重。默認是None。
- cov:如果為True,返回擬合確信度的協方差矩陣。默認值是False。
2. 返回值
擬合函數的參數。在多項式擬合中,返回值是一個1-D數組,其中第一個元素是最高階項(x^deg)的係數,最後一個元素是常數項係數。注意:返回值是p[::-1]。
3. 代碼實現
import numpy as np # 利用numpy.polyfit函數進行一階多項式擬合,得到函數f x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) f = np.polyfit(x, y, 1) # 繪製擬合後的曲線 import matplotlib.pyplot as plt plt.plot(x, y, 'o', label='Original data', markersize=10) plt.plot(x, np.polyval(f, x), 'r', label='Fitted line') plt.legend() plt.show()
三、numpy.polyfit函數在多項式擬合中的應用
1. 用一階多項式擬合數據
一階多項式指的是y = kx + b,即直線函數。利用numpy.polyfit函數可以方便地進行直線擬合,代碼實現如下:
import numpy as np import matplotlib.pyplot as plt # 原始數據 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) # 擬合函數 f = np.polyfit(x, y, 1) # 繪製擬合結果 plt.plot(x, y, 'o', label='Original data', markersize=10) plt.plot(x, np.polyval(f, x), 'r', label='Fitted line') plt.legend() plt.show()
2. 用高階多項式擬合數據
除了一階多項式外,還可以用高階多項式(例如二次函數、三次函數等)進行數據擬合。
import numpy as np import matplotlib.pyplot as plt # 原始數據 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 6, 9, 10, 11]) # 二次函數擬合 f = np.polyfit(x, y, 2) # 繪製擬合結果 plt.plot(x, y, 'o', label='Original data', markersize=10) plt.plot(x, np.polyval(f, x), 'r', label='Fitted line') plt.legend() plt.show()
3. 用numpy.polyfit對非線性數據進行擬合
除了對線性數據的擬合外,還可以利用numpy.polyfit函數對非線性數據進行擬合,例如下圖所示的非線性函數擬合:
import numpy as np import matplotlib.pyplot as plt # 原始數據 x = np.array([1, 2, 3, 4, 5]) y = np.array([10, 17, 25, 37, 50]) # 擬合函數(使用3階多項式) f = np.polyfit(x, y, 3) # 繪製擬合結果 xp = np.linspace(0, 6, 100) plt.plot(x, y, 'o', label='data', markersize=10) plt.plot(xp, np.polyval(f, xp), 'r', lw=2.5, label='fit') plt.legend() plt.show()
四、綜合實例:用numpy.polyfit進行黃金分割數擬合
黃金分割數是指將一條線段分割為兩部分,較大部分與整條線段之比等於較小部分與較大部分之比,其值約為1.6180339887。利用numpy.polyfit函數,可以方便地對黃金分割數進行擬合,從而得到它的近似值。
import numpy as np import matplotlib.pyplot as plt # 生成黃金分割數列 x = np.arange(1, 50) y = x[:-1] / x[1:] # 擬合函數 f = np.polyfit(x[:-1], y, len(x)-2) # 繪製擬合結果 plt.plot(x, y, 'ro', label='Golden ratio', markersize=7) plt.plot(x[:-1], np.polyval(f, x[:-1]), 'b', label='Fitted curve') plt.legend() plt.show()
五、總結
本文通過介紹numpy.polyfit函數的參數、返回值以及應用實例,詳細闡述了如何使用該函數進行多項式擬合,以及如何將其應用於非線性數據擬合和特定場景中的實際問題,從而使讀者能夠更加深入地理解和使用Python中的numpy庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186719.html