MATLAB Eine Einführung Samuel Ferraz-Leite Institut für Analysis und Scientific Computing Technische Universität Wien 1
MATLAB-Buch Christoph Überhuber Stefan Katzenbeisser Dirk Praetorius MATLAB 7 Eine Einführung Springer-Verlag, Wien, 2005 2
Was ist Matlab? Matlab = Matrix Laboratory 1970: Lehrmittel für den Unterricht in Lineare Algebra, Numerische Mathematik etc Jetzt: Mächtiges Hilfsmittel für Mathematiker und Ingenieure Primäres Einsatzgebiet: Numerisches Lösen mathematischer Aufgabenstellungen Matlab hat eine grafische Benutzeroberfläche, kann aber auch (z.b. auf Unix-Systemen) von der Kommandozeile aus benutzt werden. Offizielle HP: www.mathworks.com 3
Matlab-Toolboxen Toolboxen sind Module, die dazu dienen spezielle mathematische Aufgaben effektiv und einfach zu lösen. Symbolic Math Toolbox Optimization Toolbox Curve Fitting Toolbox Partial Differential Equation Toolbox Statistics Toolbox Financial Toolbox etc Lizenz für Toolboxen müssen im Allgemeinen gesondert erworben werden. 4
Was ist Matlab? Matlab ist ein voll programmierbares problem solving environment. Die dabei verwendete Programmiersprache wird ebenfalls, obwohl didaktisch nicht optimal, als Matlab bezeichnet. Matlab ist eine Interpretersprache, d.h. der Quelltext (=Liste von Anweisungen) wird beim Lesen ausgeführt. Andere Programmiersprachen (z.b. C, Fortran, ) sind Compilersprachen, d.h., der Quelltext wird zuerst in eine ausführbare Datei übersetzt (compiliert). Diese Datei (das so genannte executable) wird dann am Prozessor ausgeführt. Wesentlicher Vorteil von Interpreter-Sprachen ist deren Plattformunabhängigkeit. Wesentlicher Nachteil von Interpreter-Sprachen ist, dass die Ausführung der Programme langsam ist. 5
Was ist Matlab? Matlab ist ein ausgezeichnetes Werkzeug und stellt eine gute und für Mathematiker einfache Programmiersprache zur Verfügung. Leider ist Matlab eine kommerzielle Software. Es gibt Konkurrenzprodukte, von denen einige frei erhältlich sind: Octave (www.octave.org) ist eine zu Matlab weitgehend kompatible Programmiersprache und kann alternativ zur Vorbereitung der Übungsaufgaben verwendet werden. O-Matrix (www.omatrix.com) ist zwar nicht frei erhältlich, bietet aber eine zeitlich beschränkte freie Trial-Version an. Matlab ist in der jeweils aktuellsten Version auf der cad.zserv.tuwien.ac.at, wo Sie ihre Accounts haben installiert, so dass man bequem remote mit Matlab arbeiten kann. 6
Arbeiten im Workspace Im Workspace, der Arbeitsumgebung, kann man alle gängigen mathematischen Operationen durchführen und Matlab-Funktionen sowie selbst programmierte Funktionen ausführen. Man kann Variablen anlegen, indem man ihnen einfach einen Wert zuweist. Deklaration ist nicht notwendig. Wenn nicht anders angegeben, werden alle Variablen in Matlab vom Typ double angelegt. Double-Variablen sind Gleitpunktzahlen in doppelter Genauigkeit (entsprechend dem IEEE Standard) Jeder Befehl erzeugt ein Echo (=Ausgabe am Bildschirm). Dieses kann durch einen nachgestellten Strichpunkt unterdrückt werden. Beispiele: a=3.7 legt eine Variable a an, die den Wert 3.7 hat b=[2,4] legt einen Vektor b mit Komponenten 2 und 4 an 7
Arbeiten im Workspace Es gibt neben dem Standard-Datentyp double eine Reihe weiterer - manchmal sehr nützlicher - Datentypen. Der speichersparende Datentyp logical wird verwendet um Wahrheitswerte (true, false) auszudrücken. Prinzipiell ist 0=false und 1=true (auch alle anderen Werte ungleich 0 bedeuten true). Seit Matlab 7 stehen auch Gleitpunktzahlen mit einfacher Genauigkeit (single) sowie ganzzahlige Datentypen zur Verfügung: uint8, int8, uint16, int16, uint32, int32. Achtung bei arithmetischen Operationen mit verschiedenen Datentypen Beispiele: a=int8(3.7) legt eine Variable a an, die den Wert 3 hat b=logical(3) legt eine Variable b mit Wert 1=true an 8
Arbeiten im Workspace Matlab bietet einfache Möglichkeiten um Vektoren (eindimensionale Felder) anzulegen. Sytax: Variablenname=[Wert1, Wert2,.] Auch Matrizen (zweidimensionale Felder) können sehr einfach angelegt werden. Syntax: Variablenname=[Wert11, Wert12,, ;Wert21, Wert22, ;Wert31,..] Beispiele: a=[2,4.4,-5]; legt einen Vektor (ohne Echo) an. b=[2,3;3,1] legt eine 2x2 Matrix an. 9
Arbeiten im Workspace Bemerkungen zu Variablennamen: Jede Variable muss einen eindeutigen Namen haben (höchstens 31 Zeichen lang, weitere Zeichen werden ignoriert) Name muss mit einem Buchstaben anfangen und darf aus Groß- und Kleinbuchstaben (keine landesspezifische Zeichen), Zahlen und Unterstrichen bestehen. Achtung! Matlab unterscheidet zwischen Groß- und Kleinschreibung Beispiele: gültige Namen: A, a, Affe, A_f_f_e, a3dsju s ungültige Namen: 3a, a.f.f.e, eine-variable 10
Arbeiten im Workspace Durch das Anlegen einer Variablen wird automatisch von Matlab genügend Speicher reserviert. Variablen werden Matlab-intern immer als dynamische Matrizen verstanden, d.h. man kann auf beliebige Einträge schreiben und lesen. Zwischenräume werden durch 0 aufgefüllt. Löschen einer Variable mit clear Variablenname who bzw. whos gibt Auskunft über die im Workspace vorhandenen Variablen. Beispiele: a=3; anlegen einer Variablen (1x1-Matrix) a(4)=4; dynamisches Erweitern zu einer 1x4-Matrix a(2) erzeugt die Ausgabe 0 clear a löscht die ganze Matrix wieder 11
Arithmetik Der Zuweisungsoperator wird durch ein einfaches Gleichheitszeichen = symbolisiert. Operationen auf einfachen double-variablen: siehe Tabelle. Operationen höherer Priorität werden zuerst durchgeführt. Bei gleicher Priorität erfolgt Auswertung von links nach rechts. Operator Operation Priorität ^ a^b 4 - -a 3 * a*b 2 / a/b 2 + a+b 1 - a-b 1 12
Arithmetik Arithmetik ist auch für Felder (Vektoren, Matrizen) definiert Elementweise Operationen auf double-feldern: siehe Tabelle. Operationen höherer Priorität, werden zu erst durchgeführt. Bei gleicher Priorität erfolgt Auswertung von links nach rechts. Der Operator * ohne führenden Punkt bedeutet die MatrixMatrix-Multiplikation der linearen Algebra. Operator Operation Priorität.^ a.^b 3.* a.*b 2./ a./b 2 + a+b 1 - a-b 1 13
Logische Operatoren Um Aussagen (z.b. a ist größer als b) in Matlab formulieren zu können, stehen logische Operatoren zur Verfügung. Logische Operatoren können auf double-variablen oder double-felder angewandt werden. Ergebnis ist eine logische Variable, bzw. ein logisches Feld mit Werten true oder false. Mit any und all kann ein logisches Feld mit oder bzw. und zu einer einzigen logischen Größe reduziert werden. Operator Bedeutung < kleiner als <= Kleiner oder gleich >,>= größer, größer od. gleich == gleich ~= ungleich 14
Skripts Skripts sind Dateien, die eine Reihe von Anweisungen enthalten. Dateien, die in der Form Skriptname.m gespeichert werden, können vom Workspace aus mit Skriptname ausgeführt werden. Man kann also kleine Programme als Skripts speichern. Allerdings haben Skripts nicht die Möglichkeit direkt das Ergebnis einer Berechnung ans System zurückzuliefern. Beispiele: my_first_script.m, 15
Skripts-Beispiele Allgemeines zu Variablen: names_and_declaration.m Arithmetik und logische Operatoren: double_arithmetik.m vector_arithmetik.m logical_operators.m Die Tatsache, dass ein Skript keine Paramter vom Aufrufer erhalten kann und keine Ergebnisse zurückgeben an wirkt sich offensichtlich sehr einschränkend auf die Funktionalität aus. 16
Funktionen Funktionen sind echte Matlab-Programme, die mit Parametern aufgerufen werden können und Ergebnisse liefern. Konzeptuell sind Matlab-Funktionen ähnlich zu verstehen wie mathematische Funktionen. sin(x) hat zum Beispiel einen Parameter x (bei mathematischen Funktionen üblicherweise Variable genannt) und liefert bei Aufruf mit etwa sin(pi) ein Ergebnis (nämlich 0). Obwohl sin eine bereits vorprogrammierte MatlabFunktion ist, können selbstprogrammierte Funktionen genauso aufgerufen und verwendet werden 17
Funktionen Funktionen sind in Dateien der Form funktionsname.m zu speichern. Die erste Zeile ist der sogenannte Funktionskopf: function ergebnisvariable=funktionsname(parameter) Kommentare, die unmittelbar unter dem Funktionskopf stehen, werden als Hilfetext bei Aufruf von help Funktionsname angezeigt. Die Funktion liefert als Ergebnis den Wert der Variable ergebnisvariable nach Abarbeiten aller Befehle. Mit function [var1 var2 ]=name(parameter) kann eine Funktion auch mehrere Rückgabewerte haben. 18
Funktionen Es können auch mehrere Funktionen in einer Datei gespeichert werden. Ausgeführt wird allerdings nur die erste Funktion. Funktionen können mit end beendet werden, müssen aber nicht. In einer Datei muss die Syntax einheitlich sein. Achtung! In Matlab werden alle Variablen nach dem Call-by-value-Prinzip übergeben. Das heißt, dass nur der Wert der Variable übergeben wird. Insbesondere kann eine Funktion nicht den Wert einer Variable ändern. Beispiele: hoch_drei.m, mehrere_funktionen.m 19
Verzweigungen Bereits beim Programmieren einfachster Aufgaben wird klar, dass es oft notwenig ist abhängig vom Wert von Variablen verschiedene Befehle auszuführen. Will man etwa die abgebildete Funktion implementieren, so muss man abhängig vom Bereich der Eingangsgröße x entscheiden, welchen Wert die Funktion hat. Um solche Entscheidungen zu realisieren, bieten Programmiersprachen das Konzept der Verzweigung an. In Matlab gibt es die einfache Verzweigung if sowie die Auswahlverzweigung switch. 20
Verzweigungen Einfache Verzweigung if Syntax: if bedingung anweisung elseif bedingung anweisung else anweisung end else und elseif sind optional. Beliebig viele elseif. Achtung! end ist notwendig. Beispiele: if_else.m 21
Verzweigungen Auswahlanweisung switch Syntax: switch case-ausdruck case fall 1 anweisung 1 case fall 2 anweisung 2 otherwise anweisung end Beliebig viele Fälle erlaubt. otherwise ist optional. Beispiele: switch_demo.m 22