NonLinCurveFit (FPScript)
Approximiert ein nicht-lineares Modell an einen Datensatz und übergibt die gefundenen Modellparameter, die modellierten Daten und eine Vielzahl statistischer Ergebnisse.
Syntax
NonLinCurveFit(Model, Data, [ InitialValues ], [ Bounds ], [ WeightingMode = NLCF_WEIGHTING_DATA ], [ Variance ], [ ScalingMode = NLCF_SCALING_NONE ], [ Scaling ], [ OutputOptions = NLCF_OUTPUT_PREDICTED_VALUES ], [ Settings ], [ Algorithm = NLCF_ALGORITHM_FULLNEWTON ] [ , OptionalParameters ])
Die Syntax der NonLinCurveFit-Funktion besteht aus folgenden Teilen:
Teil |
Beschreibung |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model |
Bestimmt das Modell, welches an die Daten angepasst werden soll. Das Argument kann entweder aus einer Liste vordefinierter Modelle ausgewählt werden oder es kann ein benutzerdefiniertes Modell angegeben werden. Das benutzerdefinierte Modell wird als Zeichenkette oder als Datenreihe mit zwei Zeichenketten übergeben. Die erste Zeichenkette enthält den FPScript-Code zur Berechnung der Modellfunktion. Mit der zweiten Zeichenkette wird ein FPScript-Code übergeben, der die partiellen Ableitungen der Modellfunktion für die einzelnen Parameter analytisch berechnet und als Liste ausgibt. Wird nur eine Zeichenkette angegeben, so werden die Ableitungen numerisch approximiert. Die Parameter eines benutzerdefinierten Modells mit der Parameteranzahl n müssen als p[0], p[1], ..., p[n-1]im FPScript-Code referenziert werden. Die unabhängige Variable ist x. Z. B. wird für das Modell 'y = a + b x' die Datenreihe {"p[0] + p[1] * x", "[1, x]"} für eine analytische Berechnung bzw. die Zeichenkette "p[0] + p[1] * x" für eine numerische Berechnung der Ableitungen angegeben. Es ist zu beachten, dass x als Datenreihe und nicht als Einzelwert übergeben wird, d. h. die Modellfunktion und die partiellen Ableitungen werden in einem Schritt für alle X-Werte berechnet. Der FPScript-Code muss entsprechend ausgelegt werden. Es lassen sich auch Modelle mit mehreren abhängigen Variablen definieren. Die Modellfunktionen werden dann als Liste und die Ableitungen als Liste mit Listen übergeben: {"[ p[0] + p[1] * x.[0], p[1] * x.[1]^2 ]", "[ [1,x.[0] ] , [0, x.[1]^2 ] ]"} Erlaubte Datenstrukturen sind Einzelwert und Datenreihe. Unterstützte Datentypen sind 16-Bit Ganzzahl, 32-Bit Ganzzahl, 64-Bit Ganzzahl und Zeichenkette. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Data |
Sind die Daten, an die das Modell angepasst werden soll. Wenn das Modell mehrere abhängige Variable hat, dann muss das Argument als Liste mit je einem Datensatz pro Variable angegeben werden. Erlaubte Datenstrukturen sind Datenreihe, Datenmatrix, Signal, Signalreihe und Liste. Es sind alle numerischen Datentypen erlaubt außer Kalenderzeit. Bei komplexen Datentypen erfolgt eine Betragsbildung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
InitialValues |
Ist die Datenreihe mit den Startwerten für die zu ermittelnden Parameter des Modells. Wenn Sie eines der vorgegebenen Modelle verwenden, können Sie das Argument weglassen. In diesem Fall werden dann modellspezifische Startwerte verwendet. Die Anzahl der Werte entspricht der Parameteranzahl des Modells multipliziert mit der Peak-Anzahl. Erlaubte Datenstrukturen sind Datenreihe. Es sind alle numerischen Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. Bei komplexen Datentypen erfolgt eine Betragsbildung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bounds |
Ist die Datenmatrix mit den Grenzen für die zu ermittelnden Parameter des Modells. Pro Parameter enthält die Matrix eine Spalte mit zwei Grenzen. Wenn Sie das Argument weglassen, werden keine bzw. modellspezifische Grenzwerte verwendet. Einzelne Grenzen können Sie ungültig setzen. Die Grenzen müssen innerhalb des vom jeweiligen Modell vorgegebenen Bereichs liegen. Die Obergrenze muss größer als die Untergrenze sein. Erlaubte Datenstrukturen sind Datenmatrix. Es sind alle numerischen Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. Bei komplexen Datentypen erfolgt eine Betragsbildung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WeightingMode |
Gibt an, wie die einzelnen Datenpunkte, an die das Modell angepasst werden soll, gewichtet werden. Die Vorgabe ist Gewichtung anhand der Daten. Das Argument WeightingMode kann folgende Werte haben:
Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert NLCF_WEIGHTING_DATA gesetzt. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Variance |
Ist eine Datenreihe mit den Varianzen der einzelnen Datenpunkte. Wenn Sie ein benutzerdefiniertes Modell mit mehreren abhängigen Variablen verwenden, müssen Sie ein Liste mit je einer Datenreihe pro Variable angeben. Das Argument müssen Sie nur angeben, wenn Sie benutzerdefinierte Gewichtung gewählt haben. Erlaubte Datenstrukturen sind Datenreihe und Liste. Es sind alle numerischen Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. Bei komplexen Datentypen erfolgt eine Betragsbildung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ScalingMode |
Gibt an, welche Skalierung für das Problem verwendet werden soll. (*) nicht bei Levenberg-Marquardt-Algorithmus Das Argument ScalingMode kann folgende Werte haben:
Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert NLCF_SCALING_NONE gesetzt. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Scaling |
Ist eine Datenreihe mit je einem positiven Skalierungsfaktor pro Parameter des Modells. Das Argument brauchen Sie nur anzugeben, wenn Sie benutzerdefinierte Skalierung gewählt haben. Erlaubte Datenstrukturen sind Datenreihe. Es sind alle numerischen Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. Bei komplexen Datentypen erfolgt eine Betragsbildung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OutputOptions |
Gibt an, welche Ergebnisse zurückgegeben werden sollen. Mehrere Ergebnisse werden als Liste ausgegeben. Wenn z. B. die Korrelationsmatrix und die Kovarianzmatrix ausgegeben werden sollen, so muss das Argument den Wert NLCF_OUTPUT_CORRELATION + NLCF_OUTPUT_COVARIANCE enthalten. Die statistischen Ausgabeoptionen der Nicht-linearen Kurvenanpassung helfen, die Güte der Anpassung zu bestimmen. (m = Anzahl der Datenpunkte, n = Anzahl der Parameter) (*) Für die Berechnung dieser Statistikkenngrößen wird die Kovarianzmatrix verwendet. Die Berechnung der Kovarianzmatrix ist bei Verwendung des Full-Newton-Algorithmus nicht möglich, wenn Grenzen angegeben werden und eine Skalierung (alle außer NLCF_SCALING_NONE) verwendet wird. Das Argument OutputOptions kann folgende Werte haben:
Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert NLCF_OUTPUT_PREDICTED_VALUES gesetzt. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Settings |
Ist eine Liste, die die Einstellungen für den verwendeten Algorithmus verändert. Das Argument kann folgende benannte Elemente haben:
* nur bei Levenberg-Marquardt-Algorithmus ** nur bei Full-Newton-Algorithmus Die Werte werden als Liste übergeben, z. B.: [<MaximumNumberOfFunctionCalls > 100, <XTolerance> 1e-015, <YTolerance> 1e-015, <FTolerance> 1e-015, <StepBound> 1e+002] Erlaubte Datenstrukturen sind Liste. Es sind alle numerischen Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Algorithm |
Gibt an, welcher Algorithmus verwendet werden soll. Das Argument Algorithm kann folgende Werte haben:
Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert NLCF_ALGORITHM_FULLNEWTON gesetzt. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OptionalParameters |
Ist eine Liste, die dem Modell übergeben werden kann. Das Argument kann folgende benannte Elemente haben:
Die Werte werden als Liste übergeben. Beispiel für ein Modell mit 3 Parametern und 2 Peaks: [<NumberOfPeaks>2, <FixedParameters>{FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, <SharedParameters>{FALSE, FALSE, FALSE}] Erlaubte Datenstrukturen sind Liste. Es sind alle Datentypen erlaubt. Die Einheit des Arguments wird ignoriert. |
Anmerkungen
Die Statusausgabe beschreibt den Grund für den Abbruch einer Berechnung. Es wird zwischen zwei Gruppen unterschieden. Der Algorithmus wird erfolgreich beendet, wenn bestimmte Konvergenzkriterien erfüllt sind. Ist dies nicht der Fall, so bricht der Algorithmus aufgrund von Abbruchkriterien die Berechnung ab. Das Ergebnis der Funktion ist dann ausschließlich die Statusausgabe.
Konvergenzkriterien:
Konstante |
Bedeutung |
---|---|
0 |
X-Konvergenz. |
1 |
Relative Funktionskonvergenz. |
2 |
Absolute Funktionskonvergenz. |
3 |
X-Konvergenz und relative Funktionskonvergenz. |
4 |
Toleranz für den Kosinus des Winkels zwischen den Spalten der aktuellen Jakobimatrix und dem entsprechenden Residuenvektor. |
Abbruchkriterien:
Konstante |
Bedeutung |
---|---|
5 |
Singuläre Konvergenz. |
6 |
Falsche Konvergenz. |
7 |
Maximale Anzahl Iterationen erreicht. |
8 |
Falsche Startwerte. |
9 |
Gradient kann nicht berechnet werden. |
10 |
Manueller Abbruch der Berechnung. |
11 |
Interner Fehler des Algorithmus. |
12 |
Maximale Anzahl der Funktionsaufrufe erreicht. |
13 |
Modell kann nicht berechnet werden. |
Auf die Ergebnisse kann mit folgenden Listenelementnamen zugegriffen werden:
Konstante |
Bedeutung |
---|---|
.["AverageResidual"] |
Mittleres Residual. |
.["Baseline"] |
Grundlinie bei Modellen mit mehreren Peaks. |
.["Confidence95"] |
95 % Konfidenzstreifen. |
.["Confidence99"] |
99 % Konfidenzstreifen. |
.["Confidence999"] |
99,9 % Konfidenzstreifen. |
.["ConfidenceParameter95"] |
95 % Konfidenzbereich der Parameter. |
.["ConfidenceParameter99"] |
99 % Konfidenzbereich der Parameter. |
.["ConfidenceParameter999"] |
99,9 % Konfidenzbereich der Parameter. |
.["Correlation"] |
Korrelationsmatrix. |
.["Covariance"] |
Kovarianzmatrix. |
.["ErrorVariance"] |
Fehler-Varianz. |
.["Iterations"] |
Anzahl benötigter Iterationen. |
.["ParameterError"] |
Standardfehler der Parameter. |
.["Peaks"] |
Peak-Kurven bei Modellen mit mehreren Peaks. |
.["Prediction95"] |
95 % Prognosestreifen. |
.["Prediction99"] |
99 % Prognosestreifen. |
.["Prediction999"] |
99,9 % Prognosestreifen. |
.["PredictedValues"] |
Die modellierten Daten. |
.["R2"] |
Bestimmtheitsmaß R2. |
.["Ra2"] |
Adjustiertes Bestimmtheitsmaß Ra2. |
.["Residual"] |
Residuen. |
.["ResidualSum"] |
Summe der Residuen. |
.["Solution"] |
Die gefundenen Parameter. |
.["SSE"] |
Absolute Quadratsumme der Residuen. |
.["SSER"] |
Relative Quadratsumme der Residuen. |
.["SSR"] |
Regressionsquadratsumme. |
.["SST"] |
Quadratsumme gesamt. |
.["Status"] |
Statusausgabe des Algorithmus. |
Sie können auch die Syntax Formel.Elementname verwenden. Dann müssen Sie allerdings beachten, dass die Eigenschaften der Formel, auf die auf gleiche Weise zugegriffen werden kann, Vorrang vor gleichnamigen Listenelementen haben. Dies trifft z. B. auf das Element R2 zu.
Verfügbarkeit
FlexPro Basic, Professional, Developer Suite
Beispiele
Dim list = NonLinCurveFit(MODEL_EXP_EXPONENTIAL_DECAY2, Ag, {13.33,980.56,33.92,133.80,188.28}, , _
NLCF_WEIGHTING_DATA, , NLCF_SCALING_NONE, , NLCF_OUTPUT_ALL, _
[<MaximumNumberOfFunctionCalls> 100, _
<XTolerance> 1e-008, _
<YTolerance> 1e-008, _
<FTolerance> 1e-015, _
<StepBound> 1e+002], _
NLCF_ALGORITHM_FULLNEWTON, _
[<NumberOfPeaks>1, _
<BaseLine>NLCF_BASELINE_NONE , _
<FixedParameters>{FALSE,FALSE,FALSE,FALSE,FALSE}, _
<SharedParameters>{FALSE,FALSE,FALSE,FALSE,FALSE}])
Approximiert das Signal 'Ag' mit dem Modell Abklingende Exponentialfunktion (Variante 2). Das Ergebnis der Berechnung ist eine Liste mit allen verfügbaren Ausgaben. Dies ist ein Beispiel aus dem Tutorial Nicht-lineare Kurvenanpassung.
list.["PredictedValues"]
Ergibt die modellierten Daten.
NonLinCurveFit(MODEL_EXP_EXPONENTIAL_DECAY2, Ag, {13.33,980.56,33.92,133.80,188.28})
Ergibt ebenfalls die modellierten Daten. Dies ist ein vereinfachter Funktionsaufruf des obigen Beispiels, bei dem die Vorgabewerte verwendet werden.
NonLinCurveFit("Dim a = p[0]\r\n _
Dim b = p[1]\r\n _
Dim c = p[2]\r\n _
a + b * x + c * x^2", _
Data, {1,1,0,0}, , , , , , , [<MaximumNumberOfFunctionCalls> 300])
Approximiert den Datensatz 'Data' mit dem benutzerdefinierten Modell a + b * x + c * x2. Es sind maximal 300 Iterationen zulässig.
NonLinCurveFit("Dim a = p[0]\r\n _
Dim b = p[1]\r\n _
Dim s1 = d.[0]\r\n _
Dim s2 = d.[1]\r\n _
a * s1 + b * s2", _
Data, {1,1}, , , , , , , [<MaximumNumberOfFunctionCalls> 300], , [<AuxData> [Series1, Series2] ])
Approximiert den Datensatz 'Data' mit dem benutzerdefinierten Modell a * Series1 + b * Series2. Die beiden Datenreihen 'Series1' und 'Series2' werden als Liste mit zwei Elementen übergeben.
Siehe auch
Analyseobjekt Nicht-lineare Kurvenanpassung
Tutorial Nicht-lineare Kurvenanpassung
Statistische Ausgabeoptionen der Nicht-linearen Kurvenanpassung