Einstieg in die Informatik mit Java - KIT

Werbung
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
Herunterladen