theorie 1.1: inhalt - · inhalt 1 einführung motivation grundlagen 2 vektorenundmatrizen...
TRANSCRIPT
![Page 1: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/1.jpg)
Theorie 1.1: Inhalt
1 EinführungMotivationGrundlagen
2 Vektoren und MatrizenErzeugen von MatrizenDoppelpunkt OperatorOperatorenBeispiel: Auswerten von Polynomen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 2: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/2.jpg)
Inhalt
1 EinführungMotivationGrundlagen
2 Vektoren und MatrizenErzeugen von MatrizenDoppelpunkt OperatorOperatorenBeispiel: Auswerten von Polynomen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 3: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/3.jpg)
Beispiel: Numerische Berechnungen
Lösen eines Gleichungssystems.
>> A = gallery(’poisson’,4);>> f = ones(16,1);>> x = A \ f
x =0.83331.16671.1667...1.16670.8333
>> full(A)ans =
4 -1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0-1 4 -1 0 0 -1 0 0 0 0 0 0 0 0 0 00 -1 4 -1 0 0 -1 0 0 0 0 0 0 0 0 00 0 -1 4 0 0 0 -1 0 0 0 0 0 0 0 0
-1 0 0 0 4 -1 0 0 -1 0 0 0 0 0 0 00 -1 0 0 -1 4 -1 0 0 -1 0 0 0 0 0 00 0 -1 0 0 -1 4 -1 0 0 -1 0 0 0 0 00 0 0 -1 0 0 -1 4 0 0 0 -1 0 0 0 00 0 0 0 -1 0 0 0 4 -1 0 0 -1 0 0 00 0 0 0 0 -1 0 0 -1 4 -1 0 0 -1 0 00 0 0 0 0 0 -1 0 0 -1 4 -1 0 0 -1 00 0 0 0 0 0 0 -1 0 0 -1 4 0 0 0 -10 0 0 0 0 0 0 0 -1 0 0 0 4 -1 0 00 0 0 0 0 0 0 0 0 -1 0 0 -1 4 -1 00 0 0 0 0 0 0 0 0 0 -1 0 0 -1 4 -10 0 0 0 0 0 0 0 0 0 0 -1 0 0 -1 4
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 4: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/4.jpg)
Beispiel: Entwicklung von Algorithmen
Iteratives Lösungsverfahren (PCG).function [u,m] = solvePCG(A, f, u_s, C1, C2, tol, m_max)
u = u_s; m = 0;r = f - A * u;p = C2 \ (C1\ r);norm_f = norm(f);while( (norm(r)/norm_f > tol) & (m < m_max))
a = A * p;a_dot_p = a’ * p;lambda = (r’ * p) / a_dot_p;u = u + lambda * p;r = r - lambda * a;inv_C_times_r = C2 \ (C1 \ r);p = inv_C_times_r - ((inv_C_times_r’ * a) / a_dot_p) * p;m=m+1;
end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 5: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/5.jpg)
Beispiel: Visualisierung
3D-Plot der Funktion 1x2+y2 .
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 6: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/6.jpg)
Beispiel: Modellierung und Simulation
Berechnen und Darstellen der Verschiebungsfigur eines Querschnittsunter einer Flächenlast.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 7: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/7.jpg)
Beispiel: GUI-AnwendungenPartial Differential Equations Toolbox pdetool von Matlab.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 8: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/8.jpg)
Beispiel: PrototypingTemperaturverteilung in einer Erdmantelkonvektions-Simulation:
Anmerkung: Die 3D-Simulation links mit 1010 Freiheitsgraden erfordertoptimierte Codes, die auf Maschinen wie z.B. SuperMUC ausgeführt werden.Prototyping mit MATLAB o.ä. (2D, rechts) erlaubt es wichtige Fragen mit weitweniger Aufwand (bzgl. Implementierung und Ressourcen) zu beantworten.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 9: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/9.jpg)
Beispiel: SimulationBlutströmungs-Simulation in Arterien:
Anmerkung: 3D-Simulation, Stromlinien (links) und Wandkräfte (rechts).Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 10: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/10.jpg)
Stärken von Matlab
Algorithmen lassen sich in einer an die Mathematik angelehntenForm implementierenNative Unterstützung von Vektoren und Matrizen (auchdünnbesetzt!)Große Bibliothek mit numerischen Funktionen, z.B. spline zurBerechnung kubischer SplinesUmfangreiche VisualisierungsmöglichkeitenMatlab wählt automatisch effizienten Algorithmus für bestimmteAufgabe, z.B. beim Lösen von linearen Gleichungssystemen mit \Weite Verbreitung in der CommunityLeicht zu lernende, umfangreiche ProgrammierumgebungNicht so langsam wie sein Ruf bei Beachtung gewisser Regeln
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 11: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/11.jpg)
Matlab IDE
Verzeichnis-FensterBefehls-FensterBefehls-HistorieVariablenspeicherHilfe (help und doc)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 12: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/12.jpg)
Befehlseingabe
Eingaben können direkt in das Befehlsfenster gemacht werdenMit help <Funktionsname> und doc <Funktionsname> findetman HilfeStichwortsuche in den Hilfetexten aller Funktionen mit lookfor<Stichwort>
Tabulator-Taste verwenden um Befehle automatisch zuvervollständigenMit den Hoch/Runter-Tasten können die zuletzt verwendetenBefehle durchgegangen werdenLaufende Operationen können mit Ctrl+C abgebrochen werdenKeine Ausgabe bei Abschluss mit ;
Mehrere Befehle in einer Zeile mit , oder ; trennen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 13: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/13.jpg)
Rechnen in Matlab
Variablenzuweisung durch =Punkt-vor-Strich-RechnungIn ans steht das Ergebnis der letzten RechnungEingabe im DezimalsystemFormat: [Vorzeichen] Zahl [Exponent]
Vorzeichen: + oder −Zahl: mind. 1 Ziffer, ggf. DezimalpunktExponent: e oder E gefolgt von + oder − und ganzer Zahl
>> a=5;>> 5*a+2
ans =27
>> b=sqrt(a), b^2
b =2.2361
ans =5.0000
>> 1+2/3*4-5
ans =-1.3333
>> ans
ans =-1.3333
>> 1+2/3*4-5;>>
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 14: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/14.jpg)
Komplexe Zahlen
Matlab unterstützt das Rechnen mit komplexen Zahlen.Eingabeformat: a+bi oder a+bj
Alternativ: complex(a,b)
Achtung: Automatischer Wechsel kann zu Problemen führen
>> z=5+3.5i
z =5.0000 + 3.5000i
>> a=2;>> b=3;>> z2 = a+bi??? Undefined function or variable ’bi’.
>> z2 = a+b*j
z2 =2.0000 + 3.0000i
>> j=2;>> z3 = a+b*j
z3 =8
>> z3=complex(a,b)
z3 =2.0000 + 3.0000i
>> sqrt(-5.2)
ans =0 + 2.2804i
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 15: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/15.jpg)
Inhalt
1 EinführungMotivationGrundlagen
2 Vektoren und MatrizenErzeugen von MatrizenDoppelpunkt OperatorOperatorenBeispiel: Auswerten von Polynomen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 16: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/16.jpg)
Alles ist Matrix!
Matlab unterstützt das Rechnen mit mehrdimensionalen Datenstrukturen(bei uns Vektoren und Matrizen). Jede Variable wird als Matrixgespeichert, z.B. wird eine Zahl als 1× 1-Matrix interpretiert.
Um Matlab effizient zu nutzen muss vektorisiert gearbeitetwerden!
Dies führt in der Regel auch zu (zumindest für Mathematiker) gutlesbarem Code.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 17: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/17.jpg)
Erzeugen von Matrizen I
Spezielle häufig benötigte Matrizen können mit Hilfe von Befehlenerzeugt werden:
eye: Einheitsmatrixones: Einsmatrixzeros: Nullmatrixrand: Matrix mit gleichverteilten Zufallswerten in (0, 1)
Syntax (bei allen identisch)rand(n,m): Matrix mit n Zeilen und m Spaltenrand(n): Quadratische Matrix mit n Zeilen und n Spalten
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 18: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/18.jpg)
Erzeugen von Matrizen II
>> R = rand(2,4)
R =
0.8913 0.4565 0.8214 0.61540.7621 0.0185 0.4447 0.7919
>> eye(4,3)
ans =1 0 00 1 00 0 10 0 0
>> ones(4,1)
ans =1111
>> zeros(1,3)
ans =0 0 0
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 19: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/19.jpg)
Erzeugen von Matrizen III
Matrizen und Vektoren können auch direkt mit Hilfe von [...] erzeugtwerden
Zeileneinträge mit Leerzeichen oder Komma trennenZeilenumbruch oder Semikolon für eine neue ZeileAnzahl der Einträge muss in jeder Zeile gleich sein
>> x = [3,4 5 -6]x =
3 4 5 -6
>> x = [2,3;4,5]x =
2 34 5
>> x = [2,3,45 6 7]
x =2 3 45 6 7
>> x = [1,2,3;4,5]??? Error using ==> vertcatCAT arguments dimensions are not consistent.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 20: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/20.jpg)
Erzeugen von Matrizen IV
Statt Zahlen können auch Vektoren oder Matrizen innerhalb von [...]verwendet werden (Blockmatrizen).Achtung: Auf Dimensionen achten
>> A=[eye(2); ones(2)]
A =
1 00 11 11 1
>> A=[eye(2), [1;2]; rand(1,2), 5]
A =
1.0000 0 1.00000 1.0000 2.0000
0.9218 0.7382 5.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 21: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/21.jpg)
Doppelpunkt Operator, Linspace I
Mit Hilfe der Doppelpunkt Operators können spezielle Vektoren erzeugtwerden. Diese finden häufig in Schleifen oder beim Indizieren Anwendung.
Syntaxv = <Start>:<Abstand>:<Ende>Erzeugt einen Vektor v mit Elementen von <start> bis <Ende>, wobei jezwei benachbarte Elemente den Abstand <Abstand> haben.Hinweis: <Start>:<Ende> == <Start>:1:<Ende>
Auch der verwandte Befehl linspace erzeugt Vektoren.
Syntaxv = linspace(<Start>, <Ende>, n)Erzeugt einen Vektor v der Länge n mit Elementen von <Start> bis<Ende>, wobei je zwei benachbarte Elemente denselben Abstand haben.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 22: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/22.jpg)
Doppelpunkt Operator, Linspace II
>> x = 1:2.5:7
x =1.0000 3.5000 6.0000
>> x = -1:-2:-6
x =-1 -3 -5
>> x = -1:2
x =-1 0 1 2
>> 2:-1
ans =Empty matrix: 1-by-0
>> x = linspace(1,2,4)
x =1.0000 1.3333 1.6667 2.0000
>> linspace(4,-1,3)
ans =4.0000 1.5000 -1.0000
>> linspace(1,2,1)
ans =2
>> linspace(1,2,0)
ans =Empty matrix: 1-by-0
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 23: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/23.jpg)
Weitere Möglichkeiten: Einlesen aus Datei
Matrizen können aus Textdateien, die z.B. durchTabellenkalkulationsprogramme erzeugt wurden oder numerischeEregbnisse enthalten, eingelesen werden.
SyntaxA = csvread(’eingabe.csv’) erwartet per Kommata getrennteSpalten.A = dlmread(’eingabe.txt’,’\t’) erlaubt die Angabe desTrennungszeichens zwischen den Spalten (hier Tabulator).
Analog zu csvread,dlmread gibt es Befehle um Matrizen inTextdateien abzuspeichern: csvwrite,dlmwrite
In der Matlab-Hilfe finden Sie zahlreiche Lese- und Schreibbefehlefür andere Dateiformate (z.B. Bild-, Audio- und Videodateien)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 24: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/24.jpg)
Weitere Möglichkeiten
repmat erzeugt Matrizen durch mehrfaches Kopieren.
Syntaxrepmat(A, n, m)Matrix A wird insgesamt m-mal nach rechts kopiert und die entstehendeMatrix n-mal unten angehängt.
>> B=[1,2;3,4]
B =
1 23 4
>> repmat(B, 2, 3)
ans =1 2 1 2 1 23 4 3 4 3 41 2 1 2 1 23 4 3 4 3 4
>> [B,B,B; B,B,B]
ans =1 2 1 2 1 23 4 3 4 3 41 2 1 2 1 23 4 3 4 3 4
>> repmat(1:3, 3, 1)
ans =1 2 31 2 31 2 3
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 25: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/25.jpg)
Operatoren I+, -, .*, ./, .^: Elementweise OperationenAchtung: Auf den Punkt bei .*, ./ und . achten.Syntax
C = s + A mit s Skalar, A Matrix/Vektor: cij = aij + s.C = A .* B mit A und B Matrizen: cij = aij · bij .Achtung: A und B müssen die gleiche Anzahl Zeilen und Spaltenhaben
>> A = eye(2)+2
A =3 22 3
>> R = rand(2,3);>> 3.*ones(2,3) + R
ans =3.8147 3.1270 3.63243.9058 3.9134 3.0975
>> (1:5).^2
ans =1 4 9 16 25
>> 2.^(1:5)
ans =2 4 8 16 32
>> ones(2) + [1,2]??? Error using ==> plusMatrix dimensions must agree.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 26: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/26.jpg)
Operatoren II
*: Multiplikation im Matrizenprodukt Sinn oder elementweiseMultiplikation mit Skalar
Syntax
C = A*B mit Matrizen A und B: cij =∑
k aikbkj .Achtung: Anzahl der Spalten von A muss gleich der Anzahl Zeilenvon B seins*A == s.*A, wenn s Skalar.
Hinweis: A*x mit x Spaltenvektor ist das normale Matrix-Vektor Produktvon A mit x .
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 27: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/27.jpg)
Operatoren III
>> x = [1; 2; 3];>> A = ones(3)+eye(3)
A =2 1 11 2 11 1 2
>> A*x
ans =789
>> y = [2; 3; 4];>> x*y??? Error using ==> mtimesInner matrix dimensions must agree.
>> y = [2, 3, 4];>> y*x
ans =20
>> B = [2,2;-3,1; 0,1]
B =2 2
-3 10 1
>> A*B
ans =
1 6-4 5-1 5
>> B*A??? Error using ==> mtimesInner matrix dimensions must agree.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 28: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/28.jpg)
Operatoren IV
A’: Adjungierte Matrix A∗ == AT (alternativ: ctranspose(A)))A.’: Transponierte Matrix AT (alternativ: transpose(A))Wird häufig verwendet um aus Zeilenvektoren (z.B. x = 1:n;)Spaltenvektoren zu machen (x = (1:n)’;)
Hinweis: A’ und A.’ unterscheiden sich nur bei Matrizen mit komplexenEinträgen.
>> A=[1, 1+i;2,3]
A =1.0000 1.0000 + 1.0000i2.0000 3.0000
>> A’
ans =1.0000 2.00001.0000 - 1.0000i 3.0000
>> A.’
ans =1.0000 2.00001.0000 + 1.0000i 3.0000
>> transpose(A)
ans =1.0000 2.00001.0000 + 1.0000i 3.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 29: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/29.jpg)
Beispiel: Auswerten von Polynomen
Beispiel: Auswerten des Polynoms p(x) := 3.5x3 + 2x2 − 2 an denPunkten xi = 0 + i/2, i = 0, . . . , 4. In der Regel speichert man denKoeffizientenvektor, also p = [-2; 0; 2; 3.5].
>> p = [-2; 0; 2; 3.5]
p =-2.0000
02.00003.5000
>> x=(0:0.5:2)’
x =0
0.50001.00001.50002.0000
>> X=[x.^0, x, x.^2, x.^3]
X =1.0000 0 0 01.0000 0.5000 0.2500 0.12501.0000 1.0000 1.0000 1.00001.0000 1.5000 2.2500 3.37501.0000 2.0000 4.0000 8.0000
>> y = X * p
y =-2.0000-1.06253.5000
14.312534.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 30: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/30.jpg)
Theorie 1.2: Inhalt
1 Vektoren und MatrizenBackslash und Slash
2 Funktionen
3 Indizierung
4 Matrizen manipulieren
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 31: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/31.jpg)
Inhalt
1 Vektoren und MatrizenBackslash und Slash
2 Funktionen
3 Indizierung
4 Matrizen manipulieren
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 32: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/32.jpg)
\ und / Operator I\ (mldivide) und / (mrdivide) sind im gewissen Sinn das Gegenstück zumMatrizenprodukt *: Mit Ihnen kann man lineare Gleichungssysteme lösenbzw. eine Lösung approximieren.
Fragestellung: Gesucht ist ein Vektor x mit Ax = b. Wenn kein solches xexistiert, dann suche x mit ‖Ax − b‖2 minimal.
Dieser Vektor wird mit A \ b bestimmt. Dazu wird intern je nachStruktur von A ein geeigneter Algorithmus verwendet.
b kann auch eine Matrix sein (z.B. mehrere rechte Seiten).Anzahl Zeilen von A muss gleich Anzahl Zeilen von b sein.Bei Verwendung von Zeilenvektoren, also x = (x1, x2, . . . , xn),verwendet man /.
Merkregel
A \ b ≈= A−1b, wenn b Spaltenvektorb / A ≈= bA−1, wenn b Zeilenvektor
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 33: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/33.jpg)
\ und / Operator II
>> A = hilb(3)
A =1.0000 0.5000 0.33330.5000 0.3333 0.25000.3333 0.2500 0.2000
>> b = (1:3)’;>> x = A\b
x =27.0000
-192.0000210.0000
>> A*x
ans =1.00002.00003.0000
>> x = b’/A
x =27.0000 -192.0000 210.0000
>> x*A
ans =1.0000 2.0000 3.0000
>> B = [(1:3)’, ones(3,1)]
B =1 12 13 1
>> A\B
ans =27.0000 3.0000
-192.0000 -24.0000210.0000 30.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 34: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/34.jpg)
\ und / Operator III
Achtung: Aufpassen, wenn Matrix nicht quadratisch oder singulär!>> A = [hilb(3); ones(1,3)]
A =1.0000 0.5000 0.33330.5000 0.3333 0.25000.3333 0.2500 0.20001.0000 1.0000 1.0000
>> b = (1:4)’
b =1234
>> x = A\b
x =-22.415287.1090
-60.6662
>> A*x
ans =0.91722.66222.17234.0276
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 35: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/35.jpg)
Inhalt
1 Vektoren und MatrizenBackslash und Slash
2 Funktionen
3 Indizierung
4 Matrizen manipulieren
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 36: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/36.jpg)
Funktionen
Viele Matlab Funktionen lassen sich in eine von drei Klassen einteilen:Skalarwertig Skalar als Eingabeargument. Wirken bei Feldern
komponentenweise.Vektorwertig Vektor als Argument. Werden bei Matrizen auf jede Spalte
einzeln angewendet. Rückgabewert ist Skalar oder Vektor.Matrixwertig Matrix als Argument, z.B. det
Viele Funktionen in Matlab verhalten sich unterschiedlich je nach Anzahlund Art der Eingabe- bzw. Ausgabeparameter.
QR Orthogonal-triangular decomposition.[Q,R] = QR(A), where A is m-by-n, produces an m-by-n ...[Q,R] = QR(A,0) produces the "economy size" decomposition...[Q,R,E] = QR(A) produces unitary Q, upper triangular R ...[Q,R,E] = QR(A,0) produces an "economy size" decomposition...X = QR(A) and X = QR(A,0) return the output of LAPACK’s ......
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 37: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/37.jpg)
Skalare Funktionen
Beispiele:
sin cos tanasin acos atanexp log (ln) roundsqrt factorial (Fakultät) abs (Betrag)
>> A = magic(2)
A =1 34 2
>> cos(A*pi/2)
ans =0.0000 -0.00001.0000 -1.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 38: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/38.jpg)
Vektor Funktionen I
Wenn das Argument der Funktion eine Matrix ist, wird die Funktioneinzeln auf jede Spalte der Matrix angewendet.Um eine Vektorfunktion auf eine gesamte Matrix A anzuwenden undnicht auf die einzelnen Spalten, A(:) als Argument verwenden.Meist zweites optionales Argument welches angibt, ob Funktion aufSpalten (1) oder Zeilen (2) einer Matrix angewendet werden soll.
Beispiele:
min max meansum prod (Produkt) diffcumsum sort
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 39: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/39.jpg)
Vektor Funktionen II>> x = 4:-1:1;>> prod(x)
ans =24
>> max(x)
ans =4
>> [m, i] = max(x)
m =4
i =1
>> diff(x)
ans =-1 -1 -1
>> A = magic(3);>> sum(A)
ans =15 15 15
>> sum(A,2)
ans =151515
>> sum(A(:))
ans =45
>> sort(A)
ans =3 1 24 5 68 9 7
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 40: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/40.jpg)
Hilfreiche Funktionen
length: Die Länge eines Vektors oder die größere Dimension einerMatrixsize: Vektor mit den Dimensionen des Feldesnumel: Anzahl der Elemente des Feldes
Hinweis: prod(size(A)) == numel(A) == length(A(:))>> A=ones(3,2);>> length(A)
ans =3
>> length(A’)
ans =3
>> size(A)
ans =3 2
>> numel(A)
ans =6
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 41: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/41.jpg)
Inhalt
1 Vektoren und MatrizenBackslash und Slash
2 Funktionen
3 Indizierung
4 Matrizen manipulieren
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 42: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/42.jpg)
Indizierung IMit Matlab kann gezielt auf Teile eines Vektors oder einer Matrixzugegriffen werden. Zum Indizieren verwendet man runde Klammern(...).
x(i): Das i-te Element des Vektors xA(i,j): Das Element in der i-ten Zeile und j-ten Spalteend: Bezeichnet den letzten Index der Dimension
Achtung: Indizes fangen in Matlab bei 1 an!
>> x = 2:-1:0;>> x(2)
ans =1
>> A = [1,2; 3,4]
A =1 23 4
>> A(1,2) = -2
A =1 -23 4
>> A(1,end)
ans =-2
>> A(end,end)
ans =4
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 43: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/43.jpg)
Lineares Indizieren
Auf die Elemente einer Matrix kann auch mit nur einem Index zugegriffenwerden.SyntaxA(i) gibt den i-ten Eintrag der Matrix A zurück. Die Einträge werdenhierbei spaltenweise durchnummeriert.1 4 7 10
2 5 8 113 6 9 12
>> A=magic(3)
A =8 1 63 5 74 9 2
>> A(2)
ans =3
>> A(end)
ans =2
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 44: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/44.jpg)
Indizierung II
Auch Felder können zum Indizieren verwendet werden, sei v ein Vektorbzw. M eine Matrix mit Indizes
x(v): Vektor mit i-tem Element gleich x(v(i))
x(M): Matrix mit (i,j)-ten Element gleich x(M(i,j))
A(v,w): Matrix mit (i,j)-ten Element gleich A(v(i), w(j))
A(v): Vektor mit i-tem Element gleich A(v(i))
Hinweis: Kurschreibweise: : == 1:end.Hinweis: v(:) bzw. A(:) ist immer ein Spaltenvektor.
Achtung: Die Einträge in den Vektoren, bzw. Matrizen, die zumIndizieren verwendet werden, müssen ganzzahlig und größer als 0 sein.
Achtung: Matlab unterstützt keine doppelte Indizierung, z.B. x(v)(1)funktioniert nicht!
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 45: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/45.jpg)
Indizierung IIIx =
-3 -2 -1 0 1 2 3
>> x(2:4)
ans =-2 -1 0
>> x([2 3 end end 1])
ans =-2 -1 3 3 -3
>> M = [1 2; 2 1]
M =1 22 1
>> x(M)
ans =-3 -2-2 -3
>> A = magic(3)
A =8 1 63 5 74 9 2
>> A(1,:)
ans =8 1 6
>> A([1,2],[2,3])
ans =1 65 7
>> A(2:end,:)
ans =3 5 74 9 2
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 46: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/46.jpg)
Lineares Indizieren II
>> A = zeros(3)
A =0 0 00 0 00 0 0
>> A(2:2:end) = 1
A =0 1 01 0 10 1 0
>> x = 1:3
x =1 2 3
>> x(:)
ans =123
>> A*xerror: operator *: nonconformant arguments(op1 is 3x3, op2 is 1x3)
>> A*x(:)
ans =242
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 47: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/47.jpg)
Inhalt
1 Vektoren und MatrizenBackslash und Slash
2 Funktionen
3 Indizierung
4 Matrizen manipulieren
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 48: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/48.jpg)
Einträge löschen
Es ist möglich, Einträge aus Vektoren zu löschen.x(i) = [] löscht den i-ten Eintrag des Vektors x
x(v) = [] löscht alle Einträge von x mit Indizes in v
A(i,:) = [], A(:,i) = [] löscht i-te Zeile bzw. Spalte derMatrix A
>> x=1:5;>> x([2 3]) = []
x =1 4 5
>> A=magic(3)
A =8 1 63 5 74 9 2
>> A(:,2) = []
A =8 63 74 2
>> A([2,1],:) = []
A =4 2
>> A = magic(3);>> A(1:end, 2) = []??? Subscripted assignment dimension mismatch.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 49: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/49.jpg)
Einträge hinzufügen
Matlab verlängert Felder bei Element-Zuweisung automatisch.x(i) = k setzt das i-te Element auf den Wert k und verlängert denVektor wenn i > length(x).A(i,j) = k setzt das (i,j)-te Element auf den Wert k, hängt ggf.Zeilen und Spalten an.
>> x=1
x =1
>> x(4) = 4
x =1 0 0 4
>> x(3,3) = 5
x =1 0 0 40 0 0 00 0 5 0
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 50: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/50.jpg)
Theorie 2.1: Inhalt
1 Relationale und logische OperatorenFunktionen any und allIndizierung mit logischen Feldern
2 Funktionen definierenAnonyme FunktionenFunktionshandles
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 51: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/51.jpg)
Inhalt
1 Relationale und logische OperatorenFunktionen any und allIndizierung mit logischen Feldern
2 Funktionen definierenAnonyme FunktionenFunktionshandles
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 52: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/52.jpg)
Relationale Operatoren und logische Felder I
Ähnlich wie in anderen Programmiersprachen besitzt Matlab einenlogischen Datentyp. logical Variablen haben entweder den Wert 0(falsch) oder 1 (wahr).
logical ist Rückgabetyp von relationalen Operatoren(Vergleichsoperatoren):
== gleich~= ungleich< kleiner> größer<= kleiner oder gleich>= größer oder gleich~ nicht
L = A <= s: Vergleicht A komponentenweise mit Skalar s
L = A <= B: Vergleicht A komponentenweise mit zugehörigenEintrag aus B. (Dimensionen von A) == (Dimensionen von B)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 53: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/53.jpg)
Relationale Operatoren und logische Felder II
>> l = logical([0,0,1])
l =0 0 1
>> l = logical([0,2,1.1,-1])
l =0 1 1 1
>> A = rand(2)
A =0.1419 0.91570.4218 0.7922
>> A <= 0.5
ans =1 01 0
>> B = rand(2)
B =0.9595 0.03570.6557 0.8491
>> L = A>B
L =0 10 0
>> whos A LName Size Bytes ClassA 2x2 32 doubleL 2x2 4 logical
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 54: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/54.jpg)
Achtung: (Un-)Gleichheit von Kommazahlen>> (1-0) == 1ans =
1
>> (1.1-0.1) == 1ans =
1
>> (1.01-0.01) == 1ans =
1
>> (1.001-0.001) == 1ans =
0
>> (1.0001-0.0001) == 1ans =
1
>> (1.00001-0.00001) == 1ans =
1
Kommazahlen dürfen nie mit == oder ~= verglichen werden!Dies ist kein Matlab-spezifisches Problem, sondern tritt in praktischallen Programmiersprachen (z.B. C++, Fortran) auf!Abhilfe: Verwenden Sie die vordefinierte Konstante eps
>> epsans =
2.2204e-16
>> abs((1.001-0.001) - 1) <= epsans =
1
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 55: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/55.jpg)
Logische Operatoren
Logische Variablen können mit logischen Operatoren verknüpft werden.
& (and) logisches und| (or) logisches oder∼ (not) logisches nichtxor logisches exklusives oder
Anwendung wieder komponentenweise.>> A=rand(2)
A =0.1419 0.91570.4218 0.7922
>> A<=0.2 | A>=0.8
ans =1 10 0
>> B=rand(2)
B =0.9595 0.03570.6557 0.8491
>> and(A<B, A<0.5)
ans =1 01 0
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 56: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/56.jpg)
any und all
Die Funktionen any, all sind Vektorfunktionen auf logischen Feldern.any(l): Gibt wahr zurück, wenn mindestens ein Eintrag von l wahristall(l): Gibt wahr zurück, wenn alle Einträge von l wahr sind
>> l = isprime(1:5)
l =0 1 1 0 1
>> any(l)
ans =1
>> A = magic(3)
A =8 1 63 5 74 9 2
>> L = A>7
L =1 0 00 0 00 1 0
>> any(L)
ans =1 1 0
>> all(~L)
ans =0 0 1
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 57: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/57.jpg)
Indizieren mit logischen Feldern I
Eine wichtige Anwendung von logischen Feldern ist das Indizieren.x(l): Vektor mit Elementen xi aus x für die l(i) == 1 also wahrist. Voraussetzung: Länge l == Länge x
A(l): Spaltenvektor mit Elementen i aus A für die l(i) wahr istA(L): Spaltenvektor mit Elementen aij aus A für die L(i,j) wahr istA(l1,l2): Matrix der Elemente aij
mit l1(i) == 1 und l2(j) == 1
Hinweis: Auch Mischformen mit normaler Indizierung sind möglich: z. B.A(l,2:end).
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 58: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/58.jpg)
Indizieren mit logischen Feldern II
>> x = rand(1,5);>> l = x >= 0.5;>> x(l) = 0.5
x =0.1230 0.5000 0.3285 0.2682 0.5000
>> x(x>= 0.5) = 0.6
x =0.1230 0.6000 0.3285 0.2682 0.6000
>> A = rand(2)
A =0.3922 0.17120.6555 0.7060
>> A(A>0.6) = 0.6
A =0.3922 0.17120.6000 0.6000
>> A = magic(3)
A =8 1 63 5 74 9 2
>> A(A<4)
ans =312
>> l = logical([0, 1, 1]);>> A(l,:)
ans =3 5 74 9 2
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 59: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/59.jpg)
find I
find gibt die Indizes der wahren Einträge eines logischen Feldes zurück:v = find(L): Indizes der wahren Einträge des logischen Feldes L. vist ein Spaltenvektor der linearen Indizes (Spaltenweise).[r,c] = find(L): Vektoren mit Reihen- (r) und Spalten-Indizes(c) der wahren Einträge von L
Hinweis: X(l) == X(find(l))
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 60: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/60.jpg)
find II
>> x=[-2 5 -1 0 4]
x =-2 5 -1 0 4
>> f = find(x>0)
f =2 5
>> A = magic(3);
A =8 1 63 5 74 9 2
>> f = find(A>4)’
f =1 5 6 7 8
>> A(f)
ans =8 5 9 6 7
>> [r,c] = find(A>4);>> r’
ans =1 2 3 1 2
>> c’
ans =1 2 2 3 3
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 61: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/61.jpg)
Inhalt
1 Relationale und logische OperatorenFunktionen any und allIndizierung mit logischen Feldern
2 Funktionen definierenAnonyme FunktionenFunktionshandles
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 62: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/62.jpg)
Funktionen definieren IHäufig wiederkehrende Programmteile oder Algorithmen können alsFunktionen zur Verfügung gestellt werden.Funktionen werden aufgerufen durch <name>(arg1, arg2,...),z.B. sqrt(2).Eine Funktion foo muss, damit sie von Matlab gefunden wird, in derDatei foo.m stehen und sich entweder im aktuellen Verzeichnisbefinden oder im path (siehe help path).
Syntax
<Dateiname: foo.m>
function [A1, A2, ...] = foo(E1, E2, ...)%FOO <Kurzbeschreibung>%<ausführliche Beschreibung,%wird bei "help foo" angezeigt >
<Code der Funktion in dem die Variablen A1, A2,...richtig besetzt werden>
Kein return notwendig
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 63: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/63.jpg)
Funktionen definieren II
Funktionen ohne Rückgabeargument:function foo(E1, E2, ...)
return kann verwendet werden, um eine Funktion vorzeitig zuverlassen.Funktionsnamen in Matlab bestehen per Konvention nur ausKleinbuchstaben.Eingabeargumente können durch Funktionen nicht verändert werden(pass by value).
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 64: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/64.jpg)
Funktionen definieren III
<Datei: foo.m>function foo(x)
x = x.*(x+1)./2;
>> x=3;>> foo(x);>> x
x =3
<Datei: foo.m>function x = foo(x)
x = x.*(x+1)./2;
>> x=3;>> x=foo(x);>> x
x =6
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 65: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/65.jpg)
Funktionen definieren III
Skalare Funktionen sollten immer auch mit Vektoren/Matrizen alsEingabeargumenten funktionieren.
Beispiel: Primzahltest (nicht sonderlich schnell)<Datei: isprime2.m>function l = isprime2(x)
d = [2, 3:2:sqrt(x)];rest = rem(x, d); %Der Rest der Division x./dl = all((rest ~= 0 & x > 1) | x == 2);
Vektorisiert<Datei: isprime2.m>function l = isprime2(x)
l = logical(x);<Wiederhole für jedes Element von x(:)>
d = [2, 3:2:sqrt(x(i))];rest = rem(x(i), d);l(i) = all((rest ~= 0 & x(i) > 1) | x(i) == 2);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 66: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/66.jpg)
Anonyme Funktionen
Funktionen die nur aus einem Ausdruck bestehen, z. B. algebraischeAusdrücke wie
sin(x2) + 2x4
können anonym definiert werden.
Syntaxf = @(arg1, arg2, ...) <ausdruck>;Achtung: f ist keine Funktion sondern ein Handle auf eine anonymeFunktion.
Hinweis: Rückgabewerte von f können auch Vektoren/Matrizen sein.
>> f = @(x) sin(x.^2)+2*x.^4;>> f(0.5)
ans =0.3724
>> f2 = @(x,y) [x.^2-y.^2, x*y]
f2 =@(x,y)[x.^2-y.^2,x*y]
>> f2(3,-4)
ans =-7 -12
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 67: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/67.jpg)
Funktionshandles
Funktionen können selber Funktionen als Argument bekommen in Formvon Funktionshandles.SyntaxSei fun eine Funktion, dann wird mit @fun ein Funktionshandle auf funerzeugt. Dieses kann als Argument einer Funktion übergeben werden.>> df = @(f,x) (f(x + 1e-8) - f(x - 1e-8))./2e-8;>> df(@sin, 0)
ans =1
>> df(@exp, 0:0.5:1)
ans =1.0000 1.6487 2.7183
>> exp(0:0.5:1)
ans =1.0000 1.6487 2.7183
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 68: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/68.jpg)
Funktionshandles
>> f = @(x) sin(x.^2)+2*x.^4;>> df(@f, 1)??? Error: "f" was previously used as a variable,conflicting with its use here as the name of a function or command.See MATLAB Programming, "How MATLAB Recognizes Function CallsThat Use Command Syntax" for details.
>> df(f, 1)
ans =
9.0806
>> df(@(x) sin(x.^2)+2*x.^4, 1)
ans =
9.0806
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 69: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/69.jpg)
Theorie 2.2: Inhalt
1 Schleifenfor-SchleifenBeispiel: Jacobi-VerfahrenWhile Schleifen
2 Bedingte Ausführungif, elseif, elseTest der Anzahl von Ein- und Ausgangsgrößen
3 Debugging
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 70: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/70.jpg)
Inhalt
1 Schleifenfor-SchleifenBeispiel: Jacobi-VerfahrenWhile Schleifen
2 Bedingte Ausführungif, elseif, elseTest der Anzahl von Ein- und Ausgangsgrößen
3 Debugging
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 71: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/71.jpg)
Schleifen I
Eine Schleife wiederholt eine Folge von Anweisungen bis eineAbbruchsbedingung erfüllt ist.In Matlab gibt es zwei unterschiedliche Arten von Schleifen:
for Schleifewhile Schleife
Schleifen können beliebig geschachtelt werden.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 72: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/72.jpg)
Schleifen (for Schleife)
Syntaxfor i=v
<auszufuehrende Anweisungen>endMit v Vektor (oder Matrix), häufig von der Form <start>:<ende>.
Bei einer for Schleife werden die Anweisungen so oft ausgeführt wie esElemente in v gibt. Ist z.B. length(v) == 5 wird der Körper derSchleife 5 Mal ausgeführt. i durchläuft dabei jeweils die Elemente von v.
Achtung: for Schleifen können in vielen Fällen durch vektorwertigeAusdrücke ersetzt werden
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 73: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/73.jpg)
Schleifen (for Schleife)
>> x=[1,2,10,-1];>> k=0;>> for l=xk=k+2*lend
k =2
k =6
k =26
k =24
>> sum(2*x)
ans =24
>> for k=1:5for l=k:5A(k,l)=k/l;A(l,k)=k/l;endend>> A
A =1.0000 0.5000 0.3333 0.2500 0.20000.5000 1.0000 0.6667 0.5000 0.40000.3333 0.6667 1.0000 0.7500 0.60000.2500 0.5000 0.7500 1.0000 0.80000.2000 0.4000 0.6000 0.8000 1.0000
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 74: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/74.jpg)
Beispiel: Jacobi-Verfahren IZum Lösen eines linearen Gleichungssystems Ax = b, mit A ∈ Rn×n
bieten sich in manchen Fällen iterative Verfahren an.a11 · x1 + · · ·+ a1n · xn = b1a21 · x1 + · · ·+ a2n · xn = b2
...an1 · x1 + · · ·+ ann · xn = bn
Ein einfaches Beispiel für diese Klasse ist das Jacobi-Verfahren.Jacobi-VerfahrenAusgehend von einem beliegigen Startvektor x (0)
i löse für alle i die i-teGleichung nach der i-ten Variablen xi auf und iteriere dies.Hinreichende Bedingung für Konvergenz: A strikt diagonaldominant.
x (k+1)i :=
1aii
(bi −
n∑j=1j 6=i
aijx (k)j), i = 1, . . . , n.
=1aii
(bi + aii x (k)
i −n∑
j=1
aijx (k)j)= x (k)
i +1aii
(bi − aT
i x (k))Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 75: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/75.jpg)
Beispiel: Jacobi-Verfahren I
function x = jacobi1(A, b, x0, iter)%JACOBI Verfahren Version 1x = x0;xn = 0*x;n = length(A);for k = 1:iter
for i = 1:nxn(i) = x(i) + (b(i) - A(i,:)*x)./A(i,i);
endx = xn;
end
>> A = gallery(’poisson’,10);>> b=(1:100)’;>> x = jacobi(A,b,zeros(100,1),500);>> norm(A*x - b)
ans =4.6606e-07
>> tic; x = jacobi1(A,b,zeros(100,1),500); tocElapsed time is 0.640984 seconds.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 76: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/76.jpg)
Jacobi-Verfahren II
Das Jacobi-Verfahren kann man weiter umschreiben:
x (k+1)i := x (k)
i +1aii
(bi − aT
i x (k))
, i = 1, . . . , n
⇒ x (k+1) := x (k) + D−1(
b − Ax (k))
, mit D = Diag(A)
function x = jacobi2(A, b, x0, iter)%JACOBI Verfahren Version 2x = x0;D = diag(A); %diag(A) gibt Vektor der Diagonalelemente zurückfor k = 1:iter
x = x + (b - A*x)./D;end
>> tic; x = jacobi2(A,b,zeros(100,1),500); tocElapsed time is 0.017832 seconds.>> norm(A*x - b)ans =
4.6606e-07
Eliminieren der inneren Schleife beschleunigt Routine um Faktor ≈ 36!
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 77: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/77.jpg)
Schleifen II (while Schleifen)
while Schleifen werden solange ausgeführt solange eine Bedingung wahrist. Zum Beispiel bei einem iterativen Verfahren solange wie einefestgelegte Genauigkeit nicht erreicht wurde.
Achtung: Gefahr von Endlosschleifen!
Syntaxwhile (<Bedingung>)
<auszufuehrende Anweisungen>end
>> j=1;>> while (j>0)epsilon = j;j = j/2;end>> epsilon
epsilon =4.9407e-324
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 78: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/78.jpg)
Jacobi-Verfahren III
Beim Jacobi-Verfahren haben wir bisher die Anzahl der Iterationenvorgegeben.Besser abbrechen, wenn die Norm des Residuums klein ist
function x = jacobi3(A, b, x0, tol)%JACOBI Verfahren Version 3x = x0;D = diag(A); %diag(A) gibt Vektor der Diagonalelemente zurückr = b - A*x;while (norm(r) >= tol)
x = x + r./D;r = b - A*x;
end
>> tic; x = jacobi3(A,b,zeros(100,1),1e-6); tocElapsed time is 0.021556 seconds.
>> norm(A*x - b)ans =
9.8105e-07
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 79: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/79.jpg)
Jacobi-Verfahren IV
Wir haben ein Problem, wenn das Verfahren nicht konvergiert:Gefahr einer Endlosschleife!function x = jacobi4(A, b, x0, tol, iter)%JACOBI Verfahren Version 4x = x0;D = diag(A); %diag(A) gibt Vektor der Diagonalelemente zurückr = b - A*x;k = 1;while (norm(r) >= tol & k < iter)
x = x + r./D;r = b - A*x;k = k + 1;
endk
>> tic; x = jacobi4(A,b,zeros(100,1),1e-6,500); tock =
483Elapsed time is 0.027932 seconds.
>> norm(A*x - b)ans =
9.8105e-07
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 80: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/80.jpg)
Schleifen III
break: Eine Schleife kann durch break sofort verlassen werdencontinue: Bricht den aktuellen Schleifendurchlauf ab und springtzum Kopf der Schleife.
Bei geschachtelten Schleifen wirken die Befehle nur auf die „innerste“.>> j=1;>> for i=1:2000, epsilon=j; j=j/2;if (j == 0), break; end,end>> epsilon
epsilon =4.9407e-324
>> i
i =1075
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 81: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/81.jpg)
Inhalt
1 Schleifenfor-SchleifenBeispiel: Jacobi-VerfahrenWhile Schleifen
2 Bedingte Ausführungif, elseif, elseTest der Anzahl von Ein- und Ausgangsgrößen
3 Debugging
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 82: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/82.jpg)
Bedingte Ausführung I
Häufig möchte man Codeteile nur dann ausführen, wenn bestimmteBedingungen erfüllt sind. Dies kann man mit if-Abfragen realisieren.
Syntaxif (<logischer Ausdruck 1>)
<Anweisungen 1>elseif (<logischer Ausdruck 2>)
<Anweisungen 2>elseif ...else
<Anweisungen 3>end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 83: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/83.jpg)
Bedingte Ausführung II
function x = foo(x)if (x(1) > x(2))
temp = x(1);x(1) = x(2);x(2) = temp;
elsedisp ’Schon sortiert’
end
>> x=[2,1];>> x = foo(x);
x =1 2
>> x = foo(x)Schon sortiert
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 84: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/84.jpg)
Bedingte Ausführung IIIif-Abfragen werden z. B. verwendet um Voraussetzungen an die Variablenam Anfang einer Funktion zu überprüfen:function fun(x)
if (~isscalar(x))error(’x muss Skalar sein’)
elseif (isnan(x) | isinf(x))error(’x ist keine zulässige Zahl’)
elsedisp(’Juhu’);
end
Hilfreich: is* Funktionen, wie isnan, iscomplex, isvector. . .
>> fun([0,1])
??? Error using ==> fun at 3x muss Skalar sein
>> fun(magic(3))
??? Error using ==> fun at 3x muss Skalar sein
>> fun(1/0)
??? Error using ==> fun at 7x ist keine zulässige Zahl
>> fun(log(-1))Juhu
>> log(-1)ans =
0 + 3.1416i
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 85: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/85.jpg)
Jacobi-Verfahren V
function x = jacobi5(A, b, x0, tol, iter)%JACOBI Verfahren Version 5d = size(A);if (d(1) ~= d(2))
error(’A muss quadratische Matrix sein’);elseif (~isvector(b))
error(’b muss ein Vektor sein’);elseif (length(b) ~= d(1))
error(’Vektor b muss Länge length(A) haben’);elseif (length(x0) ~= d(1))
error(’Vektor x0 muss Länge length(A) haben’);...endx = x0(:);D = diag(A);r = b - A*x;k = 1;while (norm(r) >= tol)
x = x + r./D;r = b - A*x;k = k + 1;if (k >= iter), break; end
end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 86: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/86.jpg)
Funktionen: Verschiedene Argumentanzahl
Wir haben schon gesehen, dass sich manche Funktionenunterschiedlich verhalten, wenn die Anzahl der Eingabe- oderAusgabeparameter unterschiedlich ist.Eine Funktion mit der Deklarationfunction foo(E1, E2, E3)wird auch aufgerufen, wenn weniger als 3 Parameter übergebenwerden. Die übrigen Variablen sind dann nicht definiert.>> x = jacobi(A,b)??? Input argument "x1" is undefined.
Error in ==> jacobi at 10x = x1(:);
Mit nargin kann die Anzahl der übergebenen Argumente abgefragtwerden. Analog nargout.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 87: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/87.jpg)
Jacobi-Verfahren VIfunction x = jacobi6(A, b, x0, tol, iter)%JACOBI Verfahren Version 6d = size(A);if (nargin < 2)
error(’Mindestens A und b müssen übergeben werden’);elseif (d(1) ~= d(2))
error(’A muss quadratische Matrix sein’);...endif (nargin < 5), iter = 1000; endif (nargin < 4), tol = 1e-6; endif (nargin < 3),
x = zeros(length(b),1);else
x = x0(:);endD = diag(A);r = b - A*x;k = 1;while (norm(r) >= tol)
x = x + r./D;r = b - A*x;k = k + 1;if (k >= iter), break; end
endNumerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 88: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/88.jpg)
Jacobi-Verfahren VI
>> x = jacobi6(A,b);>> norm(A*x -b)ans =
9.8105e-07
>> x = jacobi6(A,b, 1e-10);??? Error using ==> jacobi at 13Vektor x muss Länge length(A) haben
>> x = jacobi6(A,b, zeros(100,1), 1e-10);
>> norm(A*x - b)ans =
9.7000e-11
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 89: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/89.jpg)
Inhalt
1 Schleifenfor-SchleifenBeispiel: Jacobi-VerfahrenWhile Schleifen
2 Bedingte Ausführungif, elseif, elseTest der Anzahl von Ein- und Ausgangsgrößen
3 Debugging
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 90: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/90.jpg)
DebuggingIn komplizierten Codes ist es oft nicht einfach, Fehler zu finden. Das wirdeinfacher, wenn man Debug-Werkzeuge benutzt:
Auswahl und recht Maustaste → Evaluate Selection (oder F9) umeinen Teil eines Codes auszuführenBenutzung von Breakpoints
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 91: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/91.jpg)
Theorie 3.1: Inhalt
1 2D-PlotsPlotten von Funktionen mit einer VeränderlichenKonfigurieren der Plots
2 3D-PlotsKurven in 3DPlots bivariater Funktionen in 3D
3 Plots erstellen mit Hilfe der GUI
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 92: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/92.jpg)
Inhalt
1 2D-PlotsPlotten von Funktionen mit einer VeränderlichenKonfigurieren der Plots
2 3D-PlotsKurven in 3DPlots bivariater Funktionen in 3D
3 Plots erstellen mit Hilfe der GUI
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 93: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/93.jpg)
Plotten I
Verwende plot zum Plotten von Punkten im R2 und Kurven ω : R→ R2.
Syntax
plot(x, y) mit x und y Vektoren gleicher Länge:Plottet die Punkte (x(i),y(i)) und verbindet sie mit Strecken.plot(X, Y) mit X und Y Matrizen gleicher Dimension:Plottet jeweils die Spalten von X und Y in verschiedenen Farben, alsojeweils für ein j die Punkte (X(i,j),Y(i,j)) für alle i.plot(x1, y1, x2, y2, ...) == plot([x1, x2, ...], [y1,y2,...]) falls xi und yi Spaltenvektoren sind.plot(x, Y) == plot([x, x, x, ...], Y), wenn xSpaltenvektor und Y Matrix ist.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 94: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/94.jpg)
Plotten II
>> x = -1:0.1:1;>> y = x.*sin(x.^2);>> plot(x,y)
>> y2 = x.^2;>> plot(x, y, x, y2)
>> y2 = x.^2;>> plot([x’, x’], [y’, y2’])
>> y2 = x.^2;>> plot(x, [y’, y2’])
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 95: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/95.jpg)
Plotten III
Das Aussehen der Plots kann durch mannigfaltige Optionen verändertwerden.
Farber Redg Greenb Bluec Cyanm Magentay Yellowk Blackw White
Markero Kreis∗ Stern. Punkt+ Plusx Kreuzs Quadratd Diamant^ Dreieck nach obenv Dreieck nach unten> Dreieck nach rechts< Dreieck nach links
Linienart- durchgezogene Linie-- gestrichelte Linie: gepunktete Linie-. gepunktet und gestrichelt
Die Parameter werden als String hinter die zu plottenden Daten geschrieben,z. B. plot(x,y,’r’,x2,y2,’–b’).Standard sind die Optionen plot(...,’-’,’color’,[0 0.45 0.74]).
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 96: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/96.jpg)
Plotten IV
>> plot(x,y, ’r’, x,y2,’--b’, x,y2, ’om’) >> t=0:0.1:2*pi;>> x=cos(t);>> y=sin(t);>> plot(x,y, ’*’, x,y, ’:’)>> axis equal
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 97: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/97.jpg)
Plotten V
Um die Skalierung der Achsen manuell anzupassen verwende die Befehleaxis, xlim oder ylim.
Syntax
axis([xmin, xmax, ymin, ymax]) skaliert den Bereich, so dass[xmin, ymin]× [xmax , ymax ] sichtbar ist.ylim([ymin ymax]) bzw. xlim([xmin xmax]) skaliert nur die x-bzw. y-Achse.
Hinweis: Für 3-D Plots gibt es auch zlim.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 98: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/98.jpg)
Plotten VIWir betrachten die Funktion
x 7→ 1(x − 1)2 +
3(x − 2)2 .
>> x = linspace(0,3,500);>> plot(x, 1./(x-1).^2 + 3./(x-2).^2)>> grid on
>> ylim([0 50])
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 99: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/99.jpg)
Plotten VII
Normalerweise überschreibt Matlab das aktuelle Fenster bei einem neuenPlot-Befehl. Um einen neuen Plot in dem aktuellen zusätzlich zuerzeugen, verwende den Befehl hold on.
>> x = 0:0.01:0.5;>> plot(x, x.*sin(1./x))
>> x = 0:0.001:0.5;>> hold on;>> plot(x, x.*cos(1./x))
Verwende figure um ein neues Plot-Fenster zu öffnen.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 100: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/100.jpg)
Logarithmische Achsen
Mit semilogx, semilogy und loglog werden Plots mit logarithmischerAchsenskalierung erstellt. Diese werden häufig verwendet umKonvergenzgeschwindigkeiten von Algorithmen besser abzulesen zukönnen.
>> n = 1:1000;>> y = exp(1) - (1+1./n).^n;>> plot(n,y)
>> n = 1:1000;>> y = exp(1) - (1+1./n).^n;>> semilogy(n,y)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 101: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/101.jpg)
fplotMit fplot können schnell algebraische Funktionen geplottet werden. DerUser muss sich im Gegensatz zum plot-Befehl nicht um dieDiskretisierung kümmern.Syntaxfplot(f, [xmin, xmax]) mit f Funktionshandle oder Funktionsstring:Plottet die Funktion f im Intervall [xmin, xmax ].
>> f = @(x) [200*sin(x(:))./x(:), ...x(:).^2];>> fplot(f, [-20, 20])
>> fplot(’w.*sin(w.^2)’, ...[0, 10], ’o’);
Vergleiche auch den Befehl ezplot.Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 102: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/102.jpg)
subplot I
Mit dem Befehl subplot können mehrere Plots in ein Fenster inverschiedene Koordinatensysteme gezeichnet werden.
Syntaxsubplot(n,m,p): Erzeugt beim ersten Aufruf ein Fenster mit n ·mKoordinatensystemen in n Zeilen und m Spalten.Setzt das p-te Koordinatensystem aktiv. Der nächste plot-Befehl zeichnetin dieses Koordinatensystem.>> subplot(2,2,1), fplot(’exp(sqrt(x)*sin(12*x))’,[0 2*pi])>> subplot(2,2,2), plot(0:0.1:10, sin(round(0:0.1:10)), ’--’)>> subplot(2,2,3), fplot(’cos(30*x)/x’,[0.01 1 -15 20], ’-.’)>> subplot(2,2,4), fplot(’[sin(x), cos(2*x), 1/(1+x)]’,[0 5*pi -1.5 1.5])
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 103: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/103.jpg)
subplot II
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 104: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/104.jpg)
Inhalt
1 2D-PlotsPlotten von Funktionen mit einer VeränderlichenKonfigurieren der Plots
2 3D-PlotsKurven in 3DPlots bivariater Funktionen in 3D
3 Plots erstellen mit Hilfe der GUI
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 105: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/105.jpg)
plot3 I
Mit dem Befehl plot3 können Kurven ω : R→ R3 geplottet werden.
Syntax
plot3(x,y,z) mit Vektoren x, y, z: Plottet die Punkte (x(i),y(i), z(i)) für alle i ∈ 1, . . . , length(x) und verbindet siegegebenenfalls.Wichtig: length(x) == length(y) == length(z).plot3(X,Y,Z) mit Matrizen X, Y, Z: Wie plot3(X(:,i),Y(:,i), Z(:,i)) für alle Spalten i der Matrizen in verschiedenenFarben.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 106: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/106.jpg)
plot3 II
>> t = 0:0.01:10*pi;>> plot3(sin(t),cos(t),t)
>> t = (0:0.01:10*pi)’;>> plot3([sin(t),t./(10*pi).*sin(t)],...[cos(t), cos(t)], [t,t])
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 107: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/107.jpg)
meshgrid
Um Funktionen f : R2 → R zu plotten, müssen wir den zu plottendenBereich erst diskretisieren.
(0, 0)
(0, 1)
(0, 2.4)
(0, 3.6)(0, 4)
(0, 0) (1, 0) (2, 0) (3, 0) (4, 0)
(2, 2.4)
(1, 1)
>> x = 0:1:4;>> y = [4, 3.6, 2.4, 1, 0];
>> [X, Y] = meshgrid(x,y)
X =0 1 2 3 40 1 2 3 40 1 2 3 40 1 2 3 40 1 2 3 4
Y =
4.0000 4.0000 4.0000 .3.6000 3.6000 3.6000 .2.4000 2.4000 2.4000 .1.0000 1.0000 1.0000 .
0 0 0 .
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 108: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/108.jpg)
3D - Plots IHaben wir alle Punkte mit meshgrid erzeugt, kann die Funktionanschließend f : R2 → R an jedem Gitterpunkt ausgewertet werden.>> x = -5.5:0.3:5.5; y = -5.5:0.3:5.5;>> [X, Y] = meshgrid(x,y);>> f = @(x,y) sin(sqrt(x.^2+y.^2));>> Z = f(X,Y);
Die Funktion kann dann z. B. mittels des mesh Befehls alsFunktionengebirge geplottet werden:
>> mesh(X,Y,Z);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 109: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/109.jpg)
3D - Plots II
Neben mesh gibt es noch viele weitere Befehle die ein ähnlichesFunktionengebirge liefern, z.B. surf, waterfall, . . . Auch Beleuchtungund Schattenwurf kann eingestellt werden, um die Oberflächenrealistischer erscheinen zu lassen:
>> x = -5.5:0.05:5.5;>> y = -5.5:0.05:5.5;>> [X, Y] = meshgrid(x,y);>> Z = f(X,Y);>> surfl(X,Y,Z, ’light’)>> shading interp
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 110: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/110.jpg)
Inhalt
1 2D-PlotsPlotten von Funktionen mit einer VeränderlichenKonfigurieren der Plots
2 3D-PlotsKurven in 3DPlots bivariater Funktionen in 3D
3 Plots erstellen mit Hilfe der GUI
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 111: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/111.jpg)
Plotten mit der GUI - 1
Plots können nicht nur über Befehle, sondern auch über dieMatlab-Oberfläche verändert werden.Variablen für den Plot im Workspace markieren und Plot aus Katalogauswählen:
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 112: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/112.jpg)
Plotten mit der GUI - 2
Öffnen des Editors um erzeugten Plot nachzubearbeiten:
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 113: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/113.jpg)
Plotten mit der GUI - 3
Anpassen der Formattierung und Code-Generierung:
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 114: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/114.jpg)
Plotten mit der GUI - 4Verwenden des generierten Codes ohne GUI und Mausclicks:
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 115: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/115.jpg)
Theorie 3.2: Inhalt
1 Dünnbesetzte MatrizenMotivationSpeichermodellBeispieleErzeugen von Sparse-MatrizenVergleich voll- und dünnbesetztErhalten dünn besetzter Strukturen
2 Beispiel: Kubische Splines
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 116: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/116.jpg)
Inhalt
1 Dünnbesetzte MatrizenMotivationSpeichermodellBeispieleErzeugen von Sparse-MatrizenVergleich voll- und dünnbesetztErhalten dünn besetzter Strukturen
2 Beispiel: Kubische Splines
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 117: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/117.jpg)
MotivationFür viele Probleme (z.B. bei der Diskretisierung partiellerDifferentialgleichungen, Bestimmung von Koeffizienten bei derInterpolation) erhält man Matrizen, die viele Nullen enthalten.Beispiel: Poissonmatrix
A =
4 −1 0 −1 0 0 0 0 0
−1 4 −1 0 −1 0 0 0 0
0 −1 4 0 0 −1 0 0 0
−1 0 0 4 −1 0 −1 0 0
0 −1 0 −1 4 −1 0 −1 0
0 0 −1 0 −1 4 0 0 −1
0 0 0 −1 0 0 4 −1 0
0 0 0 0 −1 0 −1 4 −1
0 0 0 0 0 −1 0 −1 4
Speicherplatz sparen: nur Nicht-Null-Einträge abspeichernEffizientes Rechnen: Operation mit Null-Einträgen vermeiden
Durch diese Effizienzsteigerungen können Probleme berechnet werden,die ansonsten aufgrund ihrer Größe nicht verarbeitet werden könnten.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 118: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/118.jpg)
Speichermodell von Sparse-Matrizen
Nur von Null verschiedene Einträge werden abgespeichertDer Ort des Eintrags wird durch den Zeilen- und SpaltenindexgekennzeichnetSpeicherplatzbedarf ist ungefähr gleich der Summe von
4 Bytes, um die Anzahl der Einträge zu speichernpro Eintrag 8 Bytes für Spalten- und Zeilenindexpro Eintrag 8 Bytes für den Zahlenwert
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 119: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/119.jpg)
Beispiele für Sparse-Matrizen
A =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
A =
(1,1) 1(2,2) 1(3,3) 1(4,4) 1
B =
2 −1 0 0 0
−1 2 −1 0 0
0 −1 2 −1 0
0 0 −1 2 −1
0 0 0 −1 2
B =
(1,1) 2(2,1) -1(1,2) -1(2,2) 2(3,2) -1(2,3) -1...
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 120: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/120.jpg)
Befehle zum Erzeugen von Sparse-Matrizen
Funktion Beschreibungspeye Dünnbesetzte Einheitsmatrixspones Einträge durch Einsen ersetzenspdiags Erzeugen von Bandmatrizensprand Einträge durch Zufallszahlen ersetzen
Konvertierung von A nach dünn- bzw. vollbesetzt:full(A)
sparse(A)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 121: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/121.jpg)
Beispiel: spdiags
>> n = 5; e = ones(n,1); d = 4*e;>> A = spdiags([-e, d, -e], [-1,0,1], n, n);>> full(A)ans =
4 -1 0 0 0-1 4 -1 0 00 -1 4 -1 00 0 -1 4 -10 0 0 -1 4
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 122: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/122.jpg)
Beispiel: sparse
sparse(A) konvertiert A von vollbesetzt nach dünnbesetzt.A=sparse(I,J,V) erzeugt eine Matrix A mit Dimensionenmax(I)×max(J), so dass
A(I(k),J(k))=V(k).Die Einträge von V mit gleichen Indizes werden summiert.Achtung bei Dimensionen!
>> I = [1 8 9 3 5 4 1 1]’;>> J = [5 1 3 2 9 2 9 5]’;>> V = [10 1 12 21 3 3 8 2]’;>> A = sparse(I,J,V);>> A
A =
(8,1) 1(3,2) 21(4,2) 3(9,3) 12(1,5) 12(1,9) 8(5,9) 3
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 123: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/123.jpg)
Vergleich Speicherplatzbedarf
0 2 4 6 8 10 12 14 16 18 200
500
1000
1500
2000
2500
3000
3500
n: Dimension der n x n Matrix
Spe
iche
rpla
tzbe
darf
in B
ytes
Speicherplatzbedarf einer Tridiagonalmatrix
schwach besetztvoll besetzt
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 124: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/124.jpg)
Vergleich Rechengeschwindigkeit
0 20 40 60 80 100 120 140 160 180 2000
0.002
0.004
0.006
0.008
0.01
0.012
n: Dimension der n x n Matrix
gem
esse
ne G
esch
win
digk
eit a
uf P
4 in
[s]
Geschwindigkeit Lösen eines Tridiagonalsystems mit \
schwach besetztvoll besetzt
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 125: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/125.jpg)
Erhalten dünn besetzter StrukturenIn der Regel ist die Inverse einer dünn besetzten Matrix nicht mehrdünn besetzt.Daher: Oft besser, Inverse nicht explizit zu bestimmen. Stattdessenkann man oft ein lineares Gleichungssystem (z.B. mit dem \Operator) lösen.Beispiel: Matrixstruktur CSOR = D + L für Poisson-Matrix
0 10 20 30 40 50 60 70 80 90 100
0
10
20
30
40
50
60
70
80
90
100
nz = 280
CSOR
(ω = 1)
0 10 20 30 40 50 60 70 80 90 100
0
10
20
30
40
50
60
70
80
90
100
nz = 3025
C−1SOR
(ω = 1)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 126: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/126.jpg)
Inhalt
1 Dünnbesetzte MatrizenMotivationSpeichermodellBeispieleErzeugen von Sparse-MatrizenVergleich voll- und dünnbesetztErhalten dünn besetzter Strukturen
2 Beispiel: Kubische Splines
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 127: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/127.jpg)
InterpolationsaufgabeGegeben: Paare (xi , yi) ∈ R× R, i = 0, . . . , n mit x0 < x1 < . . . < xnder zu interpolierenden Werten.Gesucht: Funktion S : R→ R mit S(xi) = yi , i = 0, . . . , n, aus einemvorgegebenen Funktionenraum, z.B. zweimal stetig differenzierbar.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 128: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/128.jpg)
Kubische Splineinterpolation
Idee: Stelle Funktion S auf jedem Teilintervall [xi , xi+1] als kubischesPolynom dar:
Pi(x) = αi + βi(x − xi) + γi(x − xi)2 + δi(x − xi)
3.
Wähle die Koeffizienten (αi , βi , γi , δi) so, dass Interpolationsaufgabegelöst wird und gesamte Funktion S zweimal stetig differenzierbar ist.
MomentenmethodeMomente: Mi = S ′′(xi) = P ′′i (xi) = P ′′i−1(xi)Koeffizienten (hi+1 = xi+1 − xi):
αi = yi , βi =yi+1 − yi
hi+1− 2Mi + Mi+1
6 hi+1
γi =Mi2 δi =
Mi+1 −Mi6hi+1
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 129: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/129.jpg)
Berechnung der MomenteDie Momente M sind Lösung des linearen Gleichungssystems
2 λ0µ1 2 λ1
µ2 2 λ2. . . . . . . . .
µn−1 2 λn−1µn 2
M0M1...
Mn−1Mn
=
d0d1...
dn−1dn
(1)
mit (j = 1, . . . , n − 1)
λj =hj
hj + hj−1µj = 1− λj
dj =6
hj + hj−1
(yj+1 − yj
hj− yj − yj−1
hj−1
).
Für den natürlichen Spline setzt man noch
λ0 = d0 = dn = µn = 0.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 130: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/130.jpg)
Matlab Code
function [ P ] = kspline( x, y )n = length(x);jj = 1:n-1; j = 2:n-1;h = [x(jj+1)-x(jj)];lambda = [0, h(j+1)./(h(j)+h(j+1))];mu = [1-lambda(j), 0];d = [0, (6./(h(j)+h(j+1))).*((y(j+1)-y(j))./h(j+1) ...
- (y(j)-y(j-1))./h(j)), 0];A = 2*eye(n) + diag(lambda, 1) + diag(mu, -1);M = (A \ d’)’;alpha = y(jj); gamma = M(jj)/2;beta = (y(jj+1)-y(jj))./h(jj+1) - h(jj+1).*(2*M(jj)+M(jj+1))/6;delta = (M(jj+1)-M(jj))./(6*h(jj+1));P = [alpha’, beta’, gamma’, delta’];
end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 131: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/131.jpg)
Matlab Code
Aus dicht mach dünn!function [ P ] = kspline( x, y )
n = length(x);jj = 1:n-1; j = 2:n-1;h = [x(jj+1)-x(jj)];lambda = [0, h(j+1)./(h(j)+h(j+1))];mu = [1-lambda(j), 0];d = [0, (6./(h(j)+h(j+1))).*((y(j+1)-y(j))./h(j+1) ...
- (y(j)-y(j-1))./h(j)), 0];A = 2*speye(n) + spdiags([[lambda, 0]’, [mu, 0]’], [1, -1], n, n);M = (A \ d’)’;alpha = y(jj); gamma = M(jj)/2;beta = (y(jj+1)-y(jj))./h(jj+1) - h(jj+1).*(2*M(jj)+M(jj+1))/6;delta = (M(jj+1)-M(jj))./(6*h(jj+1));P = [alpha’, beta’, gamma’, delta’];
end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 132: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/132.jpg)
Laufzeiten
A vollbesetzt
n Zeit (1000 Ausführungen) Speicher100 0.79sec 93kB200 2.57sec 342kB400 32.00sec 1309kB800 138.00sec 5118kB1600 570.00sec 20237kB
A dünnbesetzt
n Zeit (A dünn) Speicher (A dünn)100 0.87sec 17kB200 1.33sec 34kB400 2.44sec 68kB800 4.85sec 137kB
1600 9.64sec 275kB
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 133: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/133.jpg)
Theorie 4.1: Inhalt
1 Organisation von DatenStrukturen (structures)Cell Arrays
2 Nützliche WerkzeugeProfilerMLINTDependency Report
3 Weitere nützliche Matlab-Befehle
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 134: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/134.jpg)
Inhalt
1 Organisation von DatenStrukturen (structures)Cell Arrays
2 Nützliche WerkzeugeProfilerMLINTDependency Report
3 Weitere nützliche Matlab-Befehle
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 135: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/135.jpg)
Structures
Einfaches Beispiel:
buch||__ .autor ______ ’Barry W. Boehm’||__ .titel ______ ’Software Engineering Economics’||__ .preis ______ 89.00||__ .jahr _______ 1981
Daten beliebiger Art können innerhalb einer Struktur gespeichert werden.
Vorteile:sinnvoll geordnete DatenZugriff mit konkreter Bezeichnung anstelle von Indizesmultidimensionale Struktur möglich
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 136: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/136.jpg)
Aufbau einer Struktur und Zugriff
direkt mit Zuweisungen:>> buch.autor = ’Barry W. Boehm’;>> buch.titel = ’Software Engineering Economics’;>> buch.preis = 89.00;>> buch.jahr = 1981;
mit der struct-Funktion:>> buch = struct(’autor’,’Barry W. Boehm’, ...
’titel’,’Software Engineering Economics’, ...’preis’, 89.00, ’jahr’, 1981);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 137: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/137.jpg)
Aufbau einer Struktur und Zugriff
Zugriff:>> buchbuch =
autor: ’Barry W. Boehm’titel: ’Software Engineering Economics’preis: 89jahr: 1981
>> buch.jahrans =
1981
Anfügen weiterer Elemente: struct array (Index hinzufügen)>> buch(2).autor = ’Steve McConnel’>> buch(2).title = ’Code Complete’>> ...
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 138: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/138.jpg)
Weitere Befehle zu Strukturen
Funktion Beispiel Beschreibung
fieldnames
>> fieldnames(buch);ans = ’autor’
’titel’’preis’’jahr’
alle Feldnamen holen
getfield>> getfield(buch(2),
’titel’)ans = Code Complete
Inhalt eines Feldes holen
setfield>> setfield(buch(2),
’preis’,59.90) Feldinhalt setzen
isstruct >> isstruct(buch) wahr (= 1) für Struktur
isfield >> isfield(buch,’titel’) wahr (= 1) für Feld
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 139: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/139.jpg)
Weitere Befehle zu Strukturen
Funktion Beispiel Beschreibung
rmfield
>> rmfield(buch,’titel’)ans =1x2 struct array with fields:
autorpreisjahr
Feld löschen
deal
>> [a,b] = deal(buch.titel)a =Software Engineering Economicsb =Code Complete
Feldinhalte inmehrere Varia-blenauslesen
struct2cell >> b_c = struct2cell(buch);Struktur in einCell-Arrayumwandeln
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 140: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/140.jpg)
Besonderheiten bei Strukturen
Vereinfachte Syntax, um über alle Felder einer Struktur zu operieren:
Feld in eckige Klammern einschließen, z.B.:>> total = sum([buch.preis]);
Dies entspricht einer durch Kommata getrennten Liste:>> total = sum([buch(1).preis, buch(2).preis, ...]);
Zwei Formen der Datenorganisation möglich, entweder ebenen- oderelementweise (siehe folgende Folien).
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 141: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/141.jpg)
Datenorganisation: Ebene vs. Einzel-Element
In einem Bild werden pro Pixel die rot/grün/blau-Werte gespeichert.
0 20 10 15 ...10 0 20 12 ... 2 12 34 12 ... . . .
20 24 44 54 ...14 30 2 0 ...54 27 1 2 ... . . .
14 30 2 0 ... 2 12 34 12 ... 0 20 10 15 ... . . .
AA
.r
.g
.b
A.r(1, 2) = 20
B(1,1)
.r 00
.g 20
.b 14
B(2,1)
.r 10
.g 14
.b 22
.r
.g
.b
B(1,2)
.r 20
.g 24
.b 30
.r
.g
.b
B(2,2)
.r 00
.g 30
.b 12
.r 00
.g
.b
...
...
...
..
..
..
..
..
..
BB
B.r(1, 2) = 20
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 142: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/142.jpg)
Beispiel für unterschiedliche Datenorganisation
1) Teilbild holen:
Ebenen-Organisation>> r_sub = A.r(1:10,1:10);>> g_sub = A.g(1:10,1:10);>> b_sub = A.b(1:10,1:10);
Einzel-Element-Organisation>> sub = B(1:10,1:10);
2) Gesamte Farbebene holen:
Ebenen-Organisation
>> r_ebene = A.r;
Einzel-Element-Organisation>> r_ebene = zeros(100,100);>> for k = 1:(100*100)
r_ebene(k) = B(k).r;end;
Also: Daten sollte man immer so organisieren, dass es für die amhäufigsten benötigten Operationen günstig ist.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 143: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/143.jpg)
Geschachtelte Strukturen
Strukturen können beliebig geschachtelt werden.>> A = struct(’name’,’Hans’,
’zeiten’, [14,15,16; 15.3,14.8,13.6],’adresse’, struct(’strasse’,’Hauptstr. 38’,’stadt’,’Berlin’))
>> A(2).name = ’Max’;>> A(2).zeiten = [14,15,16; 15.2,14.6,13.8];>> A(2).adresse.strasse = ’Albweg 3’;>> A(2).adresse.stadt = ’Muenchen’;
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 144: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/144.jpg)
Geschachtelte Strukturen
A|__ A(1) _____ .name ______ Hans| || |__ .zeiten ____ [ 14 15 16 ]| | [ 15.3 14.8 13.6]| || |__ .adresse ___ .strasse __ Hauptstr. 38| || |_ .stadt ____ Berlin|||__ A(2) _____ .name ______ Max
||__ .zeiten ____ [ 14 15 16 ]| [ 15.2 14.6 13.8]||__ .adresse ___ .strasse __ Albweg 3
||_ .stadt ____ Muenchen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 145: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/145.jpg)
Cell Arrays
ein Cell Array kann mehrere Matlab-Felder enthalten, z.B:
cell (1,1)
1 2 34 5 67 8 9
cell (1,2)
’Hello world!’
cell (2,1)
[1.25 3.75 0.34]
cell (2,2)
25
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 146: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/146.jpg)
Aufbau eines Cell Arrays und Zugriff
Möglichkeit 1 – Cell Indexing:>> A(1,1) = {[1 2 3; 4 5 6; 7 8 9]};>> A(1,2) = {’Hello world!’};>> A(2,1) = {[1.25 3.75 0.34]};>> A(2,2) = {25};
Möglichkeit 2 – Content Indexing:>> A{1,1} = [1 2 3; 4 5 6; 7 8 9];>> A{1,2} = ’Hello world!’;>> A{2,1} = [1.25 3.75 0.34];>> A{2,2} = 25;
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 147: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/147.jpg)
Aufbau eines Cell Arrays und Zugriff
Beispiele für Zugriff:
>> A(2,2)ans = [25]
>> A(2,2)+5??? Error using ==> +Function ’+’ notdefined for variablesof class ’cell’.
>> A{2,2}ans = 25
>> A{2,2}+5ans = 30
>> A{1,2}ans =Hello world!
>> A{1,1}(1,1)ans = 1
>> A{:,1}ans =
1 2 34 5 67 8 9
ans =1.250 3.750 0.340
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 148: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/148.jpg)
Weitere Befehle zu Cell-Arrays
Zellen löschen mit eckigenKlammern, z.B.:>> A(2,2) = []>> A(:,2) = []
Dimensionen des Cell Arraysumformen:>> B = reshape(A,4,1);
Speicher für neues Cell Arrayreservieren:>> C = cell(5,3);
Struktur des Cell Arraysgraphisch anzeigen:>> cellplot(A,’legend’)
double
char
sparse
structure
other
Hello world!
25
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 149: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/149.jpg)
Weitere Befehle zu Cell-Arrays
Funktion Beschreibungcell2struct Cell Array in Struktur-Feld umwandelncelldisp gesamtes Cell-Array anzeigencellfun eine Funktion auf jede Zelle eines Cell Arrays anwendendeal Cell Array in mehrere Variablen ausleseniscell wahr (= 1) für ein Cell Array
Sonstigesgesamte Structures können in einer Zelle abgespeichert werdenCell Arrays können beliebig tief geschachtelt werden(Zugriff dann z.B. mit A{2,3}{1,2}{1,5})
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 150: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/150.jpg)
Inhalt
1 Organisation von DatenStrukturen (structures)Cell Arrays
2 Nützliche WerkzeugeProfilerMLINTDependency Report
3 Weitere nützliche Matlab-Befehle
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 151: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/151.jpg)
Profiler
Detaillierte Rechenzeitanalyse: Wieviel Zeit wurde für welche Zeileoder Funktion verbraucht?Auflistung geordnet nach RelevanzGut geeignet zum Auffinden von EffizienzproblemenFalls optimiert werden soll, wo wäre Optimierung sinnvoll?Vorgehen:
1 Profile Aufzeichnung starten mit profile on2 m-File aufrufen3 Profile report ansehen mit profile viewer.4 Optionen: Abspeichern von Berichten, Detail-Level setzen (z.B.
interne Funktionen in Laufzeitmessung einschließen), . . .
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 152: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/152.jpg)
Beispiel: Profiler, Zusammenfassung
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 153: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/153.jpg)
Beispiel: Profiler, Details
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 154: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/154.jpg)
MLINT Code Checker
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 155: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/155.jpg)
Dependency Report
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 156: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/156.jpg)
Inhalt
1 Organisation von DatenStrukturen (structures)Cell Arrays
2 Nützliche WerkzeugeProfilerMLINTDependency Report
3 Weitere nützliche Matlab-Befehle
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 157: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/157.jpg)
Berechnung von EigenwerteDer Befehl eig berechnet die Eigenwerte einer Matrix.
lambda = eig(A): Eigenwerte von A im Spaltenvektor lambda.[V,Lambda] = eig(A): Eigenwerte und Eigenvektoren, mit LambdaDiagonalmatrix (A*V =V*D).[V,Lambda] = eig(A,B): verallgemeinerte Eigenwerte undEigenvektoren (A*V = B*V*D).
>> A = [2 0 0 ; 0 -3 0; 0 0 5];>> eig(A)
ans =
-325
>> [V,D] = eig(A)
V =
0 1 01 0 00 0 1
D =
-3 0 00 2 00 0 5
Hinweis: Siehe auch eigs.Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 158: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/158.jpg)
Fourier-Transformation
fft berechnet die schnelle Fourier-Transformation (Fast FourierTransform) einer Funktion.Inverse Fourier-Transformation mit ifft.
0 0.2 0.4 0.6 0.8 1
Zeit
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Sig
na
l
-40 -30 -20 -10 0 10 20 30 40
Frequenz
0
0.1
0.2
0.3
0.4
0.5
0.6
Sp
ektr
um
g = @(t)sin(20*pi*t)+cos(10*pi*t);N=51;t = linspace(0,1,51);gvals = g(t);
G = fft(gvals);G = G/N;G = abs(G);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 159: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/159.jpg)
Teil 4.2: Inhalt
1 Grundbegriffe objektorientierter ProgrammierungKlassen, Attribute und ObjekteAbstraktion und Schnittstellen
2 Objektorientierung in MatlabFunktionsumfangMatlab-Datentypen und KlassenhierarchieUnterschiede zu C++/JavaEntwerfen eigener KlassenBeispiel 1: eine Polynom-KlasseBeispiel 2: Aktienkurs-AnalyseVererbung
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 160: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/160.jpg)
Inhalt
1 Grundbegriffe objektorientierter ProgrammierungKlassen, Attribute und ObjekteAbstraktion und Schnittstellen
2 Objektorientierung in MatlabFunktionsumfangMatlab-Datentypen und KlassenhierarchieUnterschiede zu C++/JavaEntwerfen eigener KlassenBeispiel 1: eine Polynom-KlasseBeispiel 2: Aktienkurs-AnalyseVererbung
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 161: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/161.jpg)
Grundbegriffe objektorientierter Programmierung
Bei komplexen Problemen kann es sinnvoll sein objektorientierteProgrammierung (OOP) einzusetzen um die Komplexität einfacherbeherrschbar zu machen.
Grundideen:
System wird durch das Zusammenspiel von Objekten beschriebenObjekten sind Attribute (Eigenschaften) und Methoden zugeordnetJedes Objekt ist in der Lage mit anderen Objekten zu kommunizierenDas Konzept einer Klasse fasst Objekte aufgrund ähnlicherEigenschaften zusammen.Ein Objekt wird im Programmcode als Instanz einer Klasse definiert.
Die wohl bekanntesten objektorientierten Sprachen sind C++ und Java.Allerdings stellt auch MATLAB einige Konzepte der OOP bereit.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 162: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/162.jpg)
Klassen, Attribute und Objekte
Um den Unterschied zwischen Klasse und Objekt zu verdeutlichennehmen wir als Beispiel ein einfaches Autoquartett.
Klasse: AutoAttribute:
Preis (EUR)Hubraum (ccm)Leistung (PS)Von 0 auf 100 (s)Geschwindigkeit (km/h)Verbrauch (l)
Objekt der Klasse Auto: Porsche GT 3Preis (EUR): 121.100Hubraum (ccm): 3600Leistung (PS): 381Von 0 auf 100 (s): 4,4Geschwindigkeit (km/h): 306Verbrauch (l): 9,8
Das Autoquartett ist nun, abstrakt vom Standpunkt der Daten-verarbeitung aus gesprochen, eine Menge von Objekten der Klasse Auto.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 163: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/163.jpg)
Klassen und Methoden
Das Konzept der Klasse beinhaltet mehr als eine Struktur zur Verwaltungzusammengehöriger Daten. Vielmehr dient es der Abstraktion:
Wir haben eine gewisse Abstraktion bereits kennen gelernt:
BeispielWenn wir das Unterprogramm sin(x) aufrufen, dann erwarten wir, dasses uns den Sinus berechnet. Wie, das ist uns in der Regel egal.
Im Prinzip schafft die OOP lediglich eine weitere Abstraktionsebene:den Benutzer interessiert es nicht, wie die Daten abgelegt werden(z.B. ob die Leistung intern in PS oder kW gespeichert wird)Objekte kommunizieren über definierte Schnittstellen in Formbereitgestellter Methoden.Programme können mit Objekten arbeiten, ohne über die exakteinterne Realisierung Bescheid zu wissen!
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 164: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/164.jpg)
Inhalt
1 Grundbegriffe objektorientierter ProgrammierungKlassen, Attribute und ObjekteAbstraktion und Schnittstellen
2 Objektorientierung in MatlabFunktionsumfangMatlab-Datentypen und KlassenhierarchieUnterschiede zu C++/JavaEntwerfen eigener KlassenBeispiel 1: eine Polynom-KlasseBeispiel 2: Aktienkurs-AnalyseVererbung
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 165: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/165.jpg)
OOP in MATLAB: Funktionsumfang
Überladen von Funktionen und OperatorenKapselung von Daten und Methoden:
Objekteigenschaften nicht sichtbar von KommandozeileObjektvariablen nur änderbar über Klassenfunktionen
Vererbung:Vererbung von Variablen und Funktioneneinfache oder mehrfache Vererbung möglicheine oder mehrere Generationen
Aggregation (Zusammenfassen von Objekten)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 166: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/166.jpg)
Matlab-Datentypen und Klassenhierarchie
array
numeric char cell struct
double
sparse
int8 uint8
int16 uint16
int32 uint32
single
user class
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 167: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/167.jpg)
Unterschiede zu OOP in C++/Java
Die neuen Klassen werden während der Laufzeit erzeugt(Matlab ist ein Interpreter, kein Compiler)Es gibt keine Destruktoren in Matlab, stattdessen muss man dieclear-Funktion verwendenVererbung wird durch Aufruf der class-Funktion mit Parametern realisiertWeitere Einschränkungen gegenüber C++/Java:
Es gibt keine abstrakten Klassen, virtuelle Vererbung, o.ä.Es gibt keine Interfaces (Java)Es gibt keinen “scoping”-Operator (:: in C++)Es gibt keine Templates (C++)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 168: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/168.jpg)
Entwerfen eigener Klassen
Klassenverzeichnis erzeugenName: @classnameenthält alle zu dieser Klasse gehörenden m-Files (Methoden)
Hilfsfunktionen und private Methodenm-Files, die nicht direkt aufgerufen werden sollen kommen in dasprivate-Verzeichnis: @classname/privateWenn das Klassenobjekt übergeben wird, spricht man von “privatemethods”, sonst von “helper functions”
Objekte erzeugendurch Aufruf des Konstruktors (gleicher Name wie die Klasse)Übergeben von Initialisierungsparametern möglichBeispiel: p = polynom([1 0 -2 -5])
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 169: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/169.jpg)
Entwerfen eigener Klassen
Aufruf einer zu einem Objekt gehörenden MethodeSyntax:[out1,out2,...] = methodname(object,arg1,arg2,...)Der erste Parameter muss das Objekt enthalten, dann folgen dieArgumente.Beispiel: d = evaluate(p,3);
Neues Klassenverzeichnis zum Matlab-Suchpfad hinzufügenz.B.: die Klasse polynom befindet sich in/my_classes/@polynom (unix)c:\my_classes\@polynom (windows)dann Hinzufügen zum Matlab-Suchpfad mit addpath:>> addpath /my_classes (unix)>> addpath c:\my_classes (windows)
Überprüfen mit>> path
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 170: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/170.jpg)
Methoden der Basis-Klasse
Ziel: Neue Klasse dem Standard-Verhalten von Matlab anpassen.
Methode BeschreibungKonstruktor der Klasse Erzeugt ein Objekt der Klasse
display
Wird von Matlab aufgerufen, wenn der In-halt eines Objekts angezeigt wird (z.B. beiEingabe eines Ausdrucks ohne abschließen-den Strichpunkt)
set und get Setzen/Auslesung von Attributen der Klassesubsref und subsasgn Ermöglicht Verwendung von Indizesend Unterstützung der end-Syntax bei Indizessubsindex Wird aufgerufen, falls Objekte zur Indizierung
verwendet werden; z.B. array(A) mit A Objekt
Konverter, z.B.double oder char
Konvertieren von Objekten in Matlab-Datentypen
Funktionen & Ope-ratoren
Jeder Operator hat zugehörige Funktion, dieüberladen werden kann (z.B. plus(a,b)).
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 171: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/171.jpg)
Beispiel 1: Die Polynom-Klasse
Designentscheidungen für die Klasse polynom:Daten:
lediglich einen Zeilenvektor c mit den Koeffizienten des PolynomsMethoden:
Der Konstruktor zum Erzeugen neuer PolynomeZwei Konverter: nach double und nach charDie display-Methode zum einfachen AnzeigenIndizes-Funktionalität (subsref) (hier nicht behandelt)überladene +, * Operatoren (weitere könnten leicht hinzugefügtwerden)überladene polyval- und diff- Funktionen (weitere könnten leichthinzugefügt werden)
Das folgende Code-Beispiel ist entnommen aus der Matlab-Anleitung.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 172: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/172.jpg)
Konstruktor: @polynom/polynom.m
function p = polynom(a)%POLYNOM Polynomial class constructor.% p = POLYNOM(v) creates a polynomial object% from the vector v, containing the coefficients% of descending powers of x.
if nargin == 0p.c = [];p = class(p,’polynom’);
elseif isa(a,’polynom’)p = a;
elsep.c = a(:).’;p = class(p,’polynom’);
end
Der Konstruktor könnte gleichzeitig auch die Eingaben prüfen um dieIntegrität der Daten sicher zu stellen. Zum Beispiel könnte man hierverhindern, dass der Vektor a die Werte NaN oder inf enthält und eineentsprechende Fehlermeldung ausgeben.
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 173: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/173.jpg)
double-Konverter: @polynom/double.m
function c = double(p)% POLYNOM/DOUBLE Convert polynom object to coefficient vector.% c = DOUBLE(p) converts a polynomial object to the vector c% containing the coefficients of descending powers of x.
c = p.c;
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 174: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/174.jpg)
char-Konverter: @polynom/char.mfunction s = char(p)% POLYNOM/CHAR% CHAR(p) is the string representation of p.cif all(p.c == 0)
s = ’0’;else
d = length(p.c) - 1;s = [];for a = p.c;
if a ~= 0;if ~isempty(s)
if a > 0s = [s ’ + ’];
elses = [s ’ - ’]; a = -a;
endendif a ~= 1 | d == 0
s = [s num2str(a)];if d > 0
s = [s ’*’];end
end%...
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 175: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/175.jpg)
char-Konverter: @polynom/char.m
%...if d >= 2
s = [s ’x^’ int2str(d)];elseif d == 1
s = [s ’x’];end
endd = d - 1;
endend
Beispiel:>> p = polynom([1 0 -2 -5]);>> char(p)ans = x^3 - 2*x - 5
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 176: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/176.jpg)
dispay-Methode: @polynom/display.m
function display(p)% POLYNOM/DISPLAY Command window display of a polynom
disp(’ ’);disp([inputname(1),’ = ’])disp(’ ’);disp([’ ’ char(p)])disp(’ ’);
Beispiel:>> p = polynom([1 0 -2 -5]);>> pp =
x^3 - 2*x - 5
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 177: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/177.jpg)
+ Operator: @polynom/plus.m
function r = plus(p,q)% POLYNOM/PLUS Implement p + q for polynoms.
% nach Polynom konvertieren falls nötigp = polynom(p);q = polynom(q);
% Laenge der Vektoren anpassenk = length(q.c) - length(p.c);r = polynom([zeros(1,k) p.c] + [zeros(1,-k) q.c]);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 178: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/178.jpg)
* Operator: @polynom/mtimes.m
function r = mtimes(p,q)% POLYNOM/MTIMES Implement p * q for polynoms.
p = polynom(p);q = polynom(q);r = polynom(conv(p.c,q.c));
Beispiele:>> p = polynom([1 0 -2 -5]);>> q = p+1q =
x^3 - 2*x - 4>> r = p*qr =
x^6 - 4*x^4 - 9*x^3 + 4*x^2 + 18*x + 20
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 179: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/179.jpg)
polyval-Methode: @polynom/polyval.m
function y = polyval(p,x)% POLYNOM/POLYVAL POLYVAL(p,x) evaluates p at the points x.y = 0;for a = p.c
y = y.*x + a;end
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 180: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/180.jpg)
diff-Methode: @polynom/diff.m
function q = diff(p)% POLYNOM/DIFF DIFF(p) is the derivative of the polynom p.c = p.c;d = length(c) - 1; % degreeq = polynom(p.c(1:d).*(d:-1:1));
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 181: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/181.jpg)
Beispiel 2: Aktienkursanalyse
Designentscheidungen für die Klasse stock:Daten: Name der Aktie und Struktur mit Daten:
’7/20/1999’’7/21/1999’’7/24/1999’’7/25/1999’...
14.4515.2115.6314.87...
stock
.name
.data
’Deutsche Telekom’
.open
.close
.hi
.lo
.volume
.date
Methoden:Der Konstruktor zum Erzeugen der stock-ObjekteMethode loaddata zum Laden von DatensätzenÜberladene display und plot-Funktionen
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 182: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/182.jpg)
Konstruktor: @stock/stock.m
function s = stock(name)% STOCK class construction% s = STOCK(name) creates a stock object of with% the specified name.s.data = struct([]);if nargin == 0
s.name = ’none’;else
s.name = name;ends = class(s,’stock’);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 183: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/183.jpg)
loaddata-Methode: @stock/loaddata.m
function s = loaddata(a, filename)% LOADDATA load stock data from specified filename% LOADDATA(stock, filename)% Example:% mystock = stock(’SellIt Inc.’);% loaddata(mystock, ’sellit.txt’);% Required data file format:% <date> <open> <hi> <lo> <close> <volume>% 02/14/2000 65.4 66.95 65.25 66.95 1914379% 02/15/2000 66.2 67.63 66.1 66.29 2164369% ...
a.data = struct(’date’,’’,’open’,0,’close’,0,’hi’,0,’lo’,0);[a.data.date, a.data.open, a.data.hi, ...
a.data.lo, a.data.close, a.data.volume] = ...textread(filename, ’%s %n %n %n %n %n’, ...
’commentstyle’, ’matlab’);s = a;
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 184: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/184.jpg)
Überladene display-Methode: @stock/display.m
function display(stock)% STOCK/DISPLAY Command window display of a stockif ~isempty(inputname(1))
disp(’ ’); disp([inputname(1),’ = ’]); disp(’ ’);enddisp([’ ’ stock.name ])disp([’ last quote from ’ cell2mat(stock.data.date(end)) ]);open = stock.data.open(end);close = stock.data.close(end);close_old = stock.data.close(end-1);disp([’ open: ’ num2str(open) ]);disp([’ close: ’ num2str(close) ]);disp([’ high: ’ num2str(stock.data.hi(end)) ]);disp([’ low: ’ num2str(stock.data.lo(end)) ]);disp([’ delta prev day (%): ’ num2str((close-close_old)/...
close_old*100,2) ’%’]);disp(’ ’);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 185: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/185.jpg)
Überladene plot-Methode: @stock/plot.mfunction plot(s, startdate, enddate)% PLOT Draw a line graph of a stock% PLOT(stock, startdate, enddate) shows% the stock for the specified date range.% (startdate and enddate are optional)
if nargin < 2start_index = 1;
elsestart_index = min(find(datenum(s.data.date)>=datenum(startdate)));
endif nargin < 3
end_index = length(s.data.date);else
end_index = max(find(...datenum(s.data.date)<=datenum(enddate)));
endplot(datenum(s.data.date(start_index:end_index)),...
s.data.close(start_index:end_index),’r-’);title([s.name ’ from ’ ...
cell2mat(s.data.date(start_index)) ’ to ’ ...cell2mat(s.data.date(end_index))],’FontSize’,14);
datetick(’x’);ylabel(’Closing stock price’);grid;
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 186: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/186.jpg)
Beispiel für Verwendung der stock-Klasse:
>> s1 = stock(’Daimler-Chrysler’);>> s2 = stock(’Deutsche Telekom’);>> s1 = loaddata(s1,’data/daimler-chrysler.txt’);>> s2 = loaddata(s2,’data/telekom.txt’);>> s2ans =
Deutsche Telekomlast quote from 04/19/2002
open: 16.86close: 17.05high: 17.13low: 16.76
delta prev day (%): 0.83%>> subplot(2,1,1);>> plot(s1,’07/01/2000’,’09/30/2000’);>> subplot(2,1,2);>> plot(s2);
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 187: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/187.jpg)
Beispiel für Verwendung der stock-Klasse:
Jul Aug Sep Oct50
52
54
56
58
60
62
64
Daimler−Chrysler from 07/03/2000 to 09/29/2000
Clo
sin
g s
tock p
rice
1999 2000 2001 2002 20030
20
40
60
80
100
120
Deutsche Telekom from 02/02/1999 to 04/19/2002
Clo
sin
g s
tock p
rice
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 188: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/188.jpg)
Vererbung
Die Objektorientierung erlaubt ein hohes Maß an Wiederverwendbarkeit undWartbarkeit von Code. Einfaches Beispiel:
classdef Rectangle < handleproperties (SetAccess = private)
length;width;
endmethods
function obj = Rectangle(len, wid)obj.length = len;obj.width = wid;
endfunction a = diagonal(obj)
a = sqrt(obj.length^2 + obj.width^2);end%... many additional functions
endend
(Achtung: wir verwenden hier eine kompaktere Art der Klassendefinition!)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 189: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/189.jpg)
Vererbung
Für Quadrate ist die Implementierung von diagonal effizienter machbar. Wirerben also von rectangle und überladen diese Methode:
classdef square < rectanglemethods
function obj=square(width)obj = obj@rectangle(width, width);
endfunction a = diagonal(obj)
a = 1.414213562373095*obj.length;end
endend
>> r = rectangle(2,2); s = square(2);>> r.diagonal - s.diagonal
ans =
4.4409e-16
(in diesem Fall sparen wir uns die Wurzel und brauchen dafür lediglich eineMethode neu zu implementieren anstelle der ganzen Klasse.)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)
![Page 190: Theorie 1.1: Inhalt - · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische](https://reader030.vdocuments.mx/reader030/viewer/2022040700/5d4f802f88c99338098b7393/html5/thumbnails/190.jpg)
Vererbung
Abschließende Kommentare zur Vererbung:Wir erben die Implementierung und Schnittstellen der Basisklasse.Die abgeleitete Klasse ergänzt die Funktionalität der Basisklasse oderschränkt diese ein.Falls die Funktionalität der Basisklasse ergänzt wird, profitieren wir davonauch in der abgeleiteten Klasse.Richtig eingesetzt erlaubt die Vererbung ein besseres Verständnis desCodes für den Autor und Außenstehende und damit eine verbesserteWartbarkeit.Einfachere Codes sind zwar oft die besseren Codes, aber zwanghafterEinsatz von Vererbung macht Codes nicht unbedingt einfacher.
Sehr grobe Faustregel für sinnvolle Vererbung:prüfen Sie immer, ob eine ist ein-Beziehung vorliegt...
Gute Vererbung: stummfilm < film (ein Stummfilm ist ein Film)Schlechte Vererbung: film < videokassette (... enthält einen Film)
Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)