VF_polyfit
| VD_polyfit |
VE_polyfit |
VF_polyfitwW |
VD_polyfitwW |
VE_polyfitwW |
|
Funktion | Polynom-Koeffizienten an X-Y-Datensatz anpassen |
|
Syntax C/C++ | #include <MFstd.h>
int VF_polyfit( fVector A, unsigned deg, fVector X, fVector Y, ui sizex );
int VF_polyfitwW( fVector A, fMatrix Covar, unsigned deg, fVector X, fVector Y, fVector InvVar, ui sizex ); |
C++ MatObj | #include <OptiVec.h>
int vector<T>::polyfit( const vector<T>& X, const vector<T>& Y );
int vector<T>::polyfitwW( matrix<T> Covar, const vector<T>& X, const vector<T>& Y, const vector<T>& InvVar );
int vector<T>::polyfitwW( matrix<T>* Covar, const vector<T>& X, const vector<T>& Y, const vector<T>& InvVar ); |
Pascal/Delphi | uses MFstd;
function VF_polyfit( A:fVector; deg:UInt; X, Y:fVector; sizex:UIntSize ): IntBool;
function VF_polyfitwW( A:fVector; Covar:fMatrix; deg:UInt, X, Y, InvVar:fVector; sizex:UIntSize ): IntBool; |
|
Beschreibung | Die Eingabe-Daten werden zur Bestimmung der Koeffizienten ai eines Polynoms n-ten Grades
Pi = a0 + a1Xi + a2Xi2 ... anXin
verwendet. Hierbei wird die Abweichung zwischen den "theoretischen" (durch Auswertung des Polynoms berechneten) Pi-Werten einerseits und den tatsächlichen Yi-Werten minimiert. Genauer gesagt, wird die Anpassungstestfunktion chi-Quadrat,
c2 = Summe( 1/si2 * (Pi - Yi)2 );
minimiert. In der Einzelpunkt-gewichteten Variante VF_polyfitwW müssen die Werte 1/si2 als Vektor InvVar bekannt sein. In der nicht-gewichteten Variante werden alle si willkürlich als 1.0 angenommen.
Argumente:
A | Vektor der Länge deg+1; gibt die berechneten Koeffizienten zurück |
Covar | Matrix der Dimensionen [deg+1, deg+1]; gibt die Kovarianzen der Koeffizenten zurück |
deg | Grad des Fit-Polynoms |
X, Y, InvVar | Vektoren der Länge sizex mit den Eingabe-Daten |
Es empfiehlt sich, die X-Achse so zu wählen, dass sie den Nullpunkt einschließt. Weit entfernt vom Nullpunkt wird die Anpassung nämlich immer schlechter. Dies liegt an der Form der für die Anpassung verwendeten Polynome, die nur maximal deg-1 Maxima bzw. Minima haben können. Falls Ihre X-Achse beispielsweise von 9 bis 10 reicht, sollten Sie sie lieber um den Betrag -9 verschieben, so dass x' = 0 am Beginn des Bereiches liegt. Eine Verschiebung um -9.5 mit x' =0 in der Mitte des Bereiches wäre ebenfalls gut.
In dem sehr seltenen Fall, dass diese Funktion keine Lösung finden kann, gibt sie 1 (TRUE) zurück und setzt alle A[i] = 0. |
|
Rückgabewert | FALSE (0), wenn fehlerfrei, andernfalls TRUE (!= 0). |
|
|