Maison > Article > développement back-end > Comment effectuer un ajustement de courbe exponentielle et logarithmique en Python au-delà de l'ajustement polynomial ?
En plus de l'ajustement polynomial, qui a la fonction polyfit() en Python, il existe des techniques d'ajustement exponentiel et courbes logarithmiques.
Pour ajuster une courbe au modèle y = A B log x, nous pouvons transformer les données en prenant le logarithme des deux côtés, ce qui donne log y = journal A B journal x. En ajustant log y contre log x à l'aide de polyfit(), nous obtenons les coefficients log A et B.
<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("Coefficients:", coeffs) print("y ≈", coeffs[1], "+", coeffs[0], "log(x)")</code>
Pour ajuster une courbe au modèle y = Ae^ (Bx), nous pouvons prendre le logarithme des deux côtés, ce qui donne log y = log A B x. Les paramètres peuvent ensuite être déterminés en ajustant le log y par rapport à x à l'aide de polyfit().
<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("Coefficients:", coeffs) print("y ≈", np.exp(coeffs[1]), "*", "exp(", coeffs[0], "x)")</code>
Il convient de noter que l'ajustement non pondéré (sans tenir compte des poids de les points de données) peuvent conduire à un biais vers de petites valeurs, en particulier dans l'ajustement de courbe exponentielle. Pour atténuer cela, des poids peuvent être inclus dans le processus d'ajustement, proportionnels aux valeurs y.
Scipy fournit la fonction curve_fit() pour effectuer un ajustement de courbe non linéaire. Cela nous permet d'adapter n'importe quel modèle directement, sans transformations.
<code class="python">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)")</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!