Vorlesung vom 07.01.2008
Übersicht 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren
Warm-Up zum Jahresbeginn 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren
Rückblick: Grundlagen Grunddatentypen int double boolean String Felder Bedingte Anweisungen if if else switch Schleifen for while do while Eingabe und Ausgabe
Rückblick: Objektorientierte Programmierung Klassen Variablen Instanzvariablen Klassenvariablen (static) Methoden Instanzmethoden Klassenmethoden (static) Konstruktoren Zugriffsrechte public private Die tostring Methode Schnittstellen
Rückblick: Algorithmen Aus der Informatik Sortieren Bildung von Paaren Aus der Mathematik Lösen kubischer Gleichungen Monte-Carlo Methode Nullstellenprobleme Aus den Naturwissenschaften Simulationen Finite Volumen Methode (Wärmeleitung)
Rechtecke Ein Rechteck ist ein ebenes Viereck, dessen Innenwinkel rechte Winkel sind. Die Länge der Seiten a und b werden Breite und Höhe des Rechtecks genannt. a b Aufgabe Erstellen Sie eine öffentliche Klasse mit zwei Instanzvariablen, die ein Rechteck repräsentiert.
Quelltext public class Rechteck { double breite, hoehe; }
Form und Größe von Rechtecken Form und Größe eines Rechtecks sind durch die Seitenlängen a und b bestimmt. b = 1 b = 2 a = 2 a = 1 Aufgabe Erstellen Sie einen öffentliche Konstruktor mit dem die Instanzvariablen der Klasse Rechteck initialisiert werden können.
Quelltext public class Rechteck { double breite, hoehe; } public Rechteck(double breite, double hoehe) { this.breite = breite; this.hoehe = hoehe; }
Fläche eins Rechtecks Der Flächeninhalt A eines Rechtecks mit den Seitenlängen a und b ist durch A = ab gegeben. A b a Aufgabe Erstellen Sie eine öffentliche Instanzmethode, welche den Flächeninhalt des Rechtecks zurückgibt.
Quelltext public class Rechteck { double breite, hoehe; public Rechteck(double breite, double hoehe) { this.breite = breite; this.hoehe = hoehe; } } public double flaecheninhalt() { return this.breite * this.hoehe; }
Rechtecke und Quadrate Ein Rechteck mit den Seitenlängen a und b ist genau dann ein Quadrat, wenn a = b gilt. a a Aufgabe Erstellen Sie eine öffentliche Instanzmethode, welche angibt, ob das Rechteck ein Quadrat ist.
Quelltext public class Rechteck { double breite, hoehe; public Rechteck(double breite, double hoehe) { this.breite = breite; this.hoehe = hoehe; } public double flaecheninhalt() { return this.breite * this.hoehe; } } public boolean istquadrat() { return (this.breite == this.hoehe); }
Flächen Zweidimensionale Figuren werden allgemein als Flächen bezeichnet. Allen Flächen kann ein Flächeninhalt A zugeordnet werden. A A A Aufgabe Erstellen Sie eine öffentliche Schnittstelle mit einer Instanzmethode, welche eine Fläche abstrakt beschreibt.
Quelltext public interface Flaeche { } public double flaecheninhalt();
Rechtecke als Flächen Offenbar sind Rechtecke Flächen. A Aufgabe Legen Sie fest, dass die Klasse Rechteck die Schnittstelle Flaeche implementiert.
Quelltext public class Rechteck implements Flaeche { double breite, hoehe; public Rechteck(double breite, double hoehe) { this.breite = breite; this.hoehe = hoehe; } public double flaecheninhalt() { return this.breite * this.hoehe; } } public boolean istquadrat() { return (this.breite == this.hoehe); }
Programmbeispiel public class Hauptprogramm { } public static void main(string[] args) { Flaeche r = new Rechteck(2.0, 1.0); double a = r.flaecheninhalt(); System.out.println("Flächeninhalt: " + a); }
Anfangswertprobleme 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren
Hintergrund Zeitlich veränderliche Größen in wirtschafts-, natur- und ingenieurswissenschaftlichen Modellen können oft als differenzierbare Funktionen der Form aufgefasst werden. y : R R Für einen beliebig gewähltes t R interpretiert man y(t) y (t) als momentanen Wert als momentane Änderungsrate der dargestellten Größe zum Zeitpunkt t.
Untersuchung eines Modells In der Regel möchte man den zeitlichen Verlauf der betrachteten Größe analysieren. Das bedeutet, man möchte die Funktion y : R R bestimmen. y t
Grundproblem Problem Oft sind von der gesuchten Funktion y : R R nur ein Anfangswert y(0) und die zeitliche Änderungsrate y bekannt. y y(0)? t
Beispiel: Freier Fall Wir betrachten die Fallgeschwindigkeit v eines Körper im freien Fall auf der Erde. Es gilt: v(0) = 0 (Anfangsgeschwindigkeit) v (t) = g (Erdbeschleunigung: g 9.81 ms 2 ) Frage: Wie groß ist die Fallgeschwindigkeit zu einem beliebigen Zeitpunkt t? Antwort: Fundamentalsatz der Infinitessimalrechnung v(t) = t 0 v (t)dt + v(0) = gt
Differentialgleichungen Information In vielen Modellen hängt die zeitliche Änderungsrate y vom Wert der betrachteten Größe y ab. Dies führt in der Regel zu einer Differentialgleichung erster Ordnung. Eine Differentialgleichung erster Ordnung ist eine Gleichung, in der eine Funktion und ihre erste Ableitung gleichzeitig vorkommen.
Beispiel: Zinsrechnung Wir betrachten die Entwicklung eines Kapitals K bei einem gegebenen Zinssatz z. Das Anfangskapital betrage 100e. Es gilt: K(0) = 100 (Anfangskapital) K (t) = αk(t) (Zinszuwachs: α = ln(1 + z 100% )) Frage: Wie groß ist das Kapital zu einem beliebigen Zeitpunkt t? Antwort: Theorie der gewöhnlichen Differentialgleichungen K(t) = K(0)e αt
Verallgemeinerung Information In vielen Modellen hängt die Änderungsrate y sowohl vom Wert der Größe als auch vom Zeitpunkt t. Die Differentialgleichung kann dann allgemein durch y (t) = f (t, y(t)) beschrieben werden, wobei f eine Funktion von zwei Veränderlichen ist. Beispiel: Für erhält man y (t) = t 2 y(t) f (x, y) = x 2 y
Anfangswertprobleme Definition Ein Anfangswertproblem (AWP) ist ein Problem, bei dem eine differenzierbare Funktion y : R R gesucht ist, die { y (t) = f (t, y(t)), y(0) = η erfüllt. Dabei ist f eine vorgegebene Funktion von zwei Veränderlichen, genannt rechte Seite, und η ein vorgegebener Anfangswert ist.
Lösbarkeit von Anfangswertprobleme Die Lösung eines Anfangswertproblems ist eine differenzierbare Funktion y : R R. Die rechte Seite f bestimmt über die Forderung y = f (t, y(t)) maßgeblich die Gestalt dieser Lösung. Nur in seltenen Fällen kann die Lösung explizit angegeben werden, wie beispielsweise für f (x, y) = αy: Die Lösung lautet in diesem Fall y(t) = y(0)e αt. In der Regel kann die Lösung nur numerisch angenähert werden.
Idee zur Berechung einer Näherungslösung Man konstruiert aus den Informationen über den Anfangswert y(0) und die Änderungsrate y einen Polygonzug y h, der die gesuchte Funktion y annähern soll. y y(0) y h (t) y(t) t
Polygonzüge 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren
Vorbemerkungen Seien (t 0, y 0 ) und (t 1, y 1 ) zwei Punkte in der Ebene mit t 0 t 1. Der Graph der Funktion g : R R, g(t) = y 1 y 0 t 1 t 0 (t t 0 ) + y 0 ist eine Gerade, welche durch beide Punkte geht. y g(t) (t 1, y 1 ) (t 0, y 0 ) t
Vorbemerkungen Eine andere Darstellung für die Funktion g ist g(t) = t 1 t t 1 t 0 y 0 + t t 0 t 1 t 0 y 1 Schränkt man die Funktion g auf das Intervall [t 0, t 1 ] ein, so erhält man als Graph die Verbindungstrecke zwischen den Punkten (t 0, y 0 ) und (t 1, y 1 ) y g [t0,t 1 ](t) (t 1, y 1 ) (t 0, y 0 ) t
Polygonzug Definition Sei [a, b] ein Intervall und sei a = t 0 < t 1 <... < t n = b eine Zerlegung dieses Intervalls. Seien weiterhin y 0, y 1,...,y n beliebig vorgegebene Werte. Eine Funktion p : [a, b] R heißt ein Polygonzug über [a, b] zur Zerlegung t 0 < t 1 <... < t n, wenn für alle i = 1,...,n gilt. p [ti 1,t i ](t) = t i t t i t i 1 y i 1 + t t i 1 t i t i 1 y i
Beispiel Intervall [0, 2] Anzahl der Teilintervalle n = 2 Stützstellen t 0 = 0, t 1 = 1, t 2 = 2 Stützwerte y 0 = 0.5, y 1 = 0.8, y 2 = 0.2 y p(t) t p(t) = { (1 t)0.5 + (t 0)0.8 falls t [0, 1] (2 t)0.8 + (t 1)0.2 falls t [1, 2]
Auswertung von Polygonzügen Gegeben sei der Polygonzug 2 t 2 2 + t 0 2 1 falls t [0, 2] p(t) = 4 t 2 1 + t 2 2 3 falls t [2, 4] 6 t 2 3 + t 4 2 4 falls t [4, 6] Frage: Wie lautet der Funktionswert von p an der Stelle t = 3? Antwort: t = 1 = t [2, 4], p [2,4] (t) = 4 t 2 1 + t 2 2 3. = p(3) = 4 3 2 1 + 3 2 2 3 = 2.
Darstellung von Polygonzügen Lemma Ein Polygonzug ist vollständig durch die Stützstellen t 0 < t 1 <... < t n und die zugehörigen Stützwerte y 0, y 1,...,y n bestimmt. Ein Polygonzug kann also durch zwei Felder vom Typ double der Länge n + 1 repräsentiert werden. Bevor man einen Polygonzug an einer Stelle t auswerten kann, muss man feststellen, in welchem Teilintervall [t i 1, t i ] sich diese Stelle befindet. Auf dem Übungsblatt: Erstellen Sie eine Klasse, die einen Polygonzug repräsentiert.
Das Eulersche Polygonzugverfahren 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren
Motivation Zu einem gegeben Anfangswertproblem { y (t) = f (t, y(t)) t [0, T] y(0) = η soll ein Polygonzug y h : [0, T] R konstruiert werden, welcher die Lösung y des Anfangswertproblems annähert. y y(0) y h (t) y(t) t
Erster Schritt: Zerlegung des Intervalls Zunächst wird das Intervall [0, T] äquidistant in n Teilintervalle unterteilt. Die entsprechende Zerlegung t 0 < t 1 <... < t n ist gegeben durch t i := ih i = 0,...,n wobei h := T n die Schrittweite der Zerlegung genannt wird. t 0 0 h t 1 t 2... t n T
Zweiter Schritt: Konstruktion des Polygonzugs An jeder Zerlegungsstelle t i wird nun ein Näherungswert y i y(t i ) nach folgender Vorschrift berechnet: { yi = y i 1 + hf (t i 1, y i 1 ) i = 1,...,n y 0 := η Der Zerlegungsstellen t 0 < t 1 <... < t n definieren zusammen mit den berechneten Näherungswerten y 0, y 1,...,y n den Polygonzug y h, der die Lösung des Anfangswertproblems annähert.
Beispiel Die Lösung des Anfangswertproblems { y (t) = y(t) t [0, 2] y(0) = 1 lautet y(t) = e t Aufgabe: Wenden Sie das Eulersche Polygonzugverfahren für n = 2 an.
Beispiel Für n = 2 sind die Zerlegungsstellen t 0 = 0, t 1 = 1, t 2 = 2. Die Schrittweite beträgt h = 1 Die rechte Seite des Anfangswertproblems ist gegeben durch f (t, y) = y. Man erhält y 0 = y(0) = 1 y(0) = 1 y 1 = y 0 + hf (t 0, y 0 ) = 1 + 1 = 2 y(1) = e y 2 = y 1 + hf (t 1, y 1 ) = 2 + 2 = 4 y(2) = e 2