3 Das Programm 3. 4 Dateien 4. 5 Aufgaben 4. 6 Ausblick 5

Ähnliche Dokumente
Modellieren in der Angewandten Geologie II. Sebastian Bauer

D-MATH Numerische Methoden FS 2016 Dr. Vasile Gradinaru Alexander Dabrowski. Serie 9

1. Anfangswertprobleme 1. Ordnung

Kevin Caldwell. 18.April 2012

Programmieren in C. Zeiger auf Funktionen. Prof. Dr. Nikolaus Wulff

5 Interpolation und Approximation

Approximation flächenhaft harmonischer Funktionen mittels bikubisch finiter Elemente

Übungen zu Meteorologische Modellierung Teil 'Grundlagen der Numerik'

Aufgabe 3: Lösung der Poissongleichung

Klausurlösung Einführung in Numerische Methoden und FEM Universität Siegen, Department Maschinenbau,

NUMERISCHE MATHEMATIK I

Java Kurs für Anfänger Einheit 5 Methoden

konvergent falls Sei eine allgemeine ("gutmütige") Funktion. Frage: kann man sie in der Nähe des Punktes darstellen mittels einer Potenzreihe in

Exakte Differentialgleichungen

Projektbericht Kondensation an einem Fenster

C++ für Ingenieure. Einführung in die objektorientierte Programmierung. Seite Programmverzeichnis VII HARALD NAHRSTEDT

Übungen zur Theoretischen Physik 1 Lösungen zum Mathe-Test

Mathematik für Biologen mathematische Ergänzungen und Beispiele Teil I

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6.

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

Mehrgitter-Verfahren für DG Finite-Elemente-Diskretisierungen von turbulenten Strömungen

Numerische Behandlung linearer und semilinearer partieller differentiell-algebraischer Systeme mit Runge-Kutta-Methoden.

Nichtlineare Gleichungssysteme

Probeklausur: Programmierung WS04/05

Klausurberatung Differentialgleichungen I für Studierende der Ingenieurwissenschaften

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

D-MAVT NUMERISCHE MATHEMATIK FS 14 K. Nipp, A. Hiltebrand Lösung vom Test 1

Folgen und Reihen. Folgen. Inhalt. Mathematik für Chemiker Teil 1: Analysis. Folgen und Reihen. Reelle Funktionen. Vorlesung im Wintersemester 2014

10. und 11. Vorlesung Sommersemester

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Algorithmen und Programmierung II

3.5 Glattheit von Funktionen und asymptotisches Verhalten der Fourierkoeffizienten

1. Eindimensionale Bewegung

Lösungen zu Aufgabenblatt 7P

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

18.2 Implizit definierte Funktionen

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Lineare Gleichungssysteme: eine Ergänzung

Computer Vision: Optische Flüsse

Einführung in numerische Methoden für Ingenieure (nach A. Quarteroni, F. Saleri: Wissenschaftliches Rechnen mit MATLAB)

Mathematik - Antwortblatt Klausur

Klausurberatung Differentialgleichungen I für Studierende der Ingenieurwissenschaften

Aufgaben mit Ebenen. Parameterform Normalenform Koordinatenform. Darstellung = + r + s =0 ax 1 + bx 2 + cx 3 = d. Beispiel

Copyright by Hildegard Heilmann IAG Diese Unterlagen stelle ich den SchülerInnen des V. Bachilleratos des IAG zur Verfügung.

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

1 Abstrakte Klassen, finale Klassen und Interfaces

Angewandte Mathematik und Programmierung

Überbestimmte lineare Gleichungssysteme

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Extrapolationsverfahren für nichtlineare zweidimensionale Diffusionsprobleme

Discontinuous-Galerkin-Verfahren

Kurze Einführung in die Finite-Elemente-Methode

Differentialgleichungen

1 Einführung und Begriffe

Aufgabe1 EStrich ist Lennard Jones Potential mit Exponentialfunktion

Mathematische Erfrischungen III - Vektoren und Matrizen

Mathematik 3 für Informatik

Einführung in die C-Programmierung

Numerisches Programmieren

MATHEMATIK FÜR WIRTSCHAFTSWISSENSCHAFTLER MUSTERLÖSUNG 3. TEST

Ingenieurinformatik (FK 03) Übung 4

Mathematik II für Inf und WInf

Reinforcement Learning

Technische Universität München Zentrum Mathematik. Übungsblatt 12

1. Übung zu "Numerik partieller Differentialgleichungen"

Analytische Geometrie mit dem Voyage 1

Angewandte Strömungssimulation

3.2 Implizite Funktionen

Übung 4 - SIMPLE-Verfahren

Analysis I - Stetige Funktionen

Numerik und Simulation in der Geoökologie

Polynominterpolation

Lösungen zum 9. Übungsblatt zur Vorlesung Höhere Mathematik II für biw/ciw/mach/mage/vt

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Darstellungsformeln für die Lösung von parabolischen Differentialgleichungen

ANALYSIS I FÜR TPH WS 2016/17 3. Übung Übersicht

Berechnungsmethoden der Energie- und Verfahrenstechnik Methode der gewichteten Residuen

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Praktikum Wissenschaftliches Rechnen 3. Aufgabenblatt

Mathematik für Bauingenieure

APEX Datenverwaltung Wo sind die Daten gerade? Dr. Gudrun Pabst

1 2 x x x x x x2 + 83

Randwertbedingungen und Ghost Cells

Rückblick auf die letzte Vorlesung. Bemerkung

Numerik für Informatiker, Elektrotechniker und Naturfreunde von Michael Lehn

Abbildung 10.1: Das Bild zu Beispiel 10.1

Angewandte Umweltsystemanalyse: Finite-Elemente-Methode (FEM)

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

x, y 2 f(x)g(x) dµ(x). Es ist leicht nachzuprüfen, dass die x 2 setzen. Dann liefert (5.1) n=1 x ny n bzw. f, g = Ω

Funktionen in PHP 1/7

.NET Code schützen. Projekt.NET. Version 1.0

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Lineare Gleichungssysteme Hierarchische Matrizen

Vorlesung Mathematik 2 für Ingenieure (Sommersemester 2016)

Objektorientiertes Programmieren für Ingenieure

1 Batch Queuing (60 Punkte)

4.5 Schranken an die Dichte von Kugelpackungen

4.2 Der Harmonische Oszillator

Höhere Mathematik I/II

Transkript:

Contents 1 Ziele dieser Uebung 1 2 Finite-Differenzen-Methode 1 3 Das Programm 3 4 Dateien 4 5 Aufgaben 4 6 Ausblick 5 1 Ziele dieser Uebung 1.1 Einleitung Wir erweitern das Problem aus der letzten Uebung und betrachten ein instationaeres Konvektions- Diffusions-Problem. Zunaechst werden wir ein aehnlich einfaches Programm betrachten, wie in der letzten Uebung. In den Aufgaben sollen Sie diese jedoch strukturieren. 1.2 Die Ziele dieser Uebung sind Vertiefung Finite-Differenzen-Methode (zeitabhaengig, Ableitungsdiskretisierung mit Richtung) Waermer werden mit C++ Erste Konvergenzuntersuchungen Erweiterung eines einfachen Finite-Differenzen-Loesers 1.3 Neue Funktionalitaet Wir verzichten zunaechst auf neue programmtechnische Funktionalitaet im Vergleich zum letzten Mal. Neue Funktionen/Strukturen sollen mit Hilfe der Aufgaben kennen gelernt werden. 2 Finite-Differenzen-Methode 2.1 Das Konvektions-Diffusions-Problem Wir betrachten die folgende Differentialgleichung mit Ω = (0, 1), Randwerten und Anfangswerten t u(x, t) a xx u(x, t) + b x u(x, t) = f(x, t), x Ω, t (0, T ] u(0, ) = u(1, ) = 0 u(, 0) = u 0 (x) C 2 ( Ω), u 0 (0) = u 0 (1) = 0. Wir nehmen an, dass eine eindeutige Loesung existiert mit u C 2 (Ω) C 0 ( Ω). Wir nennen a den Diffusionskoeffizienten und b die Konvektionsgeschwindigkeit. 1

2.2 Approx. von 1.Abl. (zentral) [Wdhl.] Eine einfache Ableitung wird approximiert mit der (zentralen) finiten Differenz x u = δ x u u(x i+1) u(x i 1 ). 2h Hier ist h der Abstand von zwei Gitterpunkten. Motivieren laesst sich diese Wahl als Sekante durch die Funktionswerte an den Punkten x h und x + h welche als Approximation der Ableitung am Punkt x benutzt wird. 2.3 Approx. von 1.Abl. (links-/rechtsseitig) [Wdhl.] Alternativ kann man auch mit links- oder rechtseitigen Differenzen, z.b. x u = δ x u u(x i+1) u(x i ) h arbeiten. In dieser Uebung werden wir sehen, dass es Sinn machen die links- oder rechtsseitige Differenzen den zentralen Differenzen vorzuziehen. 2.4 Approx. von 2.Abl. (zentral) [Wdhl.] Fuer die zweite Ableitung erhaelt man die uebliche finite Differenzen Approximation: 2.5 Zeitdiskretisierung (1) xx u = δ xx u u(x i+1) 2u(x i ) + u(x i 1 ) h 2 Bei der Finite-Differenzen-Methode wird jetzt fuer jeden Gitterpunkt eine Gleichung formuliert. Zusaetzlich zu der Diskretisierung der Ortsableitungen, muessen wir auch in der Zeit diskretisieren. Dafuer benutzen wir auch Finite-Differenzen, betrachten aber zunaechst nur eine Variante. Wir diskretisieren t u(x, t) u(x, tn ) u(x, t n 1 ) t 2.6 Zeitdiskretisierung (2) Zur Zeitdiskretisierung der Gleichung werten wir alle uebrigen Terme zu dem Zeitpunk t n 1 aus. Das entspricht einer Diskretisierung mit dem expliziten Euler-Verfahren. Wir schreiben dazu formal t u = F (t) und diskretisieren dies mit u(x, t n ) u(x, t n 1 ) = F (t n 1 ). t Hierbei ist F der Ausdruck der sich aus der Ortsdiskretisierung von a xx u + b x u f ergibt. 2.7 Voll-diskretisierte Gleichungen Sei u n i die Approximation an u(x i, t n ) (f n i analog), so erhalten wir mit dem expliziten Euler Verfahren und finiten Differenzen: u n i = u n 1 i + t(f n i + a δ xx (u n 1 i 1, un 1 i, u n 1 i+1 ) b δ x(u n 1 i 1, un 1 i, u n 1 i+1 )) fuer alle i {1,.., N 1}. Hierbei ist δ xx (a, b, c) die Finite-Differenzen-Approximation die sich an dem Knoten mit Wert b, und den Nachbarwerten a (links) und c (rechts) ergeben. Analog ist δ x (,, ) eine Finite-Differenzen-Approximation der ersten Ableitung. 2

3 Das Programm 3.1 Startpunkt Wir starten mit dem Code aus Uebung 01 und passen diesen so an, dass oben genanntes Problem geloest werden kann. Einige Schritte erklaeren wir hier, die letzteren sind als Aufgabe formuliert. 3.2 Grundlage Quellcode Arbeiten Sie entweder mit dem Code aus Uebung 01 weiter (ggf. kopieren und umbenennen). In lesson02_src.tar.gz finden Sie eine entsprechende (umgenannte) Kopie. 3.3 Zeitintegrationsschleife (1) Fuehren Sie eine Variable dt fuer die Zeitschrittweite ein: const double dt = 1e-3; // time step size und entfernen Sie den Richardson-paramater ω (damping). 3.4 Zeitintegrationsschleife (2) Bestimmen Sie die Anzahl der Zeitschritte nsteps: int nsteps = round(1.0/dt); und tauschen Sie die Richardsons-iterationsschleife for (int k=0; k<100*n*n; ++k) { gegen eine Zeitschleife for (int k=1; k<=nsteps; ++k) // starting from k=1 as k=0 is initial data { double tn = k * dt; // current time step 3.5 Variablenbenennung Da wir mit einem expliziten Euler-Verfahren arbeiten, laesst sich die Zeitdiskretisierung auffassen als u n = u n 1 + tf n 1 wobei u n, u n 1 und F n 1 als die Vektoren zu verstehen sind, die u(, t n ), u(, t n 1 ) und F (, t n 1 ) approximieren mit F n 1 = a δ xx u n 1 + b δ x u n 1 f n 1. D.h. es ist sinnvoll die Variable cur_res (das Residuum) umzubenennen zu F oder aehnlichem. Eine Abfrage ob das Residuum klein ist, ist bei dem instationaeren Problem auch nicht mehr relevant und kann somit entfernt werden. 3

3.6 Anfangswerte Fuer die Loesung des Problems sind jetzt natuerlich auch die Anfangswerte wichtig. ersetzen wir Deswegen u[i] = 0.0; // initial value for u mit u[i] = myinitial(x[i]); // initial value for u wobei myinitial eine selbst definierte Funktion ist, welche die Anfangswerte bereitstellt. 4 Dateien 4.1 Ausgangspunkt fuer diese Uebung Die Schritte, die oben erklaert wurden, resultieren in den folgenden Dateien. In der convdiff1d.cc Datei sind zusaetzlich noch die Aufgaben vorbereitet und markiert: lesson02_src.tar.gz convdiff1d.pdf convdiff1d.beamer.pdf convdiff1d.html 5 Aufgaben 5.1 Programmierung (1): Schreiben Sie das Programm der letzten Uebung auf das neue Problem um und geben Sie fuer t {0.0, 0.25, 0.5, 0.75, 1.0} die Loesung in eine Datei aus. Waehlen Sie anfangs die Parameter N = 20, t = 1 10 3, a = 1, b = 0, u 0 (x) = x (1 x), f = 1. Loesen Sie das Problem und betrachten Sie die Loesung zum Zeitpunkt t = 1. 5.2 Mit dem Problem arbeiten (1): Welche Zeitschrittgroessen sind zulaessig? Versuchen Sie t {10 4, 10 3, 10 2 } fuer N {10, 20, 40} aus. Was faellt Ihnen auf? Waehlen Sie den Parameter fuer t in Abhaengigkeit von N so, dass Ihr Verfahren immer stabil ist. 5.3 Mit dem Problem arbeiten (2): Waehlen Sie nun a {1, 0.1, 0.01, 0.001}, b = 1, u 0 (x) = x (1 x) und f = 1. Was faellt Ihnen auf? Verwenden Sie zentrale, rechts- und linksseitige Differenzen fuer die Approximation des Konvektionsterms. Wann ist welches Verfahren stabil? Probieren Sie auch b = 1. 4

5.4 Programmierung (2): Definieren Sie Funktionen um Finite-Differenzen Approximationen δ x und δ xx zu definieren. Die Definitionen sollten sich außerhalb der main-funktion befinden. Implementieren Sie sie die folgenden Approximationen: linksseitige Approximation der ersten Ableitung rechtsseitige Approximation der ersten Ableitung zentrale Approximation der ersten Ableitung zentrale Approximation der zweiten Ableitung Passen Sie Ihr Programm so an, dass dies genutzt wird. 5.5 Mit dem Problem arbeiten (3): Loesen Sie ein Problem mit a {0.01}, b = 1, u 0 (x) = x (1 x) und f = 1 und bestimmen Sie u max = max x [0,1] u(x, t = 1) fuer eine Referenzloesung, die Sie mit N = 500 ermitteln. Loesen Sie das gleiche Problem nun mit N = 20, 40, 80. Wie verhaelt sich der Fehler? method \ N 20 40 80 160 500 left-sided (value) left-sided (error) central (value) 0.9385 central (error) right-sided (value) right-sided (error) 5.6 Programmierung (3): Schreiben Sie eine Klasse FD_stencil welche die Parameter h,a,b entgegen nimmt und eine Funktion evaluate(const double& left, const double& center,const double& right) zur Verfuegung stellt. Treffen Sie in Abhaengigkeit der Parameter eine sinnvolle Wahl zur Approximation des Konvektionsterms. Verwenden Sie diese in der Diskretisierung fuer ein Testproblem. Referenz fuer Funktionszeiger: http://www.cprogramming.com/tutorial/function-pointers. html 5.7 Programmierung (4 (Bonus)): Schieben Sie die Implementierung von in eine separate Datei (.cc) und aendern Sie das Makefile entsprechend. Diese Problematik wird spaeter noch tiefer diskutiert. 6 Ausblick 6.1 Diskretisierung / Loeser: Finite Elemente Aufstellen und Loesen von Gleichungssystemen 5

6.2 Programmierung: Objektorientiertes Programmieren: Klassen Programme die aus mehr als einer Datei generiert werden (Richtung Projekte) 6