Einführung in MATLAB Grundlagen für die Übungen begleitend zur Vorlesung „Neuroinformatik I” Stefan Scherer (stefan.scherer@uni-ulm.de) David Bouchain (david.bouchain@uni-ulm.de) 19. 10. 2007 Institut für Neuroinformatik Fakultät für Ingenieurwissenschaften und Informatik
Inhalt Was ist MATLAB? Mit MATLAB arbeiten Variablen (Vektoren, Matrizen, ...) Flusskontrolle und Funktionen Visualisierung Nützliche Funktionen
Was ist MATLAB? MATLAB ist: eine Entwicklungsumgebung mit eigener Skriptsprache spezialisiert auf numerische Berechnungen insbesondere mit Vektoren und Matrizen versehen mit vielseitigen Visualisierungsmöglichkeiten ausgestattet mit einer sehr umfangreichen Funktionsbibliothek. MATLAB ist nicht: ein CAS (computer algebra system) wie z. B. MAPLE, Mathematica eine allgemeine Programmiersprache wie z. B. C/C++, Java schnell!
Mit MATLAB arbeiten MATLAB starten: lokale Installation im SGI-Pool >> x=[1,2,3] x = 1 2 3 >> y=x' y = 1 2 3 >> y*x ans = 2 4 6 3 6 9 >> MATLAB starten: lokale Installation leider gibt es keine Lizenzen im SGI im SGI-Pool Linux: matlab aufrufen von einem entfernten Rechner aus im Textmodus via X11 forwarding Anwenden: interaktiv skriptbasiert (.m-Dateien)
Das MATLAB-Hauptfenster
Das Befehlsfenster
Der Editor
MATLAB übers Intranet/Internet bouchain@retina:~$ ssh ab29@wsl02.informatik.uni-ulm.de Password: ab29@wsl02:~$ matlab Warning: Unable to open display , MATLAB is starting without a display. You will not be able to display graphics on the screen. < M A T L A B > Copyright 1984-2006 The MathWorks, Inc. Version 7.3.0.298 (R2006b) August 03, 2006 To get started, type one of these: helpwin, helpdesk, or demo. For product information, visit www.mathworks.com. >> x=[1,2,3] x = 1 2 3 >> exit ab29@wsl02:~$ exit bouchain@retina:~$ ssh -Y ab29@wsl02.informatik.uni-ulm.de bouchain@retina:~$
Allgemeines Syntaktische Feinheiten: % beginnt Zeilenkommentar >> x = 5 x = 5 >> y = x; >> y y = >> % y = 6 >> Syntaktische Feinheiten: % beginnt Zeilenkommentar ; unterdrückt Konsolenausgabe gilt für Konsole und Skript!
Variablen Variablen müssen nicht deklariert werden! Bezeichner ??? Undefined function or variable 'a'. >> a = 23 a = 23 >> A = 42 A = 42 >> a ~= A ans = 1 >> Variablen Variablen müssen nicht deklariert werden! Bezeichner sind alphanumerisch beginnen mit einem Buchstaben MATLAB ist casesentitiv Definition durch Zuweisung x = [1, 2, 3] s = 'Hello, World!' Operatoren Zuweisung: x = y Arithmetik: +, -, *, /, ^ Vergleich: >, <, >=, <=, ==, ~= Logik: &, |, ~ ungleich NICHT
Vektoren Definieren: Zeilenvektor: Spaltenvektor Kommata x = [1, 2, 3] 1 2 3 >> x = 7:10 7 8 9 10 >> x = 1:2:5 1 3 5 >> y = [1 2 3]' y = 1 2 3 >> Vektoren Kommata Definieren: Zeilenvektor: x = [1, 2, 3] x = [1 2 3] identisch x = 7:11 <von>:<bis> x = 1:1.5:5 <von>:<Schritt>:<bis> Spaltenvektor y = [1; 2; 3] y = [1 2 3]' transponieren Semikola
Vektoren (2) Elementzugriff: Beispielvektor x = [1 2 3 4 5] ans = 1 >> x(end) 5 >> x(end + 1) = 6 x = 1 2 3 4 5 6 1 3 5 >> Vektoren (2) Elementzugriff: Beispielvektor x = [1 2 3 4 5] erstes Element: 1 x(1) letztes Element: x(5) x(end) x(end+1) = 6 (wachsen) Teilvektor: x(1:2:5) (ungerade Indizes)
Vektoren (3) Elementweise Operationen: >> x = [1 2 3]; y = x'; >> y' ans = 1 2 3 >> x + y' 2 4 6 >> x .* y' 1 4 9 >> x .^ 2 >> Vektoren (3) Elementweise Operationen: Beispielvektoren x = [1 2 3] und y = x' Transponierung: y' Addition: x + y' Multiplikation: x .* y' Potenzierung: x .^ 2 Subtraktion, Division, und Wurzel entsprechend
Vektoren (4) Vektorielle Operationen: >> x = [1 2 3]; y = x'; >> x * y ans = 14 >> y * x 1 2 3 2 4 6 3 6 9 >> x(end + 1) = 0; ??? Error using ==> mtimes Inner matrix dimensions must agree. >> Vektorielle Operationen: Beispielvektoren x = [1 2 3] und y = x' Skalarprodukt: x * y Matrixprodukt: y * x Dimensionen müssen passen!
Matrizen Definieren: A = [1, 2, 3; 4, 5, 6] Elementzugriff: 1 2 3 4 5 6 >> A(end, end) ans = 6 >> A(2, 1:2) 4 5 >> A(1, :) >> Definieren: A = [1, 2, 3; 4, 5, 6] Elementzugriff: direkt: A(2,3) letztes Element: A(end,end) Teilmatrix: A(2,1:2)
Matrizen (2) Operationen: Beispielmatrix: A = [1, 2, 3; 4, 5, 6] ans = 1 4 2 5 3 6 >> A .* A 1 4 9 16 25 36 >> A * A' 14 32 32 77 >> Operationen: Beispielmatrix: A = [1, 2, 3; 4, 5, 6] Transponierung: A' Elementweise Multiplikation: A .* A Matrixmultiplikation: A' * A
Flusskontrolle Bedingte Ausführung: if-Bedingung: while-Schleife: >> x = 1; y = 0; >> if x ~= y 'Foo!' else 'Bar!' end ans = Foo! >> x = 5; >> while x > y x = x - 1; >> x x = >> Bedingte Ausführung: if-Bedingung: if <Bedingung 1> <Anweisung 1> elseif <Bedingung 2> <Anweisung 2> else <Anweisung 3> end while-Schleife: while <Bedingung> <Anweisung>
Flusskontrolle (2) Iteratives Ausführen: for-Schleife >> for x = 1:3 x = x - 2 end x = -1 1 >> for x = 23:42 break; x >> Iteratives Ausführen: for-Schleife for <Laufvariable> = <Zeilenvektor> <Anweisung> end Änderung der Laufvariablen hat keinen Einfluss auf die Anzahl der Iterationen! for- und while-Schleifen können mit break verlassen werden.
Funktionen Eingebaute Funktionen eine Unmenge! >> x = [1 2 3] x = 1 2 3 >> y = [1 2 3 4] y = 1 2 3 4 >> size(x) ans = 1 3 >> size(y'*x) 4 3 >> Funktionen Eingebaute Funktionen eine Unmenge! umfangreiche Dokumentation help <Funktion> doc <Funktion> Beispiel: >> help size SIZE Size of array. D = SIZE(X), for M-by-N matrix X, returns the two-element row vector D = [M,N] containing the number of rows and columns in the matrix. For N-D arrays, SIZE(X) returns a 1-by-N vector of dimension lengths. Trailing singleton dimensions are ignored. [M,N] = SIZE(X) for matrix X, returns the number of rows and columns in X as separate output variables. [M1,M2,M3,...,MN] = SIZE(X) for N>1 returns the sizes of the first N
Funktionen (2) Benutzerdefinierte Funktionen: .m-Dateien vorangehender Kommentartext ist Hilfetext Funktionsname ist Dateiname Definition: function <Ergebnis> = <Name> ( <Arg 1>, <Arg2>, ... ) Beispiel: >> help function_example function_example "If the brain were so simple we could understand it, we would be so simple we couldn't."---Lyall Watson >> function_example([1 2], [1; 2]) ans = 5 >> % function_example % % "If the brain were so simple we could % understand it, we would be so % simple we couldn't."---Lyall Watson function result = function_example(x, y) result = x * y;
Übungsaufgaben Bitte folgendes Format verwenden: jede Aufgabe als eigene Funktion eine .m-Datei beilegen, die alle Aufgaben aufruft Beispiel: % a1a % Aufgabe 1a function result = a1a(x, y) result = x + y; % a1b % Aufgabe 1b function result = a1b(x, y) result = x .* y; % Blatt 42 a1a([0,1,2],[1,2,3]) a1b([0,1,2],[3,2,1]) a2([0,1,2]) % a2 % Aufgabe 2 function result = a2(x) result = x * x';
Visualisierung Funktionen: plot: zeichnet eine Funktion subplot(Zeilen, Spalten, Nummer): mehrere Plots in einem Fenster legend: stellt Legende dar (div. Optionen möglich) title: fügt Titel hinzu hold on bzw. off: nötig um mehrere Plots hinzuzufügen … Plotoptionen: plot(x, y, [options]): Linien: ‘-’, ‘--’, ‘:’, ‘-.’ Markierungen: ‘x’, ‘o’, ‘*’, … Farben: ‘r’, ‘b’, ‘g’, ‘c’, ‘y’, … Kombinationen möglich
Visualisierung (2) Beispiel: % fermi % Zeichnet eine Fermifunktion function result = fermi() % Sigmoid: x = -5:0.1:5; y = 1./(1+exp(-x)); % Plotten und nicht schliessen: plot(x,y); hold on; % Ableitung: y = (1./(1 + exp(-x))).*(1 - (1./(1 + exp(-x)))); % Auch plotten: plot(x,y,'r'); % Bild speichern: print -dpng 'fermi.png'
Nützliche Funktionen Ein paar hilfreiche Funktionen: >> x = [-1 1 -1 -1 1]; >> find(x >= 0) ans = 2 5 >> x = ones(3) x = 1 1 1 >> x = diag(1:3) 1 0 0 0 2 0 0 0 3 >> clear all >> x ??? Undefined function or variable 'x'. >> Nützliche Funktionen Ein paar hilfreiche Funktionen: size: Größe eines Vektors/einer Matrix find: gibt die Elemente zurück, die eine Bedingung erfüllen ones: Matrix der angegebenen Dimension, gefüllt mit Einsen diag: Diagonalmatrix clear all: alle Variablen löschen (jedes Programm damit beginnen!)
Bitteschön!