Além do ajuste polinomial, que tem a função polyfit() em Python, existem técnicas para ajuste exponencial e curvas logarítmicas.
Para ajustar uma curva ao modelo y = A B log x, podemos transformar os dados tomando o logaritmo de ambos os lados, resultando em log y = log A B log x. Ajustando log y contra log x usando polyfit(), obtemos os coeficientes log A e 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)")
Para ajustar uma curva ao modelo y = Ae^(Bx), podemos pegar o logaritmo de ambos os lados, resultando em log y = log A B x. Os parâmetros podem então ser determinados 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)")
Vale a pena notar que o ajuste não ponderado (sem considerar os pesos dos pontos de dados) pode levar a um viés para valores pequenos, especialmente no ajuste de curva exponencial. Para mitigar isso, pesos podem ser incluídos no processo de ajuste, proporcionais aos valores de y.
Scipy fornece a função curve_fit() para realizar ajuste de curva não linear. Isso nos permite ajustar qualquer modelo diretamente, sem transformações.
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)")
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