"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso realizar o ajuste de curvas exponenciais e logarítmicas em Python?

Como posso realizar o ajuste de curvas exponenciais e logarítmicas em Python?

Publicado em 2024-11-08
Navegar:510

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

Ajuste de curva: abordagens exponenciais e logarítmicas em Python

Embora o ajuste de curva polinomial esteja prontamente disponível em Python usando polyfit(), este guia explora métodos para curva exponencial e logarítmica ajuste.

Ajuste logarítmico

Para ajustar uma linha da forma y = A B log x, simplesmente execute um ajuste polinomial de y em relação ao 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 um linha da forma y = Ae ^ {Bx}, pegue o logaritmo de ambos os lados e execute um ajuste polinomial 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 melhor precisão , aproveite pesos proporcionais a y usando a palavra-chave w em 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)")

Observe que a maioria aplicativos de planilhas e calculadoras científicas usam uma fórmula não ponderada para regressão exponencial, portanto, evite pesos se desejar compatibilidade.

Usando scipy.optimize.curve_fit

Se o scipy estiver disponível, use curve_fit para ajustar modelos sem transformações.

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

Ao fornecer uma estimativa inicial, curve_fit pode alcançar o mínimo local desejado para ajuste exponencial, resultando em um ajuste mais preciso do que o método polyfit transformado.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3