matlab tutorial

Upload: sharklaser85

Post on 07-Jul-2015

1.784 views

Category:

Documents


7 download

TRANSCRIPT

l

Fakultt Informatik und Mathematik

MATLABVersion 3.0 - MATLAB-Version 7.1 bersetzung, Ergnzung und berarbeitung des Original-MATLAB-Tutorials zu MATLAB-Version 5.3

Getting Startet With MATLAB

Ansprechpartner

Fakultt Informatik und Mathematik HS. Regensburg / www.fh-regensburg.de Fachschaft IM Email: [email protected]

MATLAB-Version Version / Datum

7.1 3.0/ 16.Mrz 2009

MATLAB

V3.0

1 Dokument HistorieAutor Robert Wilke und Ulf Wittl Datum 02.11.2000 Version 1.0 Kommentar Dieses Skript wurde auf Grundlage des Original-MATLAB-Tutorials der Version 5.3 im Rahmen des Meile2000-Projekts ins Deutsche bersetzt und mit interaktiven Elementen versehen. Ergnzt durch bungen. berarbeitung zur Untersttzung der Autodidaktik.

Stephanie Schpferling Andreas Furtner

24.10.2001 29.01.2008

2.0 3.0

2

MATLAB

V3.0

2 Inhaltsverzeichnis1 2 3 4 Dokument Historie ................................................................................................................. 2 Inhaltsverzeichnis .................................................................................................................. 3 Vorwort Grundkurs ............................................................................................................. 6 Die MATLAB Umgebung........................................................................................................ 7 4.1 Kursspezifische MATLAB Konfigurationen ....................................................................... 7 4.2 Das Befehlsfenster ........................................................................................................... 8 4.2.1 Der format - Befehl .................................................................................................... 9 4.2.2 Ausgabe unterdrcken ............................................................................................ 10 4.2.3 Lange Befehlszeilen ................................................................................................ 11 4.2.4 Editieren der Befehlszeile........................................................................................ 11 4.3 Der Workspace ............................................................................................................... 11 4.4 Der save-Befehl .............................................................................................................. 13 4.5 Der Suchpfad und das Current Directory........................................................................ 13 4.6 Der diary Befehl und die Command History ................................................................... 14 4.7 Dateiverarbeitung ........................................................................................................... 16 4.8 Starten von externen Programmen................................................................................. 16 4.9 bungsaufgaben ............................................................................................................ 16 Ausdrcke............................................................................................................................. 18 5.1 Variablen......................................................................................................................... 18 5.2 Zahlen............................................................................................................................. 18 5.3 Operatoren...................................................................................................................... 19 5.4 Funktionen ...................................................................................................................... 19 5.5 Ausdrcke....................................................................................................................... 20 5.6 bungsaufgaben ............................................................................................................ 21 Hilfe und die Onlinedokumentation.................................................................................... 23 6.1 Der help-Befehl............................................................................................................... 23 6.2 Anmerkung ..................................................................................................................... 24 6.3 Das Hilfe-Fenster............................................................................................................ 26 6.4 Der lookfor-Befehl........................................................................................................... 27 6.5 Der HelpDesk bzw. der doc-Befehl................................................................................. 28 6.6 Ausdrucken der Online-Hilfe........................................................................................... 29 6.7 Internetverbindung zu MathWorks.................................................................................. 29 6.8 bungsaufgaben ............................................................................................................ 30 Matrizen................................................................................................................................. 31 7.1 Eingabe von Matrizen ..................................................................................................... 32 7.2 Summe, Transposition und Spur .................................................................................... 33 7.3 Indizes ............................................................................................................................ 34 7.4 Der Doppelpunkt-Operator ............................................................................................. 35 7.5 Die magicFunktion ........................................................................................................ 36 7.6 bungsaufgaben ............................................................................................................ 37 Arbeiten mit Matrizen........................................................................................................... 38 8.1 Erstellen von Matrizen mittels Funktionen ...................................................................... 38 8.2 load ................................................................................................................................. 39 8.3 M-Files ............................................................................................................................ 39 8.4 Zusammensetzen von Matrizen...................................................................................... 41 8.5 Lschen von Zeilen und Spalten .................................................................................... 42 8.6 Lineare Algebra .............................................................................................................. 42 8.7 Elementweise Operationen............................................................................................. 46 3

5

6

7

8

MATLAB 8.8 9

V3.0 bungsaufgaben ............................................................................................................ 48

Ablaufkontrolle..................................................................................................................... 50 9.1 if-Anweisung ................................................................................................................... 50 9.2 switch und case .............................................................................................................. 52 9.3 for-Schleifen.................................................................................................................... 53 9.4 while-Schleifen................................................................................................................ 54 9.5 break............................................................................................................................... 55 9.6 bungsaufgaben ............................................................................................................ 55

10 Graphiken ............................................................................................................................. 57 10.1 Erstellen eines Plots ....................................................................................................... 57 10.2 Bildfenster....................................................................................................................... 59 10.3 Graphiken erweitern ....................................................................................................... 59 10.4 Teilbilder ......................................................................................................................... 60 10.5 Imaginre und komplexe Daten...................................................................................... 61 10.6 Achsenwahl .................................................................................................................... 62 10.7 Achsenbeschriftung und Titel ......................................................................................... 63 10.8 bungsaufgaben ............................................................................................................ 64 11 Weiterfhrendes Material und Literatur: ............................................................................ 66 12 bungen aus verschiedenen Themenbereichen .............................................................. 68 12.1 Vorbemerkung ................................................................................................................ 68 12.2 Grundrechenarten........................................................................................................... 68 12.3 Determinanten ................................................................................................................ 71 12.4 Inverse ............................................................................................................................ 73 12.5 Adjunkte und Cramersche Regel.................................................................................... 75 12.6 Unabhngigkeit, Rang .................................................................................................... 77 12.7 Gleichungssysteme ........................................................................................................ 78 12.8 Quadratische Gleichungssysteme .................................................................................. 80 12.9 Iteration........................................................................................................................... 84 12.10 Kleinste Quadrate ....................................................................................................... 84 12.11 Eigenwerte .................................................................................................................. 86 12.12 Komplexe Zahlen ........................................................................................................ 88 13 Vorwort Aufbaukurs.......................................................................................................... 91 14 Kursspezifische MATLAB Konfigurationen....................................................................... 92 15 Skripte und Funktionen ....................................................................................................... 94 15.1 Skripte............................................................................................................................. 94 15.2 Funktionen ...................................................................................................................... 95 15.3 Globale Variablen ........................................................................................................... 98 15.4 Dualitt zwischen Kommandos und Funktionen............................................................. 98 15.5 Die eval-Funktion und inline-Funktionen ........................................................................ 99 15.6 Vektorisierung............................................................................................................... 101 15.7 Vorbelegung ................................................................................................................. 102 15.8 Funktionen als Eingabeparameter................................................................................ 102 15.9 bungsaufgaben .......................................................................................................... 104 16 Matrizen, Vektoren und Felder.......................................................................................... 106 16.1 Multivariate Daten......................................................................................................... 106 16.2 Verwendung von Skalaren............................................................................................ 108 16.3 Logische Indizierung..................................................................................................... 110 16.4 Die find Funktion........................................................................................................... 111 16.5 bungsaufgaben .......................................................................................................... 112 17 Andere Datenstrukturen .................................................................................................... 114

4

MATLAB 17.1 17.2 17.3 17.4

V3.0 Mehrdimensionale Felder ............................................................................................. 114 Zellenfelder ................................................................................................................... 118 Zeichen und Text .......................................................................................................... 120 Strukturen ..................................................................................................................... 123

18 Manipulation von Graphiken............................................................................................. 126 18.1 Gitter- und Flchen-Graphiken ..................................................................................... 126 18.2 Visualisierung von Funktionen zweier Variabler ........................................................... 126 18.3 Bilder............................................................................................................................. 127 18.4 Drucken von Graphiken ................................................................................................ 128 18.5 Graphische Objekte ...................................................................................................... 128 18.6 Umgang mit Objekten ................................................................................................... 129 18.7 Funktionen zur Erzeugung von Objekten ..................................................................... 130 18.8 Objekteigenschaften ..................................................................................................... 130 18.9 Set und get ................................................................................................................... 132 18.10 Graphische Benutzerschnittstellen (MATLAB GUI Entwicklung) ........................... 134 18.11 Animationen .............................................................................................................. 135 18.12 Filme ......................................................................................................................... 135 18.13 bungsaufgaben....................................................................................................... 136 19 Weiterfhrendes Material und Literatur: .......................................................................... 139 20 bungen aus verschiedenen Themenbereichen ............................................................ 141 20.1 Vorbemerkung .............................................................................................................. 141 20.2 Adjunkte und Cramersche Regel.................................................................................. 141 20.3 Unabhngigkeit, Rang .................................................................................................. 142 20.4 Gleichungssysteme ...................................................................................................... 143 20.5 Quadratische Gleichungssysteme ................................................................................ 146 20.6 Iteration......................................................................................................................... 149 20.7 Kleinste Quadrate ......................................................................................................... 150 20.8 Eigenwerte.................................................................................................................... 151 20.9 Komplexe Zahlen.......................................................................................................... 154 20.10 *Programmieraufgaben ............................................................................................. 156

5

MATLAB

V3.0

3 Vorwort GrundkursWas ist MATLAB? MATLAB ist sicherlich eine der am weitest verbreiteten Programmiersprache, bzw. Umgebungen zur Entwicklung mathematischer Algorithmen. Smtliche Berechnungen werden durch numerische Verfahren umgesetzt, was gerade fr praktische Anwendungen bentigt wird, allerdings vom Anwender stets im Hinterkopf behalten werden muss, da natrlich auch numerische Fehler auftreten. Dieser Grundlagenkurs beschftigt sich allerdings nicht mit den numerischen Detaillsungen, sondern einzig und allein mit der Syntax dieser eleganten und fr mathematische Entwicklungen sehr effektiven Programmiersprache. Der Kurs soll somit StudentInnen der Studiengnge Mathematik, Informatik, sowie aller Ingenieursdisziplinen ansprechen. Diese Unterlagen liegen nun in der dritten berarbeiteten Form vor, wobei in der letzten Umgestaltung besonderes darauf geachtet wurde, dass ein selbststndiges Erarbeiten der Thematik mglich ist. Hierzu tragen neben der Beschreibung von syntaktischen Besonderheiten auch viele bungsaufgaben mit Lsungsvorschlgen zum sicheren Verstndnis bei. Einige der bungsaufgaben sind mit einem Pfeil (z.B. 3.) versehen. Diese Aufgaben knnen auch mit Papier und Bleistift gelst werden, z.B. als Prfungsvorbereitung fr Lineare Algebra. Bei Aufgaben mit einem Stern (z.B. 4.*) ist der Aufwand zur Lsung etwas hher. Nach dem erfolgreichen Durcharbeiten des Kurses wird sich der/die Studierende ber ein solides Grundlagenwissen erfreuen, welches nicht nur das weitere Studium positiv beeinflussen wird, sondern auch vielen den Berufseinstieg erleichtert, da dieses Tool in der Industrie weit verbreitet ist und deshalb auch der Umgang damit fr einige unumgnglich sein wird. Besondere Kenntnisse fr diesen Kurs werden nicht vorausgesetzt, allerdings sind grundlegende Programmierkenntnisse hilfreich.

HinweiseAlle Beispiele wurden mit MATLAB Version 7.1 getestet. Wenn auf Ihrem Computer MATLAB installiert ist, knnen Sie die im Text markierten Programme ablaufen lassen, ohne diese zuvor abzutippen. Es gengt, wenn Sie einfach auf ein markiertes Programm (DateiName) klicken. Dadurch ffnet sich ein MATLAB-Befehlsfenster, in dem die Befehlsfolge abluft. Durch Eingabe einer beliebigen Taste wird das MATLAB-Befehlsfenster wieder geschlossen. Wenn Sie es aber ausnahmsweise offen lassen wollen, um vielleicht noch etwas auszuprobieren, dann tippen Sie einfach [Strg][C] und es bleibt erhalten. Voraussetzung hierfr sind allerdings 2 Installationsmanahmen, die im folgenden Kapitel beschrieben werden.

6

MATLAB

V3.0

4 Die MATLAB Umgebung4.1 Kursspezifische MATLAB Konfigurationenunter Windows

Um die vorbereiteten Verknpfungen zu MATLAB ber Programm funktionsfhig zu machen, sind folgende beiden Schritte erforderlich: 1.

In MATLAB muss ein Pfadeintrag auf den Ordner verweisen, in dem die ProgrammDateien stehen. Dazu ffnet man in MATLAB den Path-Browser (s.u.) ber File / Set Path...

Dialogfenster zur Vernderung verlinkter MATLAB-Pfade. Drcken Sie nun den Button AddFolder und navigieren Sie zu dem Pfad in welchem die Beispiele zu diesen Tutorial zu finden sind. Zum Abschluss der Einstellungen drcken Sie den Button Save. 2. Der System-Pfad muss den Ordner enthalten, in dem die Datei matlab.exe steht, also etwa C:\Programme\Matlab\bin. In Windows XP geschieht dies z.B. ber Start / Einstellungen / Systemsteuerung / System. Im Fenster Systemeigenschaften knnen dann auf der Registerkarte Erweitert die Umgebungsvariablen eingestellt werden. Dazu erscheint folgendes Fenster, in dessen unterer Zeile der Pfadeintrag markiert wurde.

7

MATLAB

V3.0

Windows-Dialogfenster zum einstellen der Umgebungsvariablen. Nach Klick auf den Button Bearbeiten kann man ihn vollstndig lesen. Sofern noch kein Verweis auf MATLAB vorliegt, wird der vorhandene Pfad-Eintrag ergnzt durch den Pfad zu Ihrer Datei matlab.exe, also z.B. durch ;C:\Programme\Matlab\bin

4.2

Das Befehlsfenster

Das Befehlsfenster ist vergleichbar mit dem Windows Befehlsfenster. Es knnen einzelne Befehle in einem Prompt eingegeben werden, welche nach Drcken der Enter-Taste sofort ausgewertet werden. Um das Befehlsfenster zu erreichen gehen Sie zu den Menpunkt Desktop/Command Window woraufhin sich das Befehlsfenster in die MATLABEntwicklungsumgebung includiert (vgl. folgende Abbildung).

8

MATLAB

V3.0

Rot eingerahmt das Befehlsfenster mit zwei Beispieleingaben der Matrizen A und B. Wie Sie in der Abbildung erkennen knnen, werden ganze Zahlen ohne weitere Kommastellen ausgegeben, Gleitkommazahlen mit vier Nachkommastellen ausgegeben, was natrlich nicht der Rechengenauigkeit entspricht. Obwohl die Ausgabe schlicht gehalten ist, gibt es auch hier Mglichkeiten, diese zu manipulieren, weshalb die folgenden Abschnitte ein paar Mglichkeiten beschreiben das Aussehen des Befehlsfensters zu verndern. Falls es auf Ihrem System mglich ist Schriftarten fr das Befehlsfenster auszuwhlen (File/Preferences>Fonts), sollten Sie eine Schrift mit fester Zeichenbreite, wie z.B. Fixedsys oder Courier, whlen, um keine strenden Verschiebungen zu erhalten. 4.2.1 Der format - Befehl Der format-Befehl kontrolliert das numerische Format der durch MATLAB dargestellten Zahlen. Der Befehl hat nur eine Auswirkung auf die Darstellung der Zahlen und nicht auf das Verhalten von MATLAB und wie es mit den Zahlen rechnet oder sie speichert. Es folgen die unterschiedlichen Formate mit ihren entsprechenden Ausgaben: x = [4/3 1.2345e-6] x = 1.3333 0.0000

format short, x1.3333 0.0000

format short e, x

9

MATLAB1.3333e+000 1.2345e-006

V3.0

format short g, x1.3333 1.2345e-006 0.00000123450000 1.23450000000000e-006

format long, x1.33333333333333

format long e, x1.33333333333333e+000

format long g, x1.33333333333333 1.2345e-006

format bank, x1.33 0.00 1/810045 3eb4b6231abfd271

format rat, x4/3

format hex, x3ff5555555555555

Beispiel 4.1 (Beispiel_format) Sollte das grte Element einer Matrix grer als 103 oder das kleinste kleiner als 10-3 sein, so klammert MATLAB einen Skalierungsfaktor bei short- oder long-Formaten aus. Zustzlich zu den oben gezeigten format Befehlen gibt es noch format compact Dieser Befehl unterdrckt alle Leerzeilen, die normalerweise zur bersichtlichkeit dienen sollen. Auf diese Weise ist es mglich, mehr Informationen im Fenster zu sehen. format loose Macht diesen Befel rckgngig. Mit dem Befehl format + schliesslich erreichen Sie, dass lediglich das Vorzeichen der Zahlen ausgegeben wird. Das ist manchmal sinnvoll, um Strukturen in groen Matrizen erkennen zu knnen. Mehr Kontrolle ber das Ausgabeformat erlauben die Funktionen sprintf und fprintf, die der Programmiersprache C entlehnt sind. 4.2.2 Ausgabe unterdrcken Wenn Sie einen Ausdruck eingeben und anschlieend die Eingabe-Taste drcken, gibt MATLAB automatisch das Ergebnis auf dem Bildschirm aus. Beenden sie die Zeile jedoch mit einem Strichpunkt, so fhrt MATLAB zwar die Berechnung durch, gibt das Ergebnis aber nicht aus. Dies ist besonders hilfreich, wenn groe Matrizen berechnet bzw. erzeugt werden. Beispiel: A = magic(100); Die Variable A enthlt nun ein magisches Quadrat. Es erfolgte jedoch keine Ausgabe.

10

MATLAB

V3.0

4.2.3 Lange Befehlszeilen Sollte ein Ausdruck nicht in eine Zeile passen, so verwenden Sie drei Punkte ... um zu kennzeichnen, dass der Ausdruck in der nchsten Zeile fortgefhrt wird. Beispiel: s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12; Leerzeichen vor und nach =, + und - Zeichen sind nicht ntig, aber erlaubt. Sie erhhen manchmal die Lesbarkeit. 4.2.4 Editieren der Befehlszeile Pfeil- und Kontrolltasten geben die Mglichkeit, bereits eingegebene Ausdrcke und Befehle zu editieren, zu wiederholen oder sie zu widerrufen. Nehmen wir an, Sie haben folgende Zeile eingegeben: rho = (1 + sqt(5))/2 Dabei haben Sie sqrt falsch eingetippt und erhalten die folgende Ausgabe Undefined function or variable 'sqt' Anstatt die Zeile wieder neu einzutippen drcken Sie besser die Pfeil-Nach-Oben-Taste, um die obige Zeile erneut anzuzeigen. Anschlieend benutzen Sie die Pfeil-Nach-Links-Taste, um den Fehler zu lokalisieren und schlielich zu korrigieren, indem Sie einfach das fehlende r ergnzen. Weiteres Drcken der Pfeil-Nach-Oben-Taste fhrt zu frher eingetippten Befehlszeilen. Wenn Sie erst einige Zeichen eintippen und anschlieend die Pfeil-NachOben-Taste bettigen, so sucht MATLAB nach einer passenden frher eingegebenen Zeile, deren Anfangszeichen mit der Vorgabe bereinstimmen.

4.3

Der Workspace

Die MATLAB Umgebung enthlt beides, die Variablen, die whrend der MATLAB Sitzung angelegt wurden, und die Dateien, die Programme enthalten und Daten zwischen den Sitzungen speichern. Der Workspace ist ein Speicherbereich auf den von der MATLAB Kommandozeile zugegriffen werden kann. Zwei Befehle, who und whos zeigen den aktuellen Stand des Workspace. Das who-Kommando liefert eine kurze Liste zurck, whrend whos auch Matrixformate und Speicherinformation zurckliefert. Kurz: Jede Variable, welche im Befehlsfenster erzeugt wird, wird im Workspace gespeichert Hier ist eine Ausgabe die von whos erstellt wurde. Sie enthlt einige Resultate der Beispiele aus diesem Kurs. Es werden hier verschiedene MATLAB Datentypen aufgezeigt, auf welche spter noch genauer eingegangen wird. whos Name A B F N R X Size 4x4 8x8 3x3 1x10 33x33 359x371 Bytes 128 512 72 80 8712 1065512 Class double array double array double array double array double array double array

11

MATLAB Y Z ans caption map t x y y2 y3 z 33x33 33x33 1x1 2x43 64x3 1x201 49x49 1x201 1x201 1x201 49x49 8712 8712 8 172 1536 1608 19208 1608 1608 1608 19208 double array double array double array char array double array double array double array double array double array double array double array

V3.0

Grand total is 142440 elements using 1139004 bytes Beispiel 4.2 (Beispiel_whos) Um alle Variablen aus dem Workspace zu lschen, geben Sie clear ein. Selbstverstndlich bietet MATLAB auch die komfortable Mglichkeit, sich den Workspace in einem separaten Dialogfenster anzeigen zu lassen, was eine intuitive Bearbeitung und eine bessere Visualisierung einzelner Variablen zulsst. Gehen Sie hierzu auf den Menpunkt Desktop/Workspace und das Dialogfeld Workspace inkludiert sich Ihrer Entwicklungsumgebung (vgl. folgende Abbildung).

Hier die MATLAB-Entwicklungsumgebung (Workspace Dialog rot eingerahmt, Array Editor blau eingerahmt). Durch Doppelklick auf einzelne Variablen ffnet sich zudem der Array Editor, was auch die bequeme Bearbeitung einzelner Eintrge ermglicht. 12

MATLAB

V3.0

4.4

Der save-Befehl

Das save-Kommando sichert den MATLAB Workspace in eine mat-Datei, diese kann mit dem load-Kommando in einer spteren MATLAB Sitzung eingelesen werden. Z.B.: save August17th sichert den gesamten Workspace in die Datei August17th.mat. Es knnen auch einzeln ausgewhlte Variablen durch die Angabe der Variablennamen nach dem Dateinamen gesichert werden. Normalerweise werden die Variablen in Binrformat abgespeichert und knnen so schnell wieder von MATLAB eingelesen werden. Falls Sie die Dateien auerhalb von MATLAB verwenden wollen, knnen Sie ein alternatives Format angeben: 8 Ziffern Text -ascii 16 Ziffern Text -ascii double Zahlen werden durch Tab getrennt -ascii -double tabs Erzeugt eine Datei fr MATLAB 4 -v4 Anhngen an eine bereits existierende mat Datei -append Wenn Sie den Inhalt des Workspace im Textformat speichern, sollten Sie in jeder Datei nur eine Variable sichern. Falls Sie mehr als eine Variable speichern, erstellt MATLAB eine Textdatei, die Sie nicht einfach wieder in MATLAB laden knnen.

4.5

Der Suchpfad und das Current Directory

MATLAB benutzt einen Suchpfad, das ist eine geordnete Liste von Ordnern und Unterverzeichnissen, um festzustellen, aus welchem Ordner aufgerufene Funktionen zu laden sind. Wenn eine Standardfunktion aufgerufen wird, fhrt MATLAB das erste m-File mit dem Funktionsnamen aus, das es in einem Verzeichnis des voreingestellten Suchpfades findet. Sie knnen dieses Verhalten ndern, in dem Sie private Verzeichnisse und Dateien dem Suchpfad hinzufgen. Das Kommando path zeigt den Suchpfad auf Ihrem Rechner. Verwenden Sie aus dem File-Men den Punkt Set Path..., um den Pfad anzeigen zu lassen oder um ihn zu ndern. Sie knnen zu diesem Zweck aber auch den path-Befehl in erweiterter Form aufrufen oder mit addpath Ordner und Unterverzeichnisse dem Suchpfad hinzufgen. Beispiel 4.3 (Beispiel_path) Einen der wichtigsten Pfade stellt sicherlich auch die Current Directory dar. Diese muss fr jede MATLAB-Sitzung neu festgelegt werden, weshalb auch oben in der Schnellzugriffsleiste dieser Pfad eingestellt werden kann. Hierzu kann man sich ebenfalls ein Dialogfenster anzeigen lassen (Menpunkt Desktop/Current Directory), welches den bequemen Zugriff auf Dateien bzw. Ordnerstrukturen zulsst. Der oben genannte Befehl save bzw. load speichert bzw. ldt die entsprechenden Daten in die eben beschriebene Current Directory.

13

MATLAB

V3.0

Rot eingerahmt das Dialogfeld Current Directory zur einfachen Navigation in der Ordnerstruktur, bzw. fr den einfachen Zugriff auf relevante Dateien.

4.6

Der diary Befehl und die Command History

Der diary Befehl protokolliert Ihre MATLAB Sitzung in einer Datei. Sie knnen sich diese anzeigen lassen und den Text editieren, indem Sie ein Textverarbeitungsprogramm benutzen. Um eine Datei mit dem Namen "diary" zu erzeugen, die alle Befehle enthlt, die Sie eingegeben haben, sowie auch die zugehrige Ausgabe von MATLAB (allerdings ohne Graphiken), geben Sie diary ein. Um die MATLAB Sitzung in eine Datei mit anderen Namen zu speichern, geben Die den Dateinamen an. diary [Dateiname] Um die Protokollierung der Sitzung zu beenden, geben Sie diary off ein. Um sie wieder aufzunehmen, schreiben Sie diary on Da spter noch .m-Dateien vorgestellt werden, in welchen MATLAB-Skripte erstellt werden knnen bei welchen, wie in jeder anderen Programmiersprache auch, Kommentare und Ordentliche Programmierstrukturen eingehalten werden knnen, wird der diary-Befehl nur in seltenen Fllen verwendet. Um aber dennoch die Mglichkeit zu haben, auch auf Befehle zurckgreifen zu knnen, die schon lngere Zeit zurck liegen, zeichnet MATLAB alle Befehle 14

MATLAB

V3.0

auf, welche im Befehlsfenster ausgefhrt wurden. Anzeigen lassen kann man sich auch diese wieder bequem in einem gesonderten MATLAB-Dialogfenster. Wie auch alle anderen Dialogfenster kann auch dieses unter dem Menpunkt Desktop/Command History aktiviert werden (vgl. nachvollgende Abbildung).

Rot eingerahmt das Dialogfeld Command History, welche alle bereits verwendeten Befehle aus dem Befehlsfenster aufzeichnet (auch die vor Tagen und Wochen geordnet nach Datum).

15

MATLAB

V3.0

4.7

Dateiverarbeitung

Mit den Kommandos dir, type, delete und cd werden einige Systemkommandos zur Dateiverarbeitung zur Verfgung gestellt, die dem DOS-Betriebssystem entlehnt sind. Die Tabelle zeigt, wie diese Befehle in anderen Betriebssystemen heien. MATLAB dir type delete cd MS-DOS Dir type del oder erase chdir oder cd UNIX Ls Cat Rm Cd VAX/VMS Dir Type Delete und Laufwerks-

Bei den meisten dieser Befehle bezeichnungen verwendet werden.

knnen Pfadnamen, Wildcards

4.8

Starten von externen Programmen

Die wenigen voreingestellten Betriebssystembefehle aus dem vorigen Abschnitt lassen sich erweitern: Ein Ausrufezeichen ! gibt an, dass der Rest der Zeile fr das Betriebssystem gedacht ist, also kein MATLAB-Kommando enthlt. Dies wird sinnvoll um Utilities oder andere Programme zu starten, ohne MATLAB zu beenden. Im Betriebsystem DOS oder VMS z.B. ldt !edit magik.m einen Editor mit dem Namen edit in dem die Datei magik.m zum editieren geffnet wird. Wenn dieses externe Editorprogramm beendet wird, gibt das Betriebssystem an MATLAB die Kontrolle zurck. Hiermit knnen also smtliche Befehle direkt an das Betriebssystem bergeben werden.

Achtung: Das Benutzen dieser Funktionalitt kann ein entstehendes Programm zustzlich an ein Betriebssystem binden, da MS-DOS Befehle nur in wenigen Fllen mit Befehlen anderer Betriebssystemen (wie z.B. Unix) quivalent sind.

4.9

bungsaufgaben

1. Stellen Sie das Format bank ein und berechnen Sie den folgenden Ausdruck y = sin(1) Stellen Sie nun wieder das Format short ein und berechnen Sie noch mal den selbigen Ausdruck. Lsung 4.1 (loesung_1)

16

MATLAB

V3.0

2.Erzeugen Sie zwei 10x10-Zufallsmatrizen mit sehr kleinen Werten. Berechnen Sie einmal im Format bank und anschlieend im Format short die Differenz der beiden Matrizen und vergleichen Sie die Ergebnisse. Lsung 4.2 (loesung_2)

17

MATLAB

V3.0

5 AusdrckeMATLAB stellt, wie viele andere Programmiersprachen, mathematische Ausdrcke zur Verfgung. Im Unterschied zu anderen Programmiersprachen sind viele dieser Ausdrcke bereits dafr vorgesehen, auch komplette Matrizen verarbeiten zu knnen, was eine der groen Strken von MATLAB ist. Folgende Ausdrcke werden unterschieden: Variablen Zahlen Operatoren Funktionen

5.1

Variablen

MATLAB bentigt keine speziellen Typdeklarationen oder Dimensionsangaben. Wenn in MATLAB eine neue Variable vorkommt, wird sie bei der ersten Initialisierung automatisch deklariert und ihr wird der passende Speicher zugewiesen. Existiert die Variable bereits, so wird sie berschrieben, gegebenenfalls neu deklariert und neuer Speicher zugewiesen. So erzeugt zum Beispiel num_students = 25; Beispiel 5.1 (Beispiel_variablen) eine 1x1-Matrix mit dem Namen num_students und speichert den Wert 25 in ihrem reservierten Speicher. Variablennamen bestehen aus mindestens einem Buchstaben am Anfang, gefolgt von beliebig vielen Buchstaben, Zahlen oder Unterstrichen. MATLAB verwendet zur Unterscheidung von Namen nur ihre ersten 32 Zeichen. MATLAB unterscheidet zwischen Gro- und Kleinschreibung. a und A sind somit verschiedene Variablen. Um sich den Inhalt einer Matrix anzeigen zu lassen tippt man einfach ihren Namen ein.

5.2

Zahlen

MATLAB verwendet eine normale Dezimalschreibweise mit oder ohne Dezimalpunkt und evtl. Minus oder Plus als Vorzeichen. Die wissenschaftliche Schreibweise verwendet den Buchstaben e um eine Zehnerpotenz darzustellen. (1.23e4 = 12300). Imaginre Zahlen werden durch ein hintangestelltes i oder j dargestellt. Es folgen ein paar Beispiele fr gltige Zahlendarstellungen: 3 9.6397238 -99 1.60210e-20 0.0001 6.02252e23

1i -3.14159i 3e5i Alle Zahlen werden intern im double - Format gespeichert. Dies ist das durch IEEE 754 spezifizierte Standard-Format fr Gleitpunktarithmetik. Die Zahlen besitzen eine Genauigkeit von ungefhr 16 Dezimalstellen und haben Werte zwischen ca. 10-308 und 10308. Auerdem sind 0 und als Zahlenwerte vorhanden.

18

MATLAB

V3.0

5.3

Operatoren

Nachfolgend sind die gngigsten MATLAB-Operatoren zusammen mit ihrer Abarbeitungsreihenfolge (Prioritt) aufgefhrt. Fr genauere Informationen wird auf die MATLAB-Hilfe verwiesen (Stichwort operators). Falls man sich ber die Genaue Abarbeitungsreihenfolge nicht sicher ist, kann man diese auch ber setzen von Klammern () beeinflussen. Operator a * b a / b a \ b a + b a b a < b, a > b a = b a == b a ~= b a & b a ^ b a | b a && b 6 6 5 4 3 2 7 Prioritt 10 10 9 9 7 Beschreibung Multiplikation Division, Achtung: unterm Schrgstrich steht der Nenner, also 10 / 4 2.5 und 10 \ 4 0.4 Addition Subtraktion Kleiner als, bzw. grer als Kleiner oder gleich, bzw. grer oder gleich Gleichheit Ungleichheit Logisches UND (AND) XOR (exklusives ODER) bzw.Potenzierung des a hoch b Logisches ODER (OR) Schnelles UND (AND), wird nur ausgewertet soweit ntig: Beispiel: (x==0) && (y==1), falls x~=0 (false) bleibt die 2. Klammer unbeachtet, denn das Ergebnis wird sowieso false. a || b 1 Schnelles ODER (OR) ), wird nur ausgewertet soweit ntig: Beispiel: (x==0) || (y==1), falls x==0 bleibt die 2. Klammer unbeachtet, denn das Ergebnis wird sowieso true ~ a Mit help ops erhlt man eine Beschreibung aller Operatoren. 10 Unrer Operator, NOT a

5.4

Funktionen

MATLAB stellt eine groe Anzahl von elementaren mathematischen Funktionen, wie abs, sqrt, exp und sin, zur Verfgung. Das Ziehen einer Wurzel oder das Logarithmieren einer negativen Zahl ist kein Fehler. Stattdessen wird das Ergebnis automatisch als komplexe Zahl ausgegeben. Auerdem stellt MATLAB viele spezielle mathematische Funktionen zur Verfgung, wie z.B. bessel-Funktionen und gamma-Funktion. Die meisten dieser Funktionen

19

MATLAB

V3.0

akzeptieren komplexe Zahlen und Matrizen als Argumente. Um sich eine Liste aller elementaren mathematischen Funktionen ausgeben zu lassen, gibt man help elfun ein. Fr eine Liste der speziellen Funktionen gibt man help specfun ein. Das Repertoire an elementaren Matrizen zeigt help elmat an. Einige der Funktionen, wie z.B. sqrt und sin, sind direkt in MATLAB integriert, deshalb sind sie sehr schnell und effektiv. Nachteilig ist aber, dass man dadurch nicht an deren Quellcode herankommt. Dies ist bei anderen Funktionen, wie z.B. bei gamma und sinh mglich, die als sogenannte M-Files vorliegen. Man kann deren Code auch selbst modifizieren, sollte das aber besser unterlassen. Einige spezielle Konstanten stellt MATLAB zur Verfgung: pi i j eps 3.14159265.... Imaginrteil von das gleiche wie i relativer Gleitpunktfehler, 2-52 kleinstmgliche Gleitpunktzahl, 2-1022 grtmgliche Gleitpunktzahl, (2 eps) 21023

(1)

realmin realmax inf NaN

keine Zahl (Not a Number)

Die Zahl inf entsteht z.B. bei der Division einer endlichen positiven Zahl durch Null (z.B. 123.4/0) oder bei der Berechnung von mathematischen Ausdrcken bei denen ein berlauf auftritt, d.h. das Ergebnis wrde grer als realmax werden. NaN (Not a Number) entsteht bei Ausdrcken wie 0/0 oder inf - inf, fr die keine eindeutigen Ergebnisse existieren. Die Namen der Konstanten und Funktionen sind nicht von MATLAB reserviert, d.h. es ist jederzeit mglich, sie zu berschreiben und somit als eigene Variablen- oder Funktionsnamen zu verwenden. Beispiel: pi = 4711 Nun kann eps als Variable mit diesem neuen Wert verwendet werden. Will man der Variablen oder Funktion wieder ihren ursprnglichen Wert zuweisen, so tippt man clear pi

5.5

Ausdrcke

Beispiele von Ausdrcken mit ihren Ergebnissen: rho = (1+sqrt(5))/2 rho = 1.6180

20

MATLAB a = abs(3+4i) a = 5 z = sqrt(besselk(4/3, rho-i)) z = 0.3730 + 0.3214i huge = exp(log(realmax)) huge = 1.7977e+308 toobig = pi*huge toobig = Inf Beispiel 5.2 (Beispiel_ausdruecke)

V3.0

Vorsicht: log bezeichnet in MATLAB den natrlichen Logarithmus (ln). Der Zehnerlogarithmus heit log10. abs bezeichnet den Betrag einer komplexen Zahl, nicht aber den Betrag eines Vektors oder einer Matrix. Die diesbezgliche Funktion heit norm.

5.6

bungsaufgabenanna ANNA anNa aNna_anna

1. Wie viele verschiedene MATLAB Variablen stehen in folgender Zeile? Lsung 5.1 (loesung_4) 2. Berechnen Sie die Polardarstellung dieser komplexen Zahlen. Hinweis: MATLAB-Funktionen angle und abs a) z = (1 3i ) 5 + (1 + 3i ) 5 b) c) d)

z = (1 + i 2

3 50 2

)

z=

(2 i ) 7 1 + i (1 + i )

z = 5 1+ 2i + (1 + 2i ) 5

Lsung 5.2 (loesung_6) 3. Berechnen Sie e1+ 2i , (1 + 2i) e und (1 + 2i ) (1+ 2i ) Lsung 5.3 (loesung_7) 4. Bestimmen Sie alle Lsungen der Gleichung b + 2i + 8 4i = 30 Lsung 5.4 (loesung_8)

21

MATLAB

V3.0

5. Berechnen Sie die nachfolgenden Ausdrcke in MATLAB. Sind die Ergebnisse die, die Sie erwarten? a) b) c) d) e) f) g) h) i) j) k)

1 2 exp(), exp() sign(NaN), sign( NaN)

NaN 0 0 1NaN log(), log(), log(0) 1 / inf inf + inf, inf inf 1 inf

Lsung 5.5 (loesung_9)

22

MATLAB

V3.0

6 Hilfe und die OnlinedokumentationWie jede andere Programmiersprache auch ist MATLAB sehr umfangreich, so dass es sicherlich nicht mglich ist, sich alle Funktionen und Besonderheiten zu merken, geschweige denn die exakten Prototypen der einzelnen Funktionen und die Reihenfolge und Form ihrer Parametertypen. Gerade hierfr stellt MATLAB sehr umfangreiche Dokumentationen und Hilfeumgebungen zur Verfgung. Dabei gibt es viele verschiedene Mglichkeiten, an Informationen ber MATLAB heranzukommen: - Der help - Befehl - Das Hilfe-Fenster - Der MATLAB Help-Desk - Online Bezugsseiten - Link zu The MathWorks, Inc. Homepage im Internet

6.1

Der help-Befehl

Der help-Befehl ist der einfachste Weg um die Syntax und das Verhalten einer speziellen Funktion festzustellen. Die Information wird direkt im Befehlsfenster angezeigt. Beispiel: help magic gibt folgendes aus MAGIC Magic square. MAGIC(N) is an N-by-N matrix constructed from the integers 1 through N^2 with equal row, column, and diagonal sums. Produces valid magic squares for N = 1,3,4,5,... Beispiel 6.1 (Beispiel_help) Hierbei muss nicht einmal der genaue Befehlsname bekannt sein, da im Befehlsfenster auch Autovervollstndigung untersttzt wird. Schreibt man zum Beispiel nur help mag und drckt dann die Tabulator-Taste werden alle Funktionen in einem kleinen PopUp-Men dargestellt die mit mag beginnen und man kann sich die gewnschte Funktion auswhlen (vgl. folgende Abbildung). Sollte mit den gegebenen Anfangsbuchstaben eine eindeutige Funktionszuweisung mglich sein, wird gleich das ganze Wort vervollstndigt.

23

MATLAB

V3.0

Autovervollstndigung von Befehlen nach Drcken der Tabulator-Taste

6.2

Anmerkung

MATLAB help-Eintrge verwenden fr Funktions- und Variablennamen Groschreibung, um sie vom restlichen Text hervorzuheben. Wenn Sie aber selbst einen Funktionsnamen eingeben, mssen Sie ihn klein schreiben, weil MATLAB zwischen Gro- und Kleinschreibung unterscheidet. Alle MATLAB-Funktionen sind in logischen Gruppen organisiert. Die Verzeichnisstruktur basiert auf dieser logischen Gruppierung. Zum Beispiel sind alle Funktionen zur Matrizenrechnung im Verzeichnis matfun zusammengefasst. Um sich alle diese Funktionsnamen mit einer Kurzbeschreibung ausgeben zu lassen, gibt man help matfun ein und erhlt: Matrix functions - numerical linear algebra. Matrix analysis. norm normest rank det trace null orth rref subspace Matrix or vector norm. Estimate the matrix 2-norm. Matrix rank. Determinant. Sum of diagonal elements. Null space. Orthogonalization. Reduced row echelon form. Angle between two subspaces.

Linear equations. \ and / - Linear equation solution; use "help slash". inv - Matrix inverse. cond - Condition number with respect to inversion. condest - 1-norm condition number estimate. chol - Cholesky factorization. cholinc - Incomplete Cholesky factorization. 24

MATLAB lu luinc qr lsqnonneg pinv lscov -

V3.0 LU factorization. Incomplete LU factorization. Orthogonal-triangular decomposition. Linear least squares with nonnegativity constraints. Pseudoinverse. Least squares with known covariance.

Eigenvalues and singular values. eig - Eigenvalues and eigenvectors. svd - Singular value decomposition. gsvd - Generalized ingular value decomposition. eigs - A few eigenvalues. svds - A few singular values. poly - Characteristic polynomial. polyeig - Polynomial eigenvalue problem. condeig - Condition number with respect to eigenvalues. hess - Hessenberg form. qz - QZ factorization for generalized eigenvalues. schur - Schur decomposition. Matrix functions. expm - Matrix exponential. logm - Matrix logarithm. sqrtm - Matrix square root. funm - Evaluate general matrix function. Factorization utilities qrdelete - Delete column from QR factorization. qrinsert - Insert column in QR factorization. rsf2csf - Real block diagonal form to complex diagonal form. cdf2rdf - Complex diagonal form to real block diagonal form. balance - Diagonal scaling to improve eigenvalue accuracy. planerot - Given's plane rotation. cholupdate - rank 1 update to Cholesky factorization. qrupdate - rank 1 update to QR factorization. Beispiel 6.2 (Beispiel_help_matfun) Der Befehlhelp

alleine gibt alle Verzeichnisse mit einer kurzen Beschreibung der Funktionskategorie aus.HELP topics: general\Beispiele MATLAB\general MATLAB\ops MATLAB\lang MATLAB\elmat MATLAB\elfun MATLAB\specfun MATLAB\matfun MATLAB\datafun MATLAB\polyfun MATLAB\funfun MATLAB\sparfun MATLAB\graph2d MATLAB\graph3d MATLAB\specgraph MATLAB\graphics MATLAB\uitools MATLAB\strfun (No table of contents file) General purpose commands. Operators and special characters. Programming language constructs. Elementary matrices and matrix manipulation. Elementary math functions. Specialized math functions. Matrix functions - numerical linear algebra. Data analysis and Fourier transforms. Interpolation and polynomials. Function functions and ODE solvers. Sparse matrices. Two dimensional graphs. Three dimensional graphs. Specialized graphs. Handle Graphics. Graphical user interface tools. Character strings.

25

MATLABMATLAB\iofun MATLAB\timefun MATLAB\datatypes MATLAB\winfun (DDE/ActiveX) MATLAB\demos wavelet\wavelet wavelet\wavedemo fuzzy\fuzzy fuzzy\fuzdemos toolbox\stats toolbox\ncd nnet\nnet nnet\nndemos nnet\nnutils nnet\nnobsolete toolbox\splines toolbox\optim toolbox\control control\ctrlguis control\obsolete stateflow\sfdemos toolbox\sb2sl stateflow\stateflow simulink\simulink simulink\blocks simulink\simdemos simulink\dee toolbox\tour MATLABR11\work toolbox\local File input/output. Time and dates. Data types and structures. Windows Operating

V3.0

System

Interface

Files

Examples and demonstrations. Wavelet Toolbox. Wavelet Toolbox Demos. Fuzzy Logic Toolbox. Fuzzy Logic Toolbox Demos. Statistics Toolbox. Nonlinear Control Design Blockset Neural Network Toolbox. Neural Network Demonstrations. (No table of contents file) (No table of contents file) Spline Toolbox. Optimization Toolbox. Control System Toolbox. Control System Toolbox -- GUI support functions. Control System Toolbox -- obsolete commands. Stateflow demonstrations and samples. SystemBuild to Simulink Translator Stateflow Simulink Simulink block library. Simulink 3 demonstrations and samples. Differential Equation Editor MATLAB Tour (No table of contents file) Preferences.

For more help on directory/topic, type "help topic".

Beispiel 6.3 (Beispiel_funktionskategorie)

6.3

Das Hilfe-Fenster

Das MATLAB Hilfe-Fenster ist auf PCs durch das Anwhlen der Matlab Help-Option im Menpunkt Help oder durch das Anklicken des Fragezeichens auf der Menleiste aufzurufen (alternativ drcken Sie die F1-Taste). Grundstzlich ist es aber auf allen Computern durch das Eingeben von helpwin aufzurufen und es erscheint das folgende oder ein hnliches Fenster (je nach MATLABVersion). Beispiel 6.4 (Beispiel_helpwin)

26

MATLAB

V3.0

MATLAB Hilfe Fenster Um das Hilfe-Fenster auf ein bestimmtes Thema anzuwenden, geben sie helpwin [THEMA] ein (quivalent wie die Benutzung des help-Befehls). Das Hilfe-Fenster gibt Ihnen den Zugriff auf die gleichen Informationen wie der help-Befehl, zustzlich bietet es aber ntzliche Links zu anderen Themen.

6.4

Der lookfor-Befehl

Der lookfor-Befehl erlaubt es Ihnen, anhand eines Schlsselwortes nach Funktionen zu suchen. Der Befehl untersucht die erste Zeile des help-Textes jeder MATLAB-Funktion man nennt sie auch die H1-Zeile nach dem eingegebenen Schlsselwort und gibt diese bei einem Fund aus. Beispiel: MATLAB besitzt keine Funktion namens inverse. Die Ausgabe von help inverse wird lauten inverse.m not found Aber lookfor inverse findet ber ein Dutzend Treffer. Je nachdem, welche Toolboxen installiert sind, bekommt man z.B. folgende Ausgabe

27

MATLAB INVHILB ACOSH ERFINV INV PINV IFFT IFFT2 ICCEPS Inverse Hilbert matrix. Inverse hyberbolic cosine. Inverse of the error function. Matrix inverse. Pseudoinverse. Inverse discrete Fourier transform.

V3.0

Two-dimensional inverse discrete Fourier transform. Inverse complex cepstrum.

IDCT Inverse discrete cosine transform. Wird die Option -all an den lookfor-Befehl angehngt, so wird nicht nur die H1-Zeile, sondern alle H-Zeilen des help-Texteintrags untersucht. Beispiel: lookfor -all inverse Beispiel 6.5 (Beispiel_lookfor)

6.5

Der HelpDesk bzw. der doc-Befehl

Der MATLAB-HelpDesk bietet einen guten Zugang zu mehr Hilfe und mehr Informationen auf der Festplatte oder CD-ROM. Viele dieser Informationen basieren auf HTML und knnen somit durch einen Browser, wie z.B. den Netscape Browser oder Internet Explorer dargestellt werden. Der HelpDesk wird ber das Men Help und den Punkt Using the Desktop oder durch das Eintippen von helpdesk gestartet. Fr alle MATLAB-Operatoren und Funktionen gibt es eine HTML-Dokumentation die ber den HelpDesk erreicht werden kann. Diese Texte enthalten genauere und ausfhrlichere Beschreibungen mit Beispielen, bersichtlicher Formatierung und Bildern. Auerdem gibt es auch noch weitere MATLAB-Dokumente. Kennen Sie den Namen einer speziellen MATLAB-Funktionen, ber die Sie nheres wissen wollen, so knnen sie die Online Hilfe auch direkt mit dem Befehl doc starten. Dabei wird automatisch ein Browser zur Darstellung benutzt. Beispiel: doc eval doc ffnet den Browser, falls er noch nicht geffnet ist und zeigt automatisch die Dokumentation zum gesuchten Begriff an (vgl. nachfolgende Abbildung). Beispiel 6.6 (Beispiel_doc)

28

MATLAB

V3.0

Helpdesk aufgerufen durch die Eingabe:>> doc sin

6.6

Ausdrucken der Online-Hilfe

Verschiedene Versionen der Online-Hilfe sowie die restliche MATLAB Dokumentation ist auch im PDF-Format vorhanden. Man erhlt sie durch den HelpDesk. Die PDF-Dokumente werden mit Hilfe des Adobe Acrobat Reader dargestellt. Dieses Format gibt sehr gut das Erscheinungsbild eines gedruckten Dokuments wieder, mit allen Schrifttypen, Graphiken, Formaten und Bildern. Mit dem Acrobat Reader knnen sie die gewnschten PDF-Dokumente am besten anschauen und ausdrucken. Aber informieren sie sich doch genauer in der MATLAB-Hilfe und suchen sie einfach mal nach pdf, vielleicht finden Sie ja auch hier das richtige.

6.7

Internetverbindung zu MathWorks

Sollten sie ber einen Internetzugang verfgen, so haben sie die Mglichkeit ber den HelpDesk eine Verbindung zu MathWorks, den Herstellern von MATLAB, zu ffnen. Sie knnen Fragen per E-Mail stellen, Vorschlge machen und Fehler bekanntgeben. Ebenfalls knnen sie die Ergebnis-Such-Maschine bei MathWorks in Anspruch nehmen, um immer die aktuellsten Lsungsvorschlge und technischen Hinweise zu erhalten. Gerade zu den Grundlegenden Themen wird auch schon auf der Startseite des HelpDesk Untersttzung angeboten.

29

MATLAB

V3.0

6.8

bungsaufgaben

1. Informieren Sie sich mit der MATLAB-Hilfe wie man ein Skalarprodukt zweier Vektoren berechnet. Was macht der Befehl cross? Lsung 6.1 (loesung_10) 2. In MATLAB gibt es die folgenden Rundefunktionen: ceil, fix, floor, und round. Informieren Sie sich wie jede dieser Funktionen rundet und berechnen Sie die folgenden Ausdrcke zunchst per Hand und berprfen Sie dann Ihre Ergebnisse in MATLAB. a) b) c) d) e) round(-2.6) fix(-2.6) floor(-2.6) ceil(-2.6) floor(ceil(10.8))

Lsung 6.2 (loesung_11)

30

MATLAB

V3.0

7 MatrizenMATLAB ist am besten zu erlernen, wenn man lernt mit Matrizen umzugehen. Dies zeigt Ihnen folgender Abschnitt. In MATLAB sind Matrizen rechteckige Zahlen-Felder. 1x1-Matrizen haben oft eine besondere Bedeutung, sie heien auch Skalare. Matrizen mit nur einer Zeile oder Spalte heien Vektoren. MATLAB hat verschiedene Mglichkeiten, numerische und nicht-numerische Daten zu speichern. Am Anfang ist es aber am Besten sich alles in Matrixform vorzustellen. Die Rechenoperationen sind in MATLAB so natrlich wie mglich gestaltet. Wo andere Programmiersprachen mit einzelnen Zahlen rechnen, ermglicht MATLAB Ihnen, mit ganzen Matrizen effizient und einfach zu arbeiten.

Ein gutes Beispiel fr eine Matrix erscheint im Renaissance Holzschnitt Melancholia I des deutschen Knstlers Albrecht Drer. Wir wollen diese im Folgenden hufig benutzen.

31

MATLAB

V3.0

Sie befindet sich in der rechten oberen Ecke des Bildes und stellt ein sogenanntes Magisches Quadrat dar, dessen Charakteristika zu Drers Zeiten viele Leute beeindruckten. Wir wollen sie gleich nher betrachten.

7.1

Eingabe von MatrizenEingabe einer Reihe von Elementen Matrizen aus externen Dateien laden Erzeugen von Matrizen mit Hilfe vorgegebener (integrierter) Funktionen Erstellen von Matrizen mit eigenen Funktionen in M-Files

Sie knnen in MATLAB Matrizen auf verschiedene Arten eingeben:

Geben Sie Drers Matrix A als eine Liste von Elementen ein. Sie mssen nur wenige Grundregeln beachten: Die Elemente werden durch Leerzeichen oder Kommas getrennt Ein Strichpunkt markiert das Ende einer Zeile Die gesamte Matrix wird von eckigen Klammern [ ] eingeschlossen

Um die Matrix von Drer einzugeben, tippen Sie einfach: A = [ 16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] MATLAB zeigt sofort die eingegebene Matrix an: A = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Beispiel 7.1 (Beispiel_eingabe_matrizen) Dies stimmt exakt mit den Zahlen auf dem Holzschnitt berein. Jede eingegebene Matrix wird von MATLAB im Arbeitsspeicher abgelegt. Sie knnen sie einfach mit ihrem Namen A aufrufen. Nun knnen Sie einen Blick darauf werfen, was die gespeicherte Matrix A so interessant macht. Warum werden ihr magische Fhigkeiten zugeschrieben?

32

MATLAB

V3.0

7.2

Summe, Transposition und Spur

Vielleicht haben Sie schon bemerkt, dass die speziellen Eigenschaften des Magischen Quadrats mit der Summierung der Elemente in verschiedenen Richtungen zusammenhngen. Bilden Sie die Summe jeder Zeile oder Spalte. Sie werden immer dieselbe Zahl erhalten. berprfen Sie dies mit MATLAB. Der erste Befehl ist: sum(A) MATLAB gibt folgendes aus: ans = 34 34 34 34 Beispiel 7.2 (Beispiel_summe) Falls keine Ausgabe-Variable definiert wird, benutzt MATLAB die Variable ans, kurz fr answer (Antwort) um das Ergebnis der Berechnung zu speichern. Sie haben mit dem sumBefehl einen Zeilenvektor gebildet, der die Spaltensummen von A enthlt. Jede der Spalten hat die gleiche Summe die magische Summe 34. Wie steht es mit den Zeilensummen? MATLAB-Befehle wirken in der Regel spaltenweise. Die einfachste Art die Zeilensummen zu berechnen, ist die Matrix zu transponieren, anschlieend die Spaltensummen der transponierten Matrix zu bilden, und dann das Ergebnis nochmals zu transponieren. Die Transposition wird durch ein Hochkomma ( ' ) angegeben, d.h. die Matrix wird an der Hauptdiagonalen gespiegelt. Transposition eines Zeilenvektors liefert einen Spaltenvektor und umgekehrt. So erzeugt A' die Ausgabe ans = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

Beispiel 7.3 (Beispiel_transposition) und sum(A')' gibt die Zeilensummen von A in einem Spaltenvektor aus: ans = 34 34 34 34 Beispiel 7.4 (Beispiel_zeilensumme) Die Summe der Elemente der Hauptdiagonalen, die Spur der Matrix A, wird einfach mit Hilfe der diag-Funktion ermittelt sum(diag(A))

33

MATLAB ergibt: ans = 34 Beispiel 7.5 (Beispiel_diag_funk)

V3.0

Die Gegendiagonale ist mathematisch nicht so wichtig, deshalb gibt es keine MATLABFunktion zu ihrer Summierung. Die Funktion fliplr, die eigentlich fr Graphik-Anwendungen gedacht war, hilft hier jedoch weiter. Sie spiegelt die Matrix an ihrer Mittelachse. Dadurch wird die Gegendiagonale zur Hauptdiagonalen und ihre Spur ist sum(diag(fliplr(A))) ans = 34 Beispiel 7.6 (Beispiel_fliplr) Damit haben Sie geprft, dass die Matrix im Holzschnitt von Drer wirklich ein magisches Quadrat ist und zugleich einige Beispiele fr die Matrizenrechnung kennengelernt. In den folgenden Abschnitten wird die Matrix A benutzt, um weitere MATLAB-Eigenschaften zu veranschaulichen.

7.3

Indizes

Das Element in Zeile m und der Spalte n der Matrix A wird mit A(m, n) bezeichnet. Zum Beispiel steht A(4, 2) fr die Zahl in der 4. Zeile und 2. Spalte von A. In unserem magischen Quadrat ist A(4, 2) = 15. Mit dieser Beziehungsweise kann man die Summe der Elemente in der 4. Spalte auch folgendermaen berechnen: A(1,4) + A(2,4) + A(3,4) + A(4,4) Resultat ist ans = 34 Beispiel 7.7 (Beispiel_indizes) Dies ist sicher nicht der eleganteste Weg, um die Summe einer einzelnen Spalte zu bilden. Es ist auerdem mglich, Elemente einer Matrix mit einem einfachen Index anzusprechen, etwa A(k). Dies ist der bliche Weg Komponenten von Zeilen- und Spaltenvektoren zu bezeichnen. Aber einfache Indizes knnen auch bei Matrizen benutzt werden. In diesem Fall wird das Zahlenfeld A als ein langer Spaltenvektor betrachtet, der sich durch Aneinanderreihen der Spalten der Original-Matrix A ergibt. Fr unser magisches Quadrat ist also A(8) eine andere Mglichkeit den Wert 15 in A(4,2) anzusprechen. Falls Sie einen Wert auerhalb der Matrix aufrufen wollen, gibt MATLAB einen Fehler aus: t = A(4,5) ??? Index exceeds matrix dimensions. Beispiel 7.8 (Beispiel_index)

34

MATLAB

V3.0

Man kann jedoch einen Wert auerhalb der Feldgrenzen speichern. Die Gre der Matrix wird fr das neue Element passend erweitert: X = A; X(4,5) = 17 X = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 0 0 0 17

Beispiel 7.9 (Beispiel_feldgrenze)

7.4

Der Doppelpunkt-Operator

Der Doppelpunkt ist einer der wichtigsten Operatoren in MATLAB. Er tritt in verschiedenen Zusammenhngen auf. Der Ausdruck: 1:10 ist ein Zeilenvektor, der die Zahlen eins bis zehn der Reihe nach enthlt: ans = 1 2 3 4 5 6 7 8 9 10 Beispiel 7.10 (Beispiel_zeilenvektor) Um andere Abstnde zu erhalten, geben Sie eine beliebige, evtl. auch negative Schrittweite an. Z.B. ergibt 100:-7:50 ans = 100 93 86 79 72 65 58 51 Beispiel 7.11 (Beispiel_neg_schrittweite) und 0:pi/4:pi ans = 0 0.7854 1.5708 2.3562 3.1416 Beispiel 7.12 (Beispiel_neg_schrittweite_2) Indexausdrcke, die den Doppelpunktoperator enthalten, beziehen sich auf Ausschnitte von Matrizen, sog. Teilmatrizen. A(1:3,2) ans = 3

35

MATLAB 10 6 Beispiel 7.13 (Beispiel_doppelpunktoperator) ist ein Spaltenvektor und besteht aus den ersten 3 Elementen der 2. Spalte von A. sum(A(1:4,4)) ans = 34 Beispiel 7.14 (Beispiel_spaltenvektor)

V3.0

berechnet die Summe der 4. Spalte von A. Das geht sogar noch einfacher: Der Alleinstehende Doppelpunkt bezieht sich auf alle Matrixelemente in einer Zeile oder Spalte. Das Schlsselwort end bezieht sich auf die letzte Zeile oder Spalte. Man kann es z.B. verwenden, wenn man nicht mehr wei, wie gro die Matrix ist. sum(A(:,end)) berechnet die Summe der Elemente der letzen Spalte von A. ans = 34 Beispiel 7.15 (Beispiel_alleinst_doppelp) Ebenso gut htte man sum(A(:,4)) schreiben knnen. Warum ist die magische Summe bei einem 4x4 - Quadrat 34? Falls die ganzen Zahlen von 1 bis 16 in vier Gruppen mit gleichen Summen aufgeteilt sind, muss sum(1:16)/4 natrlich ans = sein. 34

Beispiel 7.16 (Beispiel_mag_summe)

7.5

Die magicFunktion

MATLAB hat brigens eine eingebaute Funktion, die magische Quadrate nahezu beliebiger Gre erzeugen kann. Diese Funktion hat den Namen magic B = magic(4) B = 16 5 9 4 2 11 7 14 3 10 6 15 13 8 12 1

Beispiel 7.17 (Beispiel_magic_funk)

36

MATLAB

V3.0

Diese Matrix ist fast identisch zur Matrix A aus Drers Holzschnitt. Sie hat auch all deren magische Eigenschaften. Der einzige Unterschied besteht darin, dass die beiden mittleren Spalten vertauscht sind. Um die Matrix B in Drers Matrix umzuwandeln, mssen nur diese beiden Spalten vertauscht werden. Das kann geschehen mit A = B(:,[1, 3, 2, 4]) A = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Beispiel 7.18 (Beispiel_duerers_matrix) Diese Anweisung hat bewirkt, dass in jeder Zeile von Matrix B die Elemente in der Reihenfolge 1, 3, 2, 4 angeordnet wurden. Warum hat wohl Drer A anstelle von B in seinem Holzschnitt verewigt? Vermutlich wollte er die Jahreszahl 1514, das Entstehungsjahr seines Werkes, auf diese Weise in der letzten Matrix-Zeile unterbringen.

7.6

bungsaufgaben

1. Erzeugen Sie ein magisches Quadrat der Gre 6x6 und weisen Sie alle Eigenschaften von magischen Quadraten nach. Lsung 7.1 (loesung_12) 2. Erzeugen Sie mit der Funktion rand eine 5x5-Zufallsmatrix A. Welches sind die Werte der folgenden Ausdrcke (berlegen Sie sich aber zuerst das Ergebnis, bevor Sie es in MATLAB eingeben)? a) b) c) d) e) f)

A(2,:) A(:,5) A(:,1) A([1,5]) A(1,1:2:5) A(4:-1:1,5:-1:1)

Lsung 7.2 (loesung_13) 3. Erzeugen Sie eine Diagonalmatrix mit 1,2,3,4,5 auf der Diagonalen. Lsung 7.3 (loesung_14) 4. * Erzeugen Sie eine tridiagonale 5x5-Matrix mit Einsen auf der Hauptdiagonalen, Zweien auf der unteren Nebendiagonalen und Dreien auf der oberen Nebendiagonalen. Verwenden Sie einmal den Befehl diag zum Erzeugen einer vollen Matrix und einmal den Befehl spdiags zum Erzeugen einer schwach besetzten Sparse-Matrix. Lsung 7.4 (loesung_15)

37

MATLAB

V3.0

8 Arbeiten mit MatrizenWie bereits im vorherigen Kapitel besprochen, werden einfache Matrizen ber eckige Klammern [ ] definiert, wobei ein Komma eine Spalte abschliet und ein Semikolon (Strichpunkt) eine Zeile. ErsteMatrix = [1, 2, 3; 4, 5, 6] ErsteMatrix = 1 4 2 5 3 6

Anstatt dem Komma zur Spaltentrennung reicht ein einfaches Leerzeichen, wobei die folgende Eingabe das gleiche Resultat wie die obige Eingabe erziehlt. ErsteMatrix = [1 2 3; 4 5 6] Hierbei muss aber darauf Acht gegeben werden, dass die Dimensionen der einzelnen Spalten bzw. Zeilen auch wirklich zusammen passen. Folgender Befehl wrde demzufolge eine Fehlermeldung ergeben. ErsteMatrix = [1 2 3; 4 5] % Falsche Eingabe!!!!!!!!! Natrlich ist diese Eingabe von Matrizen relativ komfortabel fr kleinere Exemplare, jedoch sind bei Berechnungen, entstanden aus realen Problemstellungen, meist sehr groe Matrizen von Bedeutung, welche dann nicht mehr einfach per Hand eingegeben werden knnen. Der folgende Abschnitt zeigt ihnen andere Wege zur Erstellung von elementaren Matrizen, welche dann sehr leicht auf andere brauchbare Matrizen konvertiert werden knnen.

8.1

Erstellen von Matrizen mittels Funktionen

MATLAB stellt folgende Funktionen zum Erzeugen grundlegender Matrizen zur Verfgung: zeros ones rand randn eye Einige Beispiele: Z = zeros (4,2) Z = 0 0 0 0 F = 0 0 0 0 Alle Elemente sind Nullen (Nullmatrix) Alle Elemente sind Einsen Gleichverteilte Zufallszahlen aus [0,1[ normalverteilte Zufallszahlen (Mittelwert 0 und Varianz 1) Einheitsmatrix

F = 5 * ones(3,3)

38

MATLAB 5 5 5 N = 9 R = -0.4326 -1.6656 0.1253 0.2877 A = eye(3,3) A = 1 0 0 0 1 0 0 0 1 -1.1465 1.1909 1.1892 -0.0376 0.3273 0.1746 -0.1867 0.7258 -0.5883 2.1832 -0.1364 0.1139 2 6 4 8 7 4 0 8 4 R = randn(4,4) 5 5 5 5 5 5

V3.0

N = fix(10*rand(1,10))

Beispiel 8.1 (Beispiel_erstellen_matrizen) Wie man an den eingaben unschwer erkennen kann, wird die Dimension der Matrix einfach mittels zweier bergabeparameter festgelegt, wobei der erste Parameter immer die Anzahl der Zeilen angibt und der zweite Parameter immer die Anzahl der Spalten. Sind Anzahl der Zeilen gleich zu der gewnschten Anzahl von Spalten, sprich die Matrix ist quadratisch, dann reicht auch ein bergabeparameter. eye(3,3) ist z.B quivalent zu eye(3)

8.2

load

Das Kommando load liest binre Dateien ein, die Matrizen enthalten, welche z. B. in frheren MATLAB-Sitzungen erzeugt wurden. load kann aber auch Textdateien einlesen, die numerische Daten tabellarisch enthalten. Die Zahlen werden durch Leerzeichen getrennt. Erstellen Sie z.B. mit einem Texteditor eine Datei, die folgende Eintrge enthlt: 16.0 5.0 9.0 3.0 10.0 6.0 2.0 11.0 7.0 13.0 8.0 12.0

4.0 15.0 14.0 1.0 und speichern Sie diese unter magik.dat. Der Befehl load magik.dat liest die Datei und speichert ihren Inhalt in einer Matrix namens magik.

8.3

M-Files39

MATLAB

V3.0

Da das editieren von vorangegangen Befehlen im Befehlsfenster relativ mhsam ist und die meisten Aufgaben, welche mit Matlab zu erledigen sind auch nicht nur ein paar wenige Befehlszeilen umfassen, kann man natrlich auch wie bei anderen Programmiersprachen Skripte schreiben die Zeilenweise abgearbeitet werden knnen. Solche Skript-Dateien werden bei MATLAB umgangssprachlich als M-Files bezeichnet, da ihre Dateiendung .m ist. Wir werden hier nicht vertieft auf die Mglichkeiten mit M-Files eingehen, aber da sie fr das effektive arbeiten mit MATLAB unumgnglich sind, werden sie hier kurz vorgestellt. Sie erzeugen M-Files am einfachsten, wenn sie im Men File/New/M-File auswhlen. Es ffnet sich nun der MATLAB-Editor, in welchen sie die Befehle wie im Befehlsfenster eingeben knnen (vgl. Sie folgende Abbildung).

Rot eingerahmt der MATLAB-Editor. Nach drcken des Run-Icons wird das Skript ausgefhrt und im Command Window ausgegeben. In neueren Matlab-Versionen steht als Run-Icon ein grnes Dreieck. Zum Ausfhren dieser Skripte drcken Sie entweder den Run-Icon, drcken die F5-Taste oder gehen zu dem Menpunkt Debug/Run. Daraufhin werden die Zeilen im Befehlsfenster der Reihe nach abgearbeitet, als ob Sie sie direkt darin eingegeben htten. Tipp Richten Sie sich zuerst das Current Directory ein und speichern Sie dort Ihre erstellten MFiles. Dies erleichtert die Bearbeitung unterschiedlicher Dateien, da so im Dialogfeld Current Directory einfach zwischen den unterschiedlichen Dateien ausgewhlt werden kann. Natrlich mssen Sie nicht den MATLAB-Editor verwenden, es kann jeder beliebige Editor verwendet werden. Sie mssen die erstellte Datei lediglich mit der Dateiendung .m versehen. Das Ausfhren der Dateien kann dann ebenso wie gerade beschrieben funktionieren, durch ffnen im MATLAB-Editor, sie knnen aber auch direkt im Befehlsfenster aufgerufen werden. Liegt die Datei z.B. direkt in der Current Directory (oder in einem 40

MATLAB

V3.0

anderen vorgegebenen Suchpfad; siehe path), mssen Sie hierzu nur den Namen der Datei in die Befehlszeile eingeben. Andernfalls mssen Sie vorangestellt den Pfad eingeben. Erzeugen Sie z.B. mit einem Texteditor eine Datei, die die folgenden fnf Zeilen enthlt. A = [ 16.0 5.0 9.0 3.0 10.0 6.0 2.0 11.0 7.0 13.0 8.0 12.0

4.0 15.0 14.0 1.0 ]; Speichern Sie diese Datei unter dem Namen magik.m ab. Die Anweisung magik ldt die Datei und erzeugt die Variable A, die Ihre Beispiel-Matrix enthlt.

8.4

Zusammensetzen von Matrizen

Angenommen Sie haben eine Matrix A bereits erstellt. Mit Hilfe der eckigen Klammern kann man daraus neue Matrizen zusammensetzen Der Verkettungsoperator ist das eckige Klammerpaar [ ]. Benutzen Sie doch die im vorangegangenen Abschnitt erzeugte Matrix A und erstellen daraus wie folgt die Matrix B. B = [ A A+32; A+48 A+16] Das Resultat ist eine 8x8 Matrix, die Sie erhalten, wenn Sie die 4 Untermatrizen aneinanderhngen. B = 16 5 9 4 64 53 57 52 3 10 6 15 51 58 54 63 2 11 7 14 50 59 55 62 13 8 12 1 61 56 60 49 48 37 41 36 32 21 25 20 35 42 38 47 19 26 22 31 34 43 39 46 18 27 23 30 45 40 44 33 29 24 28 17

Beispiel 8.2 (Beispiel_zusamm_matrizen) Diese Matrix ist fast ein weiteres magisches Quadrat. Die Elemente sind eine Anordnung der ganzen Zahlen 1 bis 64. Die Spaltensummen haben einen identischen Wert, wie bei einem magischen Quadrat im Format 8x8. sum(B) ans = 260 260 260 260 260 260 260 260 Beispiel 8.3 (Beispiel_mag_quadrat) Aber die Zeilensummen, sum(B')' sind nicht alle gleich. Einige weitere Manipulationen sind ntig, um aus B ein magisches Quadrat zu machen.

41

MATLAB

V3.0

Noch offensichtlicher wird die Funktionsweise der Matrizenzusammensetzung bei Ausfhrung der folgenden Befehlszeile. C = [ones(3), ones(3)*2; ones(3)*3, ones(3)*4] Hierbei muss selbstverstndlich genau auf die Dimensionen der einzelnen Matrizen geachtet werden, sodass die einzelnen Spalten und Zeilen auch tatschlich eine Matrizenform ergeben. Folgende Zeile wrde demnach eine Fehlermeldung erzeugen. C = [ones(3), ones(3)*2; ones(3)*3] % Inkorrekter Befehl!!!!

8.5

Lschen von Zeilen und Spalten

Sie knnen Zeilen und Spalten einer Matrix lschen, indem Sie diesen einfach ein leeres Paar eckiger Klammern zuweisen. Fangen Sie an mit: X = A; Lschen Sie anschlieend die 2. Spalte von X in dem Sie X(:, 2) = [ ] schreiben. Das Resultat ist X = 16 5 9 4 2 11 7 14 13 8 12 1

Beispiel 8.4 (Beispiel_loesch_zeil_spalt) Falls Sie ein einzelnes Element der Matrix lschen wollen, ist das Ergebnis keine Matrix mehr. Man muss immer komplette Zeilen und/oder Spalten lschen, um eine reduzierte Matrix zu erhalten. So liefert der Ausdruck X(1,2) = [ ] eine Fehlermeldung. Dagegen liefert X(2:2:10) = [] das Ergebnis X = 16 9 2 7 13 12 1 Beispiel 8.5 (Beispiel_loesch_zeil_spalt_2) Hier wurde die komplette Matrix X als Vektor aufgefasst, was durch den einfachen Index in den runden Klammern zum Ausdruck kommt.

8.6

Lineare Algebra42

MATLAB

V3.0

Eine Matrix ist ein zweidimensionales Feld, das eine lineare Transformation darstellt. Mathematische Operationen mit Matrizen sind Gegenstand der linearen Algebra. Zentrale Aufgabe der linearen Algebra ist das Lsen von linearen Gleichungssystemen, wie z.B. 3x + 5y - 7z = -x + 2y + 3z = 9 5 9x 8y + 3z = -4 In Matrix-Form schreibt man dieses System Av = b mit der Matrix A und dem Vektor b, die in Matlab-Notation folgendermaen aussehen: A = [ 3 5 -7; 9 -8 3; -1 2 3]; b = [ 9 -4 5]'; Den dem gesuchten Lsungsvektor v = [ x y z ]' erhlt man ber den Matlab-Befehl v = A\b . Ergebnis ist v = [ 1.1581; 2.0581; 0.6806]. Prfen Sie es nach, z.B. muss die Matlab-Anweisung A*v den Vektor b ergeben. Das dieses Beispiel den hufigsten Rechenvorgang darstellt, ist es besonders wichtig. Bitte verwechseln Sie den \ in der Matlab-Notation nicht mit /! Im folgenden wollen wir uns allgemeiner mit Matrizen befassen. Drers magisches Quadrat: A = magic(4) A = 16 5 9 2 11 7 3 10 6 13 8 12

4 14 15 1 bietet eine Mglichkeit, Matrixoperationen mit MATLAB zu veranschaulichen. Sie haben bereits die Transposition A einer Matrix A kennengelernt. Im Folgenden werden Matrixoperationen anhand von Beispielen aus der Praxis dargestellt. Dies sollte Sie nicht verwirren, sondern einfach den Bezug zur Praxis aufrecht erhalten. Fr Sie sollten natrlich die jeweiligen Funktionen sowie die MATLAB-Syntax im Vordergrund stehen. Die Addition einer Matrix zu ihrer Transponierten ergibt eine symmetrische Matrix. A + A' ans = 32 7 12 7 22 17 12 17 12 17 22 27

17 22 27 2 Das Multiplikationssymbol *, bezieht sich auf die Matrix-Multiplikation, d.h. zur Berechnung jedes Matrixelements werden Skalarprodukte zwischen einer Zeile und einer Spalte gebildet. Die Multiplikation einer Matrix mit ihrer Transponierten ergibt eine symmetrische Matrix. A' * A ans = 378 206 212 360

43

MATLAB 206 212 370 368 368 370 212 206

V3.0

360 212 206 378 Die Determinante unserer Matrix A ist 0 und zeigt somit an, dass A singulr ist, also keine Inverse hat. d = det(A) d = 0 Den Rang von A findet man mit r = rank(A) r = 3 Beispiel 8.6 (Beispiel_lineare_algebra) Wie man hieraus erkennt, hat A nicht den Hchstrang 4. Noch mehr Information liefert die MATLAB-Funktion rref, die linear abhngige Zeilen in A eliminiert und die Restmatrix diagonalisiert, so weit das mglich ist (Gausche Zeilenstufenform). Aus R = rref(A) R = 1 0 0 0 1 0 0 0 1 1 -3 3

0 0 0 0 kann man weitere Eigenschaften von A ablesen Dadurch dass unsere Matrix A singulr ist, besitzt sie auch keine Inverse. Sollten sie trotzdem versuchen, die Inverse auszurechnen, etwa durch X = inv(A) so erhalten sie folgende Warnmeldung Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.567374e-017. X = 1.0e+014 * 0.9382 2.8147 -2.8147 -0.9382 2.8147 8.4442 -8.4442 -2.8147 -2.8147 -8.4442 8.4442 2.8147 -0.9382 -2.8147 2.8147 0.9382

Beispiel 8.7 (Beispiel_lineare_algebra_2) Rundefehler haben den Inversionsalgorithmus davon abgehalten, die Singularitt von A exakt festzustellen, deshalb liefert er nur eine Warnung und keine Fehlermeldung. Der Wert von rcond, der reziproken Konditionszahl, ist aber so nahe an eps, der relativen 44

MATLAB

V3.0

Gleitpunktgenauigkeit, dass die Inverse von A wohl kaum auch nur mit minimaler Genauigkeit berechnet worden sein kann! Aus diesem Grund wird eine Warnung ausgegeben. Das Format nxm einer Matrix A erhlt man brigens mit [n,m] = size(A) Die Eigenwerte von magischen Quadraten sind ebenfalls von Interesse e = eig(A) liefert e = 34.0000 8.9443 -8.9443 0.0000 Beispiel 8.8 (Beispiel_eigenw_mag_quad) Einer der Eigenwerte ist 0, dies ist eine weitere Folge der Singularitt von A. Der grte Eigenwert von A ist 34, dies ist unsere magische Summe. Dies liegt daran, dass der Vektor v, belegt mit lauter Einsen, ein Eigenvektor ist: v = ones(4,1) v = 1 1 1 1 Beispiel 8.9 (Beispiel_eigenw_mag_quad_2) Er gehrt zum Eigenwert 34, denn 34*v = A*v: A*v ans = 34 34 34 34 Beispiel 8.10 (Beispiel_magic_ones) Wird ein magisches Quadrat durch seine magische Summe dividiert, P = A/34 P = 0.4706 0.1471 0.2647 0.1176 0.0588 0.3235 0.2059 0.4118 0.0882 0.2941 0.1765 0.4412 0.3824 0.2353 0.3529 0.0294 45

MATLAB Beispiel 8.11 (Beispiel_mag_sum) so erhlt man eine Matrix, deren Zeilen- und Spaltensummen alle 1 ergeben.

V3.0

Solche Matrizen enthalten bergangswahrscheinlichkeiten in einem Markov-Prozess. Wiederholtes Potenzieren der Matrix P entspricht fortgesetzten Prozeschritten. In unserem Beispiel ist die fnfte Potenz der bergangsmatrix P P^5 ans = 0.2511 0.2495 0.2501 0.2494 0.2491 0.2504 0.2498 0.2508 0.2492 0.2502 0.2496 0.2509 0.2506 0.2499 0.2505 0.2489

Beispiel 8.12 (Beispiel_markov_proz) Wird die Matrix P k-mal potenziert und ist k sehr gro, so nhern sich die Elemente dem Zahlenwert . Probieren Sie es aus. Schlielich lassen sich die Koeffizienten des charakteristischen Polynoms unserer Matrix A, die das Magische Quadrat enthlt, ermitteln mit a = poly(A) a = 1 -34 -8 2176 0 Beispiel 8.13 (Beispiel_polynoms) Dies zeigt, dass das charakteristische Polynom

det( A E) = 4 34 3 8 2 + 2176* Beispiel 8.14 (Beispiel_char_polynom) ist. Da die Matrix A singulr ist, hat der konstante Term den Faktor 0 und der kubische Faktor im charakteristischen Polynom ist 34 - wieder unsere magische Zahl!

8.7

Elementweise Operationen

Matrizen kann man auch einfach als 2-dimensional angeordnete Zahlenfelder ansehen. Felder identischen Formats werden in praktischen Anwendungen oft durch arithmetische Operationen verknpft, die elementweise ausgefhrt werden. D.h. die Rechenoperation wirkt jeweils auf diejenigen Paare von Elementen zweier Felder, die an bereinstimmenden Positionen stehen. Addition und Subtraktion von Matrizen sind ohnehin elementweise definiert, aber schon die Multiplikation funktioniert anders. MATLAB beinhaltet verschiedene weitere Operationen, die elementweise ausgefhrt werden, und kennzeichnet diese durch einen Punkt vor dem Operationssymbol. Ausgenommen sind + und Zeichen, da die beiden Operationen immer elementweise arbeiten. Elementweise arbeitende Operatoren sind: .* ./ Multiplikation Division 46

MATLAB .\ Links-Division

V3.0

.^ Potenzierung Ebenfalls mit einem Punkt versehen kann man den Transpositions-Operator '. Bei der Transposition komplexer Matrizen werden normalerweise zustzlich alle Elemente der Matrix durch ihre komplex konjugierten ersetzt. Das kann man unterdrcken durch den Operator .' MatrixTransposition ohne komplexe Konjugation (A ohne Punkt bezeichnet die transponierte und komplex konjugierte Matrix zu A) Mit A.*A entsteht ans = 256 25 81 16 4 121 49 196 9 100 36 225 169 64 144 1

Beispiel 8.15 (Beispiel_elem_operat) Wird z.B. die Drermatrix elementweise mit sich selbst multipliziert. So erhlt man ein Feld, welches die Quadrate aller ganzen Zahlen zwischen 1 und 16 in unregelmiger Anordnung enthlt. Kurz, dies hat die Quadrierung jedes einzelnen Elementes einer Matrix zur Folge. Elementweise Operationen sind ntzlich, um Tabellen zu erstellen und zu verarbeiten. Wir belegen z.B. einen Spaltenvektor n mit n = (0:9) n = 0 1 2 3 4 5 6 7 8 9 Dann ergibt pows = [n n.^2 2.^n] die folgende Tabelle mit Quadraten und Zweierpotenzen der Elemente von n pows = 0 1 2 0 1 4 1 2 4

47

MATLAB 3 4 5 6 7 8 9 9 16 25 36 49 64 81 8 16 32 64 128 256 512

V3.0

Beispiel 8.16 (Beispiel_elem_operat_2) Die elementaren mathematischen Funktionen wirken immer Elementweise. So erstellt z.B. format short g; x = (1:0.1:2)'; logs = [x log10(x)] eine Logarithmentafel: logs = 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 0 0.041393 0.079181 0.11394 0.14613 0.17609 0.20412 0.23045 0.25527 0.27875 0.30103

Beispiel 8.17 (Beispiel_logarithmentafel)

8.8

bungsaufgaben

1. Erzeugen Sie mit der Funktion rand zehn gleichmig verteilte Zufallszahlen im Intervall zwischen - und . Lsung 8.1 (loesung_16)

48

MATLAB

V3.0

2. Erzeugen Sie mit der Funktion randn tausend normalverteilte Zufallszahlen mit Mittelwert -5.5 und Standardabweichung 0.25. Lsung 8.2 (loesung_17) 3. Erzeugen Sie eine 6x6 obere (untere) Dreiecksmatrix mit Zufallszahlen zwischen 0 und 1. Hinweis: MATLAB-Funktion triu bzw. tril Lsung 8.3 (loesung_18) 4. Erzeugen Sie eine 10x10 symmetrische Matrix S mit Zufallszahlen zwischen 0 und 8. Lsung 8.4 (loesung_1) 5. Es kann wichtig sein eine groe Matrix in Untermatrizen zu zerlegen. Beschreiben Sie die Befehle oder Funktionen von MATLAB, die die folgenden Aufgaben ausfhren. Dabei ist A eine 20x30 Matrix. Erzeugen Sie die Untermatrix von A von Zeile 15 bis 20 und Spalte 5 bis 10. Fgen Sie in A eine 5x10 Matrix B ein, beginnend bei Zeile 10 und Spalte 20. a) Erzeugen Sie eine 50x50 Matrix der Form B =

A 0 T 0 A

Lsung 8.5 (loesung_20) 6. Die MATLAB-Funktion rand erzeugt eine n x n-Matrix, deren Eintrge gleichmig verteilte Zufallszahlen aus dem Intervall (0,1) sind. Schreiben Sie ein Funktion-File (M-File), das n x nMatrizen erzeugt, deren Eintrge Zahlen aus {1,2,3,4,5,6} sind. Lsung 8.6 (loesung_21)

49

MATLAB

V3.0

9 AblaufkontrolleMATLAB hat folgende Kontroll-Anweisungen if switch while for break (Verzweigung) (Mehrfachverzweigung) (Bedingungs-Schleife) (Zhler-Schleife) (Ausstieg eines Kontrollblocks z.B. von einer Schleife)

continue (Zurck zum Anfang z.B. von einer Schleife) Logische Ausdrcke zur Ablaufkontrolle enthalten meistens relationale oder logische Operationen. MATLAB stellt hier folgende Operatoren zur Verfgung (vgl. Kapitel Operatoren): Relationen: < >= == ~= kleiner kleiner/gleich grer grer/gleich gleich ungleich

Von der Notation in anderen Programmiersprachen weicht eigentlich nur das ungleich-Zeichen ab. Beachten Sie, dass Relationen elementweise wirkende Operationen sind. Bei einem Vergleich, z.B. A > B, mssen beide Felder A und B das gleiche Format haben. Intern entsteht eine Matrix L, die in all den Positionen eine 1 enthlt, die dem Vergleich standhalten, und sonst nur aus Nullen besteht. hnlich verhlt es sich bei logischen Operationen. MATLAB kennt & | ~ xor any all logisches und logisches oder logisches nicht exklusives oder (entweder/oder) 1 falls irgendein Element eines Spalte ungleich 0 (also wahr) ist 1 falls alle Elemente einer Spalte ungleich 0 (also wahr) sind.

9.1

if-Anweisung

Die if-Anweisung wertet einen logischen Ausdruck aus und fhrt Gruppen von Anweisungen aus, wenn der Ausdruck wahr ist, also einen Wert ungleich 0 ergibt. Die optionalen Schlsselwrter elseif und else bieten einen alternativen Block von Anweisungen an, die ausgefhrt werden, wenn der Ausdruck falsch ist. Das Schlsselwort end beendet immer den letzten Block der Anweisung. Die Anweisungsblcke werden von je einem dieser vier Schlsselwrter getrennt. Klammern, wie in C und verwandten Programmiersprachen blich, werden in MATLAB nicht bentigt.

50

MATLAB

V3.0

MATLABs Algorithmus zum Erzeugen von magischen Quadraten der Ordnung n beinhaltet drei verschiedene Flle: n ungerade, n gerade aber nicht durch 4 teilbar und n gerade und durch 4 teilbar. Dies wird beschrieben durch if rem(n,2) ~= 0, elseif rem(n,4) ~= 0, else end Beispiel 9.1 (Beispiel_elseif_else) In diesem Beispiel schlieen sich alle drei Flle gegenseitig aus. Im Allgemeinfall wird diejenige Anweisung abgearbeitet, die der ersten wahren Aussage in der if-else-Kette folgt. Es ist wichtig zu verstehen, wie relationale Operatoren und die if-Anweisungen mit Matrizen wirken. Falls Sie 2 Variablen auf Gleichheit berprfen wollen, verwenden Sie vielleicht if A==B, ... Dies ist zwar syntaktisch richtiger MATLAB-Code und arbeitet auch wie erwartet, wenn A und B Skalare sind, aber wenn A und B Matrizen sind, kann man damit nicht testen, ob A und B bereinstimmen! Es wird lediglich festgestellt, in welchen Positionen ihre Elemente bereinstimmen. Das Ergebnis von A==B ist eine Matrix aus Nullen und Einsen. Die Einsen stehen in denjenigen Positionen, in denen die Elemente von A und B bereinstimmen. brigens: Falls A und B nicht dasselbe Format haben, wird der Ausdruck A == B sogar als Fehler betrachtet! Der richtige Weg um 2 Felder auf Gleichheit zu berprfen ist die Verwendung der Funktion isequal : if isequal(A,B), ... Sie liefert einen skalaren Wert, 1 oder 0, je nachdem, ob A und B komplett gleich sind oder nicht. Es folgt ein weiteres Beispiel, um diese Angelegenheit zu verdeutlichen. Wenn A und B Skalare sind, wird der folgende Code niemals eine Fehlermeldung produzieren. Aber fr die meisten Matrizenpaare wird keine der Bedingungen A > B, A < B oder A == B jemals fr alle Elemente zugleich wahr sein, deshalb wird praktisch immer eine Fehlermeldung ausgegeben. if A > B, elseif A < B, 'A > B' 'A < B' 'ungerade'; 'nur durch 2 teilbar'; 'durch 4 teilbar';

elseif A == B, 'A = B' else end Beispiel 9.2 (Beispiel_isequal) 'Nanu?'

51

MATLAB

V3.0

Achtung: Auch der vergleich von Matrizen mit isequal ist mit Vorsicht zu genieen. Aufgrund der numerischen Rechenverfahren von MATLAB treten stets Rundungsfehler auf, die Augenscheinlich gleiche Matrizen in den letzten Kommastellen doch unterschiedlich machen. Abhilfe ist hier zu erreichen, indem man z.B. abfragt, ob sich die Betrge der einzelnen Elemente nicht um mehr als einen vorgegeben Toleranzwert unterscheiden. tol = 0.2, all(all(A < (B + tol))) && all(all(A > (B - tol))) Einige MATLAB-Funktionen sind hilfreich, um das Ergebnis der Matrixvergleiche auf Skalare zu reduzieren um sie in ifAnweisungen verwenden zu knnen. Beispiele hierfr sind z.B. isequal isempty sowie all und any. (Gleichheit) (leere Matrix)

9.2

switch und case

Der switch Befehl fhrt Befehlsgruppen abhngig von den Werten einer Variablen oder eines Ausdrucks aus. Die Schlsselwrter case und otherwise begrenzen diese Blcke. Nur die Anweisungen nach dem ersten passenden case werden ausgefhrt. Ein switch mu immer mit einem end abgeschlossen werden. Die Bedingung zur Konstruktion des magischen Quadrats kann mit switch folgendermaen beschrieben werden: switch (rem(n,4) == 0) + (rem(n,2) == 0) case 0 'ungerade' case 1 'nur durch 2 teilbar' case 2 'durch 4 teilbar' otherwise 'das gibt''s nicht' end Beispiel 9.3 (Beispiel_switch_case) Hinweis fr C-Programmierer Anders als in der Programmiersprache C bentigt die switch - Anweisung kein break. Der switch-Block wird nach der Abarbeitung der Befehle und vor der nchsten case -Anweisung verlassen.

52

MATLAB

V3.0

9.3

for-Schleifen

Die for-Schleife durchluft eine Gruppe von Anweisungen, bis die vorgegebene Anzahl an Durchlufen erreicht ist. end beendet den Anweisungsblock. for n=3:32 r(n) = rank(magic(n)); end r Beispiel 9.4 (Beispiel_for_schleife) Der Strichpunkt hinter dem Befehl in der Schleife verhindert die Ausgabe und das r nach der Schleife gibt das endgltige Ergebnis aus. Es ist sinnvoll, Schleifen aus Grnden der bersichtlichkeit einzurcken, besonders wenn sie geschachtelt sind. Ein Kstchen H mit Lottozahlen entsteht z.B. aus 2 geschachtelten Schleifen for i=1:7 for j=1:7 H(i,j) = (i-1)*7+j; end end Beispiel 9.5 (Beispiel_for_schleife_2) So sollte man das aber keinesfalls programmieren! Erstens knnen Sie nach Ablauf dieser Schleifen die komplexe Einheit i bzw. j nicht mehr verwenden, weil sie durch die Laufvariablen der beiden Schleifen berschrieben wurden. Jetzt gilt eben nicht mehr i = j = 1 , sondern i = j = 7 . Zweitens sind Schleifen in der Regel durch die viel schnelleren Vektor- und MatrixOperationen ersetzbar. Alternative Anweisungen zur Erzeugung des Lotto-Kstchens H wren z.B. H=[1:7; 8:14; 15:21; 22:28; 29:35; 36:42; 43:49] eine einfache Schleife H=[]; for m=1:7, H=[H; (m-1)*7 + (1:7)]; end; oder auch n=1:7; for m=n, H(m,:)=n+(m-1)*7; end; aber sicherlich am einfachsten ist es durch den folgenden Befehl n=1:49; H=reshape(n, 7, 7)' Dieser Befehl wandelt einen Vektor in eine Matrix mit vorgegebenem Format um. Hier ist allerdings Vorsicht geboten, da auf zwei Dinge Acht gegeben werden muss. Erstens muss die Anzahl der Vektorelemente zu den angegebenen Matrixformat passen und zweitens muss fr dieses Beispiel das Ergebnis von reshape auch noch transponiert werden, um wirklich die Gewnschte Matrix zu erhalten. 53

MATLAB

V3.0

Eine for-Schleife kann aber nicht nur geordnete Zahlenfolgen bzw. Vektorelemente durchlaufen. Im Endeffekt luft die Schleife die einzelnen Elemente eines Zeilenvektors durch. Die Eintrge knnen hierbei natrlich beliebige Zahlen sein, mssen also nicht aufsteigende ganze Zahlen sein. Vgl. folgendes Beispiel: n = [1.2, 1.3, 0.9, 0.6]; sum = 0; for m = n sum = sum+m; end sum ergibt sum = 4 Beispiel 9.6 (Beispiel_for_schleife_3)

9.4

while-Schleifen

Die while-Schleife wiederholt einen Anweisungsblock beliebig oft, solange bis eine logische Abbruchbestimmung erfllt ist. end legt das Ende des Anweisungsblocks fest. Es folgt ein komplettes Programm, das while, if, else und end veranschaulicht. Es benutzt die Intervallschachtelungsmethode, um eine Nullstelle des Polynoms x3 2 x 5 zu finden. a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if sign(fx) == sign(fa), a = x; fa = fx; else b = x; fb = fx; end end x ergibt x = 2.09455148154233 Beispiel 9.7 (Beispiel_while_schleife) Beachten Sie auch bei der Laufbedingung von while-Schleifen die elementweise Wirkung von Vergleichsoperationen zwischen Feldern. Sie fhrt leicht zu Fehlern, wie schon zuvor bei der if-Anweisung diskutiert wurde.

54

MATLAB

V3.0

9.5

break

Die break-Anweisung erlaubt ein vorzeitiges Verlassen einer for- oder while - Schleife. In geschachtelten Schleifen, verlsst break nur die innerste Schleife. Zur Verdeutlichung nochmals unser obiges Beispiel. Warum ist es sinnvoll, hier break zu benutzen? a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if fx == 0, break elseif sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end x Beispiel 9.8 (Beispiel_break)

9.61.

bungsaufgabenMan stelle fest, ob folgende Vektoren linear abhngig oder linear unabhngig sind!

5 a= 2

10 b= 4

15 c= 6

Lsung 9.1 (loesung_22) 2. Wir betrachten n x n-Matrizen A n mit 2 auf der Diagonalen und 1 auf der oberen und unteren Nebendiagonale. Die brigen Matrixeintrge von A n sind alle 0. Somit gilt:

A 1 = [2] 2 1 A2 = 1 2 2 1 0 A 3 = 1 2 1 0 1 2 Diese Matrizen lassen sich in MATLAB einfach erzeugen. Zum Beispiel erzeugt man A 4 durch folgende Befehle:

55

MATLAB

V3.0

>> n=4; >> A=toeplitz([2,-1,zeros(1,n-2)]); Berechnen Sie fr n = 2,3,4,5,6 die Determinante von A n . Welche Berechnungsformel vermuten sie