Tutorial
FBMath
von nemored | Seite 3 von 5 |
Analysis: Berechnung des Minimums
FBMath stellt mehrere Verfahren zur Verfügung, um das Minimum einer Funktion zu bestimmen. Die Bibliothek kann dabei auch mit mehreren Unbekannten umgehen; hier wird jedoch nur auf Funktionen mit einer Unbekannten eingegangen.
Ein Verfahren dafür ist die Golden Section Search. Sie wird mit dem Befehl
GoldSearch(@funktion, a, b, maxIter, toleranz, xMin, yMin)
aufgerufen. Dabei bedeuten die Parameter:
- 'funktion': eine mit FUNCTION definierte Funktion mit einem einzelnen Parameter
- 'a' und 'b': Startwerte für die Suche
- 'maxIter': maximale Zahl der Iterationen, bevor die Suche abbricht
- 'toleranz': größte erlaubte Abweichung vom exakten Wert, um die Suche erfolgreich zu beenden
- 'xMin' und 'yMin': Variablen, in denen der gefundene x- und y-Wert gespeichert wird
'xMin' und 'yMin' liefern in jedem Fall die errechneten Näherungswerte zurück, egal ob die Suche erfolgreich war (d. h. der gefundene Wert nahe genug am gesuchten Wert liegt) oder nicht. Ob die Suche erfolgreich war, können Sie mit MathErr herausfinden: Sie enthält entweder den Wert OptOk (=0; Erfolg) oder OptNonConv (=-1; keine Konvergenz).
Das Minimum muss sich nicht zwischen 'a' und 'b' befinden; besitzt die Funktion jedoch mehrere Minima, so kann mit der Angabe von 'a' und 'b' gezielt nach dem Minimum zwischen diesen beiden Zahlen gesucht werden. Dazu sollten Sie aber sicherstellen, dass sich exakt ein Minimum zwischen 'a' und 'b' befindet.
Bitte beachten Sie, dass es sich bei der Berechnung des Minimums um ein numerisches Verfahren handelt und Sie aufgrund der eingeschränkten Genauigkeit von Computerberechnungen keine exakten Ergebnisse erwarten dürfen!
Beispiel:
#INCLUDE "math.bi"
FUNCTION parabel(x AS DOUBLE) AS DOUBLE
' Parabel mit Scheitelpunkt S(1.777 / 0.444); hier liegt auch das Minimum
RETURN (x-1.777)^2 + 0.444
END FUNCTION
DIM AS DOUBLE Xmin, YMin, toleranz = 10^-7
GoldSearch(@parabel, -10, 10, 50, toleranz, Xmin, Ymin)
IF MathErr = OptOk THEN
PRINT "Das Minimum befindet sich (etwa) bei (" & Xmin & " / " & Ymin & ")"
ELSE
PRINT "Das Minimim konnte leider nicht bestimmt werden."
END IF
SLEEP
Da das Ergebnis höchstwahrscheinlich sowieso nicht exakt ist, ist es empfehlenswert, das Ergebnis sinnvoll zu runden. Auch dafür stellt FBMath eine Funktion zur Verfügung. 'Xmin' und 'Ymin' sollen nun auf zwei Stellen hinter dem Komma gerundet ausgegeben werden:
PRINT "Das Minimum befindet sich (etwa) bei (" _
& Round(Xmin, 2) & " / " & Round(Ymin, 2) & ")"
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|