Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
1
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Matlab
Einführung in Matlab
Multimediale Informationsverarbeitung
Sandro Esquivel
2
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Übersicht
● Allgemeines
● Variablen und Matrizen
● Darstellen von Funktionen
● Kontrollstrukturen für Programme
● Beispiele und Aufgaben
3
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Was ist Matlab?
● Matlab bedeutet ''Matrix Laboratory''
● Plattformunabhängige Skriptsprache
● Numerisches Rechnen, bes. mit Matrizen
Nicht: Algebraisches/symbolisches Rechnen (z.B. Maple)!
● Proprietäre Software von MathWorks (Studentenlizenzen ab 80€)
● Alternativen: Scilab (INRIA), GNU Octave (freie Software)
● Funktionsumfang: Lineare Algebra, Trigonometrie, Statistik,Funktionen- und Datenvisualisierung, etc.
● Erweiterbar durch ''Toolboxen'' (z.B. Bildverarbeitung, Optimierung)
4
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Verwenden von Matlab
● Starten mit /home/matlab/bin/matlab
● Grafische Benutzeroberfläche mit Dateibrowser, Skriptfenster, Workspace und Konsolenfenster
Konsolenfenster
Workspace
Skriptfenster
Dateibrowser
5
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Verwenden von Matlab
● Interaktive Benutzung:
● Eingabe von Befehlen in Kommandozeile ( >> )
● Direkte Ausgabe von Ergebnissen in Konsole
● Variablen werden im Workspace gespeichert
Konsolenfenster
WorkspaceKommandozeile
6
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Verwenden von Matlab
● Verwenden als Batchinterpreter:
● Programmieren von Skripten/Funktionen (.m-Dateien)
● Aufruf von Skripten/Funktionen über die Kommandozeile
Dateibrowser
Skriptfenster
7
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Skripte und Funktionen
● .m-Dateien sind Skripte, d.h. Abfolgen von Matlab-Befehlen, z.B.:
● clear all
● phi = 0.25*pi;
● % Berechne die 2DRotationsmatrix zu phi
● A = [ cos(phi) sin(phi); ...
● sin(phi) cos(phi)];
● Aufruf über den Skriptnamen (= Dateiname ohne .m), z.B.:
● >> meinskript
Datei “meinskript.m”
8
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Funktionen
● In .m-Dateien können auch eigene Funktionen defininiert werden:
● % Berechnet die 2DRotationsmatrix zu phi
● function A = meinefunktion(phi)
● A = [ cos(phi) sin(phi); ...
● sin(phi) cos(phi)];
● end
● Aufruf von eigenen Funktionen:
● >> meinA = meinefunktion(0.25*pi);
Datei “meinefunktion.m”
9
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Allgemeine Hinweise zu Skripten
● Kommentarzeilen werden mit % eingeleitet.
● Befehle, die über mehrere Zeilen gehen, mit ... kennzeichnen.
● Semikolon am Zeilenende unterdrückt die Ausgabe.
● Mit help Befehl erhält man Hilfe zu einem Befehl.
10
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Übersicht
● Allgemeines
● Variablen und Matrizen
● Darstellen von Funktionen
● Kontrollstrukturen und Programme
● Beispiele und Aufgaben
11
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Workspace
● Workspace = Variablenumgebung zur Laufzeit
● Variablen werden im Workspace gehalten, auch bei mehrfachem
Ausführen von Skripten.
● whos gibt alle Variablen im Workspace aus.
● Löschen aus dem Workspace mit clear Name oder clear all
● Laden/Speichern des Workspace mit load und save (.mat-Datei)
12
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Variablen und Matrizen
● Variablen speichern Skalare, Vektoren und Matrizen
● Keine explizite Deklaration nötig (“on-the-fly”)!
● Keine konkreten Datentypen (“alle Variablen sind double-Matrizen”)!
● >> x = tan(pi/8)
x = 0.4142
Kommandozeile
Konsolenausgabe
13
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Beispiele zu Variablen und Matrizen
● >> x = 42 42
● >> y = [ x, x+1 ] ( 42 43 )
● >> y' ( 42 43 )T
● >> y(1) y1
● >> A = [ 1 2 3; 4 5 6 ] 1 2 3 4 5 6
● >> A(2,1) A2, 1
● >> size(A,1) Anzahl Zeilen von A
● >> size(A,2) Anzahl Spalten von A
● >> length(x) Länge des Vektors x
( )
14
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Zugriff auf Vektor-/Matrixelemente
● Zugriff auf Vektorelemente mit x(Index)
● Zugriff auf Matrixelemente mit A(Zeile, Spalte)
Achtung: Indizes beginnen in Matlab bei 1!
Außerdem: Wird auf ein Element zugriffen, das nicht existiert, wird die Matrix oder der Vektor entsprechend vergrößert!
● Zugriff auf einzelne Zeilen/Spalten einer Matrix:
● >> A(:,j) j-te Spalte von A als Spaltenvektor
● >> A(i,:) i-te Zeile von A als ZeilenvektorA
a,i… A
a,j
● >> A(a:b,i:j) Untermatrix : :A
b,i… A
b,j
. .
15
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Erzeugen von Vektoren und Matrizen
● Weitere Möglichkeiten zum Erzeugen von Vektoren/Matrizen:
● >> A = [1 2; 3 4] Zeilenweiser Aufbau
● >> A = zeros(n,m) n x m-Nullmatrix
● >> A = ones(n,m) n x m-Einsmatrix
● >> I = eye(n) n x n-Einheitsmatrix
● >> x = a : s : b Vektor (a, a+s, a+2s, ..., b)
● >> x = linspace(a,b,n) Vektor (a, ..., b) der Länge n
● >> x = [ x a ] Erweitert Vektor x um Element a.
16
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Arithmetische Operationen
● Arithmetische Operatoren größtenteils wie in C/C++ oder Java:
Aber: * ist z.B. je nach Operand Skalar-, Vektor- oder Matrixprodukt!
+, , *, / Arithmetik
^ Exponentialrechnung
= Zuweisung
() Auswertungsreihenfolge
&&, ||, ~ Logische Operatoren
>, <, >=, <=, ==, ~= Vergleichsoperatoren
' Transponieren
17
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Weitere arithmetische Operationen
● Weitere Operationen sind als Funktionen implementiert, z.B.:
● Absolutwert |x|: abs(x)
● Quadratwurzel √x: sqrt(x)
● Runden von x: round(x), floor(x), ceil(x)
● Trigonometrie: sin(x), cos(x), tan(x), etc.
● Statistik: min(v), max(v), mean(v), var(v), etc.
● Vektorprodukte: dot(u,v), cross(u,v)
● Inverse A-1: inv(A)
● ex, log(x): exp(x), log(x)
➔ Weitere Informationen mit help arithm und help ops
18
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Elementweise Operationen
● Die meisten skalaren Funktionen liefern für Vektoren als Eingabe die elementweisen Funktionswerte, z.B.:
● >> abs([2, 1, 0, 1])
ans =
2 1 0 1
● Explizit elementweise Operatoren sind .+, ./, .^, etc.
Zum Beispiel:
● B = A^2 ist Matrixquadrat (d.h. B = A2 = A·A)
● B = A.^2 ist Matrix der Quadrate (d.h. Bi,j = A
i,j2)
19
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Übersicht
● Allgemeines
● Variablen und Matrizen
● Darstellen von Funktionen
● Kontrollstrukturen für Programme
● Beispiele und Aufgaben
20
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
2D-/3D-Plot
● plot(x,y) stellt Datenpunkte (x1,y
1) … (x
n,y
n) als 2D-Plot dar.
● plot3(x,y,z) stellt Datenpunkte (x1,y
1,y
1) … (x
n,y
n,z
n) als 3D-Plot dar.
● x, y und z müssen dabei Vektoren gleicher Länge sein!
21
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
● Zum Plotten von Funktionen, z.B. y = sin(x), müssen erst Werte-/Ergebnisvektoren erstellt werden (Diskretisierung)!
● Diskretes Intervall für x-Werte erstellen:
● >> x = linspace(1,1,100);
● Andere Möglichkeit mit Angabe der Schrittweite:
● >> x = 1 : 0.01 : 1;
● sin(x) erzeugt Vektor der Funktionswerte (sin(x1), ..., sin(x
n))
● >> plot(x, sin(x))
Plotten von Funktionen
Schrittweite
Anzahl Samples
22
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
● n x m Plotfenster erzeugen und das
k-te Fenster zum Zeichnen auswählen: subplot(n, m, k)
● Alle Plots in dasselbe Fenster zeichnen: hold on
● Fenster vor jedem neuen Plot löschen: hold off
● Titel zum Plot hinzufügen: title('Text')
● Achsenbeschriftungen hinzufügen: xlabel('Text')
(analog: ylabel, zlabel)
● x/y-Achsen im 2D-Plot skalieren: axis([xmin x
max y
min y
max])
Weitere Plotfunktionen
23
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Speichern und Laden von Bildern
● Bilder werden als Matrizen gespeichert
● Matrixelemente sind Skalare (Grauwert) oder Tupel (z.B. RGB-Werte)
● Laden von Bildern mit I = imread('Dateiname');
● Speichern von Bildern mit imwrite(I, 'Dateiname')
● Konvertierung zwischen Datentypen und Farbräumen möglich
➔Siehe auch Matlab-Hilfe: help image
24
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Anzeigen von Bildern
● Darstellung von Bildern mit imshow(I) oder imagesc(I)
● Wahl verschiedener Farbtabellen möglich (colormap)
● Zeichnen in Bilder z.B. mit
hold on und plot möglich
25
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Übersicht
● Allgemeines
● Variablen und Matrizen
● Darstellen von Funktionen
● Kontrollstrukturen für Programme
● Beispiele und Aufgaben
26
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Kontrollstrukturen in Programmen
● Kontrollstrukturen ähnlich C/C++, Java oder Pascal
● Ermöglichen Programmierung von komplexen Skripten/Funktionen
01 function ggt = ggtEuclidean(a, b)02 if (a == 0)03 ggt = b;04 else05 while (b ~= 0)06 if (a > b)07 a = a b;08 else09 b = b a;10 end11 end12 ggt = a;13 end14 end
Datei “evalpoly.m”
27
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Alternative Anweisungen (if … else)
● if (a == b)
● b = 0;
● elseif (a > b)
● a = a b;
● else
● b = b a;
● end
Achtung: “a ungleich b” heißt in Matlab: a ~= b
➔Siehe auch help ops für Liste aller logischen Operatoren und Vergleichsoperatoren.
28
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Wiederholte Anweisungen, Schleifen (while)
● while (b ~= 0)
● if (a > b)
●a = a b;
● else
●b = b a;
● end
● end
● Verlassen von Schleifen mit break
● Springen zur nächsten Iteration mit continue
29
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Wiederholte Anweisungen, Zählschleifen (for)
● Zählschleifen werden in Matlab mit diskreten Intervallen angegeben:
● for t = 0 : 0.01 : 2*pi
● for k = 0 : N
●x(k+1) = sin(t)^k;
● end
● end
● for x = v wiederholt die Schleife für jedes Element des (Zeilen-) Vektors v, d.h. im i-ten Schleifendurchlauf ist x = v
i.
Schrittweite
Startwert
Zielwert
Zählvariable
Zählintervall
30
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Ein-/Ausgabe
● Eingabe von Variablen mit input, z.B.:
● >> N = input('Bitte geben Sie eine Zahl ein: ')
Bitte geben Sie eine Zahl ein: 42
N = 42
● Kompaktere Ausgabe von Werten mit disp(Ausdruck)
● Formatierte Ausgabe wie in C++ mit der Funktionfprintf(Formatstring, Variablenliste), z.B.:
● >> fprintf('A ist eine %dx%d-Matrix.\n', ... size(A,1),size(A,2))
A ist eine 3x4Matrix.
31
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Übersicht
● Allgemeines
● Variablen und Matrizen
● Darstellen von Funktionen
● Kontrollstrukturen für Programme
● Beispiele und Aufgaben
32
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Beispiel 1 – Plotten der Sinusfunktion
● % Plottet sin(x) auf dem Intervall [0,2π]
● x = linspace(0,2*pi,1000);
● y = sin(x);
● plot(x, y)
● title('sin(x)')
33
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Beispiel 1 – Plotten der Sinusfunktion
● % Plottet verschiedene Potenzen von sin(x)
● for k = 1 : 4
● subplot(2,2,k)
● x = linspace(0,2*pi,1000);
● y = sin(x).^k;
● plot(x, y)
● title(sprintf('sin(x)^%d',k))
● end
34
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Beispiel 2 – Größter gemeinsamer Teiler
● ggT von a und b berechnen:
1 solange b ≠ 0
1.1 r ← a modulo b
1.2 a ← b
1.3 b ← r
2 a zurückgeben
● function res = ggt(a,b)
● res = 0;
● while (b ~= 0)
●r = mod(a,b);
●a = b;
●b = r;
● end
● res = a;
● end
35
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Beispiel 2 – Größter gemeinsamer Teiler
● function res = ggt(a,b)
● res = zeros(size(a));
● for i = 1 : length(a)
●while (b(i) ~= 0)
● r = mod(a(i),b(i));
● a(i) = b(i);
● b(i) = r;
●end
●res(i) = a(i);
● end
● end
● ggT von a und b berechnen:
1 solange b ≠ 0
1.1 r ← a modulo b
1.2 a ← b
1.3 b ← r
2 a zurückgeben
● Bei Vektoren a, b als Eingabe: ggT elementweise berechnen
36
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
Aufgaben zur Vertiefung
● Plotten Sie die Sinus-Funktion auf dem Intervall [0, 2π] mit verschie-denen Schrittweiten.
● Plotten Sie die Funktion 1/|x| auf dem Intervall [-10, 10] mit verschie-denen Schrittweiten. Was fällt Ihnen auf?
● Implementieren Sie die Matlab-Funktion faculty(x,k), welche diek-te Fakultat von x berechnet (zur Erinnerung: x! = 1 · 2 · ... · k).
● Passen Sie die Funktion faculty so an, dass auch Vektoren x als Eingabe verwendet werden konnen. Die Ausgabe sei dann (x
1!, ..., x
n!).
● Implementieren Sie die Matlab-Funktion evalpoly(a,x), welche das Polynom mit dem Koeffizientenvektor a an der Stelle x auswertet, also a
1 + a
2x + ... + a
nxn-1. Verwenden Sie dabei das Horner-Schema und
berücksichtigen Sie auch Vektoren als Eingabe.
37
Institut für InformatikChristian-Albrechts-Universität, Kiel
www.mip.informatik.uni-kiel.de
… und vieles mehr
● Funktionen zur Bild- und Signalverarbeitung vorhanden
● Symbolisches Rechnen mit Symbolic-Toolbox möglich (Maple-Kernel)
● Toolboxen erlauben anwendungsspezifische Erweiterung
● Interaktion und GUI-Design
● Objekt-orientierte Programmierung ...
➔Siehe insbesondere auch die Matlab-Hilfe und Dokumentation!