Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
EinleitungMathematische Operationen
ProgrammierenGrafik
Numerische Stromungssimulation
Markus Uhlmann
Institut fur Hydromechanik
SS 2010
Bemerkung: Verweise auf zusatzliche Information zum Download erscheinen in dieser Farbe
V13 1 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Fragen, die in dieser Vorlesung diskutiert werden
Mathematische Operationen
I Wie benutzt man MATLAB als Taschenrechner?
I Wie erstellt und manipuliert man Vektoren?I Matrizen und Mehrdimensionale FelderI Vektoren/Matrix Opeartionen
V13 3 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Fragen, die in dieser Vorlesung diskutiert werden
MATLAB als Programmiersprache
I KontrollstrukturenI FunktionenI Datenstrukturen
Grafik
I Welche Funktionen stehen zur grafischen Darstellung zurVerfugung?
V13 4 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Wozu MATLAB?
Werkzeug in Wissenschaft und Technik
I Numerische Mathematik
I Datenanalyse
I Grafische Darstellung
I Datenerfassung
I . . .
V13 5 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Wozu MATLAB? (2)
Verringerung des Programmieraufwandes
I Vielzahl von Funktionen vordefiniert
I Effiziente und prazise numerische Algorithmen
I Benutzerprogramme sind kompakt
I Weite Verbreitung
V13 6 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Wozu nicht MATLAB?
MATLAB ist eine Interpretersprache
I wenn es auf extreme Effizienz ankommt:Kompilersprache bevorzugt (C, C++, FORTRAN,. . .)
V13 7 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Geschichte
I entworfen in den 1970ern von C. Moler
I ursprunglich als Werkzeug in der Lehre (lineare Algebra)
I MATLAB = MATrix LABoratory
I seitdem mehrfach umgeschrieben und standig erweitert
V13 8 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Umfang des Programmes
I integrierte Entwicklungsumgebung
I Bibliothek mathematischer Funktionenerweiterbar durch Dutzende von “Toolboxes”
I Programmiersprache
I Grafik
I Schnittstellen zu externen Programmen, Geraten
V13 9 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Open Source Alternative
GNU OCTAVE
I akzeptiert weitgehend den Syntax von MATLAB
I (Homepage)
V13 10 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Entwicklungsumgebung
I Oberflache: Kommandofenster, Variablenbersicht, . . .
I Editor/Debugger starten durch Klicken auf Dateiname
V13 11 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
MotivationProgrammstart
Erste Schritte
I Interaktion meist uber Kommandozeile
I Eingabeaufforderung mit “>>” dargestellt
I HilfeI uber Kommandozeile: “>> help topic”
z.B “>> help general”
I uber Menu “Help”
I Demos: “>> help demo”
I weitere Ressourcen zu MATLAB: siehe Anhang
V13 12 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
MATLAB als Taschenrechner
I Eintippen in Kommandozeile (gefolgt durch “Enter”):>> 2+3/4*5ans =
5.7500
I Hinzufugen eines Semikolons: keine Ausgabe>> 2+3/4*5;
⇒ Prioritat der Operatoren:
(),^,*/,+-
V13 13 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Variablen
I Variablen werden in der Regel nicht deklariert
I numerische Daten: intern als “double precision” behandelt
I Variablennamen: 1 Buchstabe, gefolgt vonBuchstaben/Zahlen/Underscore; max. Lange: 63
I Gross- & Kleinschreibung!
I legal: MeineVariable, gUter Name
I illegal: 1Variable, var-vec, &fach
V13 14 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Zahlenformate
Numerische Typen in MATLAB
Typ Beispiel
Ganzzahl -156reelle Zahl 0.0634
(wissenschaftliche Notation: 6.34e-2)komplexe Zahl -3.78+i*5.47 (i =
√−1)
Inf (Unendlich) Teilen durch 0NaN (”Not a Number”) 0/0 oder Inf - Inf
I Ausgabeformat wird durch format kontrolliert
I Bsp.:
>> x=3.94959399393>> x =
3.9496
>> format long;>> x=3.94959399393>> x =
3.949593993930000V13 15 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Konstanten
Vordefiniert in MATLAB
I pi, Kreiskonstante π
I eps, Prazision der Gleitkommaarithmetik
I i,j, imaginare Einheit√−1
I Vorsicht:alle Konstanten konnen vom Benutzer berschrieben werden
V13 16 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Eingebaute Funktionen
I Trigonometrie: sin, cos, tan, ...
I Exponentiale: exp, log, sqrt, ...
I komplexe Zahlen: abs, imag, real, ...
I Rundung: round, mod, sign, ...
I Ubersicht uber die grundlegenden Funktionen:>> help elfun oder specfun oder elmat
V13 17 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Arbeiten mit aufgezeichneten Kommandos/Programmen
Verschiedene Optionen
1. Aufzeichnen der eingegebenen Kommandos einer Session:diary
2. Speichern des momentanen Zustandes (gesamter Speicher):save
3. Editieren/Aufrufen von eigenen Skripten:M-Files
V13 18 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Aufzeichnen mit diary
I diary(’dateiname’) startet Aufzeichnung aller Kommandosund deren Resultate in Datei
I Datei kann mit Texteditor bearbeitet werden
I diary on und diary off schalten Aufzeichnung ein/aus
V13 19 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Sichern des Arbeitsspeichers mit save
I save(’dateiname’) sichert die Werte aller momentanenVariablen in einer binaren Datei dateiname.mat
I Datei kann durch load(’dateiname’) geladen werden
I Anzeige der momentan aktiven Variablen & -dimensionen:>> whos
I mehr Information: >> help save und >> help load
V13 20 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Erzeugen von MATLAB-Scripts in Textfiles
M-Files
I Editieren in eingebautem Editor (oder beliebigem Texteditor)
I Kommentarzeilen starten mit %
I Speichern als: dateiname.m
I Laden in MATLAB durch Dateinamen (ohne “.m”):>> dateiname
V13 21 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Felder in MATLAB
Matrizen als grundlegende Elemente
I MATLAB arbeitet in der Regel mit Matrizen(2-dimensionalen Feldern)
I ein Skalar ist eine Matrix mit einem einzigen Element (1x1)
I ein Zeilenvektor ist eine Matrix mit einer Zeile (1xN)
I ein Spaltenvektor ist eine Matrix mit einer Spalte (Nx1)
I Mherdimensionale Felder sind moglich
Dimension eines Ausdruckes: size(ausdruck)
V13 22 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Vektoren
Zeilenvektoren
I Liste von Ausdrucken, durch Komma oder Leerzeichengetrennt, in eckigen Klammern.
Beispiel eines Zeilenvektors mit 3 Elementen:
>> vec = [1 3, sqrt(5)]
vec =
1.0000 3.0000 2.2361
>> size(vec)
ans =
1 3
>> length(vec)
ans =
3
V13 23 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Operationen mit Vektoren
Arithmetik
I Addition/Subtraktion von Vektoren gleicher Lange: +, -
I Multiplikation von Skalar und Vektor: *
Beispiel:
>> avec = [1 3 5]; bvec = [1 1 4];
avec-2*bvec =
-1 1 -3
I Operationen, die elementweise ausgefuhrt werden:
.* ./ .^
(Produkt, Division, Potenz)
Beispiel:
>> avec = [1 3 5]; bvec = [1 1 4];
avec.*bvec =
1 3 20V13 24 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Spaltenvektoren
I wie Zeilenvektoren, aber Elemente durch Semikolon oderZeilenende getrennt.
Beispiel: Erzeugung eines Spaltenvektors mit 3 Elementen
>> svec = [1; 3; sqrt(5)]
svec =
1.0000
3.0000
2.2361
>> size(svec)
ans =
3 1
>> length(svec)
ans =
3
V13 25 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Transponieren von Vektoren
Der Hochkomma-Operator
I Umwandeln von Zeilen- in Spaltenvektoren (und umgekehrt):>>vektor’
Beispiel:
>> zvec= [1 3 5], svec = [1; 3; sqrt(5)]
zvec =
1 3 5
svec =
1.0000
3.0000
2.2361
>> zvec+2*svec’
ans =
3.0000 9.0000 9.4721
V13 26 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Arbeiten mit Vektoren
Reduktionsoperationen
I Summieren der Elemente eines Vektors: sum
Beispiel:>> vec = exp((1:20)/20); % erzeugt vektor der laenge 20
>> sum(vec) % summiert die elemente
ans = 35.2319
I Produkt der Elemente eines Vektors: prod
I Maximal-/Minimalwert der Elemente eines Vektors:max, min
V13 27 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Auffinden bestimmter Elemente
Die Funktion find
I ermittelt Indizes von Elementen, welche eine vorgegebeneBedingung erfullen: index vec = find(bedingung)
I Beispiel: Funktionswerte mit mindestens 90% desMaximalwertes bestimmen.x=(0:100)/100;
y=sin(2*pi*x).^2.*exp(3*x);
index=find(y>=0.9*max(y));
plot(x,y,’k-o’); hold on;
plot(x(index),y(index),’ro’);
plot([0 1],[1 1]*.9*max(y),’k--’);
I Nutzung der Funktion find fuhrt zu extrem effizientem Code
V13 28 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Weitere nutzliche Vektoroperationen
I Sortieren der Elemente: sort
I Unterdruckung von Mehrfacheintragen: unique
I Abfrage ob leeres Feld: isempty(Erzeugung eines leeren Feldes mit: [] )
I . . .
V13 29 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Matrizen
Definition
I Matrix = rechteckige Anordnung von Zahlen (Zeilen, Spalten)
I Bedeutung in linearer Algebra
Matrizen in MATLAB
I Matrix = zweidimensionales Feld
I Dimension: (M ×N), M Zeilen, N Spalten
I viele mathematische Operationen zur Auswahl
V13 30 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Generieren von Matrizen
Direkte Eingabe
I analog zu Vektoren: Elemente in eckigen Klammern,Zeilenende durch Semikolon markiert
I Beispiel: (2× 3) Matrix
>> Amat=[1, 2, 5; 3, 1, 4] % oder auch: Amat=[1 2 5; 3 1 4]
>> Amat =
1 2 5
3 1 4
>> size(Amat)
>> ans =
2 3
V13 31 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Generieren von Matrizen (2)
MATLAB Funktionen zur Initialisierung
I Matrizen mit konstanten Eintragen: ones, zeros
I zufallige Eintrage: rand
I Identitatsmatrix: eye
I Matrix mit einer besetzten Diagonalen: diag
I Beispiele:
konstante (3× 2) Matrix
>> Bmat=ones(3,2)*5
>> Bmat =
5 5
5 5
5 5
diagonale (3× 3) Matrix
>> Cmat=diag([1 2 3])
>> Cmat =
1 0 0
0 2 0
0 0 3V13 32 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Generieren von Matrizen (3)
MATLAB Funktionen zur Initialisierung
I Matrix erzeugung durch Verkettung/Aneinanderreihung von(Teil-)Matrizen Dimension beachten
konstante (3× 2) Matrix
>> Amat =
5 5
5 5
5 5
diagonale (3× 3) Matrix
>> Cmat =
1 0 0
0 2 0
0 0 3
>> Cmat =[A B]
>> Cmat =
5 5 1 0 0
5 5 0 2 0
5 5 0 0 3
@@@R
���
V13 33 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Der Doppelpunkt-Operator
I ”a:b:c” ist Abkurzung fur:Vektor mit Elementen von a bis c, Schrittweite b
Beispiel:>> 1:2:10
ans = 1 3 5 7 9
>> 5:-1:3
ans = 5 4 3
I Initialisieren eines Vektors/ Auswahlen von Teilbereichen
Beispiel:>> vec=(1:2:10)
ans = 1 3 5 7 9
>> vec(2:4)
ans = 3 5 7
I weitere Information: ”>> help colon”V13 34 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Indizierung von Matrizen
Ansprechen einzelner Elemente
I Indexpaar, durch Komma getrennt: >> Amat(i,j)
Mehrere Elemente
I Indexbereich mit Doppelpunkt: >> Amat(3:6,j)
I gesamter Bereich mit Doppelpunkt >> Amat(:,j)
I Schlusselwort end fur obere Grenze: >> Amat(i,3:end)
I Indexvektoren: >> Amat([2 5],j)
I Ausprobieren! (z.B. “getting started” zum Thema Matrizen)
V13 35 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
GrundlagenFelder
Losung linearer Gleichungssysteme
Problemstellung
I technische Probleme → oft große lineare Gleichungssysteme
I A~x = ~b Matrix A, Vektoren ~x, ~b
I gegeben: A, ~b; gesucht: ~x → Losung: ~x = A−1~b
Losung mit MATLAB
I “backslash” Operator: >> x = A\bI MATLAB wahlt je nach Fall die effizienteste Methode
I Hilfe hierzu: >> help slash(Link zur Online Information zu linearer Algebra in MATLAB)
V13 36 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Kontrollstrukturen
Bedingungen
I Mehrstufige Auswahl: if ...elseif...else...end
I Vergleichsoperatoren: <, <=, >, >=, ==, ~=
I Logische Verknupfungen: &, |, ~, xor
I Hilfe zu den Vergleichsoperatoren: >> help relop
I Beispiel:if max(vec)<0 % ’vec’ sei ein gegebener vektor
disp(’alle Elemente negativ’)
elseif max(vec)==0
disp(’alle Elemente nicht-positiv’)
elseif isempty(vec)
disp(’leeres Feld’)
else
disp(’positives Maximum’)
endV13 37 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Schleifen
Zahlergesteuert
I for zaehler=ausdruck...end
I Beispiel: vec=[1 5 13];
for index=1:length(vec)
disp(vec(index))
end
Bedingungsgesteuert
I while ausdruck...end
I Beispiel:
a=6;
while a>0
a=a-rand;
end
V13 38 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Funktionen
Programmtext in sog. “M-Files”
I Programm ohne jegliche Parameter: Script
I Programmteil mit ubergabe von Parametern: Funktion
I Struktur einer Funktion: Datei funktionsname.m
function [output params]= funktionsname(input params)% Kommentare, Hilfstext...Kommandos...end
V13 39 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Funktionen (2)
Beispiel
I Funktion zur Bestimmung der Standardabweichung
I Datei standardabweichung.m
function [sigma]= standardabweichung(vec)% Standardabweichung eines Vektorsmittelwert=sum(vec)/length(vec);sigma= sqrt(sum((vec-mittelwert).^2)/length(vec));end
I Aufruf:>> myvec=[4 2.5 6.1 -8 -2];>> sigma=standardabweichung(myvec)>> sigma = 5.0221
V13 40 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Typische MATLAB Programmstruktur
I MATLAB-Script fungiert als “Hauptprogramm”
I Aufruf beliebiger Anzahl von Funktionen(siehe Beispiel “Pendel” weiter unten)
I Achtung: alle M-Files des Projekts mussen auffindbar sein(siehe: >> help path)
V13 41 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
KontrollstrukturenFunktionenDatenstrukturen
Benutzerdefinierte Datenstrukturen
Verschiedene Datentypen/-langen in einer Struktur
I Erzeugung (ohne Deklaration) durch Zuweisung an Elemente:
>> NeueStruktur.name=’Hans Meier’;>> NeueStruktur.alter=27;>> NeueStruktur.ruhepuls=42>> NeueStruktur =
name: ’Hans Meier’alter: 27ruhepuls: 42
I Details hierzu: >> help struct
V13 42 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Liniendiagramme
I plot(x,y) – Liniendiagramm mit Wertepaaren (x, y)
Beispiel:>> x=(0:100)/100;y=sin(2*pi*x);
>> plot(x,y);
erzeugt:
I Linientypen, Farbe, Strichstarke, etc.: ”>> help plot”
V13 43 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Beschriftung von Diagrammen
I xlabel(’text’) erzeugt Beschriftung der horizontalen Achse
I analog: ylabel, title, legend
Beispiel:>> x=(0:100)/100;y=sin(2*pi*x);
>> plot(x,y);xlabel(’x-Achse’);ylabel(’y-Achse’);
>> title(’Linienplot’);legend(’sin(2*pi*x)’);
erzeugt:
V13 44 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Mehrfache Liniendiagramme
I mehrere Wertepaare in einem Kommando:plot(x1,y1,x2,y2,...)
I mehrere Kommandos, ”Festhalten” durch hold:plot(x1,y1);hold on;plot(x2,y2);
Beispiel:>> x=(0:100)/100;y1=sin(2*pi*x);y2=cos(2*pi*x);
>> plot(x,y1,x,y2);legend(’sin(2*pi*x)’,’cos(2*pi*x)’);
V13 45 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Verndern des Achsenbereiches
I axis([x1 x2 y1 y2]) setzt Ober- und UntergrenzenBeispiel: >> axis([0 0.5 0 1]);
V13 46 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Weitere Eigenschaften von Diagrammen
Benutzen der ”Handles” von Grafikobjekten
I ein ”Handle” ist die Identifikation eines GrafikobjektesBsp.: h=plot(x,y), Handle gespeichert in Variable h
I dient der Referenzierung (ahnlich Zeiger auf Objektdaten)
I Auflisten der Eigenschaften: get(h)
I Verandern von Eigenschaften: set(h,’Eigenschaft’,Wert)
Beispiel: Linienfarbe auf ’rot’, Linientyp auf ’gestrichelt’ setzenset(h,’Color’,’r’,’LineStyle’,’--’)
V13 47 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Export von Diagrammen
Gangige Grafikformate
I print -d format dateinameerzeugt Grafikdatei namens dateiname im Format format
I typische Formate: Postscript (eps), JPEG (jpeg),TIFF (tiff), PNG (png), . . .
Ausgabe als MATLAB Diagrammobjekt
I hgsave(handle,’dateiname’)erzeugt MATLAB-spezifische Grafikdatei namens dateiname
I Laden der Gafik durch hgload(’dateiname’)
I Vorteil: Diagramm kann weiterbearbeitet werden (3D Grafik!)
V13 48 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
Einfache Diagramme
Beispiele
Zufallsvariablen
I Erzeugung von Daten mit der rand Funktion
I Analyse, grafische Darstellung der Daten
Bewegung eines Doppelpendels
I
I (MATLAB Code)
V13 49 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
AufgabenLiteratur
Zusammenfassung
MATLAB
I Mathematische Operationen→ direkt anwendbar auf Vektoren
I Starken: numerische Mathematik, Datenanalyse, Grafik
I effizientes Programmieren durch machtigen Befehlssatz
I weitreichende Grafikmoglichkeiten
V13 50 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
AufgabenLiteratur
Aufgaben zum Nachdenken/Ausprobieren
I Erklaren Sie die Ausgabe erzeugt durch folgende Anweisungen:
t=0.1
n=1:10
e=n/10-n*t
I Erzeugen Sie einen Vektor mit 10 gleichmassig verteilten Werten im Intervall[0, 1] (einschlielich der Randwerte).
I Plotten Sie die Exponentialfunktion ex an den oben bestimmten Stutzstellen imIntervall [0, 1].
V13 51 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
AufgabenLiteratur
Aufgaben zum Nachdenken/Ausprobieren
Schreiben Sie eine Funktion, die einen Vektor (mit numerischenDaten) mittels “bubble sort” in aufsteigender Reihenfolge sortiert.Vergleichen Sie die Ausfuhrungszeit Ihrer Funktion mit der Zeit,die die MATLAB Funktion sort benotigt. (Hinweis: Zeitmessungmit Hilfe von tic,toc)
Erzeugen Sie ein Diagramm mit einem Kreis mit Radius r = 1.5.(Hinweis: das Achsenverhaltnis eines Diagramms kann mit demBefehl axis kontrolliert werden.)
V13 52 / 54
EinleitungMathematische Operationen
ProgrammierenGrafik
AufgabenLiteratur
Weiterfuhrendes Material zu MATLAB
I Information auf der Seite des Herstellers Mathworks
I Skripte in deutscher Sprache:S1, S2
I Englischsprachige Skripte:Moler, Dundee
I Deutschsprachige Bucher:B1, B2, B3, B4
V13 53 / 54