"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo realizar un ajuste de curvas exponencial y logarítmica en Python?

¿Cómo puedo realizar un ajuste de curvas exponencial y logarítmica en Python?

Publicado el 2024-11-08
Navegar:297

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

Ajuste de curvas: enfoques exponenciales y logarítmicos en Python

Si bien el ajuste de curvas polinómicas está disponible en Python usando polyfit(), esta guía explora métodos para curvas exponenciales y logarítmicas ajuste.

Ajuste logarítmico

Para ajustar una línea de la forma y = A B log x, simplemente realizar un ajuste polinomial de y contra log x.

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

Ajuste exponencial

Para ajustar un recta de la forma y = Ae^{Bx}, toma el logaritmo de ambos lados y realiza un ajuste polinómico de log y contra x.

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)")

Para una mayor precisión , aproveche los pesos proporcionales a y usando la palabra clave w en polyfit().

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)")

Tenga en cuenta que la mayoría Las aplicaciones de hojas de cálculo y calculadoras científicas utilizan una fórmula no ponderada para la regresión exponencial, así que evite las ponderaciones si desea compatibilidad.

Uso scipy.optimize.curve_fit

Si scipy está disponible, use curve_fit para ajustar modelos sin transformaciones.

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)")

Al proporcionar una suposición inicial, curve_fit puede alcanzar el mínimo local deseado para el ajuste exponencial, lo que da como resultado un ajuste más preciso que el método polifit transformado.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3