VF_polyfit VD_polyfit VE_polyfit
VF_polyfitwW VD_polyfitwW VE_polyfitwW
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 );
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/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;
BeschreibungDie 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:
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
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 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ückgabewertFALSE (0), wenn fehlerfrei, andernfalls TRUE (!= 0).
QuerverweisVF_linregress,   VF_linfit,   VF_chi2,   Kap. 13

MatrixLib Inhaltsverzeichnis  OptiVec Home