Ich verwende derzeit numpy.polyfit (x, y, deg), um ein Polynom an experimentelle Daten anzupassen. Ich würde jedoch gerne ein Polynom anpassen, das die Gewichtung basierend auf den Fehlern der Punkte verwendet.
Ich habe gefunden scipy.curve_fit , die Gewichte verwendet, und ich nehme an, ich könnte einfach die Funktion "f" auf die Form eines Polynoms meiner gewünschten Ordnung setzen, und meine Gewichte in "Sigma" setzen, was mein Ziel erreichen sollte.
Ich frage mich, gibt es eine andere, bessere Möglichkeit, das zu tun?
Vielen Dank.
Sehen Sie sich Ссылка an, insbesondere den Abschnitt "Macht ein Macht-Gesetz zu Daten mit Fehlern" . Es zeigt, wie man scipy.optimize.leastsq mit einer Funktion verwendet, die eine Fehlerbewertung enthält.
Für die gewichtete Polynomanpassung können Sie verwenden:
%Vor%siehe Ссылка
Wichtig: In dieser Funktion sollten die Gewichte nicht als 1/variance
angegeben werden (was in vielen gewichteten Anwendungen die übliche Form ist), sondern als 1/sigma
Obwohl curve_fit
und leastsq
viel allgemeinere und leistungsfähigere Optimierungstools sind als polyfit
(da sie nur any Funktion anpassen können), hat polyfit
den Vorteil, dass es nachgibt eine (exakte) analytische Lösung und ist daher wahrscheinlich viel schneller als iterative Approximationsmethoden wie curve_fit
und leastsq
- insbesondere im Falle der Anpassung von Polynomen an mehrere y-Datenmengen (erhalten am selben x-Vektor)
Update: Ab Version 1.7 verwendet numpy.polyfit
auch Gewichte als Eingabe (die idealerweise als 1/sigma
, nicht 1/variance
angegeben werden sollte)
Tags und Links python numpy scipy curve-fitting