Post on 30-Mar-2019
transcript
10.12.12 Dipl.-Math Zülfü Taskesen 210.12.12 Dipl.-Math Zülfü Taskesen 2
Praktikumsübersicht
Teil 1 Erste Schritte in Matlab
• Einführung und Motivation• Einfaches Rechnen• Rechnen mit Vektoren und Matrizen
• Anwendungen zur Matrix und Vektorrechnung• Weitere Datentypen• Programmieren
Teil 2 Vertiefter Umgang mit Matlab
Teil 3 Funktionen in Matlab
• Funktionen• m-Files• Debuggen
10.12.12 Dipl.-Math Zülfü Taskesen 310.12.12 Dipl.-Math Zülfü Taskesen 3
Teil 4 Graphische Ausgaben mit Matlab
• 2D Plots• Gestalten von Graphikausgaben• Mehrdimensionale Plots• Animationen
Teil 5 Erweiterungen von Matlab
• Toolboxen• Graphische Oberflächen• Profiler
• Selbstständiges Bearbeiten einer mathematischen Fragestellung mit Hilfe von Matlab
Teil 6 Projekt
Praktikumsübersicht
10.12.12 Dipl.-Math Zülfü Taskesen 410.12.12 Dipl.-Math Zülfü Taskesen 4
Einführung und Motivation
Was ist Matlab?
• wurde in den 1970er Jahren zur Unterstützung von Kursen der Linearen Algebra und numerischen Analysis entwickelt.
• ist ein Softwarepaket für numerische Berechnungen und zur Visualisierung;
Matlab
MATrix LABoratory
10.12.12 Dipl.-Math Zülfü Taskesen 510.12.12 Dipl.-Math Zülfü Taskesen 5
Einführung und Motivation
Was kann Matlab?
Matlab bietet
• eine einfache Syntax basierend auf dem Matrix-Datentyp;
• ein breites Spektrum mathematischer Funktionen und Algorithmen aus verschiedenen Anwendungsbereichen;
• eine plattformübergreifende Programmiersprache;
• einfach zu bedienende Visualisierungsmöglichkeiten.
10.12.12 Dipl.-Math Zülfü Taskesen 610.12.12 Dipl.-Math Zülfü Taskesen 6
Einführung und Motivation
Matlab starten
Eingabefenster (Command Window):
Hier werden die Matlab Befehle eingegeben;
Nach erfolgreichem Start erscheint ein dreigeteiltes Fenster bestehend aus
Workspace Fenster:
Zeigt die definierten Variablen an;
Zeigt die zuletzt eingegebenen Befehle an;
History Fenster:
10.12.12 Dipl.-Math Zülfü Taskesen 710.12.12 Dipl.-Math Zülfü Taskesen 7
Einfaches Rechnen in Matlab
Beispiel: Berechne zu einem Kreisradius r die Fläche und den Umfang des Kreises.
>> r = 3r =3>> A_Kreis = r ^2* piA_Kreis =28.2743>> U_Kreis = 2* r*piU_Kreis =18.8496
10.12.12 Dipl.-Math Zülfü Taskesen 810.12.12 Dipl.-Math Zülfü Taskesen 8
Einfaches Rechnen in Matlab
Elementares Rechnen in Matlab:
• Variablen werden durch Zuweisungen eines Wertes mit ”=” definiert.
• Namen müssen mit einem Buchstaben anfangen und dürfen Buchstaben, Zahlen und den Unterstrich enthalten. Dabei wird Groß- und Kleinschreibung berücksichtigt.
• Die Grundrechenarten sind durch die Zeichen +,−,*, /,^, ( potenzieren) definiert.
• Bei den Operatoren gilt die übliche Auswertungsreihenfolge: Potenzieren vor Punktrechnung vor Strichrechnung. Auswertungsreihenfolgen können durch Klammerung geändert werden.
10.12.12 Dipl.-Math Zülfü Taskesen 910.12.12 Dipl.-Math Zülfü Taskesen 9
Elementare Funktionen in Matlab
Es gibt eine Vielzahl elementarer Funktionen in Matlab:
exp, pow2 Exponentialfunktion zur Basis e bzw. 2
log, log10, log2 Logarithmus Funktionen
sqrt, realsqrt Wurzelfunktionen
sin, cos, tan Trigonometrische Funktionen
asin, acos, atan Inverse der trigonometrischen Funktionen
sinh, cosh, tanh Hyperbelfunktionen
asinh, acosh, atanh Area Hyperbolicus Funktionen
round, floor, ceil runden, abrunden, aufrunden
mod, rem, sign Modul, Divisionsrest, Vorzeichen
10.12.12 Dipl.-Math Zülfü Taskesen 1010.12.12 Dipl.-Math Zülfü Taskesen 10
Konstanten in Matlab
In Matlab sind einige spezielle Zahlen definiert:
realmin, realmax kleinste bzw. größte darstellbare Gleitpunktzahl
eps relative Genauigkeit von Gleitpunktzahlen
inf, -inf ± unendlich
NaN Not a number, nicht definierter Ausdruck, z.B. 0/0
pi Kreiszahl π
i, j imaginäre Einheit
10.12.12 Dipl.-Math Zülfü Taskesen 1110.12.12 Dipl.-Math Zülfü Taskesen 11
Variablen in Matlab
• In Matlab werden Variablen durch Zuweisungen ohne vorherige Deklaration angelegt.
• In einem Workspace definierte Variablen können mit den Funktionen who und whos angezeigt werden.
• Durch Variablendefinition können vorhandene Matlab Funktionen und Variablen überschrieben werden.
• Mit clear <Variablenname> bzw. clear kann eine Variable bzw. alle Variablen im Workspace gelöscht werden.
10.12.12 Dipl.-Math Zülfü Taskesen 1210.12.12 Dipl.-Math Zülfü Taskesen 12
Komplexe Zahlen
• Komplexe und reellwertige Zahlen können in Matlab gleichzeitig ohne besondere Deklaration verwendet werden.
• Real- und Imaginärteil einer Zahl können mit den Funktionen real bzw. imag bestimmt werden.
• Der Betrag einer komplexen Zahl kann mit abs bestimmt werden.
• Vorsicht mit den Variablen i und j:
10.12.12 Dipl.-Math Zülfü Taskesen 1310.12.12 Dipl.-Math Zülfü Taskesen 13
Ausgabeformatierung
Die Ausgabeformatierung kann mit format angepasst werden.
format loose: Darstellung mit großen Abständen
format compact: kompakte Darstellung
format short: Festpunktdarstellung mit 5 Stellen
format long: Festpunktdarstellung mit 15 Stellen
format e: Gleitpunktdarstellung mit 5 Stellen
format long e: Gleitpunktdarstellung mit 15 Stellen
format rat: Rationale Näherung
10.12.12 Dipl.-Math Zülfü Taskesen 1410.12.12 Dipl.-Math Zülfü Taskesen 14
Einfache Skripte
Matlab Befehle können in Textdateien mit Endung .m gespeichert und im Workspace durch Eingabe des Dateinamens (ohne Endung) ausgeführt werden. Dazu kann der Matlab Editor edit oder jeder andere Texteditor benutzt werden.
Kegel.m
% Berechnung des Volumens% eines Kegelsr=3h=5V =1/3* r ^2* h
>> Kegelr =3h =5V =15>>
10.12.12 Dipl.-Math Zülfü Taskesen 1510.12.12 Dipl.-Math Zülfü Taskesen 15
• Zeilen, die mit einem % beginnen, werden als Kommentarzeilen behandelt.
• Lange Eingaben können durch ... auf mehrere Zeilen verteilt werden.
• Beim Aufruf im Workspace werden alle Skripte im aktuellen Verzeichnis und im Suchpfad berücksichtigt.
• Die Funktion what listet alle m-Files im aktuellen Verzeichnis auf.
10.12.12 Dipl.-Math Zülfü Taskesen 1610.12.12 Dipl.-Math Zülfü Taskesen 16
Rechnen mit Matrizen und Vektoren
• Matrizen und Vektoren können in Matlab durch Angabe der Elemente in eckigen Klammern definiert werden.
>> alpha =pi /4;>> A=[ cos ( alpha ), -sin ( alpha ); sin ( alpha ), cos ( alpha )]
A =0.7071 -0.70710.7071 0.7071
• Vektoren werden als Matrizen definiert, wobei die Zeilen- oder Spaltendimension 1 ist.• In Matlab sind Operatoren zum Rechnen mit Matrizen, Vektoren und Skalaren definiert.
10.12.12 Dipl.-Math Zülfü Taskesen 1710.12.12 Dipl.-Math Zülfü Taskesen 17
Operatoren für Matrizen
• Operationen zwischen zwei Matrizen / Vektoren: +, -, * zum Addieren, Subtrahieren, Multiplizieren.
• Operatoren zum Lösen linearer Gleichungssysteme: /, \.
• Komponentenweise Multiplikation und Division: skalare Multiplikation mit den Operatoren .* und ./:• Komponentenweises Potenzieren mit .^:
10.12.12 Dipl.-Math Zülfü Taskesen 1810.12.12 Dipl.-Math Zülfü Taskesen 18
Spezielle Matrizen
Einsmatrix- bzw. –vektor: ones(n), ones(n,m)
Nullmatrix- bzw. -vektor: zeros(n), zeros(n,m)
Einheitsmatrix bzw. -vektor: eye(n), eye(n,m)
Zufallsmatrix bzw. -vektor: rand(n,m), randn(n,m)
Diagonalelemente einer Matrix: diag(x), diag(A)
>> rand (3)ans =0.4898 0.7094 0.67970.4456 0.7547 0.65510.6463 0.2760 0.1626
10.12.12 Dipl.-Math Zülfü Taskesen 1910.12.12 Dipl.-Math Zülfü Taskesen 19
Matrixindizierung
über Zeilen- und Spaltenindizes über Indizes der Elemente
>> A =[1 2 3; 4 5 6]>> A(2, 2)ans =5>> A (2)ans =4
10.12.12 Dipl.-Math Zülfü Taskesen 2010.12.12 Dipl.-Math Zülfü Taskesen 20
Matrix-Abmessungen
• Die Abmessungen einer Matrix kann mit der Funktion size A bzw. [z,s]=size(A) ermittelt werden,
• mit length(A) kann man die Länge eines Vektors ermitteln.
• Die Funktion numel(A) gibt die Anzahl der Elemente von A zurück,
10.12.12 Dipl.-Math Zülfü Taskesen 2110.12.12 Dipl.-Math Zülfü Taskesen 21
Aufgaben -Elementares Rechnen
>> 3+4/5*6
>> 48/3-3^2
>> exp(700)
>> exp(710)
>> round(-2.6), fix(-2.6)
>>sqrt(1^2+1^2)
>> z = (3+2i)/(1-i)
>> real(z), imag(z)
>> z = 4i/(1+i)
>> conj(z)
>> angle(z)*180/pi
>> abs(z)
Ermitteln Sie das Ergebnis von
10.12.12 Dipl.-Math Zülfü Taskesen 2210.12.12 Dipl.-Math Zülfü Taskesen 22
Aufgaben - Rechnen mit Matrizen
Erzeugen Sie einen Zeilenvektor mit der ersten Koordinate 29 und der letzten 1, wobei sich die Koordinaten absteigend um 2 unterscheiden sollen.
Erzeugen Sie einen Vektor y, der die Funktionswerte des natürlichen Logarithmus an den Stellen 1; 3; 5; 7 enthält. Was ist y(1)?
>> zeros(3,2)
>> eye(3)
>> ones(2,3)
>> A = [1 2; 3 4; 5 6]
>> B = [7 8; 9 10; 11 12]
>> A.*B, A.^2+ B.^2
10.12.12 Dipl.-Math Zülfü Taskesen 2310.12.12 Dipl.-Math Zülfü Taskesen 23
Vertiefter Umgang mit Matlab
• Anwendungen zur Matrix und Vektorrechnung• Weitere Datentypen• Programmieren
10.12.12 Dipl.-Math Zülfü Taskesen 2410.12.12 Dipl.-Math Zülfü Taskesen 24
Anwendungen zur Matrix und Vektorrechnung
Polynome in Matlab
Beispiel: P(x) = 2x3 + x2 + 3.5x − 5
10.12.12 Dipl.-Math Zülfü Taskesen 2510.12.12 Dipl.-Math Zülfü Taskesen 25
Anwendungen zur Matrix und Vektorrechnung
Darstellung von Polynomen
Polynome werden in Matlab durch einen Zeilenvektor repräsentiert, wobei die Koordinaten die Koeffizienten des Polynoms darstellen. Die Reihenfolge ist absteigend festgelegt
p(x) = x^4 +8*x^3 + 2*x^2 + x -12
>> p=[1 -8 2 1 12]
Beachten Sie, dass Nullkoeffizienten mitgeführt werden müssen
10.12.12 Dipl.-Math Zülfü Taskesen 2610.12.12 Dipl.-Math Zülfü Taskesen 26
Anwendungen zur Matrix und Vektorrechnung
Auswerten von Polynomen
Polynome können mit der Funktion polyval ausgewertet werden
p(x) = x^4 +8*x^3 + 2*x^2 + x -12
>> p=[1 8 2 1 -12]
>> xo=2.5>>px = polyval(p,xo)
>> xo=-1:0.5:1>>px = polyval(p,xo)
10.12.12 Dipl.-Math Zülfü Taskesen 2710.12.12 Dipl.-Math Zülfü Taskesen 27
Anwendungen zur Matrix und Vektorrechnung
Zusammenfassung
Funktion Beschreibung
conv Multipliziert Polynome
Deconv Dividiert Polynome
poly Polynom aus Nullstellen
polyder Berechnet Ableitung
polyint Berechnet Integral
polyval Berechnet Polynomwerte
roots Berechnet Nullstellen
10.12.12 Dipl.-Math Zülfü Taskesen 2810.12.12 Dipl.-Math Zülfü Taskesen 28
Zeichenketten werden in Matlab in einfachen Hochkommata ’ ’ angegeben, gespeichert werden sie als Vektor von Buchstaben (char Array).
Weitere Datentypen
Zeichenketten
>> a= 'Hallo Bremen'
Auf die Buchstaben einer Zeichenkette kann wie auf Elemente von Matrizen zugegriffen werden.
>> a (1:5)
10.12.12 Dipl.-Math Zülfü Taskesen 2910.12.12 Dipl.-Math Zülfü Taskesen 29
Eine Verallgemeinerung von mehrdimensionalen Feldern sind Cell Arrays, in denen beliebige Datenstrukturen gespeichert werden können.
Weitere Datentypen
Cell Arrays
>> C={ rand(2,10),eye(10)}
10.12.12 Dipl.-Math Zülfü Taskesen 3010.12.12 Dipl.-Math Zülfü Taskesen 30
Programmieren
Steuerstrukturen
• for-Schleifen
• while-Schleifen
• Verzweigungen mit if
• Verzweigungen mit switch
10.12.12 Dipl.-Math Zülfü Taskesen 3110.12.12 Dipl.-Math Zülfü Taskesen 31
Programmieren
FOR-Schleifen
for variable = ausdruck
befehle
end
for n = 1:10
f = n^2
end
10.12.12 Dipl.-Math Zülfü Taskesen 3210.12.12 Dipl.-Math Zülfü Taskesen 32
Programmieren
while ausdruck
befehle
end
WHILE-Schleifen
w=0
while w > 1
w = w + 1
end
10.12.12 Dipl.-Math Zülfü Taskesen 3310.12.12 Dipl.-Math Zülfü Taskesen 33
Programmieren
If-Anweisung
if <Bedingung>
<Anweisung>
elseif <Bedingung>
<Anweisung>
else
<Anweisung>
end
if ( x >1)
disp (’ x ist kleiner als 1’);
elseif ( abstand <1)
disp (’ x ist größer als 1’);
else
disp (’ x ist keine reelle Zahl‘);
end
10.12.12 Dipl.-Math Zülfü Taskesen 3410.12.12 Dipl.-Math Zülfü Taskesen 34
Programmieren
switch Anweisung
switch <Ausdruck>
case Wert
<Anweisung>
case {Wert1, Wert2, ...}
<Anweisung>
otherwise
<Anweisung>
end
n= mod ( floor ( rand (1)*10) , 9)+1
switch n
case {1 ,4 ,9}
disp ('ist Quadratzahl ');
case {2 ,3 ,5 ,7}
disp ('ist Primzahl ');
otherwise
disp ('ist Kubikzahl ');
end
10.12.12 Dipl.-Math Zülfü Taskesen 3510.12.12 Dipl.-Math Zülfü Taskesen 35
Programmieren
Berechne eine Approximation an die Exponentialfunktion e^xdurch
10.12.12 Dipl.-Math Zülfü Taskesen 3610.12.12 Dipl.-Math Zülfü Taskesen 36
Ergebnis
ergebnis = 1;for i = 1 : n
ergebnis = ergebnis *i;
end
Fakultät
erg = 0;for i = 0 : n
erg = erg + x ^ i /ergebnis ;
end
Exponentialfunktion
10.12.12 Dipl.-Math Zülfü Taskesen 37
Graphische Ausgaben mit Matlab
Es gibt mehrere Möglichkeiten in Matlab zweidimensionale Graphen von Funktionen zu Plotten:
• Erzeugen von Punktemengen (x, f (x)) und Plotten mit der Funktion plot;
>> x =-pi: pi /20:pi;
>> y =sin(x);
>> plot (x, y, ’b’)
10.12.12 Dipl.-Math Zülfü Taskesen 38
2D Plots
• Plotten einer inline-Funktion mit der Funktion ezplot.
>> f='sin(x)‘
>> Intervall=[-pi,pi]
>> ezplot(f, Intervall)
10.12.12 Dipl.-Math Zülfü Taskesen 39
2D Plots
Zur Berechnung eines Graphen kann ein Gitter des Urbildbereichs erzeugt werden.
• linspace Operator erzeugt eine äquidistante Unterteilung eines Intervalls
• logspace erzeugt eine logarithmische Unterteilung eines Intervalls
>> linspace (0 ,1 ,5000)
>> logspace (0 ,1 ,5)
10.12.12 Dipl.-Math Zülfü Taskesen 40
2D Plots mehrerer Graphen
Soll mehr als ein Graph in ein Koordinatensystem geplottet werden, so kann dies auf verschiedene Arten erreicht werden:
• Man erstellt einen Spaltenvektor von x-Werten, erzeugt eine Matrix mit den Funktionswerten und plottet die Spalten der Matrix:
>> x =[0: pi /20:2* pi ]’;
>> plot (x, [ sin (x) cos (x )]);
• Die Graphen werden einzeln aufgelistet:
>> x =[0.1:.01:2];
>> y =[0.1:.02:2];
>> plot (x, sqrt (x), y, log (y))
10.12.12 Dipl.-Math Zülfü Taskesen 41
2D Plots mehrerer Graphen
• Mit hold werden Graphen in einem Figure nicht durch neue Plotbefehleüberschrieben. Neue Graphen werden ins Koordinatensystem eingefügt.
>> x =[0.1:.01:2];
>> plot (x, 1./x, ’g’);
>> hold on
>> ezplot (’1./ x .^2 ’, [0, 2]);
>> hold off
10.12.12 Dipl.-Math Zülfü Taskesen 42
2D Plots mehrerer Graphen
• Sollen mehrere Graphen mit unterschiedlicher Skalierung der y-Achsen geplottet werden, so kann der Befehl plotyy verwendet werden:
>> t= linspace (0, 5*pi , 1000);
>> x= exp (-t ).* sin (10.* t);
>> y= cos (t);
>> plotyy (t,x,t,y);
10.12.12 Dipl.-Math Zülfü Taskesen 43
Verschiedene Graphen in einem Bild
• Mit der Funktion subplot besteht die Möglichkeit, mehrere Bilder
untereinander und/oder nebeneinander in einer Figur zusetzen;
>> x =[0: pi /20:2* pi ];
>> subplot(2,2,1:2); plot (x, sin (x) );
>> subplot(2,2,3); plot (x, cos (x) );
>> subplot(2,2,4); plot (x, exp (x) );
10.12.12 Dipl.-Math Zülfü Taskesen 44
Plots komplexer Zahlen
Komplexe Zahlen lassen sich in 2D Plots veranschaulichen.
• compass stellt komplexe Zahlen in Polarkoordinaten dar
>> Z= eig ( randn (20));
>> compass (Z)
• feather stellt zweidimensionale Vektoren bzw. komplexe
Zahlen als Vektoren entlang einer Geraden dar.
>> feather (Z)
10.12.12 Dipl.-Math Zülfü Taskesen 45
Plots Richtungsfelder
• Mit der Funktion quiver können Vektorfelder darstellt werden:
>> [X,Y] = meshgrid(-2:0.5:2);
>> quiver(X,Y,-Y,X), grid on,
>> axis equal
10.12.12 Dipl.-Math Zülfü Taskesen 46
Gestalten von Grafikausgaben
Achsengestaltung
>> x =[0:.1:10]‘;
>> Y=[x x .^2 x .^3 x .^4 exp(x)];
>> plot (x,Y);
Mit axis kann die Skalierung der Achsen angepasst werden. Die Beschriftung der Achsen kann mit xlabel und ylabel geändert werden
>> axis ([0 2 0 16])
>> xlabel (’x’)
>> ylabel (’f(x)’)
axis( [ xmin xmax ymin ymax ] )
10.12.12 Dipl.-Math Zülfü Taskesen 47
Gestalten von Grafikausgaben
Mit box kann die Umrahmung des Bildes an und ausgeschaltet werden, ebenso kann mit axis die Achsen angezeigt oder unterdrückt werden. Grid stellt ein Gitter hinter dem Graphen dar.
>> box off
>> grid on
>> axis off
10.12.12 Dipl.-Math Zülfü Taskesen 48
Gestalten von Grafikausgaben
Beschriftungen
Eine Überschrift zu einem Graphen kann mit title festgelegt werden.
>> title (’ Potenzfunktionen ’)
Hilfreich ist es auch bei Plots mit mehreren Graphen eine Legende zu haben. Diese lässt sich mit legend hinzufügen.
>> legend (’x’, ’x^2 ’,’x^3 ’, ’x^4 ’, ’exp (x)’,’location ’, ’NE ’)
10.12.12 Dipl.-Math Zülfü Taskesen 49
Gestalten von Grafikausgaben
Textmarken
Besondere Stellen im Graphen können mit text mit einem Textfeld markiert werden. Mit befehle können auch Linien, Pfeile und andere Graphikelemente eingefügt werden. Bei der Beschriftung können im eingeschränkten Umfang Latex Kommandos verwendet werden, die entsprechend zu formatiertem Text umgesetzt werden.
>> plot(0:pi/20:2*pi,sin(0:pi/20:2*pi))
>> text(pi,0,' \leftarrow sin(\pi)','FontSize',18)