除了多项式拟合(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中文网其他相关文章!