除了多項式擬合(Python 中具有polyfit() 函數)之外,還存在指數擬合技術和對數曲線。
為了將曲線擬合到模型y = A B log x,我們可以透過取兩邊的對數來轉換數據,得到log y =對數A B 對數x。透過使用 polyfit() 來擬合 log y 與 log x,我們得到係數 log A 和 B。
<code class="python">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)")</code>
將曲線擬合到模型 y = Ae^ (Bx) 兩邊取對數,得到 log y = log A B x。然後可以透過使用 polyfit() 對 x 擬合 log y 來確定參數。
<code class="python">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)")</code>
值得注意的是,未加權擬合(不考慮數據點)可能會導致對小值的偏差,特別是在指數曲線擬合中。為了緩解這種情況,可以在擬合過程中包含與 y 值成比例的權重。
Scipy 提供 curve_fit() 函數來執行非線性曲線擬合。這使我們能夠直接擬合任何模型,無需轉換。
<code class="python">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)")</code>
以上是除了多項式擬合之外,如何在 Python 中執行指數和對數曲線擬合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!