MATLAB Mathematik mit Rechnerunterstützung Dr. Margarita Esponda-Argüero Fachbereich Mathematik und Informatik Freie Universität Berlin Inhalt Einfache Befehle und Ausdrücke Arbeiten mit Feldern und Matrizen Steueranweisungen 2-D und 3-D-Grafik MATLAB - Programme und Funktionen Dr. Margarita Esponda 1
MATLAB MATLAB ist ein Softwarepaket besonderes gut für: numerische Berechnungen Visualisierung von Daten Simulation dynamische Systeme in den 70er Jahren an der University of New Mexico und der Stanford University entwickelt für umfangreiche Probleme kann MATLAB als Programmiersprache eingesetzt werden. MATLAB MATLAB kann auf zwei Arten verwet werden Interaktiv mit direkte Eingabe von Anweisungen und sofortige Ausführung durch den Interpreter als Programmiersprache oder indirekte Eingabe. Die Anweisungen werden zuerst in einer Datei (M-File) gespeichert und können dann ausgeführt werden. Dr. Margarita Esponda 2
Befehlsfenster Bei der interaktiven Verwung werden Befehle direkt in ein MATLAB-Befehlsfenster eingegeben und sofort ausgeführt. >> 48/3 16 >> ans*ans 256 >> ans^2 65536 >> a = 10 a = 10 >> b = 20 b = 20 >> a/b 0.5000 >> c = 7; >> Das Semikolon verhindert, dass der Wert von c wieder ausgegeben wird. MATLAB Matrix Laboratory Der Grundbaustein ist der Datentyp Matrix Variablen in Programmiersprachen sind Stellen im Speicher, in denen Werte abgelegt werden können. In MATLAB werden alle Variablen als MxN-Matrizen gespeichert. Wo M die Anzahl der Zeile und N die Anzahl der Spalten ist. Die einzelne Elemente der Matrix können einfache Zahlen oder komplexe Elemente sein. 4x5 Vektoren Variablen sind Matrizen mit nur einer Zeile (1xn-Matrizen). 1x5 Einfache Variablen sind 1x1-Matrizen. 1x1 Dr. Margarita Esponda 3
Arbeitsumgebung Arbeitsspeicher Befehlseingabe Befehlsgeschichte Eingabe von Daten Variablen Vektoren Matrizen >> a = 2 a = 2 >> x = [1; 2; 3] x = 1 2 3 >> A = [1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9 Dr. Margarita Esponda 4
Arithmetische Operationen = Zuweisung + Addition - Subtraktion * Multiplikation (Matrizen) / Division (Matrizen) ^ Potenzierung (Matrizen) Arithmetische Operationen.* Multiplikation (elementweise)./ Division (elementweise) \ dividiert Matrizen nach links.\ dividiert nach links (elementweise).^ Potenzierung (elementweise) '.' adjungiert Matrix transponiert Matrix Dr. Margarita Esponda 5
Vektor- und Matrizen-Operationen >> v = [1 2 3 4 5] v = 1 2 3 4 5 >> 2 * v 2 4 6 8 10 >> v.* v 1 4 9 16 25 >> v * v.' 55 >> A = [1 2; 3 4] A = 1 2 3 4 >> A + A 2 4 6 8 >> 3 + A 4 5 6 7 Vektor- und Matrizen-Operationen >> A = [1,2; 3,4] A = >> A + A 1 2 3 4 2 4 6 8 >> 2 * A 2 4 6 8 >> B = [2,2; 3,3] B = >> A * B 2 2 3 3 8 8 18 18 >> A.* B 2 4 9 12 Dr. Margarita Esponda 6
Eingabe von Matrizen und Vektoren Die einfachste Methode Matrizen oder Vektoren zu erzeugen ist, die direkte Eingabe innerhalb eckiger Klammern in dem Eingabefenster. Elemente werden durch Komma oder Leerzeichen getrennt, Spalten durch Semikolon oder durch Zeilenumbruch. >> A = [1 2; 3 4] A = 1 2 3 4 Ein einzelnes Element einer Matrix wird dann mit Zeile und Spaltennummer gekennzeichnet. >> x = A (2, 2) x = 4 Der " : "-Operator kann als "von...bis" übersetzt werden. Damit können Sie Vektoren oder Matrizen erzeugen: >> v = [1:7] v = 1 2 3 4 5 6 7 >> m = [1:7;8:14] v = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Allgemeine Funktionen whos clear cd dir help help Thema lookfor Wort doc Thema clock listet alle Variablen, die im Speicher sind löscht alle Variablen und Funktionen aus dem Speicher wechselt die aktuelle Arbeitverzeichnis listet alle Dateien des aktuellen Arbeitsverzeichnisses listet alle Hilfethemen liefert Hilfe zu bestimmtem Thema sucht in der Dokumentation alle Stellen, in denen Wort vorkommt liefert Hilfe zu bestimmtem Thema (neues Fenster) gibt aktuelles Datum und Zeit in einem Vektor zurück Dr. Margarita Esponda 7
Elementare mathematische Funktionen Einfache Funktionen sqrt(x) Quadrat Wurzel von x abs(x) Absoluter Wert von x log(x) Natürlicher Logarithmus log10(x) Logarithmus mit Basis 10 exp(x) Exponentialfunktion Trigonometrische Funktionen sin(x) Sinus cos(x) Kosinus tan(x) Tangens asin(x) Arcus-Sinus acos(x) Arcus-Kosinus atan(x) Arcus-Tangens mod(x,y) rem(x,y) round(x) flour(x) ceil(x) fix(x) x Modulo y Rest der Division x/y rundet rundet ab rundet auf ganzzahliger Anteil Funktionen >> help round ROUND Round towards nearest integer. ROUND(X) rounds the elements of X to the nearest integers. See also FLOOR, CEIL, FIX. >> round( 5.7) 6 >> x = fix( 5.7) x = 5 Dr. Margarita Esponda 8
MATLAB-Dataien M-Files M-Files sind Dateien mit dem Suffix.m In M-Files können Befehlssequenzen gespeichert und später ausgeführt werden. File New M-File Debug Run a = 1; b = 3; c = 2; x1 = (-b + sqrt( b^2-4*a*c ))/(2*a) x2 = (-b - sqrt( b^2-4*a*c ))/(2*a) >> x1 = -1 x2 = -2 >> File Save As... q_gleichung.m Eingabe und Ausgabe Funktionen clc disp sprintf input löscht das MATLAB-Kommando-Fenster Ausgabe auf dem Bildschirm wandelt Zahlen unter einer Formatangabe in einen String um Eingabe von Zahlen mittels Tastatur clc; x = 5; disp('hello'); disp(x); y = input( 'y = ' ); a = sprintf('x=%i y=%i', x, y); disp( a ); >> hello 5 y = 13 x = 5 y = 13 Dr. Margarita Esponda 9
MATLAB-Dataien M-Files File New M-File Debug Run a = input('a = '); b = input('b = '); c = input('c = '); x1 = (-b + sqrt(b^2-4*a*c))/(2*a) x2 = (-b - sqrt(b^2-4*a*c))/(2*a) a = 1 b = c = 2 2 x1 = -1.0000 + 1.0000i x2 = -1.0000-1.0000i >> Programmieren in MATLAB M-Dateien Skripte Funktionen Der Gültigkeitsraum der im Skript definierten Variablen ist die globale Arbeitsumgebung oder (Basis- Workspace) M-Funktionen definieren eine eigene Arbeitsumgebung und besitzen keinen direkten Zugriff auf den Basis-Workspace Dr. Margarita Esponda 10
Kommentare Kommentare in MATLAB beginnen mit % und gehen bis zum Ende der Zeile. Kommentare werden in der Hilfsfunktionen verwet. Bei help <Verzeichnis> wird die erste Kommentarzeile angezeigt. Bei help <Funktion> wird der erste Kommentarblock angezeigt. M-Files % Quadratische Gleichung clear clc a = input('a = '); b = input('b = '); c = input('c = '); d = sqrt(b^2-4*a*c); x1 = ( -b + d )/(2*a) x2 = (-b d )/(2*a) Kommentare in MATLAB fangen mit dem % - Zeichen an Alle Variablen der Arbeitsumgebung werden gelöscht Das Eingabefenster wird gelöscht a = 1 b = c = 2 2 x1 = -1.0000 + 1.0000i x2 = -1.0000-1.0000i >> Dr. Margarita Esponda 11
if-else-anweisung if Bedingung Anweisungen else Anweisungen Vereinfachte Form if Bedingung Anweisungen Beispiel a = input('a = ') if mod(a,2)==0 disp('gerade Zahl') else disp('ungerade Zahl') Vergleichsoperationen < kleiner als > größer als <= kleiner oder gleich >= größer oder gleich == gleich ~= ungleich Normalerweise ist das Ergebnis eine Vergleichsoperation eines Wahrheitswertes. In MATLAB ist der Wert eines Vergleichs entweder 0 (Falsch) oder 1 (Wahr). Dr. Margarita Esponda 12
Logische Operationen ~ Negation & und oder xor exklusiv oder 0 bedeutet falsch alles andere bedeutet wahr true = 1 false = 0 >> 2 5 1 >> -7&5 1 >> 0&5 0 >> 2<7 & 7<2 0 >> ~~7 1 >> mod(8,3)==1 0 >> -1-6 1 >> true 1 >> false 0 >> Logische Operationen mit Matrizen Matrixelemente werden paarweise mit Null verglichen & ergibt 1, wenn beide Elemente 0, sonst 0 ergibt 0, wenn beide Elemente =0, sonst 1 ~ 1, wenn das Element gleich 0, sonst 0 Funktionen all und any all(x) ergibt 1, wenn alle Elemente von x 0, sonst 0 any(x) ergibt 0, wenn alle Elemente =0, sonst 1 Dr. Margarita Esponda 13
if-else-anweisung % Quadratische Gleichung disp( 'Programm zur Lösung einer quadratischen' ) disp( 'Gleichung mit Koefizienten a, b, c ' ) a = input( 'a = ' ); if ( a ~= 0 ) b = input('b = '); c = input('c = '); d = sqrt( b^2-4*a*c ) x1 = (-b + d )/(2*a) x2 = (-b d )/(2*a) else disp( 'Wenn a==0, haben wir keine quadratische Gleichung!' ) ; switch-case-anweisung switch Ausdruck case Konstante_1 Anweisungen case Konstante_2 Anweisungen case Konstante_2 Anweisungen otherwise Anweisungen Dr. Margarita Esponda 14
switch-anweisung zahl = input('bitte eine Zahl eingeben: '); switch sign(zahl) case -1 disp('die Zahl ist negativ') case 0 disp('die Zahl ist gleich Null') otherwise disp('die Zahl ist positiv') switch-case-anweisung a = round(rand(1,1)*9); switch a case 0, b = 'null' case 1, b = 'eins' case 2, b = 'zwei' case 3, b = 'drei' case 4, b = 'vier' case 5, b = 'fünf' case 6, b = 'sechs' case 7, b = 'sieben' case 8, b = 'acht' case 9, b = 'neun' otherwise, b = 'viele' Dr. Margarita Esponda 15
while-anweisung Syntax while Ausdruck Anweisungen Beispiele a = 0 while a<100 disp( a*a ) a = a + 1; clc a = 0 x = [] while a<100 a = a + 1; x = [x a*a] disp(x) while-anweisung Beispiel % Glücksspieler bargeld = input('bargeld = '); while bargeld>0 z = round( rand(1)*100000 ); if mod(z,2)==0 bargeld = bargeld + 1; else bargeld = bargeld - 1; disp( bargeld ) disp('du bist pleite!') Dr. Margarita Esponda 16
for-anweisung Syntax for Laufvariable = Bereichsangabe Anweisungsblock for Laufvariable = Begin : Schritt : Ende Anweisungsblock Beispiele for-anweisung for i = 1:2:20 disp(i) >> 1 3 5 7 9 11 13 15 17 19 % Eingabe n = input( 'n = ' ); fak = 1; % Berechnung n = 3 for i = 1:n fakultaet(3)= 6 fak = fak*i; % Ausgabe disp(sprintf('fakultaet(%i)=%i',n,fak)) Dr. Margarita Esponda 17
for-anweisung Beispiele n = input( 'n = ' ); for i = 1:n disp(i*i) n = 5 1 4 9 16 25 n = input( 'n = ' ); x = [1:n].*[1:n]; disp( x ) n = x = 5 1 4 9 16 25 for-anweisung n = input('n = ') zahlen = round( rand(1,n)*100 ) for i = 1:n-1 for j = 1:n-i if zahlen(j)>zahlen(j+1) temp = zahlen(j); zahlen(j) = zahlen(j+1); zahlen(j+1) = temp; disp('zahlen =') disp(zahlen) Hier werden n Zufallszahlen generiert und in die Variable zahlen gespeichert. Dr. Margarita Esponda 18
Funktionen Funktionen sind das wichtigste Konzept in der Welt der höheren Programmiersprache. Eingabe Funktion Ausgabe Funktionen sind ein sehr wichtiges Hilfsmittel, um Probleme in kleinere Teilaufgaben zerlegen zu können. Sie ermöglichen damit eine bessere Strukturierung eines Programms sowie die Wiederverwertbarkeit vom Programmcode. etwas genauer: MATLAB-Funktionen function Rückgabevariable = Funktionsname ( Parameterliste ) % Programmbeschreibung für Online-Hilfe Anweisungen Rückgabevariable = berechneter_wert return Funktionsname.m Die return Anweisung befindet sich an beliebiger Stelle und beliebig oft in dem Funktionsrumpf; sie beet die Ausführung der Funktion mit der Rückgabe der Rückgabevariable. Dr. Margarita Esponda 19
Funktionen Beispiel function sum = summe(n) % summe(n) Berechnet die Summe aller Zahlen % von 1 bis n, wo n eine natürliche % Zahl sein muss. % summe(n) = 1+2+...+(n-1)+n if n>=0 sum = n*(n+1)/2 else sum = 'Fehler! weil n negativ ist' return Visualisierung von zweidimensionalen Daten und Funktionen Visualisierung von Daten - Histogramme - Boxplots - Kreidiagramme Beispiel 1 2 3 4 5 6 7 y = [2 3 5 7 11 13 17]; bar(y) Dr. Margarita Esponda 20
Visualisierung von Daten plot ( X-Daten, Y-Daten, Formatangabe ) Beispiel clear n = input('n = '); y = rand(1,n)*1000; plot(y,'b*'); y = rand(1,n)*1000; hold on plot(y,'r*'); y = rand(1,n)*1000; plot(y,'g*'); hold off Formatierungen für plot Farbe Marker Linienart b blau. Punkt - durchgezogen g grün o Kreis : punktiert r rot x Kreuz -. Strich-Punkte c zyan + Plus -- Striche m magenta * Sterne y gelb s Quadrat k schwarz d Diamant w weiß v Dreieck (unten) ^ Dreieck (up) < Dreieck (left) > Dreieck (right) p Pentagramm h Hexagramm Dr. Margarita Esponda 21
Visualisierung von Funktionen Beispiel % Sinus-Funktion x = -3*pi:0.01:3*pi; y = sin(x); hold on for i = 1:50 y = y*i/(i+1); plot(x,y,'k'); hold off Visualisierung von Funktionen Unterteilung des Ausgabefensters subplot(m,n,p) Das aktuelle Ausgabefenster wird in eine mxn-matrix von Fenstern unterteilt, das p-te Teilfenster wird als aktueller Ausgabebereich festgelegt. % Exponential-Funktion clf x = -3:0.2:3; subplot(2,1,1); bar(x,exp(-x.^2)); subplot(2,1,2); plot(x,exp(-x.^2),'r'); Dr. Margarita Esponda 22
Visualisierung von 3D-Funktionen Beispiel % Glockenfunktion clf x = -2.5:0.1:2.5; y = x; [X,Y] = meshgrid(x,y); surf(x,y,exp(-(x.^2 + Y.^2))); Dr. Margarita Esponda 23