praktikum i software-anteil - ti3.tu-harburg.dehaerter/praktikumi/softwarepraktikumineu.pdf ·...

38
Praktikum I Software-Anteil Technische Universität Hamburg-Harburg Institut für Zuverlässiges Rechnen http://www.ti3.tu-harburg.de/deutsch/aktuell/PraktikumI.html Stand: 17. März 2010 Inhaltsverzeichnis 1 Termin – Einführung in Matlab 3 2 Termin – Numerische Algorithmen in Matlab 7 2.1 Nullstellen reeller Funktionen ...................... 7 2.1.1 Bisektionsmethode ........................ 7 2.1.2 Das Newton-Verfahren ...................... 8 2.1.3 Das Sekantenverfahren ...................... 12 2.1.4 Nullstellen von Polynomen .................... 13 2.1.5 Nullstellenbestimmung mit Matlab ............... 14 2.2 Eigenwertaufgaben ............................ 14 3 Termin – Rechnerarithmetik 18 3.1 Einleitung ................................. 18 3.2 Gleitpunktarithmetik ........................... 19 3.2.1 Gleitpunktzahlen ......................... 19 3.2.2 Rundung ............................. 20 3.2.3 Die arithmetischen Operationen für Gleitpunktzahlen ...... 22 3.2.4 Bemerkungen und Beispiele ................... 24 3.2.5 Fehlerfortpflanzung während der Rechnung ........... 26 3.3 Kondition eines Problems und Kondition eines Verfahrens ....... 28 3.4 Fehleranalyse ............................... 29 3.5 Ausblick und Literatur .......................... 32 3.6 Auswertung und Überlegungen ...................... 34 4 Termin – Intervallarithmetik 36 5 Termin – Einschließungsmethoden 37

Upload: lythu

Post on 23-Aug-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Software-Anteil

Technische Universität Hamburg-HarburgInstitut für Zuverlässiges Rechnen

http://www.ti3.tu-harburg.de/deutsch/aktuell/PraktikumI.html

Stand: 17. März 2010

Inhaltsverzeichnis

1 Termin – Einführung in Matlab 3

2 Termin – Numerische Algorithmen in Matlab 72.1 Nullstellen reeller Funktionen . . . . . . . . . . . . . . . . . . . .. . 7

2.1.1 Bisektionsmethode . . . . . . . . . . . . . . . . . . . . . . . .72.1.2 Das Newton-Verfahren . . . . . . . . . . . . . . . . . . . . . .82.1.3 Das Sekantenverfahren . . . . . . . . . . . . . . . . . . . . . .122.1.4 Nullstellen von Polynomen . . . . . . . . . . . . . . . . . . . .132.1.5 Nullstellenbestimmung mit Matlab . . . . . . . . . . . . . . .14

2.2 Eigenwertaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . .14

3 Termin – Rechnerarithmetik 183.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183.2 Gleitpunktarithmetik . . . . . . . . . . . . . . . . . . . . . . . . . . .19

3.2.1 Gleitpunktzahlen . . . . . . . . . . . . . . . . . . . . . . . . .193.2.2 Rundung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203.2.3 Die arithmetischen Operationen für Gleitpunktzahlen . . . . . . 223.2.4 Bemerkungen und Beispiele . . . . . . . . . . . . . . . . . . .243.2.5 Fehlerfortpflanzung während der Rechnung . . . . . . . . . .. 26

3.3 Kondition eines Problems und Kondition eines Verfahrens . . . . . . . 283.4 Fehleranalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293.5 Ausblick und Literatur . . . . . . . . . . . . . . . . . . . . . . . . . .323.6 Auswertung und Überlegungen . . . . . . . . . . . . . . . . . . . . . .34

4 Termin – Intervallarithmetik 36

5 Termin – Einschließungsmethoden 37

Page 2: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Anmeldung

Die Anmeldung und Einteilung in Gruppen findet am Mittwoch den 8. April um 14:00Uhr im Institut für Angewandte Physik (IAP), Jungiusstrasse 9, Wolfgang Pauli Hörsaal(Hörsaal I), statt. Zu der Anmeldung zum Physik-Praktikum gilt für alle Praktikumsteil-nehmer Anwesenheitspflicht !!!Das Praktikum beginnt am 15. April 2009. Pro Block finden 5 Praktikumstermine mitt-wochs statt. Weitere Informationen erhalten Sie bei der Anmeldung und im Internetunter:http://www.ti3.tu-harburg.de/deutsch/aktuell/PraktikumI.html

sowie:http://www.physnet.uni-hamburg.de/TUHH/info.htm

Beschreibung

Das Praktikum I besteht aus einem Software-Anteil und einemPhysik-Anteil. Der Soft-ware-Anteil wird vom Institut für Zuverlässiges Rechnen durchgeführt. Im Software-Anteil lernen Sie den Umgang mit dem Software-Paket MATLAB sowie der MATLAB -Toolbox INTLAB . Desweiteren werden die Grundlagen der Rechnerarithmetikund Run-dungsfehleranalysen behandelt. Sie implementieren Verfahren für die Problemklasseder nichtlinearen Gleichungssysteme. Dabei werden sowohlapproximative als auch ve-rifizierte Resultate berechnet. Tutorials mit Beispielen und Übungsaufgaben werden zurVerfügung gestellt.Im Verlauf des Praktikums wird erwartet, dass Sie die zur Verfügung gestellten Tutorialszu den wöchentlichen Aufgaben bereits vor der Übung bearbeiten und daraufhin in derÜbung die Aufgaben in Gruppen lösen können.Für eine erfolgreiche Teilnahme amPraktikum besteht Anwesenheitspflicht!

Lernziele:

• Grundlegende Kenntnisse der Programmierung in Matlab

• Programmierung numerischer Verfahren für nichtlineare Gleichungssysteme

• Grundlagen der Rechnerarithmetik

• Erkennen von schlecht konditionierten Problemen und schlecht konditioniertenVerfahren

• Einführung in die Intervallarithmetik

• Beurteilung der Güte numerischer Resultate anhand von Beispielen

• Berechnung verifizierter numerischer Resultate mit Intlab.

2

Page 3: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

1 Termin – Einführung in Matlab

Der erste Praktikumstermin dient der Einführung in Umgang und Programmierung mitMATLAB . Matlab ist ein kommerzielles Entwicklungssystem, das vonder Firma „Math-works“ vertrieben und weiterentwickelt wird. Es dient primär der Lösung diverser ma-thematischer Probleme und der graphischen Darstellung derErgebnisse. Vor allem istMatlab für numerische Berechnungen mit Vektoren und Matrizen ausgelegt (MATrixLABoratory). Durch zahlreiche Zusatzpakete zur Signalverarbeitung, Optimierung undSimulation hat Matlab nicht nur an Universitäten und Hochschulen, sondern zunehmendauch in der Industrie eine große Verbreitung gefunden. In Matlab ist eine gleichnamigeinterpretierte Programmiersprache „Matlab“ integriert.Die Syntax der Sprache ist starkmathematisch orientiert. Wie Sie nun vermuten werden, ist es Ihre erste Aufgabe, sichin Matlab einzuarbeiten. Lesen Sie dafür die Matlab-Einführung von T. Schramm [11]und führen Sie die Beispiele in der Einführung selber am Rechner aus.Online-Ressourcen zu Matlab:http://www.mathworks.com/moler/chapters.html

http://www.mathworks.com/moler/exm/index.html

http://docs.tu-harburg.de/docs/matlab/

http://people.inf.ethz.ch/arbenz/MatlabKurs/

http://www1.uni-hamburg.de/W.Wiedl/Skripte/Matlab/

Empfohlene Literatur:Buch: MATLAB kompakt. Mit CDROM, 2. Auflage, W. Schweizer [12](http://books.google.de/books?q=matlab+kompakt)

Aufgabe 1

Schreiben Sie ein Matlab-Script in dem Sie nacheinander Lösungen zu den nachfolgen-den Aufgaben präsentieren. Fügen Sie in die Präsentation sinnvolle Pausen ein.

Aufgabe 2

Schreiben Sie eine Funktion die bis zu einer gegeben Tiefen folgenden Kettenbruch(approximativ) berechnet:Tipp: Führen Sie die Berechnungen von unten nach obenaus.

1 +1

1 +1

1 +1

1 + 1

Aufgabe 3

Dask-te Tschebyschow-PolynomTk(x) ist folgendermaßen definiert:

T0(x) = 1 und

T1(x) = x

Tk(x) = 2 xTk−1(x) − Tk−2(x) k ≥ 2

a) Es soll eine Funktion, die für einen Vektorx und eink ≥ 0 die entsprechen-den Funktionswerte desk-ten Tschebyschow-Polynoms berechnet, programmiertwerden. (Erwünscht ist eine nicht rekursive Implementierung.)

b) Plotten Sie für alle0 ≤ k ≤ 35 die Graphen der Tschebyschow-PolynomeTk(x)auf dem Intervall[−1, 1].

3

Page 4: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 4

Stellen Sie den Graphen der Funktionf(x) = 1(x−1)2

+ 3(x−2)2

über dem Intervall[0, 3] dar. Schreiben Sie einen Titel über der Graphik und beschriften Sie diex- undy-Achsen. Skalieren Sie diey-Achse so, dass der Graph der Funktion gut analysiertwerden kann, (help axis). Beschriften Sie den Grpahen der Funktion. Was bewirkt derBefehlgrid on?

Aufgabe 5

Stellen Sie den Graphen der Funktionf(x, y) = sin(x2 + y2) + e−50(x2+y2) dar. Ver-wenden Sie dafür die Befehlemesh, meshc, surf , surfc und contour3. Was sind dieUnterschiede der einzelnen Plotfunktionen?

Aufgabe 6

a) Bestimmen Sie eine graphische Lösung der Fixpunkt-Gleichungx =√

x + 1.

b) Geben Sie in der Konsole mehrmals die Anweisung x =sqrt (1 + x) mit x0 = 3ein. Was beobachten Sie? Leiten Sie aus Ihren Beobachtungeneinen Algorithmuszur numerischen Berechnung der Lösung.

c) Vergleichen Sie die erhaltene Lösung mit dem Wert des Kettenburchs aus Aufgabe2 für n = 31. Was können Sie erkennen?

Aufgabe 7

Stellen Sie in einem parametrischen3D-Plot (für t ∈ [1, 20]) folgende Kurve dar:

xyz

=

t2

20[sin(8πt) + cos(πt/20)]

t2

20[cos(8πt) + t/20]

t

Aufgabe 8

Für Matrizen mit sehr vielen Nullen (spärlich besetze Matrizen) wird in Matlab derDatentypsparseverwendet. Spärliche Zufallsmatrizen können mit dem Befehl spranderzeugt werden.

a) Erzeugen Sie eine spärlich besetzte ZufallsmatrixA ∈ Rnxn, n = 5000 mit der

Dichted = 0.005.

b) Ermitteln Sie den Speicherverbrauch in KBytes für die Matrix.

c) Messen Sie die Zeit für die MatrixmultiplikationAT A.

d) Mit A= full (A) wird der Datentyp der MatrixA zu double geändert. Wie groß istder Speicherverbrauch und wieviel Zeit benötigt die Multiplikation jetzt? ErklärenSie den Unterschied.

4

Page 5: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 9

a) Versuchen Sie folgende lineare Gleichungssysteme in Matlab zu lösen. NotierenSie dabei, welche Probleme lösbar sind und welche eine eindeutige Lösung besit-zen.

1 2 34 5 67 8 9

x =

111

1 2 32 4 63 6 9

x =

123

1 2 32 3 13 1 2

x =

357

b) Lösen Sie folgende Matrixgleichung:

−2 −2 −2−2 −2 2−2 2 2

X =

100 0 00 100 00 0 100

Aufgabe 10

Bei geeigneter Wahl der Parameter ergibt die Pascalsche Schnecke die so genannte Kar-dioide (Herzkurve), die ihren Namen wegen ihrer Form erhielt. Die Gleichung der Pas-calschen Schnecke lautet:

• (implizit) in Kartesischen Koordinaten:(x2 + y2 − ax)2 − b2(x2 + y2) = 0

• in Polarkoordinaten (Radius und Winkel):r = a cos(φ) + b, 0 ≤ φ ≤ 2π

• als Parametergleichung:x = a cos(t)2 + b cos(t) y = a cos(t) sin(t) + b sin(t),0 ≤ t ≤ 2π

Plotten Sie den Graphen der Pascalschen Schnecke für die Parameterwertea, b = 1 . . . 5.

a) in Kartesischen Koordinaten mit Hilfe der Plot-Funktionezplot

b) in Polarkoordinaten mit Hilfe der Plot-Funktionpolar

c) über die Parametergleichung mit der normalenplot -Funktion

5

Page 6: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 11∗

Erstellen Sie eine einfache GUI in Matlab, in der eine mathematische Funktion sowie einWertebereich eingegeben werden können und durch klicken auf einen Button („draw“)der Graph der eingegebenen Funktion über dem vorgegebenen Wertebereich im gleichenFenster dargestellt wird. Zusätzlich soll es einen Button („clear“) geben, mit dem derBenutzer die GUI zurücksetzen kann.

Zur Einführungen in GUI-Programmierung mit Matlab nutzen Sie die Links auf derHomepage von MathWorks:http://blogs.mathworks.com/steve/matlab-gui-programming-resources/

oder auch diesen Link:http://www.mepnet.de/

6

Page 7: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

2 Termin – Numerische Algorithmen in Matlab

2.1 Nullstellen reeller Funktionen

In vielen naturwissenschaftlichen Bereichen werden Verfahren zur Nullstellenbestim-mung von Funktionen benötigt. Abgesehen von einfachen Beispielen werden die Null-stellen in der Praxis niemals analytisch bestimmt. Viel mehr werden Näherungslösungenmit Hilfe numerischer Methoden ermittelt. Es folgt nun eineBeschreibung der Standard-verfahren zur numerischen Lösung eindimensionaler Gleichungen der Formf(x) = 0.Anhand von Beispielen wird gezeigt, unter welchen Bedingungen die Algorithmen zumgewünschten Ergebnis führen und was es zu beachten gilt, damit die Konvergenz gesi-chert ist. Nachfolgend werden Sie diese Algorithmen in Matlab programmieren müssen.(Referenz zum Nachschlagen: [9, Kap.4]).

2.1.1 Bisektionsmethode

Die Bisektionsmethode ist ein Verfahren zur Einschließungvon Nullstellen reeller ste-tiger Funktionen. Die Bisektion ist sehr zuverlässig dafüraber relativ langsam. Für einereelle Funktionf , die auf dem Startintervall[a, b] genau eine Nullstelle besitzt und dortstetig ist, kann mit der Methode stets eine Einschließung der Nullstelle bestimmt wer-den. Der Nachteil der Methode ist, dass sie (in etwa) drei Funktionsauswertungen proDezimalstelle benötigt. Das folgt aus folgender Abschätzung für die Anzahl benötigterSchritte bei geforderter relativer Genauigkeitǫ := 10−t:

n ≥ log2

|b − a|ǫ

= log2 10t|b − a| ≈ 3t + log2 |b − a| .

Das Verfahren funktioniert folgendermaßen: Man beginnt mit dem vorgegebenen Start-intervall [a, b] und teilt es in jedem Schritt in zwei Hälften auf. Falls dannf(a)f(a+b

2) ≤

0, so liegt die Nullstelle in der linken Intervallhälfte[a, a+b2

]. Andernfalls kann sich dieNullstelle nur im rechten Teilintervall[a+b

2, b] befinden. Sobald die linke und die rechte

Intervallgrenzen sich nicht mehr als umǫ unterscheiden, stoppt der Algorithmus.Folgendes Beispiel veranschaulicht typisches Konvergenzverhalten der Bisketionsme-thode:

Beispiel 1. Das Polynom p(x) = x3−5x2−x+5 hat auf dem Intervall [−1.5;−0.75]die Nullstelle x∗ = −1. Sie soll in dem Beispiel auf vier Nachkommastellen genau

bestimmt werden:

linke Intervallgrenze rechte Intervallgrenze

a0 = -1.500000000000000 b0 = -0.750000000000000

a1 = -1.125000000000000 b1 = -0.750000000000000

a2 = -1.125000000000000 b2 = -0.937500000000000

a3 = -1.031250000000000 b3 = -0.937500000000000

a4 = -1.031250000000000 b4 = -0.984375000000000...

...

a11 = -1.000122070312500 b12 = -0.999755859375000

a12 = -1.000122070312500 b13 = -0.999938964843750

a13 = -1.000030517578125 b14 = -0.999938964843750

7

Page 8: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Der MATLAB -Code für die Bisektion lautet:

k =0;f a =fun ( a ) ;whi le ( abs( b−a ) > t o l∗abs( b ) )

mid =( a+b ) / 2 ;fmid= fun ( mid ) ;i f f a∗ fmid <=0

b=mid ;e l s e

a=mid ;endk=k +1;

end

Die Bisektion eignet sich im folgenden Fall:

• Die Startwerte der klassischen Verfahren liegen nicht hinreichend nahe an dergesuchten Nullstelle, so dass dort keine lokale Konvergenzeintritt,

• es liegt ein Vorzeichenwechsel im gegebenen Intervall vor und

• die Funktion ist auf dem Intervall stetig.

Die größten Nachteile der Bisektion sind, dass sie viel zu langsam ist und nur zur Be-stimmung von einfachen Nullstellen eingesetzt werden kann. (Eine einfache Nullstelleliegt immer dann vor, wenn der Funktionsgraph diex-Achse tatsächlich schneidet undnicht nur berührt).

2.1.2 Das Newton-Verfahren

Das Newton-Verfahren ist eine weitere Standardanwendung der numerischen Mathema-tik zur approximativen Lösung von nichtlinearen Gleichungen der Formf(x) = 0 miteiner zweimal stetig differenzierbaren Funktionf : R → R. Geometrisch betrachtetwird bei dem Verfahren in der Nähe der gesuchten Lösung eine Tangente an den Gra-phen der Funktion angelegt und deren Schnittpunkt mit derx-Achse als eine verbesserteNäherung der Lösung im nächsten Iterationsschritt verwendet. Die Iteration wird solan-ge fortgeführt, bis die Näherungslösung bestimmte Abbruchbedingungen erfüllt.Die Tangente im Punktx0 ist gegeben durch Taylor-Polynom erster Ordnung:

T1(x) = f(x0) + f′

(x0)(x − x0) .

Ist f′

(x0) 6= 0, so schneidet die Tangente diex-Achse im Punkt:

x1 = x0 −f(x0)

f ′(x0).

Im nächsten Iterationsschritt wird dieser Punkt als Ausgangspunkt genommen. Somitergibt sich folgende Iterationsvorschrift für das Newton-Verfahren:

xn+1 = xn − f(xn)

f ′(xn), f

(xn) 6= 0 .

Um die Konvergenzgeschwindigkeit der Newton-Iteration zuanalysieren, wird der Be-griff der Konvergenzordnung eingeführt.

8

Page 9: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Definition 1 (Konvergenzordnung). Sei x∗ eine Lösung der Gleichung x = g(x)und die Iterationsfolge xn+1 := g(xn) konvergiere gegen x∗. Dann konvergiert die

Iterationsfolge

• linear, falls es eine Konstante C mit

limn→∞

|xn+1 − x∗||xn − x∗|

= C < 1

gibt

• superlinear, falls es eine Folge Cn von Konstanten mit

|xn+1 − x∗||xn − x∗|

= Cn+1 und limn→∞

Cn = 0

gibt

• mit p-ter Ordnung, p > 1, falls es eine Konstante Cp mit

limn→∞

|xn+1 − x∗||xn − x∗|p

= Cp

gibt.

Für eine zweimal stetig differenzierbare Funktionf konvergiert das Newton-Verfahrenin der Nähe einereinfachenNullstellex∗ (d.h.f

(x∗) 6= 0) mindestens mit2-ter Ordnung.Dies kann leicht mit Hilfe der Taylor-Entwicklung vonf im Punktxn gezeigt werden:

0 = f(x∗) = f(xn) + f′

(xn)(x∗ − xn) +1

2f

′′

(ξ)(x∗ − xn)2 .

Durch einfache Umformung erhält man:

xn − f(xn)

f ′(xn)− x∗ = xn+1 − x∗ =

1

2

f′′

(ξ)

f ′(xn)(x∗ − xn)2 .

Daraus resultiert die Konvergenzordnung des Newton-Verfahrens. Denn es gilt:

limn→∞

|xn+1 − x∗||x∗ − xn|2

=

1

2

f′′

(ξ)

f ′(xn)

=: C2 .

Somit wird auch der Fehler bis auf eine multiplikative Konstante quadriert:

rn+1 = xn+1 − x∗ =1

2

f′′

(ξ)

f ′(xn)r2n = O(r2

n) .

Für die Anzahl gültiger Stellen bedeutet das eine Verdopplung pro Iterationsschritt.

Beispiel 2. Für das Polynom aus Beispiel 1 soll die Nullstelle x∗ = −1 mit

Newton-Verfahren berechnet werden. Als Startpunkt sei x0 = −1.75 gegeben.

x0 = −1.750000000000000

x1 = −1.208029197080292

x2 = −1.023561108445093

x3 = −1.000360876823774

x4 = −1.000000086787459

x5 = −1.000000000000005

x6 = −1.000000000000000 .

9

Page 10: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

xk

xk+1

Abbildung 1: alternierende Iteration

Deutlich sieht man den Unterschied zwischen Bisektion und Newton-Verfahren. Bei derBisketion wird der Fehler von Schritt zu Schritt etwa halbiert. Beim Newton-Verfahrenverdoppelt sich die Anzahl der gültigen Stellen pro Schritt.Leider konvergiert das standard Newton-Verfahren mit2-ter Ordnung nur dann, wennder Startwertx0 schon „ausreichend nahe“ an der Nullstelle liegt. Betrachten Sie dazufolgendes Beispiel, in dem eine alternierende Iterationsfolge entsteht.

Beispiel 3. Sei f(x) = x3 − 2x + 2. Als Startpunkt wähle man x0 = 0. Die

Newton-Methode liefert mit diesem Startwert die alternierende Zahlenfolge:

x0 = 0

x1 = 1

x2 = 0

x3 = 1

x4 = 0

. . .

In Abbildung 1 ist das aufgetretene Problem graphisch dargestellt. Der Schnittpunkt

der Tangente im Punkt xk+1 entspricht gerade dem vorherigen Iterationspunkt xk.

Wählt man dagegen x0 = 3 so liefert die Iteration:

x0 = 3.000000000000000 . . .x1 = 2.080000000000000 x16 = -1.775124401060528

x2 = 1.457102885456135 x17 = -1.769316630030581

x3 = 0.958311901069188 x18 = -1.769292354661828

. . . x19 = -1.769292354238631 .Diese Iterationsfolge konvergiert, aber erst in der Nähe der Nullstelle macht sich

die quadratische Konvergenz bemerkbar.

Im Extremfall kann das Newton-Verfahren sogar divergieren. Die Iterationspunkte ent-fernen sich dann von Schritt zu Schritt von der gesuchten Nullstelle.

10

Page 11: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

x0

x1

>>x2

x3<<

Abbildung 2: divergente Iterationsfolge

Beispiel 4. Sei f(x) := arctan(x). Mit dem Startpunkt x0 = 2 divergiert das

Verfahren:

x1 = −3.5357435889704520e + 00

x2 = 1.3950959086927490e + 01

x3 = −2.3386004197933853e + 10

x4 = 8.5907666719503535e + 20

x5 = −1.1592676698907246e + 42

x6 = +2.1109955876109792e + 84

x7 = −6.9999433953175654e + 168

x8 = +Inf .

In Abbildung 2 sind die ersten 2 Iterationsschritte dargestellt.

Die letzten beiden Beispiele zeigen, dass das Newton-Verfahren nurlokal konvergentist. Damit das Verfahren konvergiert, muss zuerst ein geeigneter Startpunkt nahe dergesuchten Nullstelle gefunden werden. Ohne einen wohl überlegten Startwert kann allesmögliche passieren:

• die Folge kann divergent sein, d.h. die Folgenglieder entfernen sich mit jedemSchritt von der gesuchten Nullstelle,

• die Folge kann zyklisch sein, d.h. sie nimmt periodisch gleiche Werte an

• die Folge konvergiert, jedoch nicht gegen die gesuchte Nullstelle und am Anfangmöglicherweise nicht quadratisch.

Weitere Schwierigkeiten ergeben sich, wenn die Funktionf nicht genügend glatt ist.Das Verfahren läuft nur dann ordnungsgemäß ab, wenn die erste und die zweite Ablei-tung vonf in der Nähe der gesuchten Nullstelle stetig und begrenzt istund wenn derBetrag der ersten Ableitung in einer Umgebung der Lösung größer Null ist.Mögliche Abbruchkriterien für das Newton-Verfahren sind:

11

Page 12: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

• ‖f(x)‖ ≤ ǫ ,

• ‖xn+1 − xn‖ ≤ ǫ‖xn‖ oder

•∣

xk+1−xk

1−f′ (xk+1)

∣≤ ǫ .

Sinnvollerweise wird man auch eine maximale Anzahl an Iterationsschritten vorgeben.Dadurch werden Endlosschleifen vermieden, wenn die Folge nicht konvergent (oder nursehr langsam konvergent) sein sollte.Das Problem im Beispiel 4 ist, dass gleich in den ersten Schritten über die gesuchteNullstellex∗ = 0 „hinaus geschoßen“ wird. Die dort gemachten Schritte sind einfachviel zu lang. Folgende Strategie liefert hier Abhilfe. Ist die Bedingung

|f(xk+1)| < |f(xk)|

verletzt, so wird die neue Stellexk+1 verworfen und statt dessen ein anderer Punkt

xk+1 =xk+1 + xk

2

genommen. Ist dann die Bedingung immer noch nicht erfüllt, wird abermals halbiert,solange bis der Betrag des Funktionswertes an der neuen Stelle kleiner als|f(xk)| ist.Formal kann diese Änderung des Verfahrens wie folgt dargestellt werden:

xk+1 = xk −αk

f ′(xk)f(xk) mit 0 < αk ≤ 1 ,

wobei der Parameterα hier als „Dämpfungsfaktor“ bezeichnet wird. In einigen Fällenist es notwendig, dass man von vorn herein mit einem kleinen Dämpfungsfaktor (z.B.α = 1/16) die Iteration beginnt. Bei jeder Iteration wird der Dämpfungsfaktor dann neubestimmt. Ist die obige Bedingung erfüllt, so wird der Dämpfungsfaktor vergrößert (z.B.mit dem Faktor 2), ansonsten wird er solange halbiert bis eine Verkleinerung im Funk-tionswert erreicht ist. Dieses modifizierte Version des Verfahrens wird dasgedämpfteNewton-Verfahren genannt. Ein Nachteil von dem gedämpften Newton-Verfahrenist,dass es fürα = 1/2t mindestens die erstent Schritte nur lineare Konvergenzordnungbesitzt. Trotzdem ist es in vielen Fällen zu empfehlen das gedämpfte Newton-Verfahrender standard Version vorzuziehen.Ein weiteren Nachteil entsteht für beide Varianten des Newton-Verfahrens dadurch, dasszu ihrer Durchführung die Berechnung der ersten Ableitung f’(x) benötigt wird. Dies istjedoch oft aufwändig oder sogar unmöglich, zum Beispiel wenn die Funktionf nichtexplizit, sondern als ein Computerprogramm gegeben ist. Insolchen Fällen kann dieAbleitung der Funktion durch den Differenzenquotienten:

f(xn) − f(xn−1)

xn − xn−1

approximiert werden. Man erhält dann das so genannte Sekantenverfahren.

2.1.3 Das Sekantenverfahren

Beim Sekantenverfahren wird die Funktion lokal durch ihre Sekante zu den Stützstel-lenxn undxn−1 angenähert. Als Startpunkt im nächsten Iterationsschrittwird dann der

12

Page 13: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Schnittpunkt der Sekanten mit derx-Achse genommen. Somit lautet die Iterationsvor-schrift für das Sekantenverfahren:

xn+1 = xn − f(xn)xn − xn−1

f(xn) − f(xn−1).

Das Sekantenverfahren hat ähnliche Konvergenzeigenschaften wie Newton-Verfahren.Es konvergiert lokal superlinear (leider nicht mehr quadratisch), mit dem Faktor(

√5 +

1)/2, [13, S. 265]. Die Anzahl richtiger Stellen nimmt also in jedem Schritt ungefährum den Faktor1.6 zu.Der Vorteil dieser Methode gegenüber dem Newton-Verfahrenist, dass die Ableitungder Funktion nicht mehr benötigt wird.Gerade wenn die Auswertung der Ableitung vielRechenzeit kostet, ist es viel vorteilhafter die höhere Anzahl an Iterationsschritten inKauf zu nehmen, dafür aber auf die Berechnung der Ableitung zu verzichten. Das machtdas Verfahren in vielen Fällen sogar effizienter als das Newton-Verfahren.

2.1.4 Nullstellen von Polynomen

Die Bestimmung der Nullstellen von Polynomen spielt in vielen Anwendungsbereichender Ingenieurwissenschaften eine wichtige Rolle, so zum Beispiel in der Regelungstech-nik bei der Stabilitätsanalyse. Die Lage der Nullstellen beschreibt dort die Stabilität desSystems bzw. der Systemantwort. Zur Vereinfachung seien hier nur Polynome mit reel-len Koeffizienten und reellen Nullstellen betrachtet. Das Newton-Verfahren ist für dieseAufgabe immer dann gut geeignet, wenn die Nullstellen des Polynoms gut separiert voneinander liegen. Bilden die Nullstellen eines Polynoms dagegen einen Cluster, d.h. lie-gen sie sehr dicht beieinander, wird es schwer sein Startwerte für das Newton-Verfahrenzu finden, so dass es gegen die gewünschte Nullstelle konvergiert. Zum Beispiel sei fol-gendes Polynom gegeben:

p(x) = x5 − 1.2x4 + 0.2x3 − 9 · 10−4x2 + 8 · 10−7x − 2 · 10−10

Das Polynom wurde so konstruiert, dass es die fünf Nullstellen x1 ≈ 1, x2 ≈ 0.19,x3 ≈ 3.5 · 10−3 x4 ≈ 5.8 · 10−4 und x5 ≈ 5.02 · 10−4 besitzt. Alle Nullstellen desPolynoms liegen im Intervall[0; 1]. Anscheinend wird die Kenntnis des Intervalls nochnicht ausreichend sein, um eine bestimmte Nullstelle zu berechnen. Angenommen manmöchte alle Nullstellen im Intervall[0, 0.25] bestimmen. Wird das Newton-Verfahrenmit dem Startwertx0 = 0 gestartet liefert es als Ergebnisx7 ≈ 5.02. Fürx0 = 0.25 istder Rückgabewertx6 ≈ 0.19. Um weitere Nullstellen zu bestimmen, müsste man nunbessere Startpunkte finden.Es gibt aber auch eine andere Möglichkeit die restlichen Nullstellen zu bestimmen.Man könnte zum Beispiel die bereits gefundenen Nullstellenmittels Polynomdivisionabspalten. Da wir aber nur Approximationen der Nullstellenhaben, wird das Restpo-lynom nicht korrekte Koeffizienten besitzen. Sind die Nullstellen stark abhängig vonden Polynomkoeffizienten, werden dann im nächsten Schritt nur grobe Näherungen derNullstellen berechnet. Dies kann bei mehrfacher Abspaltung von „Nullstellen“ dazuführen, dass die am Ende berechneten Näherungslösungen nichts mehr mit den tatsäch-lichen Nullstellen des Polynoms zu tun haben werden. Es gibtauch eine Methode der„impliziten“ Abspaltung bereits gefundener Nullstellen.Aus Platzgründen werden wirdarauf nicht eingehen können.In Matlab wird ein Polynom in Form des Vektors der Koeffizienten dargestellt, zumBeispiel:

p(x) = 2x2 + 3x + 5 in Matlabp = [ 2 3 5 ] .

13

Page 14: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Die Funktion roots(p) bestimmt alle Nullstellen des übergebenen Polynoms. TippenSie im Matlab-Fensterhelp poly ein, um weitere Information und Befehle zur Arbeitmit Polynomen in Matlab zu erhalten.Noch eine Möglichkeit zur Bestimmung aller Wurzeln eines Polynoms werden Sie imnächsten Abschnitt kennenlernen. An dieser Stelle wird eine effiziente Methode zurAuswertung von Polynomen vorgestellt. In der Praxis liegendie Polynome oftmals inder Standardform vor:

pn(x) = a1xn + · · ·anx + an+1 .

Sie direkt in der Form auszuwerten ist ineffizient. Zur effizienten Auswertung kann dasPolynom durch sukzessives Ausklammern vonx auf die Form:

pn(x) = (· · · ((a1x + a2)x + a3) · · ·+ an)x + an+1 ,

gebracht werden. In dieser Darstellung werden insgesamt nur 2n2 Gleitpunktoperatio-nen zur Auswertung vonpn(x) benötigt. Man nennt dieses Auswertungsverfahren vonPolynomen dasHorner-Schema. Es ist das effizienteste Verfahren zur Auswertung vonPolynomen im allgemeinen Fall. Parallel dazu kann auch die Ableitung des Polynomsberechnet werden. Man betrachte hierfür die Ableitung vonpn(x):

p′n(x) = pn−1(x) + xp′n−1(x)

wobei fürpn−1(x) = (· · · (a1x + a2)x + a3) · · ·+ an wiederum gilt:

p′n−1(x) = pn−2(x) + xp′n−2(x) .

Daraus resultiert folgende Vorschrift zur Auswertung vonpn(x) undp′n(x) an der Stellex = x:

ps = a ( 1 ) ;p = a ( 1 )∗ x+a ( 2 ) ;

f o r j =3: n+1ps = ps∗x+p ;p = p∗x+a ( j ) ;

end

(Die Koeffizienten des Polynoms sind hierbei im Vektora in absteigender Reihenfolgegespeichert)

2.1.5 Nullstellenbestimmung mit Matlab

Zur Berechnung von Nullstellen können Sie in Maltab die Routine fzero benutzen.Geben Siehelp fzero im Matlab-Befehlsfenster ein, um die Details zu den Aufrufpa-rametern und Rückgabewerten der Routine zu erfahren.

2.2 Eigenwertaufgaben

In der Mathematik trifft man häufig auf so genannte Eigenwertprobleme. Dabei sollenfür eine Matrix A nichttriviale Vektoren (xi 6= 0) und zugehörige skalare Werteλi

gefunden werden, die das lineare Gleichungssystem:

Ax = λx

14

Page 15: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

lösen. Die Werteλi werden Eigenwerte und die Vektorenxi zugehörige Eigenvektorengenannt. Sowohlλi als auchxi können im allgemeinen Fall komplex sein. In Matlabberechnet der Befehleig(A) alle Eigenwerte und Eigenvektoren einer MatrixA. Zutheoretischen Zwecken betrachten wir die Eigenwertprobleme noch etwas genauer. Dasangegebene lineare Gleichungsystem ist äquivalent zu:

Ax − λx = (A − λE)x = 0 mit E =

1 0. ..

0 1

.

Dieses lineare Gleichungsystem ist homogen und hat deswegen nur dann eine nicht-triviale Lösung, wenn die Systemmatrix (A − λE ) singulär ist. Das ist gleichbe-deutend mitdet(A − λE) = 0. Das Problem, alle Eigenwerte einer Matrix zu fin-den, ist somit äquivalent zu dem Nullstellenproblemp(λ) = det(A − λE) = 0. Aufdiese Weise erfolgt die Verknüpfung zwischen Eigenwertproblemen und der Bestim-mung der Nullstellen eines Polynoms. Umgekehrt kann jedem normierten Polynomp(x) = xn + an−1x

n−1 + · · · + a0 die so genannteBegleitmatrix des Polynoms zu-geordnet werden:

A =

0 1 0 . . . 00 0 1 . . . 0...

. . ....

0 0 0 . . . 1−a0 −a1 −a2 . . . −an−1

.

Die Eigenwerte der Begleitmatrix entsprechen gerade den Wurzeln des Polynoms. Diessieht man am einfachsten mit der Entwicklung der Determinanten nach der letzten Zeile:

0 = det(A − λE)

= det

−λ 1 0 . . . 00 −λ 1 . . . 0...

. . ....

0 0 . . . −λ 1−a0 −a1 −a2 . . . −an−1 − λ

= (−1)n(a0 + a1λ + · · ·+ an−1λn−1 + λn)

= (−1)np(λ) .

Die Matlab-Routineroots funktioniert genau nach dem Prinzip. Sie erzeugt zuerst dieBegleitmatrix des übergebenen Polynoms und ruft dann die Matlab-Funktioneig auf.

15

Page 16: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 1

Implementieren Sie die Bisektion in Matlab. Schreiben Sie dafür eine Funktion mit fol-gender Signatur [xa,xb, iter ]=bisection(fun ,a,b, tol , iter ). Die Bedeutung der Ein-gabeparameter hierbei ist:

• fun - Funktion (functionhandle) oder Funktionsname (string) deren Nullstel-le bestimmt werden soll,

• a,b - ein (die Nullstelle enthaltender) Startintervall (double Werte),

• tol - Toleranzschranke für die Abbruchbedingung (Standardwert eps) und

• iter - maximale Anzahl an Iterationen (Standardwert16).

Die beiden letzten Parameter sind optional. Wenn der Benutzer dafür keine Argumen-te übergiebt, sollen Standardwerte verwendet werden. Als Rückgabe soll Ihre Funktiondas Einschließungsintervall xa,xb und die Anzahl der tatsächlich durchgeführten Itera-tionschritte iter liefern. Nutzen Sie als Abbruchkriterium die Bedingungabs(xa−xb)<=abs(xb)∗tol.

Aufgabe 2

Finden Sie mit der Bisektion eine Einschließung für die Lösung der Gleichung3x = ex

auf dem Intervall[1, 2]. Wieviele Iterationen werden benötigt, um die relative Genauig-keit vonǫ = 10−5 zu erhalten:

a) Rechnen Sie den theoretisch benötigten Wert aus?

b) Wieviele Iterationen werden von Ihrer Funktion benötigt?

Aufgabe 3

a) Schreiben Sie eine MATLAB -Funktion für das standard Newton-Verfahren. FolgendeEingabeparameter soll die Funktion haben:

• fun- Funktion (functionhandle) oder Funktionsname (string) deren Nullstellebestimmt werden soll,

• x0 - ein Startpunkt nahe der gesuchten Nullstelle,

• tol - Toleranzschranke für die Abbruchbedingung und

• iter - maximale Anzahl an Iterationen.

Wie in Aufgabe 2 sind die beiden letzten Parameter optional und nehmen die gleichenStandardwerte an. Als Rückgabe sollen die gefundene Näherungslösung und die Anzahlder ausgeführten Iterationsschritte zurückgegeben werden. Verwenden Sie als Abbruch-bedingung eine der im Skript erwähnten Möglichkeiten.b) Erweitern Sie die Funktion so, dass die berechneten Zwischenschritte ausgegebenwerden. Dabei soll der Benutzer durch einen weiteren Eingabeparameter (options) dieAusgabe unterdrücken können. (Übergibt er als Argument z.B. options .disp == ’n’,so soll keine Ausgabe erfolgen.)

16

Page 17: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 4

Bestimmen Sie die (einzige) reelle Nullstelle des Polynomsp(x) = x3 − 2x + 2 mitHilfe der von Ihnen programmierten Newton-Methode:

a) Nehmen Sie zuerst als Startpunktx0 = 1.

b) Nehmen Sie als Startwert den Rückgabewert der Bisektion nach5 Iterationen mitdem Startintervall[−2, 1].

Aufgabe 5

Programmieren Sie nun das gedämpfte Newton-Verfahren. Halbieren Sie den Dämp-fungsfaktorα solange, bis entweder eine Verkleinerung im Funktionswerteintritt oderder vorgegebene Minimalwert fürα in der Größenordnung vonαmin = 1/256 erreichtist. Die Funktion sollte gleiche Signatur haben wie in Aufgabe 2.

Aufgabe 6

Mit dem gedämpften Newton-Verfharen sind zu bestimmen die Nullstellen von

a) dem Polynomp(x) = x3 − 2x + 2 mit dem Startwertx0 = 1

b) der Funktionarctan(x) mit dem Startwertx0 = 2.

Aufgabe 7

Das Polynomp(x) = x6 − 5x5 + x4 − 2x3 + 2x + 1 soll für allex = −100 : 0.1 : 100ausgewertet werden:

• Verwenden Sie zu seiner Auswertung das Horner-Schema und messen Sie diedazu benötigte Zeit,

• Messen Sie auch die Zeit bei der direkten Auswertung des Polynoms.

Hinweis: Zur Zeitmessung in Matlab dienen die Befehletic und toc.

Aufgabe 8

Vergleichen Sie für ein einfaches Beispielpolynom die Ergebnisse der Matlab-Routineroots mit den Eigenwerten der entsprechenden Begleitmatrix?

17

Page 18: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

3 Termin – Rechnerarithmetik

3.1 Einleitung

Elektronische Rechenanlagen werden in immer stärkerem Maße zur Problemlösung inIndustrie und Wissenschaft eingesetzt. Bei all diesen Problemen verarbeiten numerischeAlgorithmen gemäß einer Rechenvorschrift numerische Daten auf einem Rechner. DieseRechner arbeiten in fast allen Fällen mit der Gleitpunktarithmetik. Die üblichen elemen-taren Rechenoperationen+,−, ·, / werden durch die auf dem Rechner implementiertenOperationen3+ , 3− , 3· , 3/ für Gleitpunktzahlen ersetzt. Diese Operationen stimmen je-doch mit den exakten Operationen+,−, ·, / nur näherungsweise überein. Daher sindZweifel angebracht, ob die durch den Rechner erzielten Ergebnisse immer richtig sind,wenn Millionen von Rechenoperationen durchgeführt werden. Diese Zweifel werdendadurch verstärkt, daß schon bei kleinsten Aufgabenstellungen falsche Resultate be-rechnet werden können.Betrachten wir zum Beispiel die Summe

1050 + 812 − 1050 + 1035 + 511 − 1035 = 1323. (1)

Summiert man diese Zahlen auf einer elektronischen Rechenanlage auf, so wird manin aller Regel den Wert 0 erhalten. Es wird Ihnen leichtfallen, die Ursachen für diesenFehler zu erkennen, wenn Sie im Umgang mit Rechnern vertrautsind. Etwas subtiler istdie Auswertung des Polynoms

170.4x3 − 356.41x2 + 168.97x + 18.601 (2)

an der Stellex = 1.091608. Der exakte Wert für dieses Polynom an dieser Stelle ist8.21248 · 10−14. Fast alle Rechner liefern hier falsche Resultate. Viele weitere Beispielewerden Sie im Verlauf des Praktikums kennenlernen. Aber schon diese beiden sehr ein-fachen Beispiele machen deutlich, daß die weitverbreiteteRechnergläubigkeit fehl amPlatz ist: „Die Resultate, die der Rechner liefert, müssen“oder (in der abgeschwächtenForm) „werden schon stimmen“. Es stellen sich hier die Fragen:

• Warum liefern Rechner in gewissen Situationen falsche Ergebnisse?

• Welchen arithmetischen Gesetzen genügen die Rechner? Offenbar gehorchen sienicht den Gesetzen, die wir kennen.

• Sind diese Beispiele Ausnahmen? Sind sie Anomalien?

• Wie kann man solche Beispiele erkennen und klassifizieren?

Als zukünftiger Ingenieur werden Sie während Ihres Studiums und voraussichtlich inIhrem späteren Beruf mit der Programmierung von Computern bzw. mit der Benutzungvorhandener Programmpakete konfrontiert werden. Dieses Praktikum soll Ihnen hel-fen, Ergebnisse, die ein Rechner erzielt, richtig zu beurteilen und nicht von vornhereinals mathematisch bewiesen zu akzeptieren. Sie werden die Grundlagen der implemen-tierten Rechnerarithmetiken, gut und schlecht konditionierte Probleme und Algorithmenkennenlernen. Die damit verbundenen theoretischen Überlegungen und einige Anschau-ungsbeispiele werden im folgenden als Vorbereitung auf dasPraktikum geschildert. Zielist es, die Phänomene, die bei schlecht konditionierten Problemen bzw. Algorithmen inVerbindung mit der zugrunde liegenden Rechnerarithmetik auftreten, im praktischenVersuch auf unterschiedlichen Rechnern zu demonstrieren und zu verstehen.

18

Page 19: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

3.2 Gleitpunktarithmetik

Für ein grundlegendes Verständnis ist es wichtig zu wissen,wie üblicherweise auf einemRechner Zahlen dargestellt werden und wie mit ihnen gerechnet wird.

3.2.1 Gleitpunktzahlen

Es gibt viele verschiedene Methoden, reelle Zahlen durch ein endliches System vonZahlen auf einem Rechner zu approximieren. Auf fast allen elektronischen Rechen-anlagen benutzt man heute die so genannte Gleitpunktdarstellung (floating point) vonZahlen. Diese Darstellung basiert auf der Tatsache, daß fürjede reelle Zahlx ∈ IR gilt:

x = ±k

i=−∞

mibi mit 0 ≤ mi ≤ b − 1, mi ∈ IN. (3)

Dabei heißtb ∈ IN Basis. Ist b gleich 2, 8, 10 bzw. 16, so spricht man von einerDual-, Oktal-, Dezimal- bzw. Hexadezimaldarstellung. Beispielsweise besitzt 18.5 dieDezimal- und Dualdarstellungen

18.5 = 1·101 + 8·100 + 5·10−1 = 1·24 + 0·23 + 0·22 + 1·21 + 0·20 + 1·2−1.

Auf einem Rechner können natürlich nur endlich viele Ziffern gespeichert werden. Da-her arbeitet eine Rechenanlage üblicherweise mitnormalisierten Gleitpunktzahlen:

x = ±m·be mit m =

l−1∑

i=0

mib−i

mi ∈ IN, 0 ≤ mi ≤ b − 1, m0 6= 0 undE1 ≤ e ≤ E2, e ∈ ZZ,

(4)

m heißtMantisse, l Mantissenlänge unde Exponent. Die Zahl 18.5 besitzt demnachdie dezimale bzw. duale normalisierte Gleitpunktdarstellung

18.5 = 1.85·101

= (1·100 + 8·10−1 + 5·10−2) · 101

= 1.00101·24

= (1·20 + 0·2−1 + 0·2−2 + 1 · 2−3 + 0·2−4 + 1·2−5) · 24.

Auf den meisten Rechnern werden die normalisierten Gleitpunktzahlen zur Basisb =2 dargestellt. In diesem Fall ist1 ≤ m < 2, da m0 6= 0. Einige Rechner erlaubenauch Dezimaldarstellungen (1 ≤ m < 10), ebenso sind Hexadezimaldarstellungen aufeinigen Rechenanlagen (IBM, Telefunken) üblich. Die auf einem Rechner darstellbarenZahlen nennt man auch Maschinenzahlen.Um die Portabilität von Algorithmen und die Vergleichbarkeit von Ergebnissen aufverschiedenen Rechenanlagen zu erhöhen, wurde vom IEEE einStandardisierungsvor-schlag für die binäre Gleitpunktarithmetik ausgearbeitet[6]. Dieser spezifiziert

• die Zahlenformate,

• Anforderungen an die Genauigkeit der Operationen und der Konvertierung vonDezimalzahlen in die Binärdarstellung und zurück,

• die Fehlerzustände zur Ausnahmebehandlung und

19

Page 20: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

• die Rundung mit den Richtungentowards nearest, towards negative infinity, to-wards positive infinity, towards zero.

Eine einfach genaue Maschinenzahl (single, 32 Bit) kann nach IEEE wie folgt darge-stellt werden:31 30 23 22 0

Exponent Mantisse± 1.m1m2 . . .m23 · 2e mit − 126 ≤ e ≤ 127

Dies entspricht einer Rechengenauigkeit von ungefähr 7 bis8 Dezimalstellen, da2−24 ≈10−7. Da Gleitpunktzahlen grundsätzlich als normalisiert (d.h. m0 6= 0 in (4)) angenom-men werden, ist bei der Basis 2 immerm0 = 1. Diese 1 wird nicht explizit gespeichert,sondern implizit als gegeben angenommen. Man spricht von einerimpliziten 1 oderim-plicit one. Sie wird aber trotzdem in der Mantissenlänge mitgezählt, so daß bei einfachgenauen Maschinenzahlenl = 24 gilt!Standard ist heute in der Regel eine Darstellung entsprechend des IEEE double Formats,bei dem 64 Bit zur Darstellung einer Maschinenzahl verwendet werden:63 62 52 51 0

Exponent Mantisse± 1.m1m2 . . .m52 · 2e mit − 1022 ≤ e ≤ 1023

Die Mantissenlängel und der ExponentenbereichE1 ≤ e ≤ E2 legen das Maß fürdie Rechengenauigkeit und die Größe des Zahlenbereichs fest. Viele Benutzer von Re-chenanlagen haben den Eindruck, daß die Maschinenzahlen gleichmäßig über die reelleZahlenachse verteilt sind. Dies ist falsch; die Maschinenzahlen sind über den Zahlenbe-reich nicht gleichabständig verteilt:

m1 1.25 1.5 1.75e 2e

1.002 1.012 1.102 1.112

-1 0.5 0.5 0.625 0.75 0.8750 1 1 1.25 1.5 1.751 2 2 2.5 3 3.52 4 4 5 6 7

0 2 4 6 81 3 5 7 R

Die Skizze enthält für ein einfaches Gleitpunktsystem mitE1 = −1, E2 = 2, l = 3undb = 2 alle möglichen normalisierten Gleitpunktzahlen (siehe Tabelle). Offensicht-lich werden die Abstände der Gleitpunktzahlen immer kleiner, je kleiner die Beträgeder Gleitpunktzahlen werden. Dies ist eine über das Beispiel hinaus richtige, allgemeingültige Beobachtung.

3.2.2 Rundung

Die Menge der Maschinenzahlen ist endlich. Es stellt sich daher die Frage, wie eine re-elle Zahlx ∈ IR, die keine Maschinenzahl ist, durch eine Maschinenzahl approximiertwerden kann. In diesem Zusammenhang spricht man auch vonRundung. Dieses Pro-blem stellt sich sowohl bei der Eingabe von Daten in einen Rechner als auch währenddes Ablaufs einer Rechnung. Bei der Dateneingabe ist zu beachten, daß selbst im De-zimalsystem sehr einfach darstellbare Zahlen in vielen Fällen keine Maschinenzahlen

20

Page 21: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

sind. Ein instruktives Beispiel ist die Zahl 0.1, die häufig als Schrittweite in Algorith-men benutzt wird. Diese Zahl hat die folgenden periodischenEntwicklungen

(0.1)10 = (0.0001100110011 . . .)2

= (0.012121212 . . .)4

= (0.063146314 . . .)8

= (0.199999 . . .)16.

Benutzt man 0.1 als Schrittweite für eine Schleife in einem Algorithmus, so ist nichtsicher, wie oft die Schleife durchlaufen wird. Dies kann zu groben Fehlern führen.Während des Ablaufs einer Rechnung wird im allgemeinen das Resultatx±y, x·y, x/yder einfachen arithmetischen Operationen nicht zu den Maschinenzahlen gehören, selbstwenn beide Operandenx, y Maschinenzahlen sind. Das exakte Resultat muß dann durcheine Maschinenzahl ersetzt werden. Der Fehler, den man dabei begeht, heißtRundungs-fehler. Den bei der Eingabe einer Zahl gemachten Rundungsfehler nennt man speziellKonvertierungsfehler.Eine Rundung kann offenbar als eine Abbildungsvorschrift aufgefaßt werden, die einerreellen Zahlx ∈ IR eine Maschinenzahlrd(x) ∈ IM zuordnet wobeiIM die Menge derMaschinenzahlen bezeichnet. Von einer vernünftigen Rundung wird man verlangen:

|x − rd(x)| ≤ |x − f | für allef ∈ IM. (5)

Mit anderen Worten: die Abbildung ist dergestalt, daß keineMaschinenzahl näher anxliegt, alsrd(x). In diesem Sinne ist die Rundung bestmöglich oder optimal.Es sei hier vorweggeschickt, daß auf einigen Rechnern schlechtere Rundungen imple-mentiert sind. Die obige Rundungsvorschrift(5) realisieren verschiedene Verfahren, diesich in der Behandlung von reellen Zahlen unterscheiden, die genau in der Mitte zweieraufeinanderfolgender Maschinenzahlen liegen. Zunächst stellt manx in normalisierterFormx = ±m · be mit

m = m0.m1 . . .ml−1ml . . . , 0 ≤ mi ≤ b − 1, m0 6= 0

dar.Bei der kaufmännischen Rundung bildet man nun

m :=

{

m0.m1 . . . ml−1, falls ml < b2

m0.m1 . . . ml−1 + b−(l−1), falls ml ≥ b2.

(6)

Verwendet man round to even, so ist

m :=

m0.m1 . . . ml−1, falls ml.ml+1 . . . < b2

m0.m1 . . . ml−1, falls ml.ml+1 . . . = b2

undml−1 gerade

m0.m1 . . . ml−1 + b−(l−1), falls ml.ml+1 . . . = b2

undml−1 ungerade

m0.m1 . . . ml−1 + b−(l−1), falls ml.ml+1 . . . > b2.

(7)

Im Gegensatz zur kaufmännischen Rundung, die Zahlen, die genau in der Mitte zweierMaschinenzahlen liegen zur betragsmäßig größeren, also von der 0 weg runden, werdendiese Zahlen hier so gerundet, daß die letzte Ziffer der gerundeten Zahl gerade ist. Beizweistelliger Mantisse wird 12.5 somit kaufmännisch auf 13, mit round to even aber auf12 gerundet. 13.5 wird mit beiden Verfahren auf 14 gerundent.

21

Page 22: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Sind die Ziffernm0 = m1 = . . . = ml−1 = b − 1, so tritt bei der Addition vonb−(l−1)

ein Überlauf in allen Stellen auf. Die entstehende Mantisse10.0 . . . hat l + 1 Stellen.In diesem Fall schiebt man das Komma eine Stelle nach links, schneidet die letzte 0 abund erhöhte um 1.Schließlich setzt man

rd(x) := m·be, falls E1 ≤ e ≤ E2. (8)

In den Fällen, in denene < E1 ist, spricht man vonExponentenunterlauf (under-flow). Dies bedeutet, das die berechnete Zahl so klein wird, daß sie sich nicht mehrim darstellbaren Zahlenbereich des Rechners befindet und als 0 interpretiert wird. Istbeispielsweiseb = 2, l = 8 undE1 = −64, so gilt

rd(

(1.0001000)2 · 2−64 − (1.0000000)2 · 2−64)

= rd(

(1.0000000)2 · 2−68)

= 0.

Ist e > E2 spricht man vonExponentenüberlauf (overflow). Es sei bemerkt, daß dieBehandlung von underflow und overflow rechnerabhängig ist. Besonders pathologischeFälle treten auf, wenn ein overflow erst nach dem Runden eintritt: ist b = 10, l = 8 undE2 = 64, so würde9.99999997 ·1064 nach(6), (8) auf 1.0000000 ·1065 gerundet, waskeine Maschinenzahl ist.Die Rundungsvorschriften(6) und (8) entsprechen im Dezimalsystem genau unsererüblichen Rundung. (Bitte machen Sie sich dies anhand einiger Beispiele klar!) Da|m| ≥1 folgt für den relativen Fehler

rd(x) − x

x

≤b2· b−l

|m| ≤ b

2· b−l =

1

2· b−l+1 =: eps. (9)

Dies gilt auch bei Verwendung von round to even. Dabei ist vorausgesetzt, daß keinoverflow oder underlow auftritt undx 6= 0 ist. Die Zahleps := 1

2b−l+1 heißtMaschi-

nengenauigkeit. Ist b = 2, so isteps = 2−l, und fürb = 10 gilt eps = 12· 10−l+1. Mit

dieser Abkürzung kann man auch schreiben:

rd(x) = x(1 + ε) mit |ε| ≤ eps. (10)

3.2.3 Die arithmetischen Operationen für Gleitpunktzahlen

Die Einzelheiten in der Ausführung der arithmetischen Operationen+,−, ·, / sind vonMaschine zu Maschine verschieden. Bestenfalls kann man erwarten, daß das exakteResultat einer Operationx ∗ y mit ∗ ∈ {+,−, ·, /} durch ein im vorhergehenden Ab-schnitt beschriebenes optimal gerundetes Resultatrd(x ∗ y) ersetzt wird. Im folgendenwird beschrieben, wie man dies durch Verwendung eines doppelt langen Akkumulatorserreichen kann.Mit 3+ , 3− , 3· , 3/ bezeichnen wir die auf dem Rechner implementierten arithmetischenOperationen und die Operanden mitx = mx ·bex ∈ IM, y = my ·bey ∈ IM.Zunächst betrachten wir die Addition und Subtraktion. Dabei sei o.B.d.A. |x| ≥ |y|vorausgesetzt. Zunächst wirdex − ey berechnet. Es sind zwei Fälle zu unterscheiden:Fall 1: ex −ey > l: In diesem Fall sind diel signifikanten Stellen des Ergebnisses (nachRundung) identisch mit denen vonx und folglich wird

rd(x + y) := x.

Fall 2: ex − ey ≤ l: Die Mantissemy vony wird auf dem doppelt langen Akkumulator(das sind2 · l Speicherzellen) umex−ey Stellen nach rechts verschoben (dies entspricht

22

Page 23: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

einer Division durchbex−ey), und die exakte Summemx + my · b−(ex−ey) berechnet.Durch Verschiebung nach links oder rechts wird diese Summe mit einer Potenz vonbso multipliziert, daß die Mantisse normalisiert ist. Entsprechend dieser Verschiebungwird der Exponent des Ergebnisses geändert. Zum Schluß rundet man die2 · l-stelligeMantisse entsprechend der implementierten Rundung aufl Stellen.Einige Beispiele sollen diesen Vorgang klarmachen. Wir benutzen dabei die 4-stelligedezimale Gleitpunktarithmetik, alsol = 4, b = 10. Der Exponentenbereich soll großgenug angenommen werden, so daß kein overflow oder underflow entsteht.

6.314·104 + 3.865·101 =

6.3140000·104 + 0.0038650·104 = 6.3178650·104

Die exakte Summe wird auf6.318·104 gerundet.

7.418·104 + 6.158·104 =

7.4180000·104 + 6.1580000·104 =

13.5760000·104 = 1.3576000·105

Die exakte Summe wird zum Endergebnis1.358 · 105 gerundet.

1.005·10−4 − 9.963·10−5 =

1.0050000·10−4 − 0.9963000·10−4 =

0.0087000·10−4 = 8.700·10−7

Die exakte Summe ist eine Maschinenzahl und muß nicht gerundet werden. Bei die-sem letzten Beispiel heben sich die ersten drei von vielen signifikanten Ziffern auf.Man spricht in diesem Fall vonAuslöschung. Man beachte aber, daß im Fall der Aus-löschung dieberechnete Summe immer exakt ist. Dies soll besonders herausgestelltwerden, da man üblicherweise bei Auslöschung an einen Genauigkeitsverlust denkt. Inwelchem Zusammenhang Auslöschung und Genauigkeitsverlust trotzdem stehen, wirdspäter geklärt.Wie man sieht, wird bei der Durchführung von Addition und Subtraktion mit doppeltlangem Akkumulator exakt gerechnet und ganz am Ende einmal gerundet. Der dabeigemachte Rundungsfehler ergibt sich also nur aus der implementierten Rundungsvor-schrift. Dementsprechend gilt (vgl.(10)):

x 3+ y := rd(x + y) = (x + y)(1 + ε) mit |ε| ≤ eps (11)

x 3− y := rd(x− y) = (x − y)(1 + ε) mit |ε| ≤ eps. (12)

Das Produktx 3· y berechnet man auf einem doppelt langen Akkumulator, in dem manzunächst die Summeex + ey bildet, das2 · l-stellige exakte Produkt berechnet undgegebenenfalls um eine Stelle nach rechts verschiebt. Anschließend wird wieder auflStellen gerundet.

2.213·10−2 · 8.714·10−4 = 19.284100·10−6 = 1.9284100·10−5

Das exakte Produkt wird zum Endergebnis1.928 ·10−5 gerundet. Genauso wie bei derAddition erhalten wir demnach

x 3· y := rd(x · y) = x · y(1 + ε) mit |ε| ≤ eps. (13)

23

Page 24: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Der Quotientx 3/ y, y 6= 0 wird gebildet, indem zunächstex − ey berechnet wird. DieMantissemx wird auf die erstenl Stellen des doppeltlangen Akkumulators gelegt. Nundividiert man den Akkumulatorinhalt durch die Mantissemy, normalisiert und rundetauf l Stellen. Offenbar gilt auch hier

x 3/ y := rd(x/y) = (x/y)(1 + ε) mit |ε| ≤ eps. (14)

Zusammenfassend können wir feststellen, daß bei Implementierung der optimalen Run-dungsvorschrift(6), (8) und unter Benutzung eines doppeltlangen Akkumulators diearithmetischen Grundoperationen+,−, ·, / im Rahmen der zugrunde liegenden Ma-schinenzahlen bestmöglich implementiert werden können. Mit etwas mehr Aufwandkann das gleiche Ergebnis mit einem etwas kürzeren Akkumulator erreicht werden. Injedem Fall wird das exakte Ergebnis durch die am nächsten gelegene Maschinenzahlersetzt.Bei vielen heutigen Anlagen sind jedoch die Rundung und die arithmetischen Grund-operationen nicht optimal implementiert. Es gelten dann lediglich Abschätzungen derForm

x 3± y = x(1 + εx) ± y(1 + εy) mit |εx|, |εy| ≤ k · eps, (15)

wobeik eine kleine natürliche Zahl ist.

3.2.4 Bemerkungen und Beispiele

Die im vorhergehenden Abschnitt geschilderten Gleitpunktoperationen könnten denEindruck erwecken, daß zumindest bei optimaler Rundungsvorschrift kaum nennens-werte Fehler auftreten. Aber leider sind schon die einfachsten Grundgesetze wie Asso-ziativ- und Distributivgesetze auf einem Rechner nicht erfüllt. Sie können leicht nach-prüfen, daß z.B. ein Rechner mit 8 Stellen in der Mantisse (b=10) für a = 2.3371258·10−4, b = 3.3678429·102, c = −3.3677811·102 die folgenden Ergebnisse berechnet:

a 3+ (b 3+ c) = 2.3371258·10−43+ 6.1800000·10−3 = 6.4137126·10−3 (16)

(a 3+ b) 3+ c = 3.3678452·1023− 3.3677811·102 = 6.4100000·10−3. (17)

Das exakte Resultat ista + b + c = 6.41371258 · 10−3. Entsprechendes gilt für dasDistributivgesetz (Aufgabe!).Da schon diese einfachen Gesetze keine Gültigkeit haben, sind natürlich auch sehr vieleFolgerungen wie Kürzungsregeln usw. im Allgemeinen nicht erfüllt. Es kann also ineinigen Fällen sehr wesentlich sein, aufwelche Weiseund insbesondere inwelcherReihenfolge algebraische Ausdrücke in ein Programm umgesetzt werden.Ein besonders unangenehmes Phänomen der Gleitpunktrechnung ist die Auslöschung.Wir haben bereits im vorhergehenden Abschnitt gesehen, daßbei der Auslöschung dieberechnete Summe immerexakt ist (und somit kein Rundungsfehler gemacht wird)und dochsignifikante Ziffern verloren gehen. Dies führt zu großen Fehlern, wenn dieOperanden bereits vorher rundungsfehlerbehaftet sind. Sind beispielsweise in fünfstel-liger Gleitpunktarithmetik vier Maschinenzahlen

x1 = 3.4512·103 x3 = 2.7835·103

x2 = 2.8991·102 x4 = 3.5916·102

gegeben, so haben die exakten Produkte die Gestalt

x1 · x2 = 1.000537392·106

x3 · x4 = 9.9972186·105.

24

Page 25: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Für die exakte Differenz giltx1 · x2 − x3 · x4 = 8.15532·102. Auf einer Maschine mitoptimaler Rundung wird zunächst

x1 3· x2 = 1.0005·106

x3 3· x4 = 9.9972·105

berechnet, dann subtrahiert und gerundet

(x1 3· x2) 3− (x3 3· x4) = 7.8000·102. (18)

Der Vergleich dieser beiden Resultate zeigt, daß das gleitpunktmäßig errechnete Ergeb-nis (18) keine einzige korrekte Ziffer wiedergibt.Ein in der Praxis häufig auftretendes Problem ist die Bestimmung von Funktionswerten,wobei die Potenzreihenentwicklung der Funktion bekannt ist. Ein besonders einfachesBeispiel ist die Taylorreihe der Exponentialfunktion

ex = 1 + x +x2

2!+

x3

3!+ . . . +

xn

n!+ . . .

Aus der Analysis ist bekannt, daßex eine ganze Funktion ist und für jeden Wertx ∈ IRkonvergiert.Es soll der Wertex an der Stellex = −5.5 berechnet werden. Rechnet man in fünfstelli-ger dezimaler Gleitpunktarithmetik die ersten 25 Summanden aus und addiert diese, soerhält man

xn

n!Zwischensummesn =

n∑

k=0

xk

k!

e−5.5 = 1.00000000000000 1.00000000000000+ - 5.50000000000000 - 4.50000000000000+ 15.12500000000000 10.62500000000000+ -27.72900000000000 -17.10400000000000+ 38.12700000000000 21.02300000000000+ -41.94000000000000 -20.91700000000000+ 38.44500000000000 17.52800000000000+ -30.20700000000000 -12.67900000000000+ 20.76700000000000 8.08800000000000+ -12.69100000000000 - 4.60300000000000+ 6.98010000000000 2.37710000000000+ - 3.49010000000000 - 1.11300000000000+ 1.59960000000000 0.48660000000000+ - 0.67676000000000 - 0.19016000000000+ 0.26587000000000 0.07571000000000+ - 0.09748700000000 - 0.21777000000000+ 0.03351100000000 0.01173400000000+ - 0.01084200000000 0.00089200000000+ 0.00331290000000 0.00420490000000+ - 0.00095899000000 0.00324590000000+ 0.00026372000000 0.00350960000000+ - 0.00006906800000 0.00344050000000+ 0.00001726700000 0.00345780000000+ - 0.00000412910000 0.00345370000000+ 0.00000094627000 0.00345460000000

25

Page 26: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Die Koeffizientenxn

n!wurden in fünfstelliger Gleitpunktarithmetik nach der Rekursions-

formelxn

n!=

xn−1

(n − 1)!· x

n

ausgewertet. In Wirklichkeit gilt abere−5.5 = 4.0867 . . .·10−3. Exaktes Ergebnis unddie näherungsweise berechnete Summe stimmen in keiner Ziffer der Mantisse überein.Was läuft in diesem Beispiel falsch? Zunächst beobachtet man, daß die einzelnen Sum-manden durch die Multiplikationen und Divisionen bestenfalls 5 signifikante Ziffernbesitzen und diese teilweise in einer Größenordnung von102 liegen. Das berechneteErgebnis besitzt die Größenordnung10−3 und somit die gleiche Größenordnung wiebeispielsweise die gerundete Ziffer 7 der Zahl3.8127·101. Offenbar tritt hier ebenfalls,allerdings subtiler, das Phänomen der Auslöschung auf. Bessere Ergebnisse können beidiesem Algorithmus offenbar nur mit höherer Genauigkeit erzielt werden. Allerdingswird dadurch die Rechenzeit beträchtlich erhöht. Einen guten Algorithmus erhält manaus der Formele−x = 1

ex : (in fünfstelliger Dezimalarithmetik)

e−5.5 =1

e5.5=

1

1 + 5.5 + 15.125 + . . .= 0.0040865

In der Summe im Nenner tritt keine Auslöschung mehr auf, das berechnete Resultatbesitzt nur noch einen Fehler von 0.007%. Dieser Restfehlerist einzig die Summe derRundungsfehler der Multiplikationen, Divisionen und Additionen.Auf vielen Rechenanlagen ist die Exponentialfunktion als Standardfunktion vorhanden.Üblicherweise wird sie berechnet, indem zunächstx = x + n mit n ∈ ZZ, 0 ≤ x < 1dargestellt wird und das Additionstheoremex = ex+n = ex · en benutzt wird.In vielen praktischen Situationen treten transzendente Funktionen auf, die standardmä-ßig nicht auf Rechnern vorhanden sind, aber deren Potenzreihenentwicklung bekanntist. In solchen Fällen sollte man die Potenzreihendarstellung und Gesetzmäßigkeitendieser Funktion genau untersuchen, bevor ein Algorithmus konzipiert wird.

3.2.5 Fehlerfortpflanzung während der Rechnung

Besteht eine numerische Rechnung aus vielen Rechenoperationen, dann pflanzen sichdie Rundungsfehler von Schritt zu Schritt fort. Das letzte Beispiel (Bestimmung vone−5.5) demonstriert eindrucksvoll, daß diese Fehlerfortpflanzung zu völlig falschen Re-sultaten führen kann. Daher haben sich zahlreiche Mathematiker mit der Theorie derFehlerfortpflanzung für verschiedene Probleme und Algorithmen befaßt. Diese Theo-rien sind für viele Problemstellungen sehr tiefliegend und können im Rahmen diesesPraktikums nicht behandelt werden. Hier sollen nur zwei sehr einfach zusammenge-setzte Gleitpunktoperationen untersucht werden.Im folgenden setzen wir voraus, daß während der Rechnung kein overflow oder under-flow eintritt. Betrachten wir zunächst das zusammengesetzte Produktx1 3· x2 3· . . .3· xn,wobei diexi Maschinenzahlen sind. Wird die Multiplikation in der Reihenfolge ausge-führt, in der sie geschrieben ist (also von links nach rechts), so gilt nach Formel(13)

p1 = x1

p2 = x1 3· x2 = x1 · x2(1 + ε2)

...

pr = pr−1 3· xr = x1 · x2 · . . . · xr(1 + ε2) · (1 + ε3) · . . . · (1 + εr).

26

Page 27: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Für das mit Gleitpunktoperationen berechnete Produkt erhält man somit

pn := x1 3· x2 3· . . . 3· xn = x1 · x2 · . . . · xn(1 + ε2) · (1 + ε3) · . . . · (1 + εn).

Wegen|εi| ≤ eps für i = 2, . . . , n gilt

(1 − eps)n−1 ≤ (1 + ε2) · (1 + ε3) · . . . · (1 + εn) ≤ (1 + eps)n−1,

und es folgt die Fehlerabschätzung

x13· x23· . . .3· xn = x1 ·x2 ·. . .·xn·(1+F ) mit (1−eps)n−1 ≤ 1+F ≤ (1+eps)n−1.(19)

Ist beispielsweiseeps = 2−l undn−1 deutlich kleiner alsl, so ist der relative Fehler desProdukts klein. Obwohl der errechnete Wert des Produkts vonder Reihenfolge abhängt,in welcher die Multiplikation ausgeführt wird (Assoziativ- und Distributivgesetze ha-ben keine Gültigkeit!), ist die Fehlerabschätzung(19) offenbar unabhängig von dieserReihenfolge.Ein in der Praxis häufig auftretendes Problem ist die Addition mehrerer Zahlen. Geradefür solche Probleme werden Vektorrechner gebaut. Bei der Berechnung von Summenkann nicht mehr angenommen werden, daß das berechnete Ergebnis einen nur kleinenrelativen Fehler besitzt, obwohl dies für die Summe zweier Zahlen noch richtig ist,falls die optimale Rundungsvorschrift benutzt wird. Besäße die Summe mehrerer Zahleneinen kleinen relativen Fehler, so müsstex1 3+ x2 3+ . . . 3+ xn gleich

(x1 + x2 + . . . + xn)(1 + ε)

sein. Ist die exakte Summex1 + . . . + xn oder die berechnete Summex1 3+ . . . 3+ xn

gleich Null, so ist obige Gleichung meist für keinε mit |ε| < 1 erfüllt. Aus (11) erhältman eine Fehlerabschätzung anderer Natur, wobei|εi| ≤ eps:

s1 = x1

s2 = x1 3+ x2 = (s1 + x2)(1 + ε2)

...

sr = sr−1 3+ xr = (sr−1 + xr)(1 + εr).

Multipliziert man diese Beziehung explizit aus, so folgt

sn = x1(1 + η1) + x2(1 + η2) + . . . + xn(1 + ηn) (20)

mit

1 + η1 = (1 + ε2) · (1 + ε3) · . . . · (1 + εn)

1 + ηr = (1 + εr) · . . . · (1 + εn), r = 2, . . . , n

und

(1 − eps)n−1 ≤ 1 + η1 ≤ (1 + eps)n−1

(1 − eps)n−r+1 ≤ 1 + ηr ≤ (1 + eps)n−r+1, r = 2, . . . , n.

Wie man sieht, sind die Fehlerschranken von der Reihenfolgeder Summation ab-hängig.Die obere Schranke für den Gesamtfehler ist am kleinsten, wenn man die Sum-manden in der Reihenfolge aufsteigender Beträge addiert, da dann der größtmöglicheFaktor1 + η1 mit den kleinstenxr multipliziert wird. Die Fehlerabschätzung(20) kanngedeutet werden als die exakte Summe von leicht gestörten Datenxr(1 + ηr), denn dieFaktoren(1 + ηr) liegen sehr nahe bei 1, fallsn − r klein im Verhältnis zul ist.

27

Page 28: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

3.3 Kondition eines Problems und Kondition eines Verfah-rens

Man nennt ein mathematisches Problemgut konditioniert , wenn eine geringe relativeStörung der Eingabedaten des Problems auch nur eine geringerelative Änderung derLösung des Problems zur Folge hat. Kann dagegen eine geringerelative Änderung derEingabedaten eine große relative Änderung des Ergebnisseszur Folge haben, so nenntman das Problemschlecht konditioniert.

.

...

P

Gut konditioniertes Problem

P E = x

E = x

Gleichungssystem Ax = b

P = (A, b) , E = x = A−1b

Ein numerisches Verfahren zur Lösung eines mathematischen Problems heißtgutkonditioniert , wenn seine Lösung die exakte Lösung eines mathematischen Problemsist, das aus dem ursprünglichen mathematischen Problem durch geringe relative Ände-rung der Eingabedaten hervorgeht. Andernfalls heißt das numerische Verfahrenschlechtkonditioniert . Es ist sehr wesentlich, zwischen der Kondition eines mathematischenProblems und der Kondition eines numerischen Verfahrens zuunterscheiden. Wäh-rend man bei einem schlecht konditionierten Verfahren in fast allen Fällen ein besseresVerfahren entwickeln kann, lassen sich bei schlecht konditionierten Problemen i.a. nurdurch Erhöhung der Eingabe- und Rechengenauigkeit bessereResultate erzielen.

P

P

Gut konditionierter Algorithmus

z.B. GAUß-Algorithmus mit floating point Rechnung

.

.

.

.

E = x

E = x

Die beiden in der Einleitung angegebenen Beispiele(1) und (2) sind typisch schlechtkonditionierte Probleme. Beispielsweise muß der erste Koeffizient 1050 in der Summe(1) nur um−1323 (das entspricht einer relativen Störung von10−47) gestört werden,damit der vom Rechner berechnete Wert 0 der exakte Wert der Summe ist. Auf prak-tisch keinem Rechner ist diese relative Änderung überhaupteingebbar, da dazu eineMantissenlänge von wenigstens 48 Dezimalstellen (oder eine entsprechende Anzahl vonBinärstellen) notwendig wäre.Obwohl dasProblem der Summation dieser speziellen Zahlen extrem schlecht kondi-tioniert ist (die relative Änderung10−47 entspricht dem Verhältnis von einem einzigen

28

Page 29: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Gramm zu etwa1014 = 100000000000000 Sonnenmassen), ist dasVerfahren der Sum-mation gut konditioniert: Für jede beliebige Summe ist das errechnete Gleitpunktergeb-nis nach(20) gleich der exakten Summe geringfügig gestörter Eingabedaten. Es liegtalso ein gut konditioniertes Verfahren, aber ein schlecht konditioniertes Problem vor.Betrachtet man nun die Berechnung vone−5.5, so erkennt man aus den Eigenschaftenund dem Verhalten der Exponentialfunktion sofort, daß es sich um ein gut konditionier-tes mathematisches Problem handelt. Und wir haben gerade gesehen, daß die Summati-on ein gut konditioniertes Verfahren ist! Hier tritt ein scheinbarer Widerspruch auf, dennein gut konditioniertes Problem und ein dazu gut konditioniertes numerisches Verfahrenmüssen relativ gute Ergebnisse liefern.Dieser scheinbare Widerspruch läßt sich aufklären. Die Bestimmung vone−5.5 kannnicht als einfache Addition vonunabhängigen Summandenxn

n!aufgefaßt werden.

Vielmehr ist jeder dieser Summandenabhängigvon demeinzigen Eingabewert−5.5undnur dieser Eingabewert und die Störung diese Eingabewertes kann zur Beurteilungdes Verfahrens herangezogen werden. Denn eine geringfügige Störung des Eingabepa-rameters−5.5 ändert den Werte−5.5 ebenfalls geringfügig (dasProblem ist alsogutkonditioniert ), es ändert den Wert der Gleitpunktsumme derxi

i!allerdings bis zur Un-

kenntlichkeit. DiesesVerfahren für die Berechnung vonex, x negativ, ist alsoschlechtkonditioniert .

3.4 Fehleranalyse

Viele mathematische Probleme und Algorithmen wurden hinsichtlich ihres Verhaltensgegenüber Eingabefehlern und Rundungsfehlern während derRechnung untersucht. Da-bei sind dieVorwärtsanalyse (forward analysis) und dieRückwärtsanalyse(backward analysis) zwei Hauptuntersuchungsformen, die häufig benutzt werden.Bei der Vorwärtsanalyse versucht man eine Abschätzung für die Differenz zwischen ex-aktem und berechnetem Ergebnis zu erhalten. Eine solche Abschätzung kann berechnetwerden, indem der Fehler jedes einzelnen Rechenschritts abgeschätzt wird. In vielenFällen sind solche Abschätzungen sehr pessimistisch, da immer der schlimmste Fall(worst case) mit berücksichtigt werden muß.Bei der Rückwärtsanalyse bemüht man sich dagegen, an bestimmten Stellen der Re-chung zu zeigen, daß der berechnete Wert der exakte Wert eines leicht gestörten Pro-blems ist. Man überprüft also die Gutartigkeit des numerischen Verfahrens. In der An-wendung erweist sich die Rückwärtsanalyse häufig als leichter durchführbar.Andererseits ist die Rückwärtsanalyse in gewisser Weise nicht vollständig, da man letzt-lich immer die Differenz zwischen der berechneten und exakten Lösung kennenlernenmöchte. Die Fehlerabschätzung(19) für das Produktx1 3· . . . 3· xn ist eine Vorwärts-analyse, während es sich bei der Fehlerabschätzung für die Berechnung der Summex1 3+ . . . 3+ xn um eine Rückwärtsanalyse handelt.Wir wollen zu der obigen Definition einige weitere Beispielebetrachten:1. Beispiel:Die Ihnen aus der Schule bekannte quadratische Gleichung

ax2 + bx + c = 0, a, b, c ∈ IR, a 6= 0

besitzt genau die beiden Werte

x1 =−b +

√b2 − 4ac

2a, x2 =

−b −√

b2 − 4ac

2aals Lösungen. Die Lösungenx1, x2 hängen stetig von den Eingabekoeffizientena, b, cab. Dies legt die Vermutung nahe, daß eine Implementierung dieser Formel auf einemRechner zu keinen großen numerischen Problemen führen sollte.

29

Page 30: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Im folgenden wird eine dezimale Gleitpunktarithmetik mitl = 8 undE1 = −50, E2 =50 benutzt.Fall 1: a = 1, b = −105, c = 1Die exakten Lösungen dieser quadratischen Gleichung, auf 11 signifikante Stellen opti-mal gerundet, sind

x1 = 99999.999990

x2 = 0.000010000000001.

Benutzt man obige Formel, so liefert der Modellrechner die Näherungen

x1 = 100000.00

x2 = 0.

Die Näherungx2 = 0 hat mit der wahren Lösungx2 ≈ 10−5 keine gemeinsame signifi-kante Ziffer und ist somit ein völlig falsches Näherungsresultat. Es ist unmittelbar klar,daß Auslöschung aufgetreten ist:Es ist−b −

√b2 − 4a = 105 −

√1010 − 4. Die Subtraktion vor der Wurzel wird ohne

Fehler ausgeführt, der eigentliche Fehler ist der Rundungsfehler 1010 − 4 ≈ 1010 in8-stelliger Rechnung. Stört man die Eingabedatena, b, c nur geringfügig, so ändern sichoffenbar die exakten Lösungen ebenfalls geringfügig. Das Problem ist gut konditioniert,und demnach muß der Algorithmus schlecht konditioniert sein.Ein besserer Algorithmus, der die Auslöschung vermeidet, stellt zunächst eine der Lö-sungen in der Form

x1 = −b + sign(b)√

b2 − 4ac

2a

dar, wobeisign(b) das Vorzeichen vonb ist. Aus

ax2 + bx + c = a(x − x1)(x − x2)

folgt sofortax1x2 = c, und es ergibt sich für die zweite Lösung

x2 =c

a · x1.

Für den obigen Falla = 1, b = −105, c = 1 erhält man bei Anwendung dieser Formelndie beiden guten Näherungslösungenx1 = 100000.00, x2 = 0.000010000000.Fall 2: a = 1.0000000, b = −4.0000000, c = 3.9999999.Die exakten Lösungen dieser quadratischen Gleichung, auf 11 signifikante Stellen opti-mal gerundet, sind

x1 = 1.9996837720

x2 = 2.0003162280.

In unserem Modellrechner erhält man bei Anwendung der obigen Formel bei beidenVersionen

x1 = x2 = 2.0000000.

Diese beiden Näherungslösungen stimmen nur in den ersten 4 Stellen mit den exak-ten Lösungen überein, obwohl die (nur wenigen) Rechenoperationen mit achtstelligerGenauigkeit durchgeführt sind. Diese Näherungslösungen sind exakte Lösungen derquadratischen Gleichungen

x2 − 4x + 4 = 0.

30

Page 31: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Die Koeffizientena und b dieser Gleichung sind identisch mit denen der obigen Glei-chung. Lediglichc unterscheidet sich umδ := 0.0000001. Wir setzenε2 := δ. Dieberechneten Lösungen sind also die exakten Lösungen einer sehr leicht gestörten Glei-chung. Demnach ist der Algorithmus für dieses Problem gut konditioniert. Die verloren-gegangenen Stellen können nur durch die schlechte Kondition des Problems verursachtwerden: Die Originalgleichung hat die Gestalt

x2 − 4x + 4 − ε2 = 0

und besitzt die Nullstellen2 + ε, 2 − ε. Ändert manc in der Größenordnungε2, soändern sich die Lösungen in der Größenordung vonε.Die quadratische Gleichung ist immer dann schlecht konditioniert wenn Auslöschungbei der Berechnung vonb2 − 4ac auftritt, d.h. wenn die beiden Nullstellen nahe beiein-anderliegen.2. Beispiel:Das Gleichungssystem

1.2969 · x + 0.8648 · y = 0.8642

0.2161 · x + 0.1441 · y = 0.1440

besitzt die exakten Lösungenx = 2, y = −2.

Nehmen wir an, wir hätten mit Hilfe eines numerische Verfahrens die Näherungslösun-gen

x = 0.9911, y = −0.4870

erhalten. Die Näherung und exakte Lösungen besitzen keine gemeinsamen signifikantenStellen. Man könnte zunächst glauben, das numerische Verfahren sei schlecht konditio-niert. Setzt man aber die Näherungslösung in das Gleichungssystem ein, so erhält mandie neue rechte Seite

b1 = 0.86419999

b2 = 0.14400001

Die beiden rechten Seiten unterscheiden sich in jeder Komponente nur um den Betrag10−8. Das bedeutet, daß das benutzte numerische Verfahren für dieses Problem eine Lö-sung berechnet, die im Sinne der Rückwärtsanalyse hervorragend ist. Das Verfahren istdemnach für dieses Problem sehr gut konditioniert. Es folgt, daß das Gleichungssystemsehr schlecht konditioniert ist.3. Beispiel:Zur Berechnung der Integrale

In =

1∫

0

xnex−1dx für n = 1, 2, 3, . . .

können die bekannten numerischen Integrationsverfahren (Trapezregel, Simpsonregel,. . . ) benutzt werden. Mit partieller Integration

1∫

0

xnex−1dx = xnex−1∣

1

0− n ·

1∫

0

xn−1ex−1dx

erhält man die Iterationsformel

In = 1 − n · In−1 n = 1, 2, . . . undI1 =1

e.

31

Page 32: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Eine andere Möglichkeit für die numerische Berechnung der obigen Integrale bietetsich mit der Auswertung dieser eifachen Iterationsvorschrift an. Bei Berechnung mit 6Dezimalstellen erhält man

I1 ≈ 0.367879 I6 ≈ 0.127120

I2 ≈ 0.264242 I7 ≈ 0.110160

I3 ≈ 0.207274 I8 ≈ 0.118720

I4 ≈ 0.170904 I9 ≈ −0.0684800.

I5 ≈ 0.145480

Obwohl der Integrandx9ex−1 positiv auf dem gesamten Intervall(0, 1) ist, ist der be-rechnete Näherungswert negativ, also völlig falsch. Das Problem ist gut konditioniert,denn der Integrandxnex−1 ist beliebig oft differenzierbar, und eine leichte StörungderIntegralgrenzen kann keine großen Auswirkungen auf den Integralwert zur Folge haben.Demnach muß der Algorithmus sehr schlecht konditioniert sein. Warum?Bei der Eingabe des StartwertesI1 = 1

ewurde ein kleiner Fehler (Konvertierungsfehler)

der Größenordnung4 ·10−7 gemacht. Bei der Berechnung vonI2 wurde dieser Fehlermit dem Faktor−2 multipliziert. Dieser Fehler wiederum wurde bei der Berechnungvon I3 mit dem Faktor−3 multipliziert. So fortfahrend folgt, daß schließlich der Fehlerbei der Berechnung vonE9 die Größenordnung

(−2) · (−3) · . . . · (−9) · 4·10−7 = 9! · 4·10−7 = 362880 · 4·10−7 ≈ 0.15

besitzt. Der auf drei signifikante Stellen gerundete exakteWert vonI9 ist 0.0916. Wennman zu dem berechneten WertI9 ≈ −0.068 den sehr großen Fehler 0.15 dazu addiert,erhält man ungefähr den exakten Wert.Das beschriebene Iterationsverfahren ist demnach ein äußerst instabiler Algorithmus.Man spricht in einem solchen Fall auch vonFehlerexplosion. Aus fehlerexplosivenVerfahren können sehr häufig stabile, fehlerdämpfende Verfahren entwickelt werden.Falls die obige Iterationsformel in der Form

In−1 =1 − In

n, n = . . . , 3, 2,

also rückwärts geschrieben wird, dann wird der Fehler in jedem Iterationsschritt mitdem Faktor1/n multipliziert. Wählt man beispielsweise als StartwertI20 = 0, so liefertdiese Rückwärtsiteration die Näherung

I20 ≈ 0.0 I14 ≈ 0.0627322

I19 ≈ 0.0500000 I13 ≈ 0.0669477

I18 ≈ 0.0500000 I12 ≈ 0.0717733

I17 ≈ 0.0527778 I11 ≈ 0.0773523

I16 ≈ 0.0557190 I10 ≈ 0.0838771

I15 ≈ 0.0590176 I9 ≈ 0.0916123.

Man zeigt leicht, daß schon fürI15 der Fehler beim Start durch das fehlerdämpfendeVerfahren verschwunden ist und alle WerteI15 bis I9 6 signifikante Stellen besitzen.

3.5 Ausblick und Literatur

Eine ausführliche Beschreibung der Rundungsfehleranalyse für Gleitpunktarithmetikund ihre Anwendung auf das Rechnen mit Polynomen und Matrizen findet man in dem

32

Page 33: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Buch von Wilkinson [14]. In diesem Buch wird auch die Rundungsfehleranalyse fürFestpunktrechnunguntersucht.Bei der Festpunktrechnung ist die Lage des Dezimalpunktes an einer bestimmten Stellein der Mantisse fixiert. Die Angabe des Exponenten entfällt somit. Anwendung fand dieFestpunktrechnung früher besonders im kaufmännischen Bereich.Im Vergleich zur Gleitpunktarithmetik sind die Fehlerabschätzungen der Festpunkta-rithmetik etwas günstiger, z.B. ist die Addition sogar assoziativ. Allerdings müssender Rechnung eingehende Untersuchungen vorausgehen, um sicherzustellen, daß dievorkommenden Festpunktzahlen den zulässigen Bereich nicht verlassen. Dies ist einentscheidender Nachteil der Festpunktarithmetik. Behelfen kann man sich häufig durchEinführung von Skalenfaktoren an vielen Stellen der Festpunktrechnung; dies entsprichtaber dann einer speziellen Art von Gleitpunktrechnung. Daher ist auf heutigen Rechen-anlagen praktisch ausschließlich die normalisierte Gleitpunktarithmetik implementiert.In dem Buch von Kulisch und Miranker [7] wird die Gleitpunktarithmetik in eine mathe-matische Theorie eingebettet und untersucht. Eine Konsequenz dieser Theorie ist es, zuden arithmetischen Grundoperationen das Skalarprodukt

∑n

i=1 ai · bi zweier Vektorena, b ∈ IR als Grundoperation hinzuzufügen und gemäß der optimalen Rundungsvor-schrift auszuwerten. Diese Auswertung ist mit Hilfe eines mehrfach-langen Akkumula-tors möglich. Mit dieser zusätzlichen Grundoperation können beispielsweise Summen∑n

i=1 xi oder Produkte zweier Matrizen maximal genau berechnet werden.Eine sehr vielversprechende Methode, eine automatische Rundungsfehleranalyse aufdem Rechner durchzuführen, ist dieIntervallarithmetik. Hier wird jede auftretendeZahlx durch ein Intervall

[x, x] = {x ∈ IR | x ≤ x ≤ x}ersetzt. Die arithmetischen Grundoperationen∗ ∈ {+,−, ·, /} können in natürlicherWeise auf Intervalle durch die Formel

[x, x] ∗ [y, y] := {z = x ∗ y | x ∈ [x, x], y ∈ [y, y]}erweitert werden. Die Formeln sind leicht auf einem Rechnerzu implementieren. Bei-spielsweise gilt für die Addition

[x, x] + [y, y] = [x + y, x + y].

Eine sehr schöne Einführung in die Methoden der Intervallarithmetik findet man in denBüchern von Ahlefeld und Herzberger [2] und von Moore [3].Die Intervallarithmetik neigt allerdings zu Überschätzungs- und Aufblähungseffekten,wenn man ganz naiv in einem Algorithmus reelle Zahlen und arithmetische Opera-tionen durch Intervalle und obige Intervalloperationen ersetzt. Daher wurden für vieleProblemstellungen spezielle Intervallalgorithmen entwickelt, bei denen solche Aufblä-hungseffekte nicht Auftreten. In der Arbeit von Rump [8] sind Intervallalgorithmen be-schrieben, die für viele Problemstellungen Ergebnisse liefern, die bis zur letzten Stelleder Mantisse genau sind. Sämtliche Konvertierungs-, Rundungs- und Auslöschungsfeh-ler werden also automatisch durch diese Algorithmen erfasst und abgeschätzt.Neuerdings wurden im Institut für Zuverlässiges Rechnen Algorithmen entwickelt, diedarüber hinaus eine automatische und garantiert richtige Sensitivitätsanalyse gestatten.Mit diesen Methoden werden nicht nur alleRundungsfehler erfaßt und abgeschätzt,sondern gleichzeitig die Richtigkeit derProblemstellung überprüft.Das Standardwerk bezüglich der Genauigkeit und Stabilitätvon Algorithmen ist dasBuch von Highham [5]. Hier wird auf das Verhalten von numerischen Algorithmen inBerechnungen mit endlicher Genauigkeit eingegangen.

33

Page 34: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

3.6 Auswertung und Überlegungen

Für alle Beispiele sollen die mit Matlab berechneten Ergebnisse in übersichtlicher Formnebeneinander dargestellt werden. Gestörte Eingabedatensind jeweils mit anzugeben.In jedem Fall sollen die Konditionen des Problems, die Kondition des Verfahrens und dieauftretenden Fehler (Rundungs-, Auslöschungs- und Konvertierungsfehler) schriftlichbeurteilt werden.

Aufgabe 1

Der Wert vonp2 − 2q2

ist zu berechnen.

a) Berechnen Sie diesen für die Eingabedatenp = 665857.0 undq = 470832.0 mitMatlab.

b) Stören Sie jeweils zweimal die Eingabedatenp, q in der letzten signifikanten Zif-fer vonp undq und berechnen Sie den obigen Wert mit Matlab erneut.

Aufgabe 2

Zu berechnen ist die Funktion

f(x, p) =sinh(px) − px

p3

an der Stellex = 1 für p = 10−4, 10−8, 10−10. Verwenden Sie dazu in Matlab diefolgenden drei Algorithmen:

a) naive Auswertung vonsinh(x),

b) Auswertung unter Beachtung vonsinh(x) = 12(ex − e−x),

c) Auswertung der ersten drei Terme der Taylorreihe

f(x, p) =x3

3!+

p2x5

5!+

p4x7

7!+ R(p, x).

Aufgabe 3

Die folgenden algebraisch äquivalenten Ausdrücke

9x4 − y4 + 2y2

(3x2 − y2)(3x2 + y2) + 2y2

8x4 + (x2 + y2)(x2 − y2) + 2y2

2y2 − y4 + 9x4

9x4 + 2y2 − y4

9x4 − y2(y2 − 2)

sollen ausgewertet werden.

a) Berechnen Sie diese Ausdrücke mit Matlab für die Wertex = 10864.0, y =18817.0.

b) Stören Sie die Eingabedatenx, y in der letzten Dezimalstelle und berechnen Siedie Werte der obigen Ausdrücke für die gestörten Daten mit Matlab.

34

Page 35: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Aufgabe 4

Das Integral

xn =

1∫

0

xn

x + 13dx, n = 0, 1, 2 . . .

genügt wegen

xn + 13xn−1 =

1∫

0

xn + 13xn−1

x + 13dx =

1∫

0

xn−1dx =1

n

der Iterationsformel

xn = −13xn−1 +1

n.

Für den Startwert gilt

x0 =

1∫

0

1

x + 13dx = ln(x + 13)

1

0= ln(14) − ln(13).

a) Berechnen Sie nach der obigen Iterationsformel mit Matlab x0, x1, . . . , x20.

b) Verwenden Sie die Iterationsformel rückwärts. Geben Siesich einen Startwertx20

ihrer eigenen Wahl vor.

Aufgabe 5

Die Lösung des linearen Gleichungssystems

64919121 · x − 159018721 · y = 2

41869520.5 · x − 102558961 · y = −5

ist zu berechnen.

a) Verwenden Sie dazu die Cramersche Regel und den Gauß-Algorithmus in Matlab.

b) Stören Sie die Eingabedaten der Koeffizientenmatrix in der letzten Stelle und be-rechnen Sie die Lösung mit den Formeln aus Teil a).

c) Was geschieht, wenn nur die rechte Seite gestört wird?

35

Page 36: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

4 Termin – Intervallarithmetik

Am letzten Praktikumstermin haben Sie gesehen welche Probleme auftreten können,wenn man mit Gleitpunktzahlen rechnet. Im schlimmsten Fallstimmt das berechneteErgebnis überhaupt nicht mit der tatsächlichen Lösung überein. Wodurch sich Proble-me dieser Art ergeben können, haben wir Ihnen ebenfalls gezeigt. Zwei der wichtigstenGründe wurden erwähnt: entweder ist die schlechte Kondition des Problems für das Lö-sungsverhalten verantwortlich oder es liegt ein schlecht konditioniertes Verfahren vor.Heute werden Sie lernen, wie die Rundungsfehleranalyse automatisch mit Hilfe der In-tervallrechnung durchgeführt werden kann. Sehr gut eignetsich dafür die von Prof. S.M. Rump entwickelte ToolboxINTLAB (INTerval LABoratory) [10] zur Intervallrech-nung in Matlab. Einen guten Einstieg in die Toolbox zusammenmit einer kurzen Ein-führung in die Intervallrechnung bietet Hargreaves in seiner Arbeit,Interval Analysis inMatlab [4]. Lesen Sie aus der Veröffentlichung die ersten vier Kapitel. Ebenfalls guteEinführung in die Intervallarithmetik finden Sie in einem Artikel aus der WIKIPEDIA

[1].zusätzlich noch aufgaben konstruieren zur einschließung einer linearen Gleichung mit:Hilbert-Matrizen Boothroyd-Dekker-Matrix und 2 -1, -1 2 -1usw. matrix. sowie Van-dermonde matrix auch.

Aufgabe 1

Zur besseren Einarbeitung in INTLAB gehen Sie das INTLAB-Demo durch. Sie startenes mit dem Befehldemointval am Matlab-Prompt, nachdem INTLAB korrekt gestartetworden ist. (Sollte bei Ihnen die entsprechende Datei fehlen, dann können Sie diese imDownload-Bereich finden.)

Aufgabe 2

Starten Sie mitdemointlab das zweite INTLAB-Demo und beantworten Sie folgendeFragen:

a) Erklären Sie anhand des ersten Beispiels, wie es durch Intervalloperationen zueiner Überschätzung kommen kann?

b) Welche Faustregel gilt, um die Überschätzung bei Funktionauswertungen in derIntervallrechnung zu mindern?

c) Wie kann eine Einschließung einer Funktion in INTLAB leicht berechnet wer-den?

d) Was ist charakteristisch für die Lösung eines linearen Intervallgleichungssystems?

Aufgabe 3

Die vierte Aufgabe des letzten Praktikumstermins ist mit Hilfe der Intervallrechnung zulösen. Was beobachten Sie in a) und in b) bezogen auf die Intervallbreite der Summati-onsvariablenxn?

36

Page 37: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

5 Termin – Einschließungsmethoden

Die Ihnen bereits bekannten Algorithmen zur numerischen Lösung von linearen undnicht linearen Gleichungsystemen können zur Berechnung von verifizierten Resultatenerweitert werden. Dies ermöglicht die gesuchte Lösung in einem (schmalen) Intervallrigoros einzuschließen. Um mehr darüber zu erfahren, lesenSie bis zum nächsten Prak-tikumstermin aus der Arbeit von Hargreaves [4] die Kapitel5 und6.

Aufgabe 1

Die Lösung des linearen Gleichungssystems

286547 −191055 −286317 −287339 −58024−191055 127951 190869 191565 39235−286317 190869 286089 287110 57946−287339 191565 287110 288134 58167−58024 39235 57946 58167 12279

x =

−536188358565535697537637109603

ist zu berechnen. Die exakte Lösung lautetx = (11111)T . (Sie finden eine Matlab-Dateiim Download-Bereich die die Problemdaten generiert.)

a) Wenden Sie dafür den Gauß-Algorithmus aus Matlab und die entsprechende Me-thode aus INTLAB auf das Gleichungssystem an.

b) Auf wieviele Stellen genau kann die Lösung mit dem Gauß-Algorithmus be-stimmt werden? Wie gut ist die Einschließung von INTLAB?

c) Was passiert mit beiden Lösungen, wenn die rechte Seite inder letzten Stellegestört wird?

d) Schätzen Sie aus Ihren Beobachtungen in c) die Kondition des Problems ab?

Aufgabe 2

Es ist eine Funktionfunction zeros=intnewton(f,x, tol ) zu programmieren, die Ein-schließung aller Nullstellen der übergebenen Funktion f nach der Intervall-Newton-Methode bestimmt. Die Parameter x und tol sollen hierbei dasStartintvervall bzw. dieGenauigkeit der berechneten Einschließung angeben. Setzen Sie als Abbruchbedingungxnew == x || rad(xnew) < tol ein. (Der Algorithmus ist in [4, Seite 26] beschrieben.)

Aufgabe 3

Überprüfen Sie ihre Funktion durch Ausrechnen aller Nullstellen des Polynomsx5 −15x4 + 85x3 − 225x2 + 274x − 120 auf dem Intervall[0, 7]. Geben Sie als Toleranz-schranke den Wert0 an.

Aufgabe 4

Finden sie mit der Intervall-Newton-Methode eine Einschließung der Lösung von3x =ex auf dem Intervall[1, 2]. Vergleichen Sie das Ergebnis mit dem Resultat aus der Auf-gabe 2 des zweiten Praktikumstermins:

a) Welche Einschließung ist besser?

b) Welche Vorteile hat die Intervall-Newton-Methode gegenüber der Bissektion?

37

Page 38: Praktikum I Software-Anteil - ti3.tu-harburg.dehaerter/PraktikumI/SoftwarepraktikumIneu.pdf · Praktikum I 1 Termin – Einführung in Matlab Der erste Praktikumstermin dient der

Praktikum I

Literatur

[1] Wikipedia, die freie Enzyklopädie; artikel über Intervallarithmetik, (deutsch).http://de.wikipedia.org/wiki/Intervallarithmetik.

[2] G. Alefeld and J. Herzberger.Einführung in die Intervallrechnung. B.I. Wissen-schaftsverlag, 1974.

[3] J. Dongarra and C. Moler. LINPACK Working Note 3 - Implemantation Guide forLINPACK. Technical Report 330, Aragonne National Laboratory, Illinois, 1979.

[4] G. I. Hargreaves. Interval analysis in MATLAB. Technical Report No. 416, Dec.2002.http://www.ti3.tu-harburg.de/~rump/intlab/narep416.pdf.

[5] N. Highham.Accuracy and Stability of Numerical Algorithms. Society for Indus-trial and Applied Mathematics, 1961.

[6] ANSI/IEEE 754-1985, Standard for Binary Floating-Point Arithmetic, 1985.

[7] U. Kulisch and W. Miranker.Computer Arithmetic in Theory and Practice. Aca-demic Press, New York, 1981.

[8] W. Miranker and S. Rump. Case Studies for ACRITH, 1. Ill posed problems and2. Stiff Differenctial Systems. Technical report, IBM Thomas J. Watson ResearchCenter, Yorktown Heights, New York, 1983.

[9] C. B. Moler. Cleve’s corner: Numerical computing with MATLAB: New textbookavailable in electronic and print editions. Technical note, The MathWorks, Inc.,inst-MATHWORKS:adr, jun 2004.http://www.mathworks.com/moler/.

[10] S. Rump. INTLAB - Interval Laboratory, Version 1, 1998.http://www.ti3.tu-harburg.de/rump/intlab/index.html.

[11] T. Schramm.Matlab - eine Einführung. TUHH-Rechenzentrum, Oktober 1999.http://www.ti3.tu-harburg.de/~haerter/PraktikumI/tschramm.pdf.

[12] W. Schweizer.MATLAB kompakt.Oldenbourg Wissensch.Vlg;, Deutsch, 2006.

[13] H. Voß.Grundlagen der numerischen Mathematik. TUHH-Arbeitsbereich Mathe-matik, 2004.

[14] J. Wilkinson. Rundungsfehler. 1969.

38