我有一組資料,我需要比較一些近似函式。
我用于polyfit()對數和指數擬合,但如何將其用于函式a * x ^ m?這是對數回歸的代碼:
x = numpy.array([1, 7, 20, 50, 79])
y = numpy.array([10, 19, 30, 35, 51])
numpy.polyfit(numpy.log(x), y, 1)
array([ 8.46295607, 6.61867463])
#y ≈ 8.46 log(x) 6.62
uj5u.com熱心網友回復:
直接的方法是計算自變數的每個冪的值,然后與系數進行矩陣乘法:
>>> deg = 1
>>> x = np.array([1, 7, 20, 50, 79])
>>> y = np.array([10, 19, 30, 35, 51])
>>> log_x = np.log(x)
>>> p = np.polyfit(log_x, y, deg)
>>> p @ np.vstack([log_x ** i for i in range(deg, -1, -1)])
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])
一個更簡單的方法是使用np.polyval,它是通過一個回圈來計算的:
>>> np.polyval(p, log_x)
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])
但是,NumPy 提倡np.polynomial.Polynomial在新代碼中使用:
>>> p = np.polynomial.Polynomial.fit(log_x, y, deg)
>>> p(log_x)
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473666.html
