Home >Backend Development >Python Tutorial >How can I perform exponential and logarithmic curve fitting in Python?
While polynomial curve fitting is readily available in Python using polyfit(), this guide explores methods for exponential and logarithmic curve fitting.
To fit a line of the form y = A B log x, simply perform a polynomial fit of y against log x.
<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("y ≈", coeffs[1], "log(x) +", coeffs[0]) # y ≈ 8.46 log(x) + 6.62</code>
To fit a line of the form y = Ae^{Bx}, take the logarithm of both sides and perform a polynomial fit of log y against x.
<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("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 0.670 * exp(0.105 * x)")</code>
For better accuracy, leverage weights proportional to y using the w keyword in polyfit().
<code class="python">coeffs = np.polyfit(x, np.log(y), 1, w=np.sqrt(y)) print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 4.12 * exp(0.0601 * x)")</code>
Note that most spreadsheet and scientific calculator applications use an unweighted formula for exponential regression, so avoid weights if compatibility is desired.
If scipy is available, use curve_fit for fitting models without transformations.
<code class="python">from scipy.optimize import curve_fit # Logarithmic fitting coeffs, _ = curve_fit(lambda t, a, b: a + b * np.log(t), x, y) print("y ≈", coeffs[1], "log(x) +", coeffs[0]) # y ≈ 6.62 + 8.46 log(x) # Exponential fitting with initial guess coeffs, _ = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(4, 0.1)) print("y ≈", coeffs[0], "exp(", coeffs[1], " * x) = 4.88 exp(0.0553 x)")</code>
By providing an initial guess, curve_fit can reach the desired local minimum for exponential fitting, resulting in a more accurate fit than the transformed polyfit method.
The above is the detailed content of How can I perform exponential and logarithmic curve fitting in Python?. For more information, please follow other related articles on the PHP Chinese website!