除了Python 中具有polyfit() 函數的多項式擬合之外,還存在指數擬合技術和對數曲線。
將曲線擬合到模型y = A B log x,我們可以將資料兩邊取對數進行變換,得到log y = log A B log x。透過使用 polyfit() 將 log y 與 log x 擬合,我們得到係數 log A 和 B。
import numpy as np
x = np.array([1, 7, 20, 50, 79])
y = np.array([10, 19, 30, 35, 51])
coeffs = np.polyfit(np.log(x), y, 1)
print("Coefficients:", coeffs)
print("y ≈", coeffs[1], " ", coeffs[0], "log(x)")
將曲線擬合到模型y = Ae^(Bx),我們可以兩邊取對數,得到log y = log A B x。然後可以透過使用 polyfit().
x = np.array([10, 19, 30, 35, 51])
y = np.array([1, 7, 20, 50, 79])
coeffs = np.polyfit(x, np.log(y), 1)
print("Coefficients:", coeffs)
print("y ≈", np.exp(coeffs[1]), "*", "exp(", coeffs[0], "x)")
值得注意的是,未加權擬合(不考慮資料點的權重)可能會導致對小值的偏差,特別是在指數曲線擬合中。為了緩解這種情況,可以在擬合過程中包含與 y 值成比例的權重。
Scipy 提供 curve_fit() 函數來執行非線性曲線擬合。這允許我們直接擬合任何模型,無需轉換。
from scipy.optimize import curve_fit
# Logarithmic curve fitting
popt, pcov = curve_fit(lambda t, a, b: a b * np.log(t), x, y)
print("Coefficients:", popt)
print("y ≈", popt[1], " ", popt[0], "log(x)")
# Exponential curve fitting
popt, pcov = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(1, 0.1))
print("Coefficients:", popt)
print("y ≈", popt[0], "*", "exp(", popt[1], "x)")
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3