Daniel Schrammel
- BA Stuttgart -
Matlab – Simulink – Stateflow
Daniel Schrammel
BA Stuttgart
Oktober - Dezember 2006
Daniel Schrammel
- BA Stuttgart -
Inhalt
5. Allgemeines
6. Matlab Grundlagen
Daniel Schrammel
- BA Stuttgart -
5. Allgemeines
Daniel Schrammel
- BA Stuttgart -
Was ist Matlab ?
• Toolkette bzw. Programmierumgebung für mathematische Berechnungen,
Analysen und Simulationen
• MATrixLABoratory
• Matlab = textuelle Programmierung
– Matlab ist keine Compiler, sondern eine Interpretersprache
• Simulink = grafische Programmierung
• Stateflow = zustandsbasierte Programmierung
MATLAB
Simulink
Stateflow
5-1
Daniel Schrammel
- BA Stuttgart -
Was kommt nach Matlab ?
• diverse Erweiterungen und Toolschnittstellen
• Beispiel:
– RealTimeWorkShop zur C-Codeerzeugung
– dSpace TargetLink zur C-Codegenerierung „TargetCode“
MATLAB
Simulink
Stateflow
Targetlink
5-2
Daniel Schrammel
- BA Stuttgart -
Geschichte
• 1980 Cleve Moler erstellt erste Version in Fortran
• 1984 Gründung von „The MathWorks“
• 2000 Vertretung in Deutschland
• 2001 750 Mitarbeiter
• 2005 1300 Mitarbeiter
• Kunden und Anwendungen in Industriezweigen:
– Automobilindustrie, Luft- und Raumfahrt, Umwelt, Telekommunikation,
Finanzen, Medizin etc.
• Selbstbild von The MathWorks:
– MATLAB-Anwender ... erweitern unser Wissen über die Erde, die Umwelt und
das Universum. Sie machen unsere Fahrzeuge sicherer ... verbessern die
Luftfahrtsicherheit. Sie machen unsere Telefongespräche ... Sie erzielen
Fortschritte in der medizinischen Forschung ... Sie suchen nach neuen
Energiequellen.
5-3
Daniel Schrammel
- BA Stuttgart -
Was kostet Matlab ?
• Netzwerk- bzw. Gruppenlizenz
(Basis offizielle Preisliste 2003)
– Matlab 2.160 € + 432 € p.a.
– Simulink 3.150 € + 636 € p.a.
– Stateflow 3.150 € + 636 € p.a.
– RealTimeWorkshop 8.460 €
– ImageProcessing Toolbox 1.035 €
– Neuronal Network Toolbox 1.035 €
5-4
Daniel Schrammel
- BA Stuttgart -
6. Matlab Grundlagen
Daniel Schrammel
- BA Stuttgart -
Startbildschirm
WorkSpace /
Directory
CommandWindow
CommandHistory
6-1
Daniel Schrammel
- BA Stuttgart -
Matlab an der BA-Stuttgart
• ver = Abfrage der aktuell installierten Programme,
Erweiterungen und Versionen
-------------------------------------------------------------------------------------
MATLAB Version 7.1.0.246 (R14) Service Pack 3
MATLAB License Number: 264000
Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 2)
Java VM Version: Java 1.5.0 with Sun Microsystems Inc. Java HotSpot(TM)
Client VM mixed mode
-------------------------------------------------------------------------------------
MATLAB Version 7.1 (R14SP3)
Simulink Version 6.3 (R14SP3)
Image Acquisition Toolbox Version 1.9.1 (R14SP3+)
Image Processing Toolbox Version 5.1 (R14SP3)
Real-Time Workshop Version 6.3 (R14SP3)
Signal Processing Blockset Version 6.2 (R14SP3)
Signal Processing Toolbox Version 6.4 (R14SP3)
Stateflow Version 6.3 (R14SP3)
Video and Image Processing Blockset Version 2.0 (R14SP3+)
xPC Target Version 2.8 (R14SP3)
6-2
Daniel Schrammel
- BA Stuttgart -
Versionen und Erweiterungen
• Version 6.5 R13 SP1
• Version 7 R14 SP3
• Toolbox = Erweiterung unter Matlab
• Blocksets = Erweiterung unter Simulink
• Achtung:
Immer wieder werden viele Details zwischen den Releases geändert !
6-3
Daniel Schrammel
- BA Stuttgart -
Hilfe & Dokumentation
6-4
Daniel Schrammel
- BA Stuttgart -
Hilfe & Dokumentation
• helpbrowser
6-5
Daniel Schrammel
- BA Stuttgart -
Rechnerleistung
• bench
6-6
Daniel Schrammel
- BA Stuttgart -
Shortcuts & Tipps
• Variablennamen sind case sensitive
• ArrayEditor mit Doppelklick auf Variable im Workspace erreichbar
• ESC = löscht aktuelle Zeile im „Command Window“
6-7
Daniel Schrammel
- BA Stuttgart -
Shortcuts & Tipps
• ans = Standardrückgabe, Variable
• ; = Unterdrückung des Echo bzw. Ausgabe der Antwort
• Befehle der „Command History“ können per Drag and Drop in das
„Command Window“ gezogen werden
6-8
Daniel Schrammel
- BA Stuttgart -
Shortcuts & Tipps
• TAB = Vervollständigung der Befehle
im „Command Window“
– 1x bei eindeutiger Vervollständigung
– 2x bringt passende Auswahl der Vervollständigung
• = Befehlshistorie der „Command History“
6-9
Daniel Schrammel
- BA Stuttgart -
Basis-Befehe
• clc = clear „Command Window“
• clear = clear Workspace
• dir = directory listing
• pwd = print working directory
• cd C:\Daten = change directory
• Alternativ: Bedienung im DirectoryBrowser
6-10
Daniel Schrammel
- BA Stuttgart -
Variablen
• Variablentypen:
– array, struct, char, string (char array), cell, single, double, int8, int16, uint8, uint16
• Variablen brauchen nicht explizit angelegt werden
• Ausgaben der Befehle können direkt in Variablen geschrieben werden
z.B.: abc = dir; (ansonsten Standardvariable ans)
• Größenangabe a x b
– a = Anzahl Elemente in Variable
– b = Anzahl „Zeichen“ in Element
6-11
Daniel Schrammel
- BA Stuttgart -
Der Workspace
• Abbild des aktuellen Arbeitsspeichers der Matlab-Sitzung
• Darstellung von Name, Größe, Speicherbedarf und Typ (Variablenklasse)
• who = Auflistung aller Variablen
im Command Window
• whos = Auflistung aller Variablen
(inkl. der Eigenschaften)
6-12
Daniel Schrammel
- BA Stuttgart -
Matrizen
• (m,n)-Matrix = m-Zeilen und n-Spalten
– ; = neue Zeile
– , = neue Spalte (optional durch Leerzeichen ersetzbar,
besonders bei nur einer Zeile)
– : = „von bis“ bzw. Schrittweite (default = 1)
– linspace (m,n,k) = „von bis“ in k-Schritten (linear)
6-13
Daniel Schrammel
- BA Stuttgart -
Matrizen
• size(x) = Größe einer Matrix in Zeilen, Spalten
• x(m,n) = Zugriff auf Element m,n
– : = Platzhalter für ganze Zeile bzw. Spalte
– end = letztes Element der Matrix, z.B. x(end) = 99;
• Zeilen- bzw.
Spaltenvektoren
nachträglich hinzufügen
6-14
Daniel Schrammel
- BA Stuttgart -
Matrizen
• (fast) alle mathematischen Funktionen sind zugelassen
– a = x(2,1) + x(2,2)
– .* = elementweise Multiplikation
• viele Analysefunktionen sind vorhanden
– sum(x) = spaltenweise Summe der Matrix
– cumsum(x) = spaltenweise kummulierte Summe der Matrix
– prod(x) = spaltenweises Produkt
– median(x) = Werte in der „Mitte“
– hist(x) = Häufigkeitsverteilung der Werte
6-15
Daniel Schrammel
- BA Stuttgart -
Matrizen
• Spezielle Matrizen
(Befehle teilweise auch ohne Argumente für Variablen nutzbar)
– zeroes (m,n) = Null-Matrix
– ones (m,n) = Eins-Matrix
– eye (m,n) = Einheitsmatrix
– rand (m,n) = Zufallsmatrix
– inv (A) = Inverse von A,
A * inv(A) = Einheitsmatrix
6-16
Daniel Schrammel
- BA Stuttgart -
Zahlen- bzw. Anzeigeformate
• komplexe Zahlen:
– Vorsicht bei Schleifenvariablen !
• format = Umstellung der Anzeigeoption
für Zahlen, ohne Argument,
um default wieder herzustellen
6-17
Daniel Schrammel
- BA Stuttgart -
mathematische Funktionen
• Wie in einem wissenschaftlichen grafikfähigen Taschenrechner sind viele
mathematische Grundfunktionen natürlich auch in Matlab verfügbar !
• teilweise anwendbar auf Variablen und Matrizen
– sin () = Sinus
– cos () = Cosinus
– tan () = Tangens
– sinh () = Sinus hyperbolicus
– asin () = arcus Sinus
– abs () = Betrag
– sqrt () = Quadratwurzel
– real () / imag () = Realteil bzw. Imaginärteil einer komplexen Zahl
– round () = Runden (ganzzahlig)
– log () = natürlicher Logarithmus
– log10 () = Logarithmus zur Basis 10
– exp () = e hoch x (Exponential der Basis e)
– y = x.^2 = Quadrat aller Elemente von x
6-18
Daniel Schrammel
- BA Stuttgart -
Logische Operatoren
• anwendbar auf Variablen und Matrizen
– & = log. UND
– | = log. ODER
– ~ = log. NICHT
6-19
Daniel Schrammel
- BA Stuttgart -
Polynome
• Polynome werden als Vektoren (Matrix, Array) dargestellt
– p = [2 2 1]; = p(x) = 2x2
+ 2x + 1
• Verfügbare Funktionen
– roots (p) = Nullstellen
– poly (r) = Polynom für Nullstellen
– polyfit (x,y,n) = Polynombildung (Interpolation) durch Punkt x,y
des n-ten Grades
⇒ x und y können auch Vektoren gleicher Dimension sein
– polyval (p,x) = Werteberechnung
y = p(x) = f(x)
6-20
Daniel Schrammel
- BA Stuttgart -
Interpolation
• interp1(x,y,xi,method) = führt (eindimensionale) Interpolation
der Punkte x,y an den Stellen xi durch
• Beispiel:
– x = [-2 –1 0 1 2];
– y = x.^2
– xi = [-2:0.1:2]
– yi = interp1 (x,y,xi,method)
• Methoden:
– nearest
– linear
– spline
– cubic
• Interpolation für 2 und 3 Dimensionen vorhanden (interp2, interp3)
6-21
Daniel Schrammel
- BA Stuttgart -
grafische Darstellung
• plot () = Erstellung einer grafischen Ausgabe, das figure-window
plot (p) plot (x,y)
x2 = -2.5:0.1:2.5
y2 = polyval(p,x2)
plot(x,y,'ro',x2,y2)
6-22
Daniel Schrammel
- BA Stuttgart -
grafische Darstellung
• Stilparameter (Farben und Formen)
• hold on / hold off = ermöglicht mehrere Funktionen in
ein figure-window zu zeichnen
• grid on / grid off = Gitternetzlinien ein- / ausschalten
• xlabel / ylabel = Achsenbeschriftungen
• title () = Diagrammtitel
• text (x,y,‘‘) = Textfeld mit Positionsangabe
• Sonderzeichen
– xlabel(‘0 \leq x‘) = less or equal
– ylabel(‘0\geq y‘) = greater or equal
Farben Linien Markierungen
B blau - +
W weiß -- o
Y gelb : *
R rot -. Square
G grün <none> <
6-23
Daniel Schrammel
- BA Stuttgart -
grafische Darstellung
• axis = beeinflusst die Achsendarstellung
– axis ( [xmin xmax ymin ymin])
– axis on / axis off = Achsendarstellung ein- / ausschalten
– axis normal = Achsen ergeben sich aus Daten
• area (x,y) = Kurve mit Flächenfüllung
• stairs (x,y) = Treppenfunktion
• stem (x,y) = Darstellung von Einzelpunkten
6-24
Daniel Schrammel
- BA Stuttgart -
grafische Darstellung
• stem3 (x,y,z) = Darstellung von räumlichen Einzelpunkten
• plot3 (x,y,z) = Darstellung von Kurven im Raum
• Achtung:
In einem figure-window kann nur eine 3D-Kurve dargestellt werden !
• view (S, E) = Verschiebung des Sichtwinkels
– S = Seitenwinkel (-37° default)
– E = Erhebungswinkel (30° default)
• subplot (Zeilen, Spalten, Index)= Aufteilung eines figure-window
– Subplot muss aufgehoben werden
6-25
Daniel Schrammel
- BA Stuttgart -
grafische Darstellung
• fplot (‘Function‘, [xmin, xmax]) = Funktionsdarstellung
– Function = sin, cos, tan etc.
• Zugriff auf grafische Objekte über einen handle (vgl. Zeiger oder ID)
• handle ist Rückgabewert des Plotbefehls bzw. anderer Darstellungen oder
– gcf = get current figure
– gco = get current object
• handle = 0 für das CommandWindow
• Objekte
– uicontrol() = grafisches Objekt, z.B. Pushbutton
– uicontrol (‘style‘‚‘edit‘)
– set (handle) = Anzeige aller Objekteigenschaften
– set (handle,‘Eigenschaft‘,‘Wert‘) = Setzen der Objekteigenschaft
– get (handle, ‘Eigenschaft‘) = Ausgeben der Objekteigenschaft
6-26
Daniel Schrammel
- BA Stuttgart -
Datentypen: structures
• Ein array mit Datenfelder ist ein structure !
• Versuch.Name = ‘abc‘;
Versuch.Gehalt = 123;
Versuch(3).Name = ‘ghi‘;
Versuch(2).Gehalt = 456;
• Anwendbare Befehle:
– size (Versuch)
– fieldnames (Versuch)
– struct () = explizite Bildung eines structure
Versuch
Name Gehalt
abc 123
456
ghi
6-27
Daniel Schrammel
- BA Stuttgart -
Datentypen: cells
• Cells sind „Container“ für alle anderen Datentypen, so können cells
z.B. mehrere Matrizen enthalten
• Notation über geschweifte Klammer, direkte Adressierung
– Beispiel(1,1) = {‘Beispielname‘}
– Beispiel(1,2) = {[1 2 3]}
• Anwendbare Befehle:
– celldisp () = textuelle Darstellung des cell-Inhaltes
– cellplot () = grafische Darstellung des cell-Inhaltes
– cell () = explizite Bildung eines cell
6-28
Daniel Schrammel
- BA Stuttgart -
Datentypen: strings
• disp (‘abc‘) = Ausgabe von Zeichenketten
• sprintf () = formatierte Ausgabe von Zeichenketten, vgl. C, C++
– %d = Platzhalter für double-Ausgabe
– %s = Platzhalter für string-Ausgabe
– %f = Platzhalter für fixed point-Ausgabe
• Anwendbare Befehle:
– num2str() = konvertiert Zahl zu string
– str2num() = konvertiert string zu Zahl
– strcmp() = vergleicht 2 strings
• Weitere Umwandlungen:
– hex2dec()
– bin2dec()
6-29
Daniel Schrammel
- BA Stuttgart -
Variablen permanent speichern
• save filename a b = speichert die Variablen a und b
in filename.mat im aktuellen Verzeichnis
• load filename = lädt die Datei filename.mat und
erzeugt die gespeicherten Variablen
im Workspace
• Option –append fügt die Daten an bestehende Datei an, gleich benannte
Variablen werden überschrieben !
6-30
Daniel Schrammel
- BA Stuttgart -
Logbuch
• diary filename = speichert alle Ein- und Ausgaben des
Command Window in die Datei filename
im aktuellen Verzeichnis
• diary off = beendet Logbuch-Funktion, speichert Datei
6-31
Daniel Schrammel
- BA Stuttgart -
Scripte schreiben
• Alle Befehle können auch in Dateien mit der Endung .m gespeichert und mit
dem Aufruf aus dem Command Window ausgeführt werden !
• Aufruf des Matlab-Editors edit neu.m
– Nicht vorhandene Dateien werden angelegt !
• Anwendbare Befehle:
– mkdir(‘name‘) = erstellt einen Ordner im aktuellen Arbeitsverzeichnis
– !md name = ! führt Betriebssystembefehle aus
• Dateikopf kann als Hilfeausgabe benutzt werden !
– % als Kommentarzeichen
6-32
Daniel Schrammel
- BA Stuttgart -
Scripte schreiben
• Funktionen können in m-Dateien ausgelagert werden, dabei sollte die
Funktion gleich dem Namen der Datei sein !
• Aufruf über wuerfel(2,2,2)
• Definition von Ein- und Ausgabewerten im Funktionskopf
• nargin gibt die Anzahl der
Eingabewerte zurück
• Subfunktionen sind nur aus
der Hauptfunktionen aufrufbar !
6-33
Daniel Schrammel
- BA Stuttgart -
Scripte schreiben
• eval() = Ausführung von Matlab-Strings
– z.B.: eval (‘load filename‘);
– sinnvoll, wenn Befehle in Funktionen und Schleifen erstellt werden
• Dateihandling
– fid = fopen(‘Name‘, ‘Option‘); = Datei unter Verwendung der
eindeutigen ID öffnen
– status = fclose(fid); = Datei mit der ID schließen
• Option:
– r = lesend
– w = schreibend (wenn nicht vorhanden erstellen)
– a = anhängend
– r+ = lesend und schreibend
• Status:
– 0 = erfolgreich
6-34
Daniel Schrammel
- BA Stuttgart -
Scripte schreiben
• fprintf() = Schreiben in Dateien
• fscanf() = Lesen aus Dateien
– \n = Zeilenumbruch einfügen
– \t = TAB einfügen
• a = input (‘Frage‘)
weißt der Variablen a
den Userinput zu
• pause = wartet auf Tastendruck
• Steuerelemente
(ähnlich zu anderen Programmiersprachen):
– if, elseif, end
– switch, case, end
– try, catch
– for, end
– break
6-35
Daniel Schrammel
- BA Stuttgart -
Scripte debuggen
• Breakpoints im m-File setzen
• Am Breakpoint: „K>>“ im Command Window zur Analyse nutzen
• Variablenwerte mittels Tooltipp abfragbar
• Debugger verlassen oder zum
nächsten Breakpoint springen
6-36
Daniel Schrammel
- BA Stuttgart -
Was gibt es noch ?
• startup.m
– In dieser Datei sind Initialisierungen eingetragen und können entsprechend
erweitert und verändert werden !
– z.B.: Arbeitspfade, Startdialoge, defaultwerte für Ausgaben etc.
• Zeiten
– clock = liefert Systemdatum und Systemzeit
– tic = startet Stopuhr
– toc = stoppt Stopuhr, gibt die vergangene Zeit seit tic aus
• guide = graphical user interface development environment
– Erstellung einer grafischen Oberfläche ohne Programmieraufwand
– Ergebnis sind .fig und .m Dateien, die eingebunden werden können
• magic (n) = liefert eine Matrix n x n, bei der alle Zeilen, Spalten
und Diagonalen immer die gleiche Summe haben
und jede Zahl nur einmal verwendet wird
6-37
Daniel Schrammel
- BA Stuttgart -
Was gibt es noch ?
• Lösungen von Differentialgleichungen
– ode45 () ordinary differential equation, solver,
siehe Simulink Grundlagen !
• Einbinden von vorhandenen C-Code
– mex wandelt C-Dateien in DLL‘s um
• Achtung:
– Rechengenauigkeit beachten: sin(pi) = 1 * 10
-16
– eps liefert epsilon (kleinste Rundung)
6-38