Ubungen II zur Vorlesung Angewandte Informatik

Werbung
Übungen II zur Vorlesung Angewandte Informatik
Prof. Dr. Nikolaus Wulff
zum 19. Okt 2006
1
Integration einer reelwertigen Funktion
Aufgabe:
Entwickeln Sie eine Methode integral(a,b,eps,f), zum Berechnen des Integrals einer beliebigen reelwertigen Funktion f (x), auf dem endlichen Intervall
[a, b] , a < b mit a, b ∈ R\{±∞}, bei einem vorgegebenen Nährungsfehler .
Das Integrationsverfahren nach Newton und Cotes ersetzt hierbei den
Integrand durch ein passend interpolierendes Polynom Pn (x) vom Grad n,
Rb
Rb
dessen Integral a Pn (x)dx als Nährung für a f (x)dx verwendet wird. Zur
Bestimmnug des Polynoms wird das Interval gleichmässig in n Punkte xi =
a + ih, h := (b − a)/n, i = 0, · · · , n unterteilt und in den Stützpunkten xi
die Interpolationsformel nach Lagrange verwendet:
Pn (x) ≡
n
X
f (xi )Li (x)
(1)
i=0
n
Y
x − xk
Li (x) =
xi − xk
(2)
k=0
k6=i
mit fi = f (xi ) und der Substitution x = a + hs erhält man
Li (x) = φi (s) :=
n
Y
s−k
i−k
k=0
(3)
k6=i
und das Nährungsintegral lässt sich auswerten zu:
Z b
Z b
n
X
fi
Pn (x)dx =
Li (x)dx
a
i=0
n
X
= h
i=0
= h
n
X
i=0
1
(4)
a
Z
n
fi
φi (s)ds
(5)
0
fi αi .
(6)
Rn
Die Koeffizienten αi = 0 φi (s)ds sind unabhängig von der Funktion f und
liegen tabelliert vor. Es sind rationale Zahlen mit der Eigenschaft
n
X
αi = n
(7)
i=0
Im Fall n = 1 ergibt dies die Trapezregel {α0 , α1 } = { 21 , 21 }
Z b
h
(f0 + f1 )
P1 (x)dx =
2
a
b−a
=
(f (a) + f (b))
2
(8)
(9)
und für n = 2 die Simpson-Regel {α0 , α1 , α2 } = { 13 , 43 , 31 }
Z b
h
P2 (x)dx =
(10)
(f0 + 4f1 + f2 )
3
a
b−a
b+a
=
(f (a) + 4f (
) + f (b))
(11)
6
2
Die Fehler der beiden obigen Integrationsnährungsformeln lassen sich mit
5
3
Hilfe des Taylorschen Restglieds abschätzen zu h12 f (2) (ξ) und h90 f (4) (ξ) mit
ξ ∈ [a, b], wobei f (n) (x) die n-te Ableitung der Funktion f bedeutet. Zur Minimierung des Fehlers wird im Allgemeinen nicht der Grad n des Polynoms
erhöht, sondern der Faktor h durch Unterteilung des Intervalls in Teilabschnitte verkleinert. Für h < 1 werden die Potenzen sehr schnell klein. Hierzu werden die Summen nicht über das gesamte Intervall [a, b] ausgewertet,
sondern dies wird in N Teilintervalle der Breite h = b−a
N unterteilt, deren
Einzelergebnisse dann aufsummiert werden.
Angewandt für die Trapezsumme bringt die Auswertung auf dem Teilintervall [xi , xi+1 ] den Nährungswert Ti := h2 [f (xi ) + f (xi+1 )]. Durch wiederholte
P −1
Anwendung dieser Formel wird die Gesamtsumme IN = N
i=0 Ti des Integral approximiert durch
Z b
N
−1
X
h
f (x)dx ' IN :=
[f (xi ) + f (xi+1 )]
(12)
2
a
i=0
f (a)
f (b)
= h[
+ f (a + h) + f (a + 2h) + · · · + f (b − h) +
]
2
2
Tip: Implementieren Sie die integral Routine gegen eine abstrakte Funktion f (x), die durch einen Funktion Pointer fp=double (*f)(double x) modelliert wird. Durch sukzessive Verkleinerung der Intervalle [xi , xi+1 ], d.h.
Erhöhung der Anzahl N der Teilintervalle, lässt sich der absolute Fehler
δN := |IN − IN −1 | der N -ten Iteration abschätzen. Die Bedingung δN < liefert dann das Abbruchskriterium.
Frage: Wie kann erreicht werden, dass der Algorithmus auch mit der Simpson Methode oder Newton-Cotes-Formeln höherer Ordnung funktioniert?
2
2
Komplexe Division
Die Division zwei komplexer Zahlen u, v ∈ C mit u ≡ a + jb und v ≡ c + jd
für a, b, c, d ∈ R ist für v 6= 0 definiert als
a + jb
u
=
v
c + jd
ac + bd
⇒ Real(z) = 2
c + d2
z=
≡
,
uv
ac + bd + j(bc − ad)
=
2
|v|
c2 + d2
bc − ad
Imag(z) = 2
.
c + d2
(13)
(14)
Es ist allerdings auch möglich die Division mit Hilfe der Polardarstellung
z = rz ejφz einer komplexen Zahl vorzunehmen:
z=
⇒ Real(z) =
ru ejφu
u
=
v
rv ejφv
=
ru
cos(φu − φv )
rv
,
ru j(φu −φv )
e
rv
ru
Imag(z) =
sin(φu − φv )
rv
(15)
(16)
Mathematisch sind beide Divisionsergebnisse equivalent, sieht man von Rundungsfehlern einmal ab. Es ergibt sich jedoch auf Grund der trigonometrischen Funktionen und der Wurzeloperation ein unterschiedliches Laufzeitverhalten für beide Lösungen.
Aufgabe
Zeigen Sie um wie viel aufwändiger die Division mittels Polarkoordinaten
nach Formel 16 im Vergleich zur direkten Berechnung nach Formel 14 ist.
Verwenden Sie die folgenden Tabelle zur Gewichtung der entsprechenden
Operationen:
Operation
add, sub
mult, div
sqrt
sin, cos, atan
Gewicht
1
2
4
20
Diese Tabelle ist gewichtet nach der Anzahl von CPU Zyklen für eine 386
FPU mit der Addition normiert auf 1.
Tip
Erstellen Sie einen Aufrufgraph (⇒ Baumstruktur) aller benötigen Operationen und gewichten Sie die Knoten entsprechend der Tabelle. Vernachlässigen Sie den Aufwand, um Zwischenergebnisse zwischen Speicher und FPU
Register hin und her zu schreiben. Es geht hier nicht um absolute Zahlen,
sondern um den relativen Unterschied der beiden Methoden.
3
3
Problematische Rekursion
Zur Berechnung der Fakultätet n! wird häufig ein rekursiver Algorithmus
verwendet, der genau n rekursive Aufrufe benötigt. Eine solche Verkettung
von rekursiven Aufrufen kann jedoch unter Umständen ungünstig sein, wie
das folgende Beispiel der Fibonacci Zahlen Fn zeigt. Diese sind ähnlich zur
Fakultät rekursiv definiert
F1
≡
F2 ≡ 1
(17)
Fn := Fn−1 + Fn−2
∀ n ∈ N\{1, 2}.
(18)
Machen Sie sich Gedanken zum Laufzeitverhalten eines rekursiven Algorithmus fib(n)≡ Fn . Überlegen Sie wie die Anzahl an rekursiven Aufrufen von
fib – bezeichnet als RF (n) – ansteigt, um Fn für ein beliebiges n > 2 zu
berechnen.
Anbei zur Illustration des exponentiellen Verhaltens eine Tabelle mit
einigen Fibonacci Zahlen Fn und der Anzahl RF (n) an notwendigen Rekursionen zu deren Berechnung.
n
3
4
5
10
20
30
F(n)
2
3
5
55
6765
832040
RF (n)
3
5
9
109
13529
1664079
Aufgabe
• Entwickeln Sie einen rekursiven Algorithmus fib(int n) zur Berechnung
der Fibonacci Zahlen.
• Wie lautet das Bildungsgesetz von RF (n)?
• Wie kann der Algorithmus verbessert werden, so dass er lineares Verhalten zeigt?
Tip
Das Bildungsgesetz RF (n) kann selbst rekursiv definiert werden und besitzt
auch eine Darstellung mit Hilfe der Fibonacci Zahlen. Skizzieren Sie den
Aufrufgraphen (⇒ Baumstruktur) für die Berechnung von F5 , um sich klar
zu machen, weshalb hierzu 9 Aufrufe von fib benötigt werden.
4
Herunterladen