Einstieg in die Informatik mit Java Markus Richter Vorlesung vom 07.01.2008 Markus Richter Einstieg in die Informatik mit Java Übersicht 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Markus Richter Einstieg in die Informatik mit Java Warm-Up zum Jahresbeginn 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Markus Richter Einstieg in die Informatik mit Java Rückblick: Grundlagen Grunddatentypen int double boolean String Felder Bedingte Anweisungen if if–else switch Schleifen for while do–while Eingabe und Ausgabe Markus Richter Einstieg in die Informatik mit Java Rückblick: Objektorientierte Programmierung Klassen Variablen Instanzvariablen Klassenvariablen (static) Methoden Instanzmethoden Klassenmethoden (static) Konstruktoren Zugriffsrechte public private Die toString–Methode Schnittstellen Markus Richter Einstieg in die Informatik mit Java 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) Markus Richter Einstieg in die Informatik mit Java 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. b a Aufgabe Erstellen Sie eine öffentliche Klasse mit zwei Instanzvariablen, die ein Rechteck repräsentiert. Markus Richter Einstieg in die Informatik mit Java Quelltext public class Rechteck { double breite, hoehe; } Markus Richter Einstieg in die Informatik mit Java Form und Größe von Rechtecken Form und Größe eines Rechtecks sind durch die Seitenlängen a und b bestimmt. b=2 b=1 a=2 a=1 Aufgabe Erstellen Sie einen öffentliche Konstruktor mit dem die Instanzvariablen der Klasse Rechteck initialisiert werden können. Markus Richter Einstieg in die Informatik mit Java Quelltext public class Rechteck { double breite, hoehe; public Rechteck(double breite, double hoehe) { this.breite = breite; this.hoehe = hoehe; } } Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java 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; } } Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java 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); } } Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java Quelltext public interface Flaeche { public double flaecheninhalt(); } Markus Richter Einstieg in die Informatik mit Java Rechtecke als Flächen Offenbar sind Rechtecke Flächen. A Aufgabe Legen Sie fest, dass die Klasse Rechteck die Schnittstelle Flaeche implementiert. Markus Richter Einstieg in die Informatik mit Java 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); } } Markus Richter Einstieg in die Informatik mit Java 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); } } Markus Richter Einstieg in die Informatik mit Java Anfangswertprobleme 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Markus Richter Einstieg in die Informatik mit Java Hintergrund Zeitlich veränderliche Größen in wirtschafts-, natur- und ingenieurswissenschaftlichen Modellen können oft als differenzierbare Funktionen der Form y :R→R aufgefasst werden. 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. Markus Richter Einstieg in die Informatik mit Java 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 Markus Richter Einstieg in die Informatik mit Java 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 Markus Richter Einstieg in die Informatik mit Java 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 Z t v ′ (t) dt + v (0) = −gt v (t) = 0 Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java Beispiel: Zinsrechnung Wir betrachten die Entwicklung eines Kapitals K bei einem gegebenen Zinssatz z. Das Anfangskapital betrage 100 e . Es gilt: K (0) = 100 ′ K (t) = αK (t) (Anfangskapital) (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 Markus Richter Einstieg in die Informatik mit Java 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 y ′ (t) = t 2 y (t) erhält man f (x, y ) = x 2 y Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java Idee zur Berechung einer Näherungslösung Man konstruiert aus den Informationen über den Anfangswert y (0) und die Änderungsrate y ′ einen Polygonzug yh , der die gesuchte Funktion y annähern soll. y yh (t) y (0) y (t) t Markus Richter Einstieg in die Informatik mit Java Polygonzüge 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Markus Richter Einstieg in die Informatik mit Java Vorbemerkungen Seien (t0 , y0 ) und (t1 , y1 ) zwei Punkte in der Ebene mit t0 6= t1 . Der Graph der Funktion g : R → R, g (t) = y1 − y0 (t − t0 ) + y0 t1 − t0 ist eine Gerade, welche durch beide Punkte geht. g (t) y (t1 , y1 ) (t0 , y0 ) t Markus Richter Einstieg in die Informatik mit Java Vorbemerkungen Eine andere Darstellung für die Funktion g ist g (t) = t − t0 t1 − t y0 + y1 t1 − t0 t1 − t0 Schränkt man die Funktion g auf das Intervall [t0 , t1 ] ein, so erhält man als Graph die Verbindungstrecke zwischen den Punkten (t0 , y0 ) und (t1 , y1 ) y g |[t0 ,t1 ] (t) (t1 , y1 ) (t0 , y0 ) t Markus Richter Einstieg in die Informatik mit Java Polygonzug Definition Sei [a, b] ein Intervall und sei a = t0 < t1 < . . . < tn = b eine Zerlegung dieses Intervalls. Seien weiterhin y0 , y1 , . . . , yn beliebig vorgegebene Werte. Eine Funktion p : [a, b] → R heißt ein Polygonzug über [a, b] zur Zerlegung t0 < t1 < . . . < tn , wenn p|[ti−1 ,ti ] (t) = t − ti−1 ti − t yi−1 + yi ti − ti−1 ti − ti−1 für alle i = 1, . . . , n gilt. Markus Richter Einstieg in die Informatik mit Java Beispiel Intervall Anzahl der Teilintervalle Stützstellen Stützwerte [0, 2] n=2 t0 = 0, t1 = 1, t2 = 2 y0 = 0.5, y1 = 0.8, y2 = 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] Markus Richter Einstieg in die Informatik mit Java Auswertung von Polygonzügen Gegeben sei der Polygonzug 2−t 2 2+ p(t) = 4−t 2 1+ 6−t 2 3+ t−0 2 t−2 2 t−4 2 1 3 4 falls t ∈ [0, 2] falls t ∈ [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(3) = 4−3 2 1+ 3−2 2 3 p|[2,4] (t) = 4−t 2 1+ = 2. Markus Richter Einstieg in die Informatik mit Java t−2 2 3. Darstellung von Polygonzügen Lemma Ein Polygonzug ist vollständig durch die Stützstellen t0 < t1 < . . . < tn und die zugehörigen Stützwerte y0 , y1 , . . . , yn 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 [ti−1 , ti ] sich diese Stelle befindet. Auf dem Übungsblatt: Erstellen Sie eine Klasse, die einen Polygonzug repräsentiert. Markus Richter Einstieg in die Informatik mit Java Das Eulersche Polygonzugverfahren 1 Warm-Up zum Jahresbeginn 2 Anfangswertprobleme 3 Polygonzüge 4 Das Eulersche Polygonzugverfahren Markus Richter Einstieg in die Informatik mit Java Motivation Zu einem gegeben Anfangswertproblem ( y ′ (t) = f (t, y (t)) t ∈ [0, T ] y (0) = η soll ein Polygonzug yh : [0, T ] → R konstruiert werden, welcher die Lösung y des Anfangswertproblems annähert. y yh (t) y (0) y (t) t Markus Richter Einstieg in die Informatik mit Java Erster Schritt: Zerlegung des Intervalls Zunächst wird das Intervall [0, T ] äquidistant in n Teilintervalle unterteilt. Die entsprechende Zerlegung t0 < t1 < . . . < tn ist gegeben durch ti := ih i = 0, . . . , n wobei T n die Schrittweite der Zerlegung genannt wird. h := h t0 t1 0 t2 ... tn T Markus Richter Einstieg in die Informatik mit Java Zweiter Schritt: Konstruktion des Polygonzugs An jeder Zerlegungsstelle ti wird nun ein Näherungswert yi ≈ y (ti ) nach folgender Vorschrift berechnet: ( yi = yi−1 + hf (ti−1 , yi−1 ) i = 1, . . . , n y0 := η Der Zerlegungsstellen t0 < t1 < . . . < tn definieren zusammen mit den berechneten Näherungswerten y0 , y1 , . . . , yn den Polygonzug yh , der die Lösung des Anfangswertproblems annähert. Markus Richter Einstieg in die Informatik mit Java 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. Markus Richter Einstieg in die Informatik mit Java Beispiel Für n = 2 sind die Zerlegungsstellen t0 = 0, t1 = 1, t2 = 2. Die Schrittweite beträgt h=1 Die rechte Seite des Anfangswertproblems ist gegeben durch f (t, y ) = y . Man erhält y0 = y (0) = 1 y (0) = 1 y1 = y0 + hf (t0 , y0 ) = 1 + 1 = 2 y (1) = e y2 = y1 + hf (t1 , y1 ) = 2 + 2 = 4 y (2) = e 2 Markus Richter Einstieg in die Informatik mit Java