Während die Polynomkurvenanpassung in Python mit polyfit() leicht verfügbar ist, werden in diesem Handbuch Methoden für exponentielle und logarithmische Kurven untersucht Anpassung.
Um eine Linie der Form y = anzupassen A B log x, führen Sie einfach eine Polynomanpassung von y gegen log x durch.
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
Um a anzupassen Linie der Form y = Ae^{Bx}, nehmen Sie den Logarithmus beider Seiten und führen Sie eine Polynomanpassung von log y gegen durch 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)")
Für eine bessere Genauigkeit , nutzen Sie Gewichtungen proportional zu y mithilfe des Schlüsselworts w in 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)")
Beachten Sie, dass die meisten Tabellenkalkulations- und wissenschaftliche Taschenrechneranwendungen verwenden eine ungewichtete Formel für die exponentielle Regression. Vermeiden Sie daher Gewichtungen, wenn Kompatibilität gewünscht wird.
Wenn Scipy verfügbar ist, verwenden Sie Curve_fit zum Anpassen von Modellen ohne Transformationen.
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)")
Durch die Bereitstellung einer anfänglichen Vermutung kann Curve_fit erreichen das gewünschte lokale Minimum für die exponentielle Anpassung, was zu einer genaueren Anpassung als die transformierte Polyfit-Methode führt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3