首页  >  文章  >  后端开发  >  除了多项式拟合之外,如何在 Python 中执行指数和对数曲线拟合?

除了多项式拟合之外,如何在 Python 中执行指数和对数曲线拟合?

Linda Hamilton
Linda Hamilton原创
2024-11-04 02:47:29316浏览

How do you perform exponential and logarithmic curve fitting in Python beyond polynomial fitting?

Python 中的指数和对数曲线拟合超越多项式拟合

除了多项式拟合(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 进行曲线拟合

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn