Home  >  Article  >  Backend Development  >  How can I perform exponential and logarithmic curve fitting in Python?

How can I perform exponential and logarithmic curve fitting in Python?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 13:55:30845browse

How can I perform exponential and logarithmic curve fitting in Python?

Curve Fitting: Exponential and Logarithmic Approaches in Python

While polynomial curve fitting is readily available in Python using polyfit(), this guide explores methods for exponential and logarithmic curve fitting.

Logarithmic 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>

Exponential Fitting

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.

Using scipy.optimize.curve_fit

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn