Ubung I zur Vorlesung Informatik III

Werbung
Übung I
zur Vorlesung Informatik III
Prof. Dr. Nikolaus Wulff
Zum 14. Oktober 2010
1
ADT Polynom
Entwickeln Sie den generischen Datentyp Polynom. Eine (reelle) Polynomfunktion n-ten Gerades ist definiert als eine Abbildung
pn : R
x
→ R
7→ pn (x) := an xn + · · · + a1 x + a0 ,
an 6= 0.
(1)
Hierbei sind die reelle Zahlen a0 , a1 , · · · , an ∈ R die (n + 1) Koeffizienten des
Polynoms pn (x). Sehen sie für den ADT eine geeignete Struktur vor, so dass
eine allgemeine eval-Funktion ein solches Polynom für ein beliebiges x ∈ R
auswerten kann, wie in der Headerdatei (1) vorgesehen. Entwickeln Sie eine
effiziente Implementierung der fehlenden Funktionen.
1
2
3
/∗ polynom.h ∗/
#ifndef POLYNOM H
#define POLYNOM H
4
5
6
7
8
/∗ structure for ADT Polynom ∗/
typedef struct polynom struct {
/∗ attributes missing
∗/
} ∗Polynom;
9
10
11
/∗ evaluate polynom p(x) at point x ∗/
double eval(double x, Polynom p);
12
13
14
/∗ add two polynoms
∗/
Polynom addpoly(Polynom p1, Polynom p2);
15
16
17
/∗ multiply two polynoms
∗/
Polynom multpoly(Polynom p1, Polynom p2);
18
19
20
#endif /∗
POLYNOM H ∗/
Listing 1: Header Datei für den ADT Polynom.
1
Tip
Die Summe (1) eignet sich gut für eine Auswertung nach dem Horner Schema,
d.h. die pow-Funktion wird nicht benötigt! Zur Berechnung der Koeffizienten bei der Multiplikation zweier Polynome eignet sich die Cauchy Produkt
Formel.
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=
≡
,
ac + bd + j(bc − ad)
uv
=
|v|2
c2 + d2
bc − ad
Imag(z) = 2
.
c + d2
(2)
(3)
Es ist allerdings auch möglich die Division mit Hilfe der Polardarstellung z =
rz ejφz einer komplexen Zahl vorzunehmen:
ru ejφu
u
=
v
rv ejφv
=
ru
cos(φu − φv )
rv
,
z=
⇒ Real(z) =
ru j(φu −φv )
e
rv
ru
Imag(z) =
sin(φu − φv )
rv
(4)
(5)
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 5 im Vergleich zur direkten Berechnung nach Formel 3 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.
2
Herunterladen