funktionen in matlab (1) funktionen in matlab...
TRANSCRIPT
Dalitz CBM Funktionen
1
Funktionen in Matlab (1)
Bisher Matlab-Skripte geschrieben:
Code an der Stelle eingefügt, wo er benötigt wird bei Mehrfachverwendung: Copy & Paste
Beispiel:
Berechnung von P(a < X < b) für normalverteiltes X
% mu = 1.5, sigma = 0.5 0.5 * ( erf((b-1.5)/sqrt(2*0.25)) - \ erf((a-1.5)/sqrt(2*0.25)) );
Nachteile:
schwer verständlich Was macht Code? Woher kommen Werte 1.5 und 0.25? Wiederverwendung durch Copy & Paste fehleranfällig Was ist bei späterer Korrektur/Änderung?
2
Funktionen in Matlab (2)
Lösung: Definition einer Funktion
zentral korrigierbar/änderbar Black-Box: Anwender braucht Details nicht zu kennen => leichter verwendbar
Obiges Beispiel als Funktion Pnormal:
% berechnet P(a < X < b) für normalverteiltes X function y = Pnormal(a, b, mu, sigma) nenner = sqrt(2*sigma*sigma); y = 0.5 * ( erf((b-mu)/nenner) - \ erf((a-mu)/nenner) ); end
% Verwendung in einem Skript: bla = Pnormal(0, 2, 1.5, 0.5);
3
Funktionen in Matlab (3)
Wie macht man diese Funktion verfügbar?
Speichern des Codes der Funktion Pnormal in gleichnamiger Datei Pnormal.m
Aufruf (Skript oder Matlab-Prompt) ohne .m-Erweiterung aktuelles Verzeichnis und Suchpfad werden nach gleichnamiger
Datei durchsucht
> Pnormal(1,2,0.15,0.5)ans = 0.13426> _
Pnormal.mMatlab−Prompt
end
% ...
function y = Pnormal(...)
4
Funktionen in Matlab (4)
Befehle zum Umgang mit Funktionen:
path
listet Suchpfad für Funktionsfiles auf
type funktionsname
listet Funktionscode auf nützlich zur Überprüfung ob korrekte Version der Funktion geladen ist oder z.B. noch eine alte Version im Cache ist
help funktionsname
listet Dateikopf auf bis zum ersten Schlüsselwort "function" => eigene Funktionen leicht dokumentierbar
Dalitz CBM Funktionen
5
Funktionen in Matlab (5)
Erläuterung der Funktionsdefinition
function y = Pnormal(a, b, mu, sigma) nenner = sqrt(2*sigma*sigma); y = 0.5 * ( erf((b-mu)/nenner) - \ erf((a-mu)/nenner) ); end
y (Name ist frei wählbar) ist der Rückgabewert es gibt keinen return-Befehl, Zuweisung an Rückgabewert reicht
a, b, mu, sigma sind Inputargumente Funktion erhält Kopie der Werte (Call by Value) => Funktion kann Werte des Hauptprogramms nicht ändern
nenner ist eine lokale Variable,
die außerhalb der Funktion unsichtbar ist
6
Funktionen in Matlab (6)
Lokale Variablen
Funktionsdefinition bildet eigenen Scope ("Gültigkeitsbereich") alle darin definierten Variablen leben nur in diesem Scope
auch Rückgabewert und Inputargumente sind lokale Variablen
Demonstration:
octave:9> Pnormal(-1,1,0,1) ans = 0.68269 octave:10> nenner error: ‘nenner’ undefined near line 10 column 1 octave:10> a error: ‘a’ undefined near line 10 column 1 octave:10> y error: ‘y’ undefined near line 10 column 1
7
Funktionen in Matlab (7)
Funktionen und Scriptdateien
oft werden Funktionen nur innerhalb eines Skripts gebraucht zur Strukturierung/Vereinfachung des Codes
in Matlab ist die Definition von Funktionen innerhalb einer Scriptdatei nicht möglich (aber in Octave, siehe Doku)
Workaround: tarne Skript als Funktion mit Unterfunktionen Unterfunktionen sind nur innerhalb der Funktion sichtbar und werden am Ende der Datei definiert die Hauptfunktion dient nur zum Aufruf des Skripts
% Hauptfunktion function bla Q = faltP(3); stem(1:6*3, Q);
% Unterfunktion (definiert innerhalb von bla) function P = nwuerfel(n) % code der Funktion end