Einführung in die Programmierung (MA8003)

Ähnliche Dokumente
2.2. Übung. Einführung in die Programmierung (MA 8003)

Einführung in die Programmierung (MA8003)

Einführung in die Programmierung (MA8003)

Steuerung von Programmabläufen. Lehrstuhl für Angewandte Mathematik Sommersemester Mai und 15. Mai 2008

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

WiMa-Praktikum 1. Woche 8

Einführung in Matlab Was ist MATLAB? Hilfe Variablen

Programmieren in MATLAB Mehr als nur ein Taschenrechner

Einführung in MATLAB Blockkurs DLR:

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Steuerung von Programmabläufen. Vorlesung Computergestützte Mathematik zur Linearen Algebra. Lehrstuhl für Angewandte Mathematik Sommersemester 2009

m-files sind Folgen von MATLAB-Anweisungen oder Daten-Files.

Einführung in die Programmierung (MA8003)

Numerische Lineare Algebra - Matlab-Blatt 2

Schleifen in C/C++/Java

Woche 20/12 13/01 4. Iterative Lösung linearer Gleichungssysteme 1 / 5

2 Teil 2: Nassi-Schneiderman

Erwin Grüner

Zyklen: break und continue

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

Numerische Behandlung des Eigenwertproblems

Funktionen in Matlab. Lehrstuhl für Angewandte Mathematik Sommersemester und 29. Mai 2008

Arbeitsblätter für Algorithmierung und Strukturierung C #

Termin 4: Programmieren in MATLAB

Zweiter Teil des Tutorials. Workspace M-files Matrizen Flow Control Weitere Datenstrukturen Gemeinsames Beispiel erarbeiten

2. Programmieren in MATLAB (1)

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

8. Vorlesung, 5. April Numerische Methoden I. Eigenwerte und Eigenvektoren

Finite Elemente. Dr. S.-J. Kimmerle Institut für Mathematik und Rechneranwendung Fakultät für Luft- und Raumfahrttechnik Wintertrimester 2015

Javakurs für Anfänger

Arithmetik in der tcsh

Matlab Übersicht. Matlab steht für MATrix LABoratory, die Fa. The Mathworks wurde 1984 gegründet

Einführung in die Programmierung II. 3. Kontrollstrukturen

Schleifen in C/C++/Java

Numerische Verfahren zur Lösung unrestringierter Optimierungsaufgaben

Informationsverarbeitung im Bauwesen

Programmieren in C/C++ und MATLAB

Woche 18/01 26/01 6. Iterative Lösungsverfahren, Speicherformate für Matrizen 1 / 8

Eine kurze Einführung in MATLAB

NUMERISCHE MATHEMATIK I

2. Einführung in das Ingenieurtool MATLAB

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Numerisches Rechnen. (für Informatiker) M. Grepl P. Esser & G. Welper & L. Zhang. Institut für Geometrie und Praktische Mathematik RWTH Aachen

Einstieg in die Informatik mit Java

Schülerworkshop Computertomographie Mathematik als Schlüsseltechnologie

Vorlesung Programmieren

Vorlesung Programmieren

38 Iterative Verfahren für lineare Gleichungssysteme

1 Konsole öffnen. 2 matlab & und return eingeben. 3 Konsole dauerhaft geöffnet lassen. 1 Menüpunkt File - Exit MATLAB oder. 2 quit (und return) oder

Dünn besetzte Matrizen. Unterschiede in Speicherbedarf und Rechenzeit im Vergleich zu voll besetzten Matrizen. Besetzungsmuster mit spy.

Eine Einführung zum numerischen Programmieren mit Matlab

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Einstieg in die Informatik mit Java

Nichtlineare Gleichungen in einer und mehreren Unbekannten

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

Fixpunkt-Iterationen

D-ITET, D-MATL Numerische Methoden SS 2006 Prof. R. Jeltsch. Musterlösung 6. x A 1 b. A 1 b A 1. x A ( A. gestört: x A 1 =

Tag 3 Repetitorium Informatik (Java)

10:Exkurs MATLAB / Octave

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

MATLAB als Programmiersprache

06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen

Operations Research für Logistik

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

MATLAB Einführung. Numerische Methoden für ITET und MATL Dr. S. May, D. Devaud. ETH Zürich, Seminar for Applied Mathematics

Bash-Skripting Linux-Kurs der Unix-AG

Dr. Monika Meiler. Inhalt

Ein kleiner Matlab Primer Frank Schimmel

Numerische Lineare Algebra - Matlab-Blatt 1

Einstieg in die Informatik mit Java

Praktikum zur Vorlesung: Numerische Mathematik für Lehramt SS Matlab: Fortsetzung. Jan Mayer. 4. Mai 2006

Statistische Software (R-Vertiefung) Kontrollstrukturen: Bedingte Anweisungen. Logische Operatoren & Verknüpfungen. Syntax. Paul Fink, M.Sc.

Verzweigungen und Wiederholungen

Schleifen: Immer wieder dasselbe tun

MATLAB Eine Einführung

Numerische Mathematik für Ingenieure (SoSe 2013)

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Bash-Skripting Linux-Kurs der Unix-AG

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Mathematik am Computer 4. Vorlesung Matlab: Teil 1

Java: Eine kurze Einführung an Beispielen

Bash-Scripting Linux-Kurs der Unix-AG

Newton-Verfahren zur gleichungsbeschränkten Optimierung. 1 Gleichungsbeschränkte Optimierungsprobleme

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

Einführung in die Programmierung Wintersemester 2011/12

Programmieren I. Kapitel 5. Kontrollfluss

INTELLIGENTE DATENANALYSE IN MATLAB

Einführung in MATLAB

Wichtige Scilab-Befehle

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB.

Transkript:

Theorie 2.2: Schleifen, Vektorisierung, bedingte Ausführung Dr. Lorenz John Technische Universität München Fakultät Mathematik, Lehrstuhl für Numerische Mathematik M2 05.10.2016 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Theorie 2.2: Inhalt 1 Schleifen for-schleifen Beispiel: Jacobi-Verfahren While Schleifen 2 Bedingte Ausführung if, elseif, else Test der Anzahl von Ein- und Ausgangsgrößen Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Schleifen I Eine Schleife wiederholt eine Folge von Anweisungen bis eine Abbruchsbedingung erfüllt ist. In Matlab gibt es zwei unterschiedliche Arten von Schleifen: for Schleife while Schleife Schleifen können beliebig geschachtelt werden. Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Schleifen (for Schleife) Syntax for i=v <auszufuehre Anweisungen> Mit v Vektor (oder Matrix), häufig von der Form <start>:<e>. Bei einer for Schleife werden die Anweisungen so oft ausgeführt wie es Elemente in v gibt. Ist z.b. length(v) == 5 wird der Körper der Schleife 5 Mal ausgeführt. i durchläuft dabei jeweils die Elemente von v. Achtung: for Schleifen können in vielen Fällen durch vektorwertige Ausdrücke ersetzt werden Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Schleifen (for Schleife) >> x=[1,2,10,-1]; >> k=0; >> for l=x k=k+2*l k = k = 2 6 >> for k=1:5 for l=k:5 A(k,l)=k/l; A(l,k)=k/l; >> A k = 26 k = 24 >> sum(2*x) A = 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 1.0000 0.6667 0.5000 0.4000 0.3333 0.6667 1.0000 0.7500 0.6000 0.2500 0.5000 0.7500 1.0000 0.8000 0.2000 0.4000 0.6000 0.8000 1.0000 ans = 24 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Beispiel: Jacobi-Verfahren I Zum Lösen eines linearen Gleichungssystemen Ax = b, mit A R n n bieten sich in manchen Fällen iterative Verfahren an. a 11 x 1 + + a 1n x n = b 1 a 21 x 1 + + a 2n x n = b 2 a n1 x 1 + + a nn x n = b n Ein einfaches Beispiel für diese Klasse ist das Jacobi-Verfahren. Jacobi-Verfahren Ausgeh von einem beliegigen Startvektor x (0) i löse für alle i die i-te Gleichung nach der i-ten Variablen x i auf und iteriere dies. Hinreiche Bedingung für Konvergenz: A strikt diagonaldominant. x (k+1) i := 1 a ii ( bi = n j=1 j i 1 ( bi + a iix (k) i a ii ) a ijx (k) j, i = 1,..., n. n j=1. ) a ijx (k) (k) j = x i + 1 ( bi ai T x (k)) a ii Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Beispiel: Jacobi-Verfahren I function x = jacobi1(a, b, x0, iter) %JACOBI Verfahren Version 1 x = x0; xn = 0*x; n = length(a); for k = 1:iter for i = 1:n xn(i) = x(i) + (b(i) - A(i,:)*x)./A(i,i); x = xn; >> 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); toc Elapsed time is 0.640984 seconds. Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Jacobi-Verfahren II Das Jacobi-Verfahren kann man weiter umschreiben: x (k+1) i := x (k) i + 1 a ii (b i a T 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 2 x = x0; D = diag(a); %diag(a) gibt Vektor der Diagonalelemente zurück for k = 1:iter x = x + (b - A*x)./D; >> tic; x = jacobi2(a,b,zeros(100,1),500); toc Elapsed 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. basier auf Boris von Loesch

Schleifen II (while Schleifen) while Schleifen werden solange ausgeführt solange eine Bedingung wahr ist. Zum Beispiel bei einem iterativen Verfahren solange wie eine festgelegte Genauigkeit nicht erreicht wurde. Achtung: Gefahr von Endlosschleifen! Syntax while (<Bedingung>) <auszufuehre Anweisungen> >> j=1; >> while (j>0) epsilon = j; j = j/2; >> epsilon epsilon = 4.9407e-324 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Jacobi-Verfahren III Beim Jacobi-Verfahren haben wir bisher die Anzahl der Iterationen vorgegeben. Besser abbrechen, wenn die Norm des Residuums klein ist function x = jacobi3(a, b, x0, tol) %JACOBI Verfahren Version 3 x = x0; D = diag(a); %diag(a) gibt Vektor der Diagonalelemente zurück r = b - A*x; while (norm(r) >= tol) x = x + r./d; r = b - A*x; >> tic; x = jacobi3(a,b,zeros(100,1),1e-6); toc Elapsed time is 0.021556 seconds. >> norm(a*x - b) ans = 9.8105e-07 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

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 4 x = x0; D = diag(a); %diag(a) gibt Vektor der Diagonalelemente zurück r = b - A*x; k = 1; while (norm(r) >= tol & k < iter) x = x + r./d; r = b - A*x; k = k + 1; k >> tic; x = jacobi4(a,b,zeros(100,1),1e-6,500); toc k = 483 Elapsed time is 0.027932 seconds. >> norm(a*x - b) ans = 9.8105e-07 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Schleifen III break: Eine Schleife kann durch break sofort verlassen werden continue: Bricht den aktuellen Schleifurchlauf ab und springt zum 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;, >> epsilon epsilon = 4.9407e-324 >> i i = 1075 Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Bedingte Ausführung I Häufig möchte man Codeteile nur dann ausführen, wenn bestimmte Bedingungen erfüllt sind. Dies kann man mit if-abfragen realisieren. Syntax if (<logischer Ausdruck 1>) <Anweisungen 1> elseif (<logischer Ausdruck 2>) <Anweisungen 2> elseif... else <Anweisungen 3> Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Bedingte Ausführung II function x = foo(x) if (x(1) > x(2)) temp = x(1); x(1) = x(2); x(2) = temp; else disp Schon sortiert >> x=[2,1]; >> x = foo(x); x = 1 2 >> x = foo(x) Schon sortiert Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Bedingte Ausführung III if-abfragen werden z. B. verwet um Voraussetzungen an die Variablen am 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 ) else disp( Juhu ); Hilfreich: is* Funktionen, wie isnan, iscomplex, isvector... >> fun([0,1])??? Error using ==> fun at 3 x muss Skalar sein >> fun(magic(3)) >> fun(1/0)??? Error using ==> fun at 7 x ist keine zulässige Zahl >> fun(log(-1)) Juhu??? Error using ==> fun at 3 x muss Skalar sein Numerische Mathematik M2 z.t. basier auf Boris von Loesch >> log(-1) ans = 0 + 3.1416i

Jacobi-Verfahren V function x = jacobi5(a, b, x0, tol, iter) %JACOBI Verfahren Version 5 d = 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 );... x = 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; Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Funktionen: Verschiedene Argumentanzahl Wir haben schon gesehen, dass sich manche Funktionen unterschiedlich verhalten, wenn die Anzahl der Eingabe- oder Ausgabeparameter unterschiedlich ist. Eine Funktion mit der Deklaration function foo(e1, E2, E3) wird auch aufgerufen, wenn weniger als 3 Parameter übergeben werden. Die übrigen Variablen sind dann nicht definiert. >> x = jacobi(a,b)??? Input argument "x1" is undefined. Error in ==> jacobi at 10 x = x1(:); Mit nargin kann die Anzahl der übergebenen Argumente abgefragt werden. Analog nargout. Numerische Mathematik M2 z.t. basier auf Boris von Loesch

Jacobi-Verfahren VI function x = jacobi6(a, b, x0, tol, iter) %JACOBI Verfahren Version 6 d = 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 );... if (nargin < 5), iter = 1000; if (nargin < 4), tol = 1e-6; if (nargin < 3), x = zeros(length(b),1); else x = 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; Numerische Mathematik M2 z.t. basier auf Boris von Loesch

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 13 Vektor 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. basier auf Boris von Loesch

Fragen? Ende Theorie 2.2 Fragen? Numerische Mathematik M2 z.t. basier auf Boris von Loesch