MF_multiNonlinfit und MF_multiNonlinfitwW (OptiVec Matrix-Funktion)">MF_multiNonlinfit, MF_multiNonlinfitwW">
MF_multiNonlinfit_... MD_multiNonlinfit_... ME_multiNonlinfit_...
MF_multiNonlinfitwW_... MD_multiNonlinfitwW_... ME_multiNonlinfitwW_...
..._autoDeriv
..._getChi2
..._getChi2Detail
..._getBestValues
..._getTestRun
..._getTestPar
..._getTestDir
..._stop
FunktionHilfs- und Überwachungs-Funktionen für MF_multiNonlinfit und MF_multiNonlinfitwW
Syntax C/C++#include <MFstd.h>
void MF_multiNonlinfit_autoDeriv( fMatrix dZdAi, ui htZ, ui lenZ, fVector X, fVector Y, unsigned ipar, unsigned iex, MF_NONLINFITWORKSPACE *ws );
float MF_multiNonlinfit_getChi2( MF_NONLINFITWORKSPACE *ws );
void MF_multiNonlinfit_getChi2Detail( fVector Chi2Detail, MF_NONLINFITWORKSPACE *ws ); void MF_multiNonlinfit_getBestValues( fVector ABest, MF_NONLINFITWORKSPACE *ws );
int MF_multiNonlinfit_getTestDir( MF_NONLINFITWORKSPACE *ws );
unsigned MF_multiNonlinfit_getTestPar( MF_NONLINFITWORKSPACE *ws );
unsigned MF_multiNonlinfit_getTestRun( MF_NONLINFITWORKSPACE *ws );
void MF_multiNonlinfit_stop( MF_NONLINFITWORKSPACE *ws );

  (identische Syntax für die MF_nonlinfitwW_...-Funktionen)
Pascal/Delphiuses MFmnlfit;
procedure MF_multiNonlinfit_autoDeriv( dZdAi:fMatrix; htZ, lenZ:UIntSize; X, Y:fVector; ipar, iex: UInt; PMF_NONLINFITWORKSPACE ws );
function MF_multiNonlinfit_getChi2( PMF_NONLINFITWORKSPACE ws ): Single;
procedure MF_multiNonlinfit_getChi2Detail( Chi2Detail:fVector; PMF_NONLINFITWORKSPACE ws );
procedure MF_multiNonlinfit_getBestValues( BestValues: fVector; PMF_NONLINFITWORKSPACE ws );
function MF_multiNonlinfit_getTestDir( PMF_NONLINFITWORKSPACE ws ): Integer;
function MF_multiNonlinfit_getTestPar( PMF_NONLINFITWORKSPACE ws ): UInt;
function MF_multiNonlinfit_getTestRun( PMF_NONLINFITWORKSPACE ws ): UInt;
procedure MF_multiNonlinfit_stop( PMF_NONLINFITWORKSPACE ws );

  (identische Syntax für die MF_multiNonlinfitwW_...-Funktionen)
BeschreibungMF_multiNonlinfit_autoDeriv differenziert eine benutzerdefinierte Modell-Funktion z=f(x, y) nach deren Parametern aipar. Sämtliche von MF_multiNonlinfit_autoDeriv benötigten Informationen (Modell-Funktion, aktueller Parameter-Satz usw.) werden über den Zeiger auf den in der aktuellen MF_multiNonlinfit-Operation verwendeten MF_NONLINFITWORKSPACE mitgeteilt.

Die folgenden Funktionen gestatten es, den Fortgang nicht-linearer Anpassungs-Operationen zu verfolgen. Sie können entweder aus der benutzerdefinierten Modell-Funktion heraus oder - bei Multithread-Anwendungen - auch aus einem zweiten Thread heraus aufgerufen werden.
MF_multiNonlinfit_getChi2 gibt den besten bislang erzielten Anpassungstest-Wert (c2 oder, für robuste Fits, |c|) zurück. Ruft man diese Funktion auf, bevor MF_multiNonlinfit die Chance hatte, c2 erstmalig zu berechnen, so wird -1.0 zurückgegeben.

MF_multiNonlinfit_getChi2Detail speichert die auf die einzelnen Experimente bezogenen Anpassungstest-Werte (c2iex oder, für robuste Fits, |ciex|) in dem als Argument übernommenen Vektor Chi2Detail. Die Summe dieser einzelnen c2iex oder |ciex| -Werte ist das beste bislang erhaltene c2 (oder |c|), wie von MF_multiNonlinfit_getChi2 zurückgegeben.

MF_multiNonlinfit_getBestValues speichert den besten bislang gefundenen Parametersatz A in dem als Argument angeforderten Vektor ABest.

MF_multiNonlinfit_getTestDir liefert die Test-Richtung (+1 für aufwärts, -1 für abwärts) während "Ausbruchsversuchen" aus eventuellen lokalen Optima, die andernfalls das Erreichen des globalen Optimums verhindern würden (LevelOfMethod > 3 in VF_setNonlinfitOptions spezifiziert).

MF_multiNonlinfit_getTestPar gibt den Index des gerade bezüglich "Ausbruchs" getesteten Parameters zurück.

MF_multiNonlinfit_getTestRun liefert den Index des aktuellen "Ausbruchstest"-Durchlaufes. Für jeden angepaßten Parameter wird ein Testdurchlauf durchgeführt. Die Reihenfolge, in der die Parameter geprüft werden, wird intern so festgelegt, daß die sensitivsten Parameter zuerst an die Reihe kommen.

MF_multiNonlinfit_stop sorgt dafür, daß MF_multiNonlinfit seinen aktuellen Levenberg-Marquardt- oder Downhill-Simplex-Zyklus beendet, die Ausgabe-Parameter auf den besten Stand bringt und zur aufrufenden Funktion zurückkehrt. Auf diese Weise können überlange Anpassungs-Sitzungen (insbesondere solche mit "Ausbruchs"-Versuchen) ohne Datenverlust abgebrochen werden.

QuerverweisKap. 13

MatrixLib Inhaltsverzeichnis  OptiVec Home