funktionen in matlab (1) funktionen in matlab...

2
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.m Matlab-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

Upload: lamnguyet

Post on 06-Feb-2018

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Funktionen in Matlab (1) Funktionen in Matlab (3)lionel.kr.hs-niederrhein.de/~dalitz/data/lehre/CBM/funktionen-4up.pdf · Dalitz CBM Funktionen 1 Funktionen in Matlab (1) Bisher Matlab-Skripte

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

Page 2: Funktionen in Matlab (1) Funktionen in Matlab (3)lionel.kr.hs-niederrhein.de/~dalitz/data/lehre/CBM/funktionen-4up.pdf · Dalitz CBM Funktionen 1 Funktionen in Matlab (1) Bisher Matlab-Skripte

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