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!