33
... und noch eine - Einführung in die MATLAB - Programmierung M. Schlup 11. Juni 2010 Inhaltsverzeichnis 1 Kurzportrait der Programmiersprache MATLAB 3 1.1 Benutzer-Oberfläche ................................. 3 1.2 Allgemeine Eigenschaften .............................. 3 1.3 Eingabe-Formate ................................... 5 1.4 Grundoperationen .................................. 6 1.4.1 Elementare Operatoren ........................... 6 1.4.2 Doppelpunktoperator ............................ 6 1.5 Elementare mathematische Funktionen ....................... 8 1.6 Einfache Graphische Darstellungen ......................... 9 1.6.1 Zweidimensional ............................... 9 1.6.2 Dreidimensional, 3D-Graphik ........................ 11 1.7 Kontrollstrukturen .................................. 12 1.7.1 Wiederholungsschleife (for-loop) ...................... 12 1.7.2 Bedingte Schleife mit Vorabprüfung .................... 13 1.7.3 Bedingte Anweisungen ohne und mit Alternative ............. 14 1.7.4 Fallunterscheidung .............................. 15 1.8 Datentypen und -strukturen ............................. 16 1.9 Benutzerdefinierte Funktionen ............................ 18 1.9.1 Funktionen .................................. 18 1.9.2 Funktionszeiger ................................ 19 1.10 Programmierhinweise und Dokumentation ..................... 21 1.10.1 MATLAB-Skript (m-File) .......................... 21 1.10.2 Datenmanagement .............................. 22 1.10.3 Hilfe, Beispiele und Vorlagen ........................ 23 1.10.4 Debuging ................................... 23 2 Ausgewählte Themen 24 2.1 Graphical User Interface (GUI) ........................... 25 2.2 Einführung in die Simulationstechnik mit SIMULINK .............. 25 2.3 C-Compiler ...................................... 27 2.4 Einführung in symbolisches Rechnen (Symbolic Toolbox) ............. 28 1

und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

  • Upload
    doanque

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

Page 1: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

... und noch eine - Einführung in dieMATLAB - Programmierung

M. Schlup

11. Juni 2010

Inhaltsverzeichnis

1 Kurzportrait der Programmiersprache MATLAB 31.1 Benutzer-Oberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Allgemeine Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Eingabe-Formate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4 Grundoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.4.1 Elementare Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4.2 Doppelpunktoperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.5 Elementare mathematische Funktionen . . . . . . . . . . . . . . . . . . . . . . . 81.6 Einfache Graphische Darstellungen . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.6.1 Zweidimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6.2 Dreidimensional, 3D-Graphik . . . . . . . . . . . . . . . . . . . . . . . . 11

1.7 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.7.1 Wiederholungsschleife (for-loop) . . . . . . . . . . . . . . . . . . . . . . 121.7.2 Bedingte Schleife mit Vorabprüfung . . . . . . . . . . . . . . . . . . . . 131.7.3 Bedingte Anweisungen ohne und mit Alternative . . . . . . . . . . . . . 141.7.4 Fallunterscheidung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.8 Datentypen und -strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.9 Benutzerdefinierte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.9.1 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.9.2 Funktionszeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.10 Programmierhinweise und Dokumentation . . . . . . . . . . . . . . . . . . . . . 211.10.1 MATLAB-Skript (m-File) . . . . . . . . . . . . . . . . . . . . . . . . . . 211.10.2 Datenmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.10.3 Hilfe, Beispiele und Vorlagen . . . . . . . . . . . . . . . . . . . . . . . . 231.10.4 Debuging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2 Ausgewählte Themen 242.1 Graphical User Interface (GUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 Einführung in die Simulationstechnik mit SIMULINK . . . . . . . . . . . . . . 252.3 C-Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4 Einführung in symbolisches Rechnen (Symbolic Toolbox) . . . . . . . . . . . . . 28

1

Page 2: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

Inhaltsverzeichnis

MATLAB ist eine kommerzielle Software der Firma The MathWorks, Inc.. MATLAB wurdeEnde der 1970er Jahre von Cleve Moler (cf. Abbildung 1) an der Universität New Mexicoentwickelt, um die Programm-Bibliotheken LINPACK und EISPACK für lineare Algebra ohneFortran-Programmier-Kenntnisse zugänglich zu machen. Der Name des Programms leitet sich

Abbildung 1: Cleve Barry Moler (1939 - ), Entwickler von MATLABGründer von MathWorks in 1984 zusammen mit Jack Little

von MATrix LABoratory ab. MATLAB ist primär für numerische Berechnungen mit Matrizenausgelegt und eignet sich daher zur Lösung mathematischer Probleme und zur graphischenDarstellung der Ergebnisse. Zu MATLAB wurden eine ganze Reihe von so genannten Tool-boxes für verschiedene technische und nicht-technische Anwendungen kreiert. Einen Überblickgibt folgende URL: http://www.mathworks.com/products/product_listing/. Erwähnenswert istdie Symbolic Math Toolbox, welche es ermöglicht neben den numerischen auch symbolische Be-rechnungen anzustellen. Ferner gibt es noch ein Simulations-Softwarepaket mit der BezeichnungSimulink: http://www.mathworks.com/products/simulink/.

Dieses Dokument soll den Studenten anregen, selber die Eigenheiten und Möglichkeiten vonMATLAB zu erkunden. Dabei ist es ratsam, die vorgestellten MATLAB-Befehle mit einemRechner unmittelbar zu überprüfen und mit MATLAB zu „spielen“, indem alle möglichen Va-

rianten ausprobiert werden. Es dürfte auch klar sein, und wenn nicht, sollte sich der Leser diesmerken, dass in dieser Anleitung nur ein sehr kleiner Teil der MATLAB Möglichkeiten undFunktionen vorgestellt werden können. In den Übungen zu dieser Einführung, sind noch vieleweitere MATLAB-Funktionen, Anwendungsbeispiele und -konzepte zu finden, desshalb ist esunerlässlich sich auch mit diesen intensiv zu befassen, wenn die ganze Arbeit einen Sinn ergebensoll.

Abgesehen von der Tatsache, dass eine Programmiersprache nur dann gelernt werden kann,wenn man sie auch für konkrete Aufgaben regelmässig und intensiv benutzt, bringen Stu-dieren und Lesen alleine mit Sicherheit überhaupt nichts als reiner Zeitverlust.

2

Page 3: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Eigentlich ist dieses Dokument wegen dem weltweiten Überschuss an MATLAB-Literaturmehr als überflüssig und eine Empfehlung weiterführender Literatur ebenfalls1. Dennoch seiendie folgenden Links erwähnt, unter denen, neben der Getting Started-Hilfe deren Link beimStart von MATLAB angezeigt wird, Sinnvolles gefunden werden kann: Der Einstieg in dieMATLAB Schulung (tutorials) bei Mathworks (1) und einer, zur Zeit noch verfügbaren (2010),Literaturablage bei der Uni Bremen (2). Ein Buch scheint ebenfalls sich vom ganzen Haufenabzuheben: der MATLAB Guide von Desmond und Nicholas Higham (3)2.

Auf jeden Fall bieten die zur MATLAB-Help-Dokumentation gehörenden Selbstlerneinhei-ten (tutorial) nicht nur Hilfe für die Benutzung von MATLAB, sondern auch wertvolleEinblicke in die damit behandelten Aufgaben, inklusive dazugehörende Theorie.

Die in diesem Dokument enthaltenen Programme wurden mit der MATLAB Version R2007b(Student-Version) auf Mac OSX 10.5.8 getestet und sollten daher auch funktionieren3.

1 Kurzportrait der Programmiersprache MATLAB

1.1 Benutzer-Oberfläche

Nach dem Start von MATLAB erscheinen mehrere Ein-/Ausgabefenster. Das Command Win-dow ist für die Eingabe der Anweisungen nach der Eingabeaufforderung (prompt) >> und fürdie Ausgabe der Ergebnisse vorgesehen. MATLAB ist ein Interpreter : eingegebene Anweisun-gen werden unverzögert ausgeführt und ihr Ergebnis unmittelbar angezeigt. Diese Anzeigenwerden als Echo bezeichnet. Ferner gibt es eine Arbeitsumgebung, das Workspace-Fenster indem eine Liste mit sämtlichen Variablen enthält, welche in der aktuellen MATLAB-Sitzungdefiniert wurden.

1.2 Allgemeine Eigenschaften

In der folgenden Auflistung finden Sie einige grundlegende Merkmale von MATLAB:

• Variablen- und Funktionsnamen müssen mit einem Buchstaben beginnen und dürfenkeine Sonderzeichen wie z. B. Punkt, Komma, Bindestrich oder Umlaute enthalten. AlsSonderzeichen ist der Unterstrich (underscore) _ allerdings erlaubt.

• MATLAB ist empfindlich auf Gross- bzw. Kleinschreibung der Variablen- und Funktions-namen. Diese Unterscheidung kann notfalls unterdrückt werden, dies ist aber nicht zuempfehlen.

1 Das Beschaffen irgend eines Nachschlagwerkes zum Thema erübrigt sich meiner Meinung nach: meineMATLAB-Kenntnisse habe ich mir ohne solche angeeignet. Das geht!

2 Da ich es weder gekauft noch näher studiert habe, ist die Empfehlung leider ohne Gewähr...3 Einzelne Funktionen wie z. B. mean und Konzepte wie das der Funktionszeiger (function-handle) funktio-

nieren allerdings mit älteren MATLAB-Versionen nicht.

3

Page 4: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

• MATLAB rechnet generell mit Matrizen mit komplexen Elementen4. Ein Skalar ent-spricht dabei einer 1 × 1-Matrix, ein Zeilenvektor einer n × 1-Matrix und ein Spalten-

vektor einer 1 × n-Matrix. MATLAB unterscheidet demzufolge zwischen Spalten- undZeilenvektoren.

• Die imaginäre Einheit√−1 ist sowohl als i als auch als j vordefiniert. Eine Neudefinition

von i, z. B. mit der Anweisung >> i=2, überschreibt die ursprüngliche Bedeutung.

• Bei Zahlen wird die Kommastelle als Dezimalpunkt geschrieben.

• Die Konstante π ist vordefiniert und lautet symbolisch pi.

• Unendlich ∞ wird in MATLAB mit Inf dargestellt. Eine Division einer endlichen Zahlverschieden von Null durch Null ergibt Inf und führt nicht zu einem Programmabsturz.Unbestimmte Ausdrucke wie z. B. 0/0, 0*Inf oder Inf/Inf ergeben ein so genanntesNot-a-Number NaN.

• Mit der Anweisung >> who erscheint die Variablenliste im Command-Window. Einzel-ne Variablen können mit dem Befehl >> clear var1 var2 gelöscht werden; >> clearalleine löscht sämtliche Variablen aus der Workspace.

• Wird eine Anweisung mit einem Strichpunkt (semicolon) ; abgeschlossen, so wird dasEcho unterdrückt.

• Alles was in einer Eingabezeile rechts vom einem %-Zeichen steht, wird als Kommentar

betrachtet.

• Die Eingabe erfolgt zeilenweise, sofern der Eingabebefehl abgeschlossen ist.

• Drei aufeinander folgende Punkte ... dienen als Fortsetzungszeichen, wenn die Eingabeauf einer Folgezeile weitergeführt werden soll.

• Leerzeilen werden ignoriert.

• Die im Laufe einer MATLAB-Sitzung eingetipten Anweisungen werden in der CommandHistory gespeichert und können unter anderem mit den Pfeiltasten einfach zurückgeholtwerden.

• Eine MATLAB-Sitzung kann mit der Eingabe >> quit oder mit dem Befehl Exit MATLABaus dem File-Menu beendet werden. Dabei wird die Arbeitsumgebung unwiderruflichgelöscht.

• Es ist möglich die einzelnen (zeilenweise eingegebenen) Anweisungen in ein so genann-tes m-File zu schreiben. Letzteres kann editiert und ausgeführt werden, als ob es einkompiliertes Programm wäre, in dem der Name des m-Files wie eine MATLAB-Funktionbenutzt werden kann. Die m-Files werden unter einem Namen mit der Extension .m ab-gelegt, wobei geachtet werden muss, dass keine reservierte Funktionsnamen und keine

Sonderzeichen benutzt werden.4 Komplexe Zahlen sind eine Erweiterung der reellen Zahlen um die imaginären Zahlen. Komplexe Zahlen

bestehen aus einem reellen und einem imaginären Teil. Man kann aber komplexe Zahlen auch in polarer Formmit Betrag (Modul) und Winkel (Argument) darstellen. Die imaginäre Einheit ist dabei die Quadratwurzelvon −1 und wird üblicherweise in der Mathematik mit i und in der Elektrotechnik mit dem Symbol jbezeichnet: i ≡

√−1.

4

Page 5: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

• In MATLAB können Funktionen aus anderen Programmiersprachen wie z. B. Java oderC eingebunden werden und umgekehrt, kann MATLAB von anderen Programmierumge-bungen aus benutzt werden.

1.3 Eingabe-Formate

Im folgenden Abschnitt werden die einfachsten Daten-Formate und Eingaben vorgestellt. Ne-ben Matrizen, Vektoren und Skalaren gibt es noch Strukturen, Zeichenketten (strings) undmehrdimensionale Arrays, welche an dieser Stelle nicht behandelt werden. Die Elemente derMatrizen sind im Allgemeinen komplexe Zahlen. MATLAB merkt sich aber, ob diese Elemen-te reell oder komplex sind. Ebenfalls wird unterschieden, ob diese Zahlen ganz (integer) oderGleikommazahlen (real) sind.

Die Elemente von Vektoren und Matrizen werden zwischen eckigen Klammern [ und ] einge-geben5. Beispiele für die Definition diverser Matrizen und Vektoren sind im Listing 1 gezeigt. InMATLAB können Gleitkommazahlen im folgenden Format eingegeben werden: a=1.20e3 oderb=0.42e−9. Dies entspricht den Zahlen 1.20 · 103, bzw. 0.42 · 10−9. Dieses Eingabe-Format istnützlich, wenn der Zehner-Exponent viele Nullen enthält oder wenn die Anzahl der signifikantenStellen hervorgehoben werden muss.

Die eingegebenen Variablen erscheinen in der Workspace. Gibt man z. B. für die eben definierteMatrix M den Befehl >> M im Command Window ein, so erscheint dort das entsprechende Echo.Bemerkung: Es empfiehlt sich allgemein Befehle und Beispiele im Command Window einzelneinzugeben und zu beobachten wie MATLAB darauf reagiert6.

Um ein einziges Element aus einem Vektor oder einer Matrix zu erhalten oder festzulegen,können die Befehle aus dem Listing 2 benutzt werden. Die Indizes (entsprechend der Numme-rierung der Zeilen oder Spalten) werden dabei in runde Klammern gesetzt.

Dabei ist zu beachten, dass MATLAB für die Nummerierung der Matrix-Zeilen oder -Spalten

mit dem Index 1 beginnt, dies im Gegensatz zu anderen Programmiersprachen oder in der

Mathematik, wo üblicherweise der Index 0 das erste Objekt bezeichnet.

Listing 1: Definition (Eingabe) von Vektoren und Matrizen mit reellen Elementen% −− Vektorens=[550e−3; 2.86; 447e−3]% Spaltenvektor als 3x1−Matrixs=[550e−3 2.86 4.47e−3]'% zweite Variante: Umformung durch Transposition

% Hochkomma = konjugiert−transponiert% wandelt den Zeilenvektor in einen 3x1−Spaltenvektor um

z=[5 6 7 8 9 10 11 12] % Zeilenvektor als 1x8−Matrix% −− mit Doppelpunktoperatorz=5:12 % entspricht z=[5 6 7 8 9 10 11 12]w=0:0.1:1 % entspricht w=[0.0 0.1 0.2 ... 0.9 1.0]x=1:−0.1:0 % entspricht x=[1.0 0.9 0.8 ... 0.1 0.0]

5 Bei Macintosh-Rechnern können diese Zeichen mit den Tastenkombinationen <alt>+<5> und <alt>+<6>erzeugt werden.

6 Die Eigenschaft von Interpretern, Eingaben (zeilenweise) sofort zu verarbeiten und die Ergebnisse als Echounmittelbar anzuzeigen, ist für das Kennenlernen der Programmiersprache sehr nützlich. Somit kann inter-aktiv die Wirkung der einzelnen Befehlseingaben untersucht werden.

5

Page 6: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

n=2^9; % Anzahl Elemente: 2 hoch 9 = 512y=linspace(x1,x2,n) % erzeugt einen Zeilenvektor mit n gleichmaessig verteilten

% Werten zwischen x1 und x2 (Eingabe von n ist optional,% in diesem Fall wird ein Defaultwert von 100 angenommen)% siehe auch logspace

% −− MatrizenM=[ 0 1 0 1 % erste Variante

1 0 4 0 % Bemerkung: die einzelnen Zahlen koennen1 2 3 0] % durch ein Komma getrennt werden

M=[ 0 1 0 1; 1 0 4 0; 1 2 3 0] % zweite Variante (semicolon als Zeilenabschluss−% zeichen)

L=[] % leere Matrix% −− mit Matrixfunktionenm=3; n=2; % Anzahl Zeilen (m) und Spalten (n)I=eye(m) % quadratische mxm−EinheitsmatrixI=eye(m,n) % mxn−Matrix mit 1 in der Diagonalen und sonst 0O=ones(m,n) % mxn−Matrix mit lauter EinerZ=zeros(m,n) % mxn−NullmatrixR=randn(m,n) % mxn−Matrix mit normalverteilten ZufallszahlenU=rand(size(Z)) % Matrix mit zwischen 0 und 1 gleichverteilten Zufallszahlen

% mit der selben Dimension wie die Matrix Z

Listing 2: Zugriff auf einzelne Vektor- oder Matrix-Elementey1=y(1) % die Variable y1 erhaelt als Wert das erste Element des Vektors y

% egal, ob es sich dabei um einen Zeilen− oder Spaltenvektor handeltm23=M(2,3) % die Variable m23 erhaelt den Wert des Elements aus der 2−ten

% Zeile und der 3−ten Spalte der Matrix M (hier den Wert 4)M(2,3)=2 % ersetzt die 4 aus der zweiten Zeile der Matrix M durch eine 2

1.4 Grundoperationen

1.4.1 Elementare Operatoren

MATLAB benutzt wie andere Programmiersprachen auch, die üblichen mathematischen Zei-chen für die Grundoperationen (plus: +, minus: −, mal: *, durch: /, hoch: ^). Die Rechen-reihenfolge wird durch die Wertigkeit der Operatoren (precedence) oder gesetzte Klammerndefiniert. Grob gesagt, gilt auch hier: „Punkt vor Strich“ und „oben vor unten“. Eine Beson-derheit von MATLAB sind zusammengesetzte Operatoren wie .*, ./ und .' welche mit zweiZeichen geschrieben werden müssen (cf. Tabelle 1 für Details).

1.4.2 Doppelpunktoperator

Ein vielseitiger und wichtiger Operator ist der so genannte Doppelpunktoperator (colon) :, wieer schon im Listing 1 zum Erzeugen von Vektoren mit Elementen im gleichmässigen Abstandbenutzt wurde. Mit ihm können auch Formatierungen erzwungen werden (siehe Tabelle 2).

6

Page 7: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Tabelle 1: GrundoperationenDie Argumente A und B der Operation sind Matrizen beliebiger Dimension, d. h. mit einerbeliebigen Anzahl Zeilen und Spalten. Die Verknüpfungen sind natürlich nur möglich, wenndie Dimensionen der beiden Matrizen für die entsprechende Operation zusammenpassen. Istdies nicht der Fall, so reagiert MATLAB mit einer Fehlermeldung.

Operation Beschreibung

A+B Matrix-Summe (Matrix A plus Matrix B)A−B Matrix-DifferenzA*B Matrix-Produkt (zur Erinnerung: dieses Produkt ist nicht kommutativ)A^q Matrix-Exponent, berechnet A hoch q (q: komplexer Skalar)A/B Matrix-„Division“, entspricht A · B−1

A\B Matrix-„Linksdivision“, entspricht A−1 · Bx=A\B liefert die Lösung x des Gleichungssystems A · x = B(bei einem überbestimmten Gleichungssystem wird die Lösung imleast square-Sinn bestimmt)

A.*B elementweise Multiplikation aij · bij

A./B elementweise Division aij/bij

A.^q Elemente der Matrix A hoch q: aqij

A' konjugierte Transposition, bei reellen Elementen nur TranspositionA.' Transposition (ohne Konjugation) aij → aji

Tabelle 2: Benutzung des DoppelpunktoperatorsAnweisung Beschreibung

x=x(length(x):−1:1) dreht die Reihenfolge der Elemente des Vektors x um (cf. fliplr)A(:,k) ist die k-te Spalte der Matrix AA(k,:) ist die k-te Zeile der Matrix AA(:,k:m) Untermatrix der Matrix A: [ A(:,k), A(:,k+1), .., A(:,m) ]A(:) sind alle Elemente der Matrix A als Spaltenvektor angeordnetx=x(:) macht aus jedem x einen Spaltenvektory=y(:).' macht aus jedem y einen ZeilenvektorA=x(:,ones(1,n)) erzeugt eine Matrix A mit n Kopien des Spatenvektors x als SpaltenA=y(ones(m,1),:) erzeugt eine Matrix A mit m Kopien des Zeilenvektors y als Zeilen

7

Page 8: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.5 Elementare mathematische Funktionen

In dieser Kategorie findet man die Quadratwurzel, die trigonometrischen Winkelfunktionen,sowie den Logarithmus und die Exponentialfunktion (cf. Tabelle 3). Einige Funktionen fürkomplexe Grössen sind ebenfalls hier angegeben. Argumente für all diese Funktionen sind Ma-trizen. Die Funktionen wirken auf die einzelnen Elemente dieser Matrizen, ausgenommen dieFunktionen expm und inv, welche die Matrix als ganzes berücksichtigen und die Funktion det,welche aus der Matrix einen Skalar berechnet.

Tabelle 3: Elementare mathematische FunktionenAlle Funktionen bis auf atan2 besitzen ein einziges Eingabeargument. Als solches kannein Skalar, ein Vektor oder eine Matrix angegeben werden. Die Funktionen werden dabeielementweise angewendet, ausgenommen bei den Matrix-Funktionen det, inv und expm.Für die trigonometrischen Funktionen werden die Winkel als Bogenmass in Radiant angegeben.

Funktionsmame Beschreibung

acos, asin, atan Arcus-Cosinus, -Sinus, -Tangens (Winkel in Radiant)atand Arcus-Tangens (Winkel in Grad)atan2 4-Quadranten Arcus-Tangens, atan2(y,x) hat 2 Eingabe-Argumente!cos, sin, tan Cosinus, Sinus, Tangens (Winkel in Radiant)cosd, sind, tand Cosinus, Sinus, Tangens (Winkel in Grad)exp Exponentialfunktion: ex

log natürlicher Logarithmuslog10 Logarithmus zur Basis 10log2 Logarithmus zur Basis 2sqrt Quadratwurzelimag, real Imaginär- bzw. Realteil des komplexen Argumentsabs Betrag (Modul) eines komplexen Argumentsangle Winkel (Argument) eines komplexen Arguments in Radiantdet Determinante einer quadratischen Matrixinv Inverse einer quadratischen Matrix: A−1

expm Matrix-Exponent: eA

8

Page 9: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Listing 3: Beispiele für die Benutzung mathematischer Funktionenx=linspace(−1,1); % Vektor mit 100 Elementen (default)y=x(length(x):−1:1) % Vektor x in umgekehrter Reihenfolgeay=acos(y) % Arcus−Cosinus aller y−Werte in Radiantax=asin(x) % Arcus−Sinus aller x−Werte in Radiantalf=atan2(y,x) % 4−Quadranten Arcus−Tangensye=exp(−x)x=logspace(log10(1),log10(100)) % erzeugt einen Vektor zwischen 1 und 100

% mit 50 logarithmisch regelmaessig verteilten Wertenc=3−i*4 % komplexe Zahl mit Real− (3) und Imaginaerteil (−4)cr=real(c) % Realteil der komplexen Zahl cci=imag(c) % Imaginaerteil der komplexen Zahl cphi=angle(c) % Winkel (oder Argument) von c, entspricht: phi=atan2(ci,cr)phi=unwrapphi) % 2−pi−Spruenge (falls vorhanden) entfernen, diese Funktion

% bezieht sich auf aneinanderfolgende Elemente des Vektors phir=abs(c) % Betrag von c, entspricht: r=sqrt(cr^2+ci^2)c=r*exp(i*phi) % Definition der komplexen Zahl mit Betrag und Winkel

B= [1 0 0; 0 0 1; 1 1 0]Bi=inv(B) % inverse Matrix zu BA=[0 1 0; 1 0 0; 0 0 1]x=A\B % loesst das Gleichungssystem A*x=B auf: x=A^(−1)*B

% prinzipiell aequivalent zu inv(A)*B, aber numerisch stabilerT=1.23e−3; % irgend ein KoeffizientBe=expm(−B*T) % Matrix−Exponential

1.6 Einfache Graphische Darstellungen

1.6.1 Zweidimensional

In der Tabelle 4 auf S. 10 sind die wesentlichsten Funktionen für die graphische Darstellungeinfacher Funktionen zusammengestellt. Um weitere Funktionen und Möglichkeiten kennenzu-lernen, kann z. B. >> help plot in das Command Window eingegeben werden. Dabei ist fürdie „Erweiterung des Horizonts“ ein Blick in die Rubrik See also, welche sich am Ende allerHelp-Ausgaben befindet, sehr nützlich, um weitere verwandte Funktionen kennenzulernen.

Ein Beispiel für eine elementare Graphik mit drei Funktionen ist im Listing 4 zu finden. Manbeachte dabei bei der ersten Plot-Variante die Vorgabe der verschiedenen Stricharten für dieDarstellung der drei Funktionen mit der selben Farbe Blau und bei der zweiten Variante dieBenutzung der eckigen Klammern um die drei Funktionen y1=x, y2=sin(x) und y3=tan(x)in die selbe Graphik zu bringen.

Eine für die „Ausgabe-Kosmetik“ nützliche Eigenschaft von MATLAB besteht darin, einigeLATEX-Symbole7 wie z. B. griechische Buchstaben und Pfeile für die Texte in den Graphiken zurVerfügung zu stellen (siehe dazu die Zeichenketten '\alpha' und '\rightarrow' im Text derAbszissenbeschriftung von xlabel8).

7 Der Layout dieses Dokuments wurde ebenfalls mit LATEX, genauer mit TeXShop auf einem OSX-Rechnergemacht...

8 Typisch für die LATEX-Symbole sind die vorausgehenden umgekehrten Schrägstriche (backslash) \.

9

Page 10: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Tabelle 4: Elementare Graphik-FunktionenGraphische Funktion Beschreibung

plot(x,y) zeichnet die Werte des Vektors y (Ordinate) gegen diejenigedes Vektors x (Abszisse) mit linearer Interpolation zw. denPunkten

plot(x,y,'o') zeichnet Kreise (klein o) in den Punkten, keine Interpolationplot(x,y,'d') es können viele andere Symbole benutzt werdenplot(x,y,'or' auch andere Farben, cf. >> help plotplot(x1,y1,x2,y2) zeichnet zwei Funktionen in derselben Graphikplotyy(x1,y1,x2,y2) zeichnet zwei Funktionen mit unterschiedlichem y-Massstabsemilogx(x,y) Abszisse mit logarithmischem Massstab (zur Basis 10)semilogy(x,y) Ordinate mit logarithmischem Massstab (zur Basis 10)loglog(x,y) beide Koordinaten mit logarithmischem Massstabgrid zeichnet ein Gitternetz (Raster) in die bestehende Graphikaxis([xmin,xmax,ymin,ymax]) legt die Skalierung der x- und der y-Achse fest (muss nach

der Plot-Anweisung aufgerufen werden)ylim([ymin,ymax]) legt die Skalierung nur der y- Achse festaxis auto zurück zu automatischer Skalierungv=axis; Skalengrenzen des aktuellen Plots in Vektor vaxis(axis) Einfrieren der Skalenwerteaxis equal Einheiten für beide Achsen gleich lang (Kreis erscheint als

Kreis und nicht als Ellipse)subplot(2,1,1) Plot obere Hälfte des Felds (2 Zeilen, 1 Spalte, 1. Graph)subplot(2,1,2) untere Hälfte (2 Zeilen, 1 Spalte, 2. Graph)subplot(1,2,1) linke Seite (1 Zeile, 2 Spalten, 1. Graph)subplot(2,2,3) links unten (2 Zeilen, 2 Spalten, 3. Graph)subplot(1,1,1) ganzes Feld (1 Zeile, 1 Spalte, 1. Graph)hold on Einfrieren der aktuellen Graphik um zusätzliche Funktionen

in das Bild eintragen zu könnenhold off Einfrieren zurücksetzentitle('mytext') Titel für Graphikxlabel('mytext') Beschriftung Abszisseylabel('mytext') Beschriftung Ordinatelegend('text1','text2',..) Legende bei mehreren Kurven in einem Plotlegend(..,'textn',k) Legende im k-ten Quadrantenset(gcf,'name','myname') Titel des Plot-Fenstersfigure(k) holt das Plot-Fenster mit der Nummer k in den Vordergrund

oder erzeugt ein neues Fenster mit dieser Nummerclf Löschen des Figurenfensters (clear figure)cla Löschen der Graphik im Figurenfenster (clear axes)close all Schliessen aller offenen Figurenfenster

10

Page 11: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Listing 4: Beispiel: einfache Graphikxmax=pi/4; % maximaler Ordinatenwertn=2^9; % Anzahl Punktedx=xmax/n; % Schrittweite, Aufloesungx=(0:n−1)*dx; % Vektor der x−Werte von 0 bis (n−1)*dx=xmax−dx

% Variante: x=linspace(0,xmax,n+1); x(length(x))=[];plot(x,x,'−b',x,sin(x),'−−b',x,tan(x),'−.b') % 1. Variante% plot(x,[x; sin(x); tan(x)]) % 2. Varianteaxis([0 xmax 0 1])axis equalxlabel('\rightarrow Winkel \alpha in Rad')legend('\alpha','sin(\alpha)','tan(\alpha)',4)grid

1.6.2 Dreidimensional, 3D-Graphik

Kurven in pseudo-drei-dimensionaler Darstellung können mit dem Befehl plot3(x,y,z) ein-fach erzeugt werden. Ein Beispiel dafür ist im folgenden Listing zu finden:

Listing 5: Beispiel 1: 3D-Spiralet=0:pi/2^6:4*pi;plot3(sin(t),cos(t),t);

Mit view(az,el) kann die Betrachtungsrichtung seitlich mit dem Winkel az und höhen-mässig mit el eingestellt werden. Die Default-Werte sind dabei az=−37.5 und el=30Grad.Die Betrachtungsrichtung kann aber auch interaktiv direkt in der Figur nach aktivieren desentsprechenden „Icons“ im Menu-Balken im oberen Teil der Figur verändert werden.

Ferner gibt es Möglichkeiten, um Flächen in 3D-Darstellung zu zeichnen, wie z. B. mit denFunktionen meshgrid, meshz, surf und surfl. Im Listing 6 sind drei davon mit weiterenOptionen wie colormap und shading dargestellt. Mehr dazu erfährt man mit der Eingabe>> help <funktionsname> oder doc <funktionsname>.

Listing 6: Beispiel 2: 3D-Flächen ohne und mit BeleuchtungX=−2:0.1:2;Y=−2:0.1:2;[x,y] = meshgrid(X,Y);z = x .* exp(−x.^2 − y.^2);% −− 1. Variante ohne Beleuchtungfigure(1)surf(x,y,z) % eingefaerbte 3−D−Flaeche (3−D colored surface)% −− 2. Variante mit Beleuchtung unter 45 Grad zur Betrachtungsrichtungfigure(2)surfl(x,y,z) % eingefaerbte 3−D−Flaeche mit Beleuchtung (with lighting)colormap(gray) % Farbdefinitionsmatrix, hier in Grau (color look−up table)shading flat % Toenungsart (color shading mode): flat / interp / faceted

11

Page 12: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.7 Kontrollstrukturen

MATLAB besitzt wie andere Programmiersprachen auch Befehlsstrukturen um den Program-mablauf zu Steuern. Diese sind mehr oder weniger bis auf die Syntax überall die selben. Im Ge-gensatz zu anderen Programmiersprachen, sollte man aber bei MATLAB mit der Verwendungvon Wiederholungsschleifen sparsam umgehen, und wenn möglich, die Fähigkeit von MATLABbenutzen, ganze Vektoren parallel zu verarbeiten.

1.7.1 Wiederholungsschleife (for-loop)

Wiederholungsschleifen können dank der effizienten MATLAB-Eigenschaft Funktionen von Vek-toren verarbeiten zu können, in den meisten Fällen vermieden werden. Systematisches Verwen-den von for-Schleifen entlarvt den Anfänger! Dennoch lassen sie sich nicht immer vermeiden.Deren allgemeine Syntax ist im Listing 7 ersichtlich.

Listing 7: Syntax der Widerholungsschleifefor <variable> = <ausdruck>,

<anweisung(en)>end

Wichtig: Falls der <ausdruck> eine Matrix A ist, erhält mit for v=A, die <variable> v beimk-ten Durchlauf der Schleife die Spalte A(:,k) der Matrix zugewiesen.

Listing 8: Beispiel 1: Einfache for-Schleifen=10;x=[]; % Initialisierungfor k=0:n−1,

x=[x, k^2];endx % Ergebnis

Listing 9: Beispiel 2: Verschachtelte for-Schleife% Bestimmung der Hilbert−Matrix

n=4; % matrix sizeH=zeros(n,n); % preallocationfor i=1:n,

for j=1:n,H(i,j)=1/(i+j−1);

endendH % show result

Bemerkung: Die Vordefinition (preallocation) der Matrix H mit der Funktion zeros erhöhrt dieEffizienz der Programmausführung, da sonst die Dimension der Matrix bei jedem Schritt derverschachtelten for-Schleife neu festgelegt wird.

12

Page 13: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.7.2 Bedingte Schleife mit Vorabprüfung

Das Ausführen bedingter Anweisungen hängt vom Wert eines logischen Ausdrucks ab. In MAT-LAB werden logische Ausdrucke entweder als 0 bei „falsch“ oder als 1 bei „wahr“ ausgegeben9.Alles was verschieden von 0 ist, wird aber ebenfalls als „wahr“ betrachtet! Ein logischer Aus-druck kann mit den folgenden Vergleichsoperatoren (relational operator, rop) oder Funktionenaus der Tabelle 5 erzeugt werden:

Tabelle 5: Vergleichsoperatoren und logische FunktionenOperator oder Funktion Beschreibung

< kleiner als> grösser als≤ kleiner gleich≥ grösser gleich== gleich (doppeltes Gleichheitszeichen!)= nicht gleich (tilde equal)& und, AND| oder, OR¬ nicht, NOT

isinf(x) sind die Elemente von x unendlich?isfinite(x) sind die Elemente von x endlich?isnan(x) sind die Elemente von x NaNs?

Die bedingte Schleife wird solange ausgeführt, wie der logische Ausdruck wahr ist. Ist er 0,wird die Schleife abgebrochen, beziehungsweise nicht ausgeführt. Die Syntax einer bedingtenSchleife mit Vorabprüfung ist im Listing 10 ersichtlich.

Listing 10: Syntax der bedingten Schleife mit Vorabprüfungwhile <logischer ausdruck>,

<anweisung(en)>end

Notbremse: Falls auf Grund eines Programmierfehlers, die Bedingung immer erfüllt sein sollteund die Ausführung der Schleife dadurch nicht mehr enden kann, so kann mit der Eingabe<ctrl>+<c>10 das MATLAB-Programm unterbrochen werden.

Listing 11: Beispiel: Bestimmung der Rechengenauigkeit% Berechnung der Rechengenauigkeit eps% eps ist die kleinste positive Zahl groesser als Null

eps=1;while (1+eps) > 1,

eps=eps/2;endeps=eps*2

9 In MATLAB gibt es keinen Variablen-Typ boolean.10 Bei Macintosh funktioniert auch: <cmd>+<.>.

13

Page 14: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.7.3 Bedingte Anweisungen ohne und mit Alternative

Die Syntax von bedingten Anweisungen ist im Listing 12 ersichtlich. Einer Alternative, kann mitdem else-Befehl erzeugt werden. Mehrfachalternativen können mit elseif erzeugt werden.Bemerkung: Es empfiehlt sich, insbesondere bei Mehrfachalternativen, die Anweisungen so zuverschachteln, dass der Überblick gewährleistet bleibt...

Listing 12: Syntax für bedingte Anweisung ohne und mit Alternative% ohne Alternativeif <ausdruck>,

<anweisung(en)>end

% mit Alternative (else)if <ausdruck>,

<anweisung(en) A>else

<anweisung(en) B>end

% mit mehr als einer Alternative (elseif)if <ausdruck1>,

<anweisung(en) A>elseif <ausdruck2>,

<anweisung(en) B.a>else

<anweisung(en) B.b>end

Listing 13: Beispiel: Bestimmung einer Diagonal-Matrix% Bestimmung einer Diagonal−Matrix

n=6;A=zeros(n,n); % Speicherplatz−Reservierung (preallocation)for i=1:n,for j=1:n,

if i==j,A(i,j)=4; % wenn i=j

elseif abs(i−j)==1,A(i,j)=2; % wenn |i−j|=1

elseA(i,j)=1; % sonst

endend

endA % Ergebnis

14

Page 15: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.7.4 Fallunterscheidung

Die Syntax der Fallunterscheidung ist im Listing 14 ersichtlich. Der <switch_ausdruck> kanneine Zahl (Skalar) oder eine Zeichenkette (string) sein. Der Fall otherwise ist optional undwird nur ausgeführt, wenn keine Übereinstimmung zwischen dem <switch_ausdruck> undden aufgelisteten case-Fällen vorhanden ist.

Falls der <switch_ausdruck> eine Zeichenkette ist, empfiehlt sich alle Buchstaben davongrundsätzlich in Gross- oder Kleinschreibung umzuwandeln (Funktionen upper und lower),damit beim Vergleich die Empfindlichkeit auf die Schreibweise keine Rolle spielt. Dies ist abernicht zwingend und wird dem Programierer überlassen.

Eine elegante Methode, um eine Fallunterscheidung interaktiv am Bildschirm zu wählen,ist die Funktion menu: damit werden den angebotenen Varianten ganze Zahlen zugewiesen,beginnend mit 1. Diese können dann als <switch_ausdruck> durch case ausgewählt werden,wie im Listing 15 aud S. 16 gezeigt.

Listing 14: Syntax der Fallunterscheidungswitch <switch_ausdruck>

case <case_ausdruck_1>,<anweisung(en)_1>

case <case_ausdruck_2>,<anweisung(en)_2>

case <case_ausdruck_3>, <case_ausdruck_4>, ..<anweisung(en)_3_4>

..otherwise,

<anweisung(en)_default>end

15

Page 16: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Listing 15: Beispiel für switch und case

% Programmbeispiel fuer Fallunterscheidung%% ©2010, M. Schlup

clear all, clf reset, clc

ind = menu('Wahl der Figur','Kreis', 'Quadrat', 'Dreieck', 'sonst...');switch indcase 1, % Kreis

r=0.5;phi=linspace(0,2*pi);x=r*cos(phi);y=r*sin(phi);

case 2, % Quadratx=[0 1 1 0 0]−0.5;y=[0 0 1 1 0]−0.5;

case 3, % Dreieckr=0.5;phi=([0 120 −120 0]+90)*pi/180;x=r*cos(phi);y=r*sin(phi);

otherwise, % eingeschriebenes Dreieckr=0.5;phi=([0 120 −120 0])*pi/180;x=r*cos(phi);y=r*sin(phi);phi=linspace(0,2*pi);x=[x r*cos(phi)];y=[y r*sin(phi)];

end% Darstellungfigure(1)plot(x,y)axis([−1 1 −1 1])axis equal % sorgt fuer verzerrungsfreie Figuren

Bemerkung: Mit dem Befehl axis equal wird erreicht, dass die Skalen von Abszisse und Or-dinate gleich sind. So werden Kreise als solche dargestellt und nicht als Ellipsen.

1.8 Datentypen und -strukturen

Unter anderem kennt MATLAB die in der Tabelle 6 zusammengefassten Datentypen mit kom-plexen zahlen oder Zeichenketten als Elemente.Bemerkungen

• Polynome werden in MATLAB als Vektoren der Koeffizienten in abnehmender Reihen-folge der Potenzen dargestellt.

• Mit dem Befehl >> format long kann das Echo von 4 Stellen hinter dem Komma (De-zimalpunkt) auf 15 Stellen erhöht werden; zurückgesetzt wird mit >> format short.

• Bei so genannt kargen (sparse) Matrizen mit vielen Nullen als Elemente, lohnt es sich dieFunktion sparse zu benutzen. Damit wird meistens die Rechenzeit drastisch reduziert;mehr unter >> help sparse.

16

Page 17: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Tabelle 6: Gewöhnliche DatentypenArt Eingabe (Definition) Aufruf Echo (Ergebnis)

Skalar a=3+j; a 3.0000 + 1.0000iVektor v=[1 2 3]; v 1 2 3

v(2) 2Matrix (2-dim. Arr.) A=[1 0; 1 1]; A 1 0

1 1A(1,2) 0

Zeichenketten s='mystring' s mystrings(2) y

Zeichenkettenmatrix S=['alle ';'Jahre ';'wieder'] S(2,:) Jahrealle Zeilen müssen gleich lang sein! S(2,3) h

3-dim. Array A(:,:,2)=[0 1; 2 0] A(:,:,2) 0 12 0

Um komplexe Gebilde, wie z. B. für eine Datenbank zu erstellen, können Strukturen (struc-tures) mit Feldern (fields) definiert werden. Dazu stehen zwei Varianten zur Verfügung:

1. mittels Zuweisung, wie im folgenden Listing vorgestellt:

Listing 16: Erstellen einer Struktur mittels einzelnen Anweisungen% −− Definition, Daten werden zu den einzelnen Feldern zugewiesenstudent.name = 'Hans Hansson';student.klasse = 'ST11x';student.noten = [4.5 5.8 5.5];% −− Ausgabe der 3 Felder mit der Eingabestudent% −− Erweiterung um einen zweiten Eintragstudent(2).name = 'John Johnson';student(2).klasse = 'ST11x';student(2).noten = [2.9 4.4];% −− Ansprechen der einzelnen Felderstudent(1).noten % liefert den Inhalt des bezeichneten Felds (Echo)for k=1:length(student) % neues Feld (.aver) mit gerundetem Mittelwert (MW)

student(k).aver = round(mean(student(k).noten)*2)/2endaverNote = sum([student.aver])/length(student) % MW über alle Studenten

2. mit der Funktion struct:

Listing 17: Erstellen einer Struktur mit der Funktion struct

student = struct('name','Hans Hansson','klasse','ST11x','noten',[4.5 5.8 5.5])student(2) = struct('name','John Johnson','klasse','ST11x','noten',[2.9 4.4])

Mehr zum Thema Datentypen und -strukturen findet man in Help-Menu unterMATLAB/Programming/Data Structures und . . ./Data Types.

17

Page 18: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.9 Benutzerdefinierte Funktionen

Wie bei anderen Programmiersprachen auch, können bei MATLAB Programm-Teile, welche mitverschiedenen Argumenten11 mehrmals benötigt werden, als Funktionen12 definiert werden.

1.9.1 Funktionen

Wie eigene Funktionen definiert und aufgerufen werden können, soll an Hand des folgendenBeispiels, welches die Ableitung nach x eines Polynoms n-ten Grads y(x) = anxn + . . .+a2x2 +a1x + a0 bestimmen soll, gezeigt werden13:

Listing 18: Hauptprogramm ableitung_test.m

% Testprogramm fuer die benutzerdefinierte Funktion yd = ableitung(y)% y Argument : das abzuleitende Polynom y(x)% yd Rueckgabe: das abgeleitete Polynom (Ergebnis) y'(x)=dy/dx%% ©2010, M. schlup

clear all, clcy = [1 2 3 4] % Polynom: y = x^3 + 2 x^2 + 3 x + 4yd=ableitung(y) % Aufruf des Unterprogramms (function ableitung)

% liefert yd = [3 4 3], d.h. y' = 3 x^2 + 4 x + 3

Listing 19: Funktion ableitung.m

function yd = ableitung(y)% function yd = ableitung(y)% Bestimmt die Ableitung yd = y'(x)= dy/dx des Polynoms y = y(x)%% ©2010,2011 M. Schlup

m=length(y)−1;if m>0, yd=(m:−1:1).*y(1:m); returnelseif m==0, yd=0; returnelse yd=[];end

Grundsätzlich können bei MATLAB-Funktionen mehr als nur ein Argument eingegeben odernur ein Objekt zurückgegeben werden. In diesem Fall werden beim Aufruf die Rückgabeobjektezwischen eckigen Klammern vor dem Gleichheitszeichen aufgelistet:function [ret1,ret2,..] = functionname(arg1,arg2,..)

11 Die Argumente einer Funktion sind die vom aufrufenden Programm an das Unterprogramm übergebenenObjekte, welche zwischen Klammern hinter dem Funktionsnamen aufgelistet werden. Dabei wird unterschie-den zwischen der direkten Wertübergabe (call by value) und der indirekten Übergabe (call by reference) beider nicht ein Wert, sondern die Speicher-Adresse (pointer) unter welcher das Objekt gefunden werden kannübergeben wird.

12 Funktionen sind Unterprogramme, welche ein oder mehrere Objekte zurückgeben (im Gegensatz zu sogenannten Prozeduren, welche keine Objekte zurückliefern).

13 MATLAB kennt selbstverständlich eine viel ausgereiftere Version einer Funktion zu diesem Zweck: polyder.Es ist nicht einfach ein Beispiel für übliche Anwendungen zu finden, welches nicht schon vorhanden wäre.

18

Page 19: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Die in einer Funktion definierten Objekte sind lokal, d. h. dass sie nur innerhalb der Funktiondefiniert sind und nur dort verändert werden können: wenn in anderen Programmen Objektemit den selben Namen vorhanden sind, so sind sie dennoch verschieden. Im Beispiel der Listings18 und 19 sind die Vektoren y verschiedene Objekte.

Sollen gemeinsame Objekte mehreren Programmen oder Funktionen zur Verfügung stehen,so müssen sie als globale Variablen deklariert werden. Dazu muss die Anweisungglobal var1 var2 .. in allen Programmen stehen, welche auf diese Objekte zugreiffen müs-sen.

1.9.2 Funktionszeiger

Funktionszeiger oder Funktions-Pointer (function handle) sind Speicher-Adressen mit denenFunktionen indirekt aufgerufen werden können. Mit diesen Zeigern können Funktionen als Ar-gumente übergeben werden, wie z. B. den Funktionen quad, fminsearch oder ode45 welchebenutzerdefinierte Funktionen benötigen14. Wie dies gemacht wird, kann aus dem Beispiel derListings 20 und 21 entnommen werden.

Listing 20: Hauptprogramm quad_test.m

% Testprogramm fuer das Berechnen des bestimmten Integrals der benutzer−% definierten Funktion "ndens" zwischen den Grenzwerten a und b%% ©2010, M. schlup

clear all, clc

mu=0; % Mittelwertsigma=1; % Streuunga=−10*sigma; % untere Integrationsgrenzeb=0; % obere IntegratonsgrenzeP = quad(@(x)ndens(x,mu,sigma),a,b)

Listing 21: Funktion ndens.m

function f_x = ndens(x,m,s)% Benutzerdefinierte Function ndens, liefert die Wahrscheinlichkeitsdichte−Funktion% einer normalverteilten Zufallsgroesse%% x : unabhaengige Variable% m,s : Parameter (Mittelwert, Streuung)%% ©2010, M. Schlup

f_x = exp(−(x−m).^2/(2*s^2))/(s*sqrt(2*pi));

Bemerkungen:

• Die Funktion ndens benötigt „Punkt-Operatoren“, da x durch quad als Vektor behandeltwird.

14 Bei früheren MATLAB-Versionen wurde nicht ein Zeiger, sondern der Funktionsname als Zeichenkette über-geben. Dieser Mechanismus funktioniert zwar immer noch, seine Benutzung wird aber aus Effizienzgründennicht mehr empfohlen.

19

Page 20: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

• Die Übergabe von Parametern, wie hier mu und sigma, muss nicht wie im Beispiel gezeigterfolgen. Diese könnten gegebenenfalls als feste Konstanten in der benutzerdefiniertenFunktion festgelegt werden. Man könnte sie auch als globale Variablen deklarieren. Damitwürde sich eine Übergabe als Funktionsargumente erübrigen.

20

Page 21: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

1.10 Programmierhinweise und Dokumentation

1.10.1 MATLAB-Skript (m-File)

Ein MATLAB-Skript ist eine ASCII-Textdatei, welche die Anweisungen für den MATLAB-Interpreter enthält. Diese Dateien werden als m-Files bezeichnet. Sie können wie gewöhnlicherProgramm-Code editiert und unter einem Dateinamen mit dem Fortsatz (extension) .m gespei-chert werden, z. B.: myfilename.m. Dieser Name muss mit einem Buchstaben beginnen unddarf keine Sonderzeichen enthalten.

Wird der Dateiname (ohne Fortsatz) im Command Window eingetippt, so werden alle imm-File enthaltenen Anweisungen nacheinander ausgeführt, als ob das Programm kompiliertworden wäre. Der Name kann ebenfalls in einem anderen m-File wie eine Funktion (allerdingsohne Argumente) benutzt werden.

Es ist guter Programmierstil, wenn ein m-File einen Programmkopf enthält in dem ein Ti-

tel, eine Beschreibung, das Erstellungsdatum und der Autorname festgehalten werden. DieserProgrammkopf wird auch als Kommentar ausgegeben, wenn im Command Window der Befehl>> help myfilename eingegeben wird.

Es empfiehlt sich bei jedem Hauptprogramm einen Initialisierungsteil einzufügen, mit demz. B. die Workspace und das Command Window geleert werden.

Listing 22: Grundstruktur eines Skript-Files (m-File)% −− Programmkopf% Titel% Beschreibung%% Erstellungsdatum, Autor

% −− Initialisierung% Die folgenden Befehle sind optional, aber sehr nuetzlich:clc % bereinigt das Command Window, dieser Befehl stellt sicher,

% dass Echos aus frueheren Aufrufen geloescht werdenclear all % leert den Workspace von allen Variablen und Funktionen

% −− Progamm% Datenx=[1.21 2.42 3.68 4.70]; % Werte des Vektors der unabhaengigen Groesseny=[0.050 0.110 0.223 0.452]; % Werte des Vektors der abhaengigen Groessen% Darstellungfigure(1) % Fenster fuer Graphik (optional bei nur einem Fenster)plot(x,y,'o') % graphische Darstellung der einzelnen Wertepaareaxis([0 5 0 0.5]) % Festlegung der Wertebereiche für die Achsengrid % Raster

Beim Start von MATLAB wird automatisch das m-File matlabrc als Initialisierung ausge-führt. Dieses ruft das benutzerdefinierte m-File startup auf, falls dieses im MATLAB-Pfadexistiert. In diesem können individuelle Einstellungen festgelegt werden, wie z. B. die Anweisungformat compact, welche die leeren Zwischenzeilen in der Ausgabe im Command-Window unter-drückt (siehe Listing 23 als Beispiel). Ein startup-File kann mit dem Befehl >> edit startuperstellt werden.

21

Page 22: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Listing 23: Beipiel für ein startup.m-File% Startup File%% ©2009, Martin Schlup

screen=1; % Benennen der logischen Variable fuer die Bildschirmausgabefprintf(screen,'%s \n',' *** Martin''s Startup ***')echo onformat compactecho offfprintf(screen,'%s \n',' done ')clear screen % Loeschen der Variable screen

MATLAB muss wissen, in welchen Verzeichnissen (directories) sich die m-Files befinden,beziehungsweise wo diese überhaupt gesucht werden sollen. Dazu gibt es den so genanten Pfad

(path), welcher mit dem Befehl Set Path... aus dem File Menu des Command Window definiertund editiert werden kan. Für weitere Möglichkeiten, sei auf die Anweisung >> help path undderen Angaben verwiesen.

Bemerkung für LATEX-Freaks: Mit dem Befehl Publish to/LaTeX im File-Menu kann ein Skript-File mit den dazugehörenden Ergebnissen im Command Window als LATEX-File (.tex) umge-wandelt werden. Damit lässt sich mit der entsprechenden Entwicklungsumgebung, z. B. MiK-

TeX für Windows-Rechner (http://miktex.org/) oder TexShop für Mac OSX 10.4 oder höher(http://pages.uoregon.edu/koch/texshop/texshop.html) ohne weiteres ein LATEX-Dokument impdf-Format erstellen.

1.10.2 Datenmanagement

• DatensicherungDie in einer MATLAB-Sitzung erzeugten Daten erscheinen in der MATLAB Workspaceaber gehen mit Beenden der Sitzung unwiderruflich verloren. Um die Daten für eineweitere Sitzung zu erhalten, können sie mit der Anweisung >> save filename in einerMATLAB-formatierten Datei mit dem Fortsatz .mat gespeichert werden. Der Inhalt desursprünglichen Arbeitsspeichers kann mit der Anweisung >> load filename wiederher-gestellt werden. Die save-Anweisung kann auch einzelne Variablen sichern. Zusätzlichkann die Sicherung auch im 8-Bit ASCII-Format erfolgen, so dass auch andere Program-me als MATLAB auf diese Daten zugreifen können.

• Daten-ImportDiverse Textdateien mit einfach strukturierten Daten können mit speziellen Funktionendirekt nach MATLAB importiert werden (cf. Tabelle 7). Dazu kommen noch einige Funk-tionen zum Import von Bild- und Ton-Dateien.Grundsätzlich wird beim Anwählen des Befehls Import Data aus dem File-Menu oderdirekt beim Öffnen eines Datenfiles aus der MATLAB-Umgebung der Import Wizardautomatisch gestartet, welcher die Daten-Konversion mehr oder weniger automatischübernimmt.

• Daten-ExportFerner gibt es einige Funktionen mit denen MATLAB-Daten in verschiedene Formategespeichert werden können: csvwrite, dlmwrite, xlswrite, um nur einige zu nennen.

22

Page 23: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

1 Kurzportrait der Programmiersprache MATLAB

Tabelle 7: MATLAB-Funktionen zum Datenimport (Auswahl)Funktion Format

load mat-Files (.mat)csvread comma separated values (.csv)importdata formatted text (.dat)dlmread delimited text (.dlm) und tab separated text (.tab)xlsread excel spreadsheet (.xls)aviread Filme (.avi)imread Bilder (.tiff, .png, .jpeg, . . .)wavread Audio-Signal (.wav)

1.10.3 Hilfe, Beispiele und Vorlagen

Die direkteste Hilfe wird durch die Eingabe der Anweisung >> help funktionsname im Com-mand Window erhalten. Am Ende der Erläuterungen stehen meistens Namen von „verwandten“Funktionen. Es lohnt sich diese zu erkunden! Dies ist eines der bequemsten Art, um die Viel-seitigkeit von MATLAB kennen zu lernen.

Eine vertiefte Beschreibung mit Beispielen kann aus der MATLAB-Help Dokumentation mitdem Befehl >> doc funktionsname angepeilt werden.

Der Source-Code einzelner MATLAB-Funktionen kann mit den Anweisungen>> type funktionsname oder >> edit funktionsname angeschaut oder editiert werden.

MATLAB kennt ausserdem eine ganze Reihe von lehrreichen Demonstrationsbeispielen. De-ren Liste kann mit >> demo oder >> demos herangezogen werden. Ein „Spaziergang“ durchdiese Beispiele zeigt die Möglichkeiten von MATLAB auf eindrucksvolle Weise. Diese Beispielekönnen auch als Vorlagen für eigene Programmentwicklungen eingesetzt werden.

1.10.4 Debuging

Bei der MATLAB-Programmentwicklung empfiehlt es sich, wie bei allen anderen Program-miersprachen auch, systematisch vorzugehen. Mit MATLAB ist das Verfahren „trial-and-error “welches beim Lernverhalten von Kleinkindern noch zum Erfolg führen kann, eine reine Zeitver-

schwendung, wie bei den meisten Ingenieurtätigkeiten auch.

Ein guter Programmierer sitzt etwas zwischen selten und nie am Terminal ! Wesentlich zumErstellen eines Programms ist eine klare Vorstellung von dem, was dieses überhaupt soll(Pflichtenheft, Spezifikation), sowie ein detailliertes Konzept, wie dies erreicht und wie dasErgebnis geprüft werden soll. Diese Arbeit kann nicht am Terminal bewältigt werden. DerRest ist Fleiss...

In der Detailausführung liegt eine der Schwierigkeiten bei MATLAB unter anderem darin,dass unterschieden wird zwischen Spalten- und Zeilenvektoren. Dies geht soweit, dass dies auchfür einige Funktionen gilt, welche Matrizen spaltenweise verarbeiten. Man muss sich also immerim Klaren sein, wie die Objekte aussehen, die man verwenden will, wie z. B. beim Bilden desProdukts zweier Vektoren, welches, je nach Eingabe, das Skalarprodukt oder das dyadische Pro-dukt liefern kann. Eine gute Möglichkeit ist ein Auge auf dem Workspace-Fenster zu behaltenund so die Dimensionen der Objekte (Funktion size) zu verfolgen.

23

Page 24: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

Im Gröberen empfehlt es sich die Aufgaben eines MATLAB-Programms in diverse Funktionen(cf. Abschnitt 1.9 auf S. 18) zu unterteilen. Diese werden dann einzeln geprüft und als getesteteBausteine von einem übergeordneten Hauptprogramm aufgerufen. Ein MATLAB-Programmoder -Funktion sollte ausgedruckt auf einem A4-Blatt Platz haben...

In MATLAB gibt es einige eingebaute Mechanismen mit denen das Testen eines Programmsunterstützt wird:

• AuskommentierenMit den Befehlen Comment und Uncomment im Menu Text des MATLAB Editor-Fensterslassen sich Code-Zeilen, d. h. einzelne Anweisungen, gezielt ein- und ausblenden. Dies istsicher die einfachste Möglichkeit um MATLAB-Code systematisch zu testen.

• Interaktive EingabenDer Befehl keyboard in einem Skript unterbricht die Ausführung eines MATLAB-Pro-gramms an dieser Stelle und gibt die Tastatur frei, um Eingaben in das Command-Fensterzu machen. Dadurch können Variablen untersucht oder mit neuen Werten überschriebenwerden. Alle MATLAB-Anweisungen sind dabei möglich. Der Keybord-Modus wird durchdie Eingabe >> return (Eintippen der einzelnen Buchstaben) beendet und die Anwei-sungen des Skript-Files werden weitergeführt. Die Anweisung keyboard kann selbstver-ständlich auch für andere Zwecke als zum Testen eines Programms benutzt werden, z. B.für die interaktive Eingabe einer Variablengrösse.

• DebuggerUm z. B. „Halte-Punkte“ zu setzen und den Programmablauf an bestimmten Stellen an-zuhalten, können die Befehle aus dem Menu Debug des MATLAB Editor-Fensters benutztwerden. Der Debugger ist mehr oder weniger selbsterklärend.

• CellsEin MATLAB-Programm kann in so genannte Zellen (cell) unterteilt werden. Diese kön-nen einzeln ausgeführt werden, cf. Befehle aus dem Menu Cell des MATLAB Editor-Fensters.

Das Umgehen mit diesen Möglichkeiten soll hier nicht weiter vertieft werden. Wie schon er-wähnt, nimmt die Notwendigkeit Programmierfehler zu beheben mit der Vorbereitungsarbeitüberproportional ab!

2 Ausgewählte Themen

In diesem Abschnitt werden einige bemerkenswerte Themen zu MATLAB mehr oder wenigerknapp vorgestellt. Es ist dem Autor sehr wohl bewusst, dass hier nur die Oberfläche angekratztwird. Für ein vertieftes Kennenlernen ist das Bearbeiten von konkreten Aufgaben und eindadurch gezieltes und motiviertes Herumschlagen mit MATLAB unerlässlich.

24

Page 25: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

2.1 Graphical User Interface (GUI)

GUI steht für Graphical User Interface was graphische Benutzeroberfläche bedeutet. Einbeeindruckendes Beispiel für die Möglichkeiten welche sich mit MATLAB (ohne Kenntnisse inOOP) relativ schnell realisieren lassen15, ist in den MATLAB-Demos unter Graphics / Visua-lizing Sound zu finden. Als Einstieg wird das Einführungsvideo unter Creating Graphical UserInterfaces / Creating a GUI with GUIDE, ebenfalls in den MATLAB-Demos empfohlen16. DasEntwicklungswerkzeug kann mit der Anweisung >> guide gestartet werden.

2.2 Einführung in die Simulationstechnik mit SIMULINK

Als Erweiterung zu MATLAB gibt es eine Software namens Simulink, welche es erlaubt Model-le dynamischer Systeme graphisch zu programmieren. Zum Benutzen von Simulink muss zuerstMATLAB gestartet werden. Simulink wird mit der Eingabe der Anweisung >> simulink imMATLAB Command Wndow gestartet. Dabei erscheint das Fenster Library: simulink mit einigenFunktionsbibliotheken mit Bezeichnungen wie: Sources, Sinks, . . . Ein leeres Arbeitsfenstermit dem Namen untitled kann mit dem Befehl New / Model aus dem File-Menu eröffnetwerden.

Die für die graphische Programmierung benötigten Funktionsblöcke können aus den Funkti-onsbibilotheken durch drag-and-drop in das Arbeitsfenster hineingezogen werden. Die wichtigs-ten Blöcke können in der Tabelle 8 der Funktionsibliotheken gefunden werden17. Es können

Tabelle 8: Auswahl der wichtigsten Funktionsblöcke(die allerwichtigsten wurden hier fett hervorgehoben)Bibliotheksblock enthält folgende Funktionsblöcke von Simulink

Sources Constant, Signal Generator, Sine Wave, Clock, . . .Sinks To Workspace, Scope, Floating Scope, . . .Continuous Integrator, State Space, Transfer Fcn, Zero-Pole, . . .Discontinuities Saturation, Dead Zone, Quantizer, Coulomb & Viscous Friction, . . .Signal Routing Mux, Switch, . . .Math Operations Sum, Add, Subtract, Gain, Slider Gain, Product, Sign, Abs, MinMax,

Math Function, Trigonometric Function, . . .· · · · · ·Commonly Used Blocks mehr oder weniger alle, welche hier fett hervorgehoben wurden

mehrere Objekte aus diversen Bibliotheken herangeholt werden. Objekte können auch mit dercopy-paste - Technik im Arbeitsfenster dupliziert werden. Die Signalverbindungen zwischenden Objekten werden mit dem Mauszeiger gezogen. Das Ergebnis für ein einfaches lineares,dynamisches Modell ist in Abbildung 2 dargestellt18.

15 Das behaupte ich . . .16 Die Anleitungen sind allerdings in breitem Amerikanisch Englisch kommentiert (dennoch gut verständlich)

und für eine Windows-Mühle vorgestellt, was dem Harmoniebedürfnis eines OSX-Users sicher abträglich ist.17 Es ist dabei klar, dass erst mit dem Kennenlernen der entsprechenden Theorie aus den Ingenieurfächern der

Nutzen und die volle Bedeutung von Simulink ersichtlich werden.18 Das Modell könnte als das eines RC-Glieds mit R = 1Ω und C = 1 F an einem Funktionsgenerator mit

Rectecksignal und Offset interpretiert werden.

25

Page 26: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

Abbildung 2: Simulink-Modell eines einfachen dynamischen Systems: RC-Glied an Funktions-Generator

Mit einem Doppelklick auf einen Funktionsblock, wird ein Dialogfenster geöffnet in dem dieParameter der gewählten Funktion festgelegt werden können. Es empfiehlt sich dabei nicht

numerische Werte, sondern Variablennamen einzugeben19. Diese Variablen können in einemMatlab m-File definiert werden. Letzteres muss vor dem Start der Simulation ausgeführt werden,

damit das Modell auf die Werte in der Workspace zugreifen kann.

Ist das Modell erstellt, so müssen die Simulationsparameter festgelegt werden. Dies geschiehtim Menu Simulation unter dem Untermenu Configuration Parameters. Dabei müssen die Si-mulationszeiten eingegeben werden, insbesondere beim Menu Solver die Simulationsendzeit.Auch hier sollten Variablennamen und keine numerischen Werte verwendet werden (z. B. Stoptime: tend). Für den Integrationsalgorithmus (Solver options) können in den meisten Fäl-len die Default-Einstellungen verwendet werden, z. B. Type: Variable-step, Solver: ode45

(Dormand-Prince)20.

Um die Ergebnisse der Simulation zu gewünschten Zeitpunkten zu erhalten21, müssen nochdie Ausgabezeitpunkte im Menu Data Import/Export festgelegt werden. Dafür eignet sich dieOutput options: Produce specified output only mit Output times: time. Die gewünschten Ausga-bezeitpunkte müssen im Vektor time definiert werden.

Die Simulation wird mit dem Simulation-Untermenu Start gestartet oder noch besser direktaus dem m-File mit der Anweisung sim('modellname'), cf. Listing 24.

Das m-File und das Simulink-Modell dürfen nicht denselben Namen tragen: Die verschie-denen Endungen .m und .mdl sind für die Unterscheidung nicht ausreichend.

Simulink wird mit MATLAB ausgeschaltet.

Listing 24: Beispiel eines m-Files für ein Simulink-Modell% m−File fuer Simulink−Modell%

19 Dies ist natürlich weit mehr als eine gewöhnliche Empfehlung!20 Diese Aussage ist jedoch ohne Gewähr, da im Allgemeinen jede Integrationsaufgabe ihre eigenen Tücken

aufweist . . .21 Der Solver arbeitet mit adaptiver Schrittweite (Variable-step).

26

Page 27: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

% ©2010, M. Schlup

clear all, clc

% ModellparameterR=1e3; % Widerstand in OhmC=100e−9; % Kapazitaet in FaradUc0=0; % Anfangsbedingung: Kondensator−Spannungtau=R*C; % ZeitkonstanteU=1; % Signalamplitude in Volt (Upp=2*U)U0=0.5; % Offsetspannung in VoltTper=12*tau;freq=1/Tper; % Frequenz des Signal−Generators in Hertztend=2*Tper; % Simulatonsdauern=400; % Anzahl Zeitschrittetime=(0:n)*tend/n; % Zeitvektor

% Simulationsaufrufsim('simulinkBsp')

% Extrahieren der Simulationsdaten ueber das Scope−Menut=ScopeData(:,1);u=ScopeData(:,2);uR=ScopeData(:,3);uC=ScopeData(:,4);

% Darstellung der Datenfigure(1)plot(1e3*t,[u,uR,uC])legend('u_R(t)+u_C(t)','u_R(t)','u_C(t)',4)xlabel('\rightarrow Zeit in ms')

2.3 C-Compiler

Mit dem MATLAB C-Compiler lassen sich m-Files in eingenständige Funktionen (standalone

application) nach C oder C++ übersetzen. Dies hat neben der schnelleren Ausführung desProgramms den Vorteil, dass keine Lizenz-Gebühren für dessen Benutzung bezahlt werdenmüssen.

Um den MATLAB Compiler zu benutzen, muss er zuerst mit der Funktion mbuild konfigu-riert werden, cf. dazu den Dialog 25.

Listing 25: Dialog: Konfiguration C-Compiler>> mbuild −setupPlease choose your compiler for building standalone MATLAB applications:

Would you like mbuild to locate installed compilers [y]/n? y

Select a compiler:[1] Lcc−win32 C 2.4.1 in C:\PROGRA¬1\MATLAB\R2007b\sys\lcc

[0] None

Compiler: 1

27

Page 28: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

Please verify your choices:

Compiler: Lcc−win32 C 2.4.1Location: C:\PROGRA¬1\MATLAB\R2007b\sys\lcc

Are these correct?([y]/n): y

Trying to update options file:C:\Dokumente und Einstellungen\Administrator\MathWorks\MATLAB\R2007b\compopts.batFrom template: C:\PROGRA¬1\MATLAB\R2007b\bin\win32\mbuildopts\lcccompp.bat

Done . . .

>>

Die gewünschte MATLAB Funktion, wie z. B. beispiel.m aus dem Listing 26, kann ansch-liessend mit den MATLAB internen lcc-Compiler mit der Anweisung >> mcc −m beispielübersetzt werden.

Listing 26: Beispiel eines m-Files für die Benutzung des MATLAB lcc-Compilersfunction beispiel% m−File−Beispiel fuer die Benutzung des MATLAB lcc−Compilers%% ©2010, M. Schlup

helpstring='Einfaches Beispiel';dlgname='Erlaeuterung';helpdlg(helpstring,dlgname)f = input('Frequenz in Hz eingeben: f = ');w=2*pi*f;t=linspace(0,2.5/f,400);x=cos(w*t);plot(1e3*t,x)xlabel('\rightarrow Zeit in ms')ylabel('\rightarrow Signal')title(['Harmonische Funktion der Frequenz f = ',num2str(f),' Hz'])

Das erstellte C-Progamm kann anschliessend vom Betriebssystem aus, wie jede andere Applika-tion durch Doppelklick gestartet werden. Es besteht ebenfalls die Möglichkeit dieses Programmmit der Anweisung >> !beispiel direkt von MATLAB aus zu starten22.

2.4 Einführung in symbolisches Rechnen (Symbolic Toolbox)

MATLAB ermöglicht es zusammen mit der Symbolic Toolbox auch symbolische Operationen wieLösen von Gleichungssystemen, Differenzieren und Integrieren durchzuführen. Dazu genügt es,die Variablem welche als Symbole ohne zugewiesenen numerischen Wert als sims zu deklarieren.Die Symbolic Toolbox benutzt etliche Funktionen der Software Maple

23, die Syntax ist aberverschieden.

22 Das Ausrufszeichen ! ermöglicht es, Anweisungen an das Betriebssystem direkt aus der MATLAB-Umgebungheraus durchzugeben (Invoke operating system command).

23 cf. http://www.maplesoft.com/

28

Page 29: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

In den folgenden Listings seinen einige einfache Beispiele für die Benutzung der SymbolicToolbox gegeben. Insbesondere sind die Funktionen sims, solve, pretty, simplify, simple,subs, diff und int vorgestellt. Der Autor hofft, dass diese Beispiele selbsterklärend sind, da erzu bequem ist, alles im Detail zu kommentieren... Falls mehr als das hier vorhandene gewünschtwird, empfiehlt sich die Anweisung >> symintro für eine Einführung in die Symbolic Tollboxeinzugeben.

Mit dem folgenden Beispiel werden die Wurzeln eines Polynoms zweiten Grades formal be-stimmt, d. h. die Lösungen der Gleichung ax2 + bx + c = 0. Das Beispiel besticht nicht geradedurch seine Komplexitiät, aber es hilft die Möglichkeiten der Symbolic Toolbox aufzuzeigen.

Listing 27: Lösen von Gleichungen am Beispiel eines Polynoms zweiten Grades% Beispiel fuer Symbolic Toolbox: Loesen einfacher Gleichungen%% ©2010, M. Schlup

clear all, clc

% Deklaration als symbolic Variablensyms a b c% Loesen der Gleichung (default: Gleichung=0, Aufloesen nach x)x=solve('a*x^2+b*x+c')% Loesen der Gleichung (default: Aufloesen nach x)x=solve('a*x^2+b*x+c=0')% Loesen der Gleichung nach xx=solve('a*x^2+b*x+c=0','x')

% "saubere" Variantesyms a b c xf=a*x^2+b*x+cx=solve(f,x)% "schoenere" Darstellungpretty(x)

% Ueberpruefung der Loesung: sollte Null ergebenz1=a*x(1)^2+b*x(1)+csimplify(z1)z2=a*x(2)^2+b*x(2)+csimplify(z2)

% Einsetzen der Polynomkoeffizienten: a=3, b=−4, c=1fs=subs(f,a,b,c,[3,−4,1])% Polynomwert bei x=3fs_2=subs(fs,2)

29

Page 30: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

In den Listings 28 und 29 geht es um die elektrische Schaltung nach Abbildung 3.

Abbildung 3: Einfaches Schaltungsbeispiel

Listing 28: Lösen von Gleichungssystemen am Beispiel der Kirchhoffschen Gleichungen% Beispiel fuer Symbolic Toolbox: Gleichungssysteme%% ©2010, M. Schlup

clear all, clc

% Deklaration als symbolic Variablensyms Uq I1 I2 I3 R1 R2 R3

% Maschengleichungen% m1: Uq=R1*I1+R2*I2;% m2: −R2*I2+R3*I3=0;% Knotengleichung% k1: I1=I2+I3;% System mit drei Gleichungen, Aufloesen nach I1, I2 und I3% Ergebnis in Struktur SS=solve('Uq=R1*I1+R2*I2','−R2*I2+R3*I3=0','I1=I2+I3','I1','I2','I3');%I1 = S.I1, pretty(I1)I2 = S.I2, pretty(I2)I3 = S.I3, pretty(I3)

30

Page 31: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

Listing 29: Lineare Algebra am Beispiel der Kreisstromanalyse% Beispiel fuer Symbolic Toolbox: lineare Algebra, Kreisstromanalyse%% ©2010, M. Schlup

clear all, clc

% Deklaration als symbolic Variablensyms Uq R1 R2 R3

A=[1 0; 1 −1; 0 1] % gerichtete Adjazenzmatrix% beschreibt die Zweigstroeme aus den Kreisstroemen: Ik=A*IRk=diag([R1,R2,R3])R=A'*Rk*A% R=[R1+R2 −R2; −R2 R2+R3];b=[Uq; 0];% loesen des Gleichungssystems nach den KreisstromstaerkenI=R\b; % ueblicher MATLAB Befehl% KreisstromstaerkenIa=I(1)Ib=I(2)

% Bestimmen der ZweigstomstaerkenIk=A*I;Ik=simplify(Ik);I1=Ik(1)I2=Ik(2)I3=Ik(3)

% Ueberpruefung Knotensatz: sollte Null ergebensimplify(I1−I2−I3)

Listing 30: Differenzieren am Beispiel der Funktion atan mit Kettenregel% Beispiel fuer Symbolic Toolbox: Ableitung einer Funktion%% ©2010, M. Schlup

clear all, clc

% Deklaration als symbolic Variablensyms x

% Definieren der Funktionf=atan(1+x^2)pretty(f)

% Ableiten (default: nach x)df=diff(f)% Ableiten nach x (erzwungen)df=diff(f,x)pretty(df)

31

Page 32: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

2 Ausgewählte Themen

Listing 31: Integrieren am Beispiel der Funktion f(t) = exp(−t/τ)% Beispiel fuer Symbolic Toolbox: unbestimmtes und bestimmtes Integral%% ©2010, M. Schlup

clear all, clc

% Deklaration als symbolic Variablensyms tsyms tau positive % positive Zeitkonstante

% Definieren der Funktion f(t)f=exp(−t/tau);pretty(f)latex(f) % liefert die Latex Befehle zur professionellen Darstellung

% unbestimmtes Integral (Stammfunktion)F=int(f,t)pretty(F)

% bestimmtes Integralsyms a b % IntegratonsgrenzenFab=int(f,t,a,b)Fab=simple(Fab)Fab=simplify(Fab)pretty(Fab)latex(Fab)% zweite Integrationsgrenze UnendlichFainf=int(f,t,a,inf)pretty(Fainf)

Bemerkung: Die Zeichenfolge zur LATEX-Darstellung folgender Formel wurde mit den beidenAnweisungen latex aus dem Listing erzeugt24.

b

ae−

tτ dt = τ

e−

aτ − e−

24 Es wurde lediglich eine kleine Anpassung für den Buchstaben τ vorgenommen.

32

Page 33: und noch eine - Einführung in die MATLAB - Programmierunghome.zhaw.ch/~loma/e-lehre/pdf/Matlab/matlab_introduction.pdf · 1 Kurzportrait der Programmiersprache MATLAB Eigentlich

Literatur

Literatur

[1] http://www.mathworks.com/academia/student_center/tutorials/intropage.html

[2] http://www.ant.uni-bremen.de/de/misc/matlabscript/

[3] Desmond Higham, Nicholas Higham: MATLAB Guide

SIAM, 2nd Edition 2005, ISBN 0-89871-578-4, Preis: e 37

33