VF_polyfit VD_polyfit VE_polyfit
VF_polyfitwW VD_polyfitwW VE_polyfitwW
   
VF_polyfitEven VD_polyfitEven VE_polyfitEven
VF_polyfitEvenwW VD_polyfitEvenwW VE_polyfitEvenwW
   
VF_polyfitOdd VD_polyfitOdd VE_polyfitOdd
VF_polyfitOddwW VD_polyfitOddwW VE_polyfitOddwW
FunktionPolynom-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 );

identische Syntax für VF_polyfitEven, VF_polyfitEvenwW, VF_polyfitOdd, VF_polyfitOddwW
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 );

identische Syntax für polyfitEven, polyfitEvenwW, polyfitOdd, polyfitOddwW
Pascal/Delphiuses 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;

identische Syntax für VF_polyfitEven, VF_polyfitEvenwW, VF_polyfitOdd, VF_polyfitOddwW
BeschreibungDie Eingabe-Daten werden zur Bestimmung der Koeffizienten ai eines Polynoms deg-ten Grades verwendet.

VF_polyfit, VF_polyfitwW:
Pi = a0 + a1Xi + a2Xi2 ... anXin
A enthät deg+1 Elemente.

VF_polyfitEven, VF_polyfitEvenwW:
Das Polynom besteht ausschließlich aus geraden Termen,
Pi = a0 + a2Xi2 ... a2nXi2n
A enthät deg/2+1 Elemente. Die Koeffizienten der ungeraden Terme (alle = 0) werden nicht gespeichert.

VF_polyfitOdd, VF_polyfitOddwW:
Das Polynom besteht ausschließlich aus ungeraden Termen,
Pi = a1Xi + a3Xi3 ... a2n+1Xi2n+1
A enthät (deg+1)/2 Elemente. Die Koeffizienten der geraden Terme (alle = 0) werden nicht gespeichert.

Die Koeffizienten werden so berechnet, dass die Abweichung zwischen den "theoretischen" (durch Auswertung des Polynoms berechneten) Pi-Werten einerseits und den tatsächlichen Yi-Werten minimiert wird. Genauer gesagt, wird die Anpassungstestfunktion chi-Quadrat,
c2 = Summe( 1/si2 * (Pi - Yi)2 );
minimiert. In den Einzelpunkt-gewichteten Varianten VF_polyfitwW etc. müssen die Werte 1/si2 als Vektor InvVar bekannt sein. In den nicht-gewichteten Varianten werden alle si willkürlich als 1.0 angenommen.

Argumente:
AVektor der Länge deg+1; gibt die berechneten Koeffizienten zurück
CovarMatrix der Dimensionen [deg+1, deg+1]; gibt die Kovarianzen der Koeffizenten zurück
Falls die Kovarianzen nicht benötigt werden, rufe man die Funktion mit Covar=NULL / nil.
degGrad des Fit-Polynoms
X, Y, InvVarVektoren 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,5 verschieben, so dass x' = 0 in der Mitte des Bereiches liegt. Eine Verschiebung um -9,0 mit x' =0 am Beginn 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ückgabewertFALSE (0), wenn fehlerfrei, andernfalls TRUE (!= 0).
QuerverweisVF_linregress,   VF_linfit,   VF_chi2,   Kap. 13

MatrixLib Inhaltsverzeichnis  OptiVec Home