"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 se realiza el ajuste de curvas exponencial y logarítmica en Python más allá del ajuste polinómico?

¿Cómo se realiza el ajuste de curvas exponencial y logarítmica en Python más allá del ajuste polinómico?

Publicado el 2024-11-20
Navegar:366

How do you perform exponential and logarithmic curve fitting in Python beyond polynomial fitting?

Ajuste de curvas exponenciales y logarítmicas en Python más allá del ajuste polinomial

Además del ajuste polinómico, que tiene la función polyfit() en Python, existen técnicas para ajustar exponenciales y curvas logarítmicas.

Ajuste de curvas logarítmicas

Para ajustar una curva al modelo y = A B log x, podemos transformar los datos tomando el logaritmo de ambos lados, lo que da como resultado log y = log A B log x. Al ajustar log y contra log x usando polyfit(), obtenemos los coeficientes log A y B.

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("Coefficients:", coeffs)
print("y ≈", coeffs[1], " ", coeffs[0], "log(x)")

Ajuste de curva exponencial

Para ajustar una curva al modelo y = Ae^(Bx), podemos tomar el logaritmo de ambos lados, lo que da como resultado log y = log A B x. Luego, los parámetros se pueden determinar ajustando log y contra x usando polyfit().

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("Coefficients:", coeffs)
print("y ≈", np.exp(coeffs[1]), "*", "exp(", coeffs[0], "x)")

Nota sobre el sesgo en el ajuste no ponderado

Vale la pena señalar que el ajuste no ponderado (sin considerar los pesos de los puntos de datos) puede generar un sesgo hacia valores pequeños, particularmente en el ajuste de curvas exponenciales. Para mitigar esto, se pueden incluir pesos en el proceso de ajuste, proporcionales a los valores de y.

Usar Scipy para el ajuste de curvas

Scipy proporciona la función curve_fit() para realizar un ajuste de curvas no lineal. Esto nos permite ajustar cualquier modelo directamente, sin transformaciones.

from scipy.optimize import curve_fit

# Logarithmic curve fitting
popt, pcov = curve_fit(lambda t, a, b: a   b * np.log(t), x, y)
print("Coefficients:", popt)
print("y ≈", popt[1], " ", popt[0], "log(x)")

# Exponential curve fitting
popt, pcov = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(1, 0.1))
print("Coefficients:", popt)
print("y ≈", popt[0], "*", "exp(", popt[1], "x)")
Ú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