Upload
dinhduong
View
264
Download
3
Embed Size (px)
Citation preview
Matlab
Eine Einführung
Quellen: Matlab – „Getting Started“ Guide (siehe Onlinehilfe Matlab)
http://www.rrz.uni-hamburg.de/RRZ/W.Wiedl/Skripte/Matlab/index.html
Praxiswerkstatt: Bildverarbeitung mit Matlab
Wintersemester 14/15
Christian Weigel, Thomas Lagemann
Inhalt
• Einführung
• Arithmetische Daten, Operationen und Ausdrücke
• Datenstrukturen
• Grafiken
• Programmierung
1. Einführung
• Was ist MATLAB ?
– Das MATLAB-System
• Die MATLAB-Dokumentation
– Die Online-Hilfe
– Direkte Hilfe in der Entwicklungsumgebung
• Starten und Beenden von MATLAB
• Der MATLAB - Desktop
1.1 Was ist MATLAB? (1/2)
• Werkzeug zur Berechnung, Visualisierung und Programmierung – intuitive Umgebung
– Nutzung bekannter mathematischer Notationen
– einfache Datenerfassung
– Auf numerische Lösungen spezialisiert
• Toolbox-Konzept – Sammlung anwendungsspezifischer Funktionen
• Kein Reservieren/Freigeben von Speicher nötig
• Einfache Erstellung grafischer Benutzeroberflächen
1.1 Was ist MATLAB? (2/2)
• Das MATLAB-System:
– Entwicklungsumgebung und Desktop-Tools
• Matlab-Desktop, Editor/Debugger, Code Analyzer…
– Mathematische Funktionsbibliothek
• Von einfachen (sin …) bis komplexen Fkt. (FFT…)
– Matlab-Programmiersprache
• Hochsprache (Flusskontrolle, Datenstrukturen … )
– Grafiken
• 2D / 3D-Plots, Animationen, Präsentationsgrafiken
– Schnittstellen/API
• Interaktion zwischen C/Fortran und Matlab
• Datenerfassung von externen Quellen
1.2. Matlab-Dokumentation
• Online-Hilfe
– Hauptkategorien (Mathematics, Graphics …)
• Auch als pdf verfügbar
– Funktionen (nach Kategorie, alphabetisch)
– Beispiele
• Hilfe im Commandwindow:
– help-Befehl help <Funktion>
– doc-Befehl doc <Funktion>
– lookfor
1.3. Starten und Beenden
• Beenden wie gewohnt möglich
• Befehl exit
• Befehl quit
1.4. Der Matlab-Desktop1
• Aufteilung in drei Fenster
– Command-Window
• Taschenrechner-Modus
– Command-History
• Nach Tagen sortiert
• Kommentare möglich
– Variablen/Workspace-Browser
• Schnelles Wählen des Arbeitsverzeichnisses
• Vordefinierte Plot-Möglichkeiten
• Array-Editor
1.4. Der Matlab-Desktop2
2. Arithmetische Daten,
Operationen und Ausdrücke
• Zahlenformate
• Variablen
• Arithmetische Operatoren
• Elementare Funktionen
• Arithmetische Ausdrücke
• Logische Ausdrücke
2.1. Zahlenformate
• Wertebereich in MATLAB:
– 1e-308 bis 1e308
– Genauigkeit: ungefähr 16 Dezimalstellen
• Erlaubte Schreibformen:
– Ganze Zahlen, z.B.: 3, -10, +28
– Dezimalbrüche, z.B.: 1.25, -.8, +4.
– Gleitkommazahlen, z.B.: 1e3, -4.5e8, +1.25e-4
– Komplexe Zahlen:
• Als Summe von Real und Imaginärteil, z.B.:
-3.25+1.5i, 4-.2j (i und j sind identisch)
• Zugriff auf Real/Imaginärteil mit real(Zahl) und
imag(Zahl)
2.2. Variablen
• Variablennamen:
– Immer mit Buchstaben beginnend
– Unbegrenzt viele Ziffern, Buchstaben und Underscores
• Aber: nur die ersten 31 Zeichen werden verglichen
– Case-sensitive
– Keine geschützten Namen (Schlüsselwörter)
• Knappe, sinnvolle Benennung!
– Z. B. entsprechend der Notation in bestimmten
Algorithmen
2.3. Arithmetische Operatoren
• Addition/Subtraktion: + bzw. -
• Multiplikation: * bzw. .*
• (Rechts)division: / bzw ./
• (Links)division: \ bzw. .\
– Bei Skalaren ist das Ergebnis der Kehrwert der normalen
Division
• Potenzieren: ^ bzw. .^
• Unäres + und -
• Ergebnisse Inf und NaN
2.4. Elementare Funktionen
• Trigonometrische Funktionen – sin, asin, sinh, asinh ….
• Exponentialfunktionen – exp, log, log2, log10, pow2, nextpow2, sqrt
• Komplexe Zahlen: – abs, angle, real, imag, conj …
• Runden: – Fix (towards zero), ceil, floor, round …
2.5. Arithmetische Ausdrücke
• Mehrere Operationen werden nach folgenden
Prioritätsstufen abgearbeitet:
– Klammerung ()
– 1. Potenzbildungen
– 2. unäres Plus/Minus
– 3. Multiplikation/Division
– 4. Addition/Subtraktion
• Bsp.: -2^2 = -4
2.6. Logische Ausdrücke
• Logische Operatoren: – Elementweise: &(AND), |(OR), ~(NOT), xor()
– Bitweise: bitand(), bitor() …
• Vergleichsoperatoren: – Zwei Argumente: < (lt), <= (le), >(gt), >=(ge), ==(eq), ~=(ne)
– Ein Argument: isnan(), isreal(), isfinite()
• Logische Ausdrücke: – 0|1+1|0 ans=1 (true)
– (0|1)+(1|0) ans=2 (arithmetische Wertung)
3. Datenstrukturen
• Was sind Datenstrukturen?
• Felder (Arrays) und Feldelemente
• Erstellen von Matrizen
• Spezielle Felder
• Zugriff auf Feldelemente
• Gestalt eines Feldes ändern
• Rechnen mit Feldern
3.1. Was sind Datenstrukturen
• Daten die aus einzelnen Elementen
zusammengesetzt sind
• Deren Elemente sind wiederum Datenstrukturen
oder skalare Daten
• Skalare in Matlab: komplexe und reelle Zahlen
3.2. Felder und Feldelemente
• Ein Feld ist eine Datenstruktur, deren Elementen alle von derselben „skalaren“ Datenart sind
• „Ein“- oder mehrdimensional Feldindices
• Matlab: Indices beginnen bei 1 und laufen in 1er-Schritten bis zur Länge der Dimension
• Elementarer Baustein ist Matrix – Skalar ist 1*1-Matrix
– Zeilenvektoren sind 1*n-Matrizen
– Spaltenvektoren sind n*1-Matrizen
3.3. Erstellen von Matrizen
• Eine m*n-Matrix besteht aus m Zeilen und n Spalten
• Direkte Eingabe – Spalten durch Leerstellen oder Kommas trennen
– Zeilen durch ein Semikolon trennen
– Gesamte Elementliste mit eckigen Klammern umschliessen (Ausnahme: Skalar)
– Bsp: >> Matrix=[1 2 3; 2 3 1; 3 1 2]
Matrix =
1 2 3
2 3 1
3 1 2
3.4 Spezielle Felder
• Felder mit Nullen und Einsen
– zeros(m<,n,p,..>), ones(m<,n,p,…>)
• Einheitsmatrix
– eye(m<,n>)
• Zufallsfelder
– rand(), randn()
• Magische Matrix und Pascalsches Dreieck
– pascal(), magic()
• Zeilenvektoren mit äquidistanten Werten
– linspace(<Start>,<Ende>,<Anzahl>)
– logspace() ….
3.5. Zugriff auf Feldelemente1
• Auf einzelne Elemente:
– Angabe der Indices in runden Klammern
• Bsp.: A=
-2 0 3
2 4 1
5 7 -8
– Nutzung des internen eindimensionalen Feldes
• Aus obigen Beispiel: A(7)=3, A(4)=0
A(1,1) = -2
A(3,2) = 7
3.5. Zugriff auf Feldelemente2
• Der Doppelpunktoperator „:“
– Zugriff auf einen Bereich
• Bsp.: A= -2 0 3
2 4 1
5 7-8
• Nutzung der speziellen Built-In-Funktion „end“ als
Indexangabe
A(1:2,2:3) ans = 0 3
4 1
A(3,:) ans = 5 7 -8
A(1,2:end) ans = 0 3
A(end,:) ans = 5 7 -8
A(:)‘ ans = -2 2 5 0 4 7 3 1 -8
3.6. Gestalt eines Feldes ändern
• Erstellen neuer Felder aus bereits vorhandenen – Bsp.: A= B=[A;2*A]; B=
-2 0 3 -2 0 3 -4 0 6
• Drehen: rot90()
• Vertauschen: fliplr(), flipud(), flipdim()
• Spalte(n) löschen: M(: , n1<:n2>) =[ ]
– Bsp.: B(:,2)=[] B=
-2 3
-4 6
• Zeile(n) löschen: M(m1<:m2>, : ) = [ ]
• Umformen: reshape(Matrix,Dim1,Dim2,…)
• Wiederholung: repmat(Matrix, [m n <p ..>])
• Aneinanderreihen: cat(Dim, M1, M2, M3)
Praktische Übung 1
• Lösen von Übungsblatt 1
3.7. Rechnen mit Feldern
• elementare Algebra beachten (Matrizen):
– Bsp.:
• Vektorrechnung
– Beachten: Zeilen- /Spaltenvektoren
A=[1 2 3] A*B=14 A*B‘=error
B=[1;2;3] B*A= B*A‘=error
1 2 3
4 6 2
9 3 6
A=[1 2 3] A.*B=error A‘.*B=1
B=[1;2;3] B.*A=error 4
A.*B‘ = 9
1 4 9
Praktische Übung 1
• Lösen von Übungsblatt 1
Praktische Übung 2
• Lösen von Übungsblatt 2
4. Grafiken
• Überblick über Plotfunktionen
• Einfache Plotfunktionen
• Drahtgitter und Oberflächenplots
• Visualisierung von Bilddaten
• Editieren von Plots
4.1 Überblick über Plotfunktionen
• Arten der Plotfunktionen:
– 2D/3D-Plots
– Typische Präsentationsgrafiken
• Darstellung der Daten:
– Linienstil, Marker, Achsenskalierung, Colormap
– Blickwinkel, Hintergrund Beleuchtung, Schattierung
• Achsenbeschriftung, Legende
• Plotte funktioniert wie eine „state-machine“.
Kommandos werden auf gerade aktive „figure“
angewendet
4.2 Einfache Plotfunktionen
• 2D-Plots:
– plot(<x>,<f(x)>,…)
• semilogy,semilogx
loglog, plotyy
• 3D-Plots:
– plot3(<x>,<y>,<z>,
…)
– Bsp.: Helix
t =
0:pi/50:10*pi;
plot3(sin(t),co
s(t),t)
4.3 Drahtgitter und Oberflächenplots
• 3D-Plots
– mesh(<x>,<y>,<z>,…)
– meshc, …
– Bsp.: [x y] = meshgrid(0:pi/16:2*pi,
0:pi/16:2*pi);
z=cos(x)+sin(y);
mesh(x,y,z);
– surf(<x>,<y>,<z>,…)
• surfc, …
– contour
• contour3, …
4.4. Visualisierung von Bilddaten
• image (Matlab-Built-In-
Function)
• imshow (Image-Toolbox)
– Bsp.:
A=[1 1 1 1 0 0 … ;
…
0 0 0 0 1 1 … ]
imshow(A,[]);
4.5. Editieren von Plots
• Umfangreiche Editierfunktionen im Property-Editor
– Definitions- und Wertebereich, Skalierung
– Linienfarbe, Marker
– Einbinden weiterer Datensätze
– Datensatzbrowser, beschreibende Texte, Hilfslinien
• Erstellte Plots können gespeichert werden
– Datensätze
– Eigenschaften
4.5. Editieren von Plots
• Plot Objects
• Lineseries (plot, plot3)
• line()
• Surfaceplot (surf, mesh) …
• Annotation Objects
4.5. Editieren von Plots
Manipulation über Object Handles
• Aktives Objekt
– Figure : gcf
• H = figure()
– Axes: gca
Manipulation von Objekteigenschaften
• set(H,'PropertyName',PropertyValue,...)
• get(H), get(H,'PropertyName')
• H =
findobj('PropertyName',PropertyValue,...)
Praktische Übung 3
• Lösen von Übungsblatt 3
5. Programmierung
• Flußkontrolle
• Skripte und Funktionen
5.1 Flußkontrolle
• Allgemein: – zur Wiederholung gleicher Vorgänge
– Zur bedingten Ausführung von Programmteilen
• Verzweigungen: – if, elseif, else und end
– switch, case, otherwise und end
• Schleifen: (LOOPs are EVIL – nicht mehr 2014!) – for, break und end
– while, break und end
5.1.1. Verzweigungen
if <Bedingung>
<Anweisungsblock>
else
if <bedingung>
<Anweisungsblock>
else
<Anweisungsblock>
end
end
- 0 und [] werden als „false“ gewertet
- NaN und komplexe Zahlen sind nicht zugelassen
- Inf wird als „true“ gewertet
5.1.2.Fallunterscheidungen
switch <Variable>
case <Wert1>
<Anweisungen>
case <Wert2>
<Anweisungen>
otherwise
<default-Anweisung>
end
- In Matlab wird nur der erste Anweisungsblock, dessen Fallangabe zutrifft ausgeführt
5.1.3 Zählschleifen
for <Schleifenvariable> = <Bereichsangabe>
Schleifenblock
end
Bereichsangabe:
Anfangswert : Schrittweite : Endwert
Dezimalbrüche sind erlaubt
5.1.4. While-Schleifen
• while <Schleifenbedingung>
<Schleifenkörper>
end
• Bedingung wird vor jedem Durchlauf geprüft
– Wert der Schleifenbedingung muss im Schleifenkörper
beeinflusst werden
5.2 Skripte und Funktionen (1/2)
• Editor/Debugger – M-Files
• Unterscheidung zwischen Skripten und Funktionen
– Skripte
• Folge von Anweisungen
• Keine Parameterübergabe bzw. Rückgabewert
– Funktionen
• Parameterübergabe
• Liefert als Rückgabewert Ergebnis
• Dienen als Erweiterung des Funktionsvorrates
5.2 Skripte und Funktionen (2/2)
• Form einer Funktion:
function [rückgabewerte]=FName(<Argumentliste>)
% <Helptext Start>
% <0 bis n Zeilen Help Text>
<Funktionskörper in dem insbesondere der
Funktionswert festgelegt wird.>
rückgabewert= …;
Praktische Übung 4
• Lösen von Übungsblatt 4
Literaturhinweise
• MATLAB-Tutorials / Matlabhilfe
• C. Überhuber, S. Katzenbeisser, D. Praetorius, „MATLAB 7: eine
Einführung“, Springer 2005
79 INF ST 601 M36 U22 M43 – ISBN: 3-211-21137-3
• F. Grupp, F. Grupp, „MATLAB 7 für Ingenieure“, Oldenburg 2004
79 INF ST 601 M36 G892 – ISBN: 3-486-27584-4
• W. Schweizer, „Matlab kompakt“, Oldenburg 2005
79 INF ST 601 M36 S413 – ISBN: 3-486-57758-1