Zusätzlich zur Polynomanpassung, die in Python über die Funktion polyfit() verfügt, gibt es Techniken zur exponentiellen Anpassung und logarithmische Kurven.
Um eine Kurve an das Modell y = A B log x anzupassen, können wir die Daten transformieren, indem wir den Logarithmus beider Seiten nehmen, was zu log y = führt log A B log x. Durch Anpassen von log y an log x mit polyfit() erhalten wir die Koeffizienten log A und 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)")
Um eine Kurve an das Modell y anzupassen = Ae^(Bx), können wir den Logarithmus beider Seiten nehmen, was zu log y = log A B x führt. Die Parameter können dann durch Anpassen von log y an x mithilfe von polyfit() ermittelt werden.
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)")
Es ist erwähnenswert, dass eine ungewichtete Anpassung (ohne Berücksichtigung der Gewichtungen der Datenpunkte) zu einer Verzerrung hin zu kleinen Werten führen kann, insbesondere bei der exponentiellen Kurvenanpassung. Um dies zu mildern, können Gewichte proportional zu den y-Werten in den Anpassungsprozess einbezogen werden.
Scipy stellt die Funktion „curve_fit()“ zur Durchführung einer nichtlinearen Kurvenanpassung bereit. Dadurch können wir jedes Modell direkt und ohne Transformationen anpassen.
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)")
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