| Beschreibung | Die Eingabe-Daten X, Y (und InvVar) werden benutzt, um die Parameter ai der allgemeinen linearen Funktion
y = a0f0(x) + a1f1(x) + a2f2(x)...
zu bestimmen. Die Parameter ai werden in dem Vektor A zurückgegeben.
Argumente:
| A | Vektor der Länge npars; gibt die berechneten Koeffizienten zurück |
| Covar | Matrix der Dimensionen [npars, npars]; gibt die Kovarianzen der Koeffizenten zurück |
| AStatus | Vektor der Länge npars; entscheidet darüber, welche Parameter frei oder eingefroren sind |
| npars | Gesamtzahl der Parameter |
| X, Y, InvVar | Vektoren der Länge sizex mit den Eingabe-Daten |
| funcs | Benutzer-definierte Modell-Funktion |
Die Modell-Funktion (und damit der Parameter-Vektor) kann mehr Parameter enthalten als tatsächlich angepaßt werden sollen. Daher muß ein zusätzlicher Vektor AStatus die Information darüber enthalten, welche Parameter bei ihren Eingabe-Werten eingefroren bleiben sollen (AStatus[i] = 0) und welche anzupassen sind (AStatus[i] = 1). Alle eingefrorenen Parameter müssen in A vor dem Aufruf von VF_linfit initialisiert sein. npars bezeichnet die Gesamtzahl der Parameter in A (also nicht nur die freien Parameter!).
Die Modell-Funktion "funcs" ist vom Anwender zu schreiben. Für jedes Argument x hat sie die einzelnen fi(x) zu berechnen und in dem Vektor BasFuncs zu speichern. In C/C++ muß sie als
void MyFunc( fVector BasFuncs, float x, unsigned nfuncs)
{
BasFuncs[0] = f0( x );
BasFuncs[1] = f1( x);
. . .
}
definiert und an VF_linfit durch Aufruf von
VF_linfit( A, AStatus, npars, X, Y, sizex, MyFunc );
übergeben werden.
In Pascal/Delphi muß die Modell-Funktion als
procedure MyFunc( BasFuncs:fVector; x:Single; nfuncs:UInt );
begin
VF_Pelement( BasFuncs, 0 )^ := f0( x );
VF_Pelement( BasFuncs, 1 )^ := f1( x );
. . .
end;
definiert und an VF_linfit durch Aufruf von
VF_linfit( A, AStatus, npars, X, Y, sizex, @MyFunc );
übergeben werden. Man beachte den Adress-Operator vor "MyFunc.". In Turbo Pascal muß die Modellfunktion mit der Option "Force Far Calls" {$F+} compiliert werden.
Die Funktionen f0( x ) etc. dürfen die Parameter ai selbst nicht enthalten.
In der gewichteten Variante VF_linfitwW muß der Vektor InvVar den Kehrwert der Varianzen der einzelnen X-Y -Datenpunkte enthalten, und die Matrix MCovar gibt die Kovarianzen der Parameter ai zurück: MCovari,j = covariance( ai, aj ).
Intern verwendet VF_linfit einen auf Singulärwert-Zerlegung (SVD) basierenden Algorithmus, um eine Lösung auch für (nahezu) singuläre Gleichungssysteme zu erhalten. Dabei werden Koeffizienten ai, deren Signifikanz unter einer gewissen Schwelle liegt, gleich 0 anstatt Unendlich gesetzt. Diese Schwelle kann durch Aufruf von VF_setLinfitNeglect modifiziert werden. VF_getLinfitNeglect liest die derzeit eingestellte Schwelle.
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. |