Stefan Scherer ([email protected]) David Bouchain ([email protected]) 19. 10. 2007 Institut für Neuroinformatik Fakultät für Ingenieurwissenschaften und Informatik Einführung in MATLAB Grundlagen für die Übungen begleitend zur Vorlesung „Neuroinformatik I” Seite 2 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Inhalt – Was ist MATLAB? – Mit MATLAB arbeiten – Variablen (Vektoren, Matrizen, ...) – Flusskontrolle und Funktionen – Visualisierung – Nützliche Funktionen Seite 3 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 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! Seite 4 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Mit MATLAB arbeiten >> x=[1,2,3] MATLAB starten: – lokale Installation x = 1 • leider gibt es keine Lizenzen im SGI – im SGI-Pool • Linux: matlab aufrufen 3 2 4 6 3 6 9 >> y=x' y = – von einem entfernten Rechner aus 1 2 3 • im Textmodus • via X11 forwarding Anwenden: – interaktiv – skriptbasiert (.m-Dateien) 2 >> y*x ans = 1 2 3 >> Seite 5 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Das MATLAB-Hauptfenster Seite 6 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Das Befehlsfenster Seite 7 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Der Editor Seite 8 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 MATLAB übers Intranet/Internet bouchain@retina:~$ ssh [email protected] 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 [email protected] Password: ab29@wsl02:~$ matlab ab29@wsl02:~$ exit bouchain@retina:~$ Seite 9 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Allgemeines Syntaktische Feinheiten: >> x = 5 x = 5 – % beginnt Zeilenkommentar – ; unterdrückt Konsolenausgabe >> y = x; >> y y = 5 – gilt für Konsole und Skript! >> % y = 6 >> y y = 5 >> Seite 10 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> a ??? Undefined function or variable 'a'. Variablen >> a = 23 – Variablen müssen nicht deklariert werden! – Bezeichner • sind alphanumerisch • beginnen mit einem Buchstaben – MATLAB ist casesentitiv – Definition durch Zuweisung • • • • Zuweisung: Arithmetik: Vergleich: Logik: 23 >> A = 42 A = 42 • x = [1, 2, 3] • s = 'Hello, World!' – Operatoren a = >> a ungleich x = y +, -, *, /, ^ >, <, >=, <=, ==, ~= &, |, ~ a = 23 >> a ~= A ans = 1 NICHT >> Seite 11 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x = [1, 2, 3] x = Vektoren 1 Kommata Definieren: – Zeilenvektor: • • • • x x x x = = = = 2 3 >> x = 7:10 x = [1, 2, 3] 7 8 [1 2 3] identisch >> x = 1:2:5 7:11 <von>:<bis> 1:1.5:5 <von>:<Schritt>:<bis> x = 1 Semikola 3 >> y = [1 2 3]' – Spaltenvektor y = • y = [1; 2; 3] • y = [1 2 3]' transponieren 1 2 3 >> 9 5 10 Seite 12 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x(1:2:5) >> x(1) Vektoren (2) ans = 1 Elementzugriff: Beispielvektor x = [1 2 3 4 5] >> x(end) ans = – erstes Element: 1 • x(1) 5 >> x(end + 1) = 6 x = – letztes Element: • x(5) • x(end) • x(end+1) = 6 (wachsen) 1 • x(1:2:5) 3 >> x(1:2:5) ans = 1 – Teilvektor: 2 >> (ungerade Indizes) 3 5 4 5 6 Seite 13 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x = [1 2 3]; y = x'; >> y' Vektoren (3) ans = 1 Elementweise Operationen: Beispielvektoren x = [1 2 3] und y = x' 2 3 4 6 4 9 4 9 >> x + y' ans = – Transponierung: y' – Addition: x + y' 2 >> x .* y' ans = – Multiplikation: x .* y' – Potenzierung: x .^ 2 1 >> x .^ 2 ans = – Subtraktion, Division, und Wurzel entsprechend 1 >> Seite 14 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x = [1 2 3]; y = x'; >> x * y Vektoren (4) ans = Vektorielle Operationen: 14 Beispielvektoren x = [1 2 3] und y = x' – Skalarprodukt: – Matrixprodukt: x * y >> y * x ans = 1 2 3 y * x – Dimensionen müssen passen! 2 4 6 3 6 9 >> x(end + 1) = 0; >> x * y ??? Error using ==> mtimes Inner matrix dimensions must agree. >> Seite 15 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> A = [1 2 3; 4 5 6] Matrizen A = 1 4 Definieren: – A = [1, 2, 3; 4, 5, 6] 2 5 3 6 >> A(end, end) ans = 6 >> A(2, 1:2) Elementzugriff: ans = – direkt: – letztes Element: – Teilmatrix: A(2,3) A(end,end) A(2,1:2) 4 5 >> A(1, :) ans = 1 >> 2 3 Seite 16 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> A = [1 2 3; 4 5 6]; >> A' Matrizen (2) ans = Operationen: 1 2 3 Beispielmatrix: A = [1, 2, 3; 4, 5, 6] – Transponierung: A' 4 5 6 >> A .* A ans = – Elementweise Multiplikation: A .* A – Matrixmultiplikation: A' * A 1 16 4 25 >> A * A' ans = 14 32 >> 32 77 9 36 Seite 17 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Flusskontrolle Bedingte Ausführung: – if-Bedingung: >> x = 1; y = 0; >> if x ~= y 'Foo!' else 'Bar!' end ans = if <Bedingung 1> <Anweisung 1> elseif <Bedingung 2> <Anweisung 2> else <Anweisung 3> end Foo! >> x = 5; >> while x > y x = x - 1; end >> x x = 0 – while-Schleife: >> while <Bedingung> <Anweisung> end Seite 18 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Flusskontrolle (2) Iteratives Ausführen: >> for x = 1:3 x = x - 2 end x = – 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. -1 x = 0 x = 1 >> for x = 23:42 break; x end >> Seite 19 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x = [1 2 3] x = Funktionen Eingebaute Funktionen 1 2 3 >> y = [1 2 3 4] y = – eine Unmenge! – umfangreiche Dokumentation • help <Funktion> • doc <Funktion> – Beispiel: 1 2 3 4 >> size(x) ans = 1 3 >> help size >> size(y'*x) SIZE Size of array. D = SIZE(X), for M-by-N matrix X, returns the two-element row vector ans = 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. 4 3 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 Seite 20 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Funktionen (2) Benutzerdefinierte Funktionen: – – – – >> help function_example function_example .m-Dateien vorangehender Kommentartext ist Hilfetext "If the brain were so simple we could understand Funktionsname ist Dateiname it, we would be so simple we couldn't."---Lyall Definition: Watson function <Ergebnis> = <Name> ( <Arg 1>, <Arg2>, ... ) – Beispiel: >> function_example([1 2], [1; 2]) ans = % % % % % 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; 5 Seite 21 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Ü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'; Seite 22 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 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 Seite 23 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 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' Seite 24 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 >> x = [-1 1 -1 -1 1]; >> find(x >= 0) Nützliche Funktionen ans = 2 Ein paar hilfreiche Funktionen: – size: – find: – ones: – diag: – clear all: Größe eines Vektors/einer Matrix 5 >> x = ones(3) x = gibt die Elemente zurück, die >> eine Bedingung erfüllen 1 1 1 1 1 1 1 1 1 x = diag(1:3) x = Matrix der angegebenen Dimension, gefüllt mit Einsen Diagonalmatrix 1 0 0 0 2 0 0 0 3 >> clear all >> x alle Variablen löschen (jedes??? Undefined function or Programm damit beginnen!) variable 'x'. >> Seite 25 Einführung in MATLAB | Scherer & Bouchain | 19. 10. 2007 Bitteschön!