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

Linda Hamilton
Release: 2024-10-28 13:55:30
Original
845 people have browsed it

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!