190
Theorie 1.1: Inhalt 1 Einführung Motivation Grundlagen 2 Vektoren und Matrizen Erzeugen von Matrizen Doppelpunkt Operator Operatoren Beispiel: Auswerten von Polynomen Numerische Mathematik M2 z.T. basierend auf Boris von Loesch Einführung in die Programmierung (MA8003)

Theorie 1.1: Inhalt -  · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische

  • Upload
    dinhdan

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Theorie 1.1: Inhalt -  · Inhalt 1 Einführung Motivation Grundlagen 2 VektorenundMatrizen ErzeugenvonMatrizen DoppelpunktOperator Operatoren Beispiel:AuswertenvonPolynomen Numerische

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\ 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

\ 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

\ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 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

* 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

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

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

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

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

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

Ü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

Ü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

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

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

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

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

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)