1.1 b-adische Brüche
Alle Berechnungen auf digitalen Rechenanlagen können grundsätzlich nur mit endlicher Genauigkeit durchgeführt werden. Deshalb spielt die verwendete Zahlendarstellung eine wichtige Rolle.
Bekanntlich ist die Zahl im Dezimalsystem gleichbedeutend mit
Man spricht in diesem Fall auch von einem -adischen Bruch zur Basis . Statt der bekannten Basis in unserem Dezimalsystem kann man auch eine andere Basis mit wählen. Wäre , so hätte beispielsweise die Zahl mit der Ziffernfolge im Dezimalsystem den Wert
Sind insbesondere die Stellen einer Zahl bezüglich der Basis , so entspricht diese also im Dezimalsystem der reellen Zahl
Praktisch wichtig sind dabei die Basen
Die Babylonier beispielsweise verwendeten die Basis (Sexagesimalsystem).
Beispiel 1.1
(1) Dem sog. dyadischen Bruch entspricht im Dezimalsystem die Zahl
(2) Der -adische Bruch zur Basis bedeutet im Dezimalsystem die Zahl
Will man umgekehrt eine Dezimalzahl bezüglich einer anderen Basis als beschreiben, so verfährt man wie folgt.
Beispiel 1.2
Gegeben sei die Zahl im Dezimalsystem. Diese sei nun mittels einer anderen Basis dargestellt.
(1) (Als Vielfache der Potenzen von 2 stehen nur die Ziffern 0 und 1, für die erste Stelle nur die 1 zur Verfügung.) Man ermittelt zuerst die höchste Potenz von 2, die in 60 steckt. Dies ist wegen und die 5. Weiter enthält das 1-fache von , die Zahl das 1-fache von , die Zahl das 1-fache von , die Zahl das 0-fache von sowie das 0-fache von , die Zahl das 0-fache von sowie das 0-fache von und schließlich das 1-fache von , so dass man zu folgender Darstellung gelangt:
(2) (Als Vielfache der Potenzen von 8 stehen jetzt die Ziffern zur Verfügung bzw. für die erste Stelle die Ziffern .) Es ergibt sich
Also entspricht im Dezimalsystem der Zahl zur Basis .
(3) Man erhält
Es ergibt sich zur Basis die Zahl .
Satz 1.3
- Sei und . Dann lässt sich jede reelle Zahl in einen -adischen Bruch zur Basis entwickeln.
1.2 Rechnen auf einem Computer
Wir gehen nun von einer Zahlendarstellung von mittels der Basis mit und den Ziffern aus, d. h. von einer Darstellung
mit . (Für kann also auch eine Ziffer mit mehr als einer Stelle sein.) Durch Abschneiden dieses unendlichen Ausdrucks ergibt sich eine endliche Zahlendarstellung
Digitale Rechenanlagen, kurz Computer oder Rechner, arbeiten meist mit einer normalisierten (endlichen) Gleitkomma-Darstellung reeller Zahlen
wobei die sog. Mantisse von der Form
und der Exponent von der Form
mit Ziffern sind und insbesondere gilt. Diese Darstellung ist wegen eindeutig. Für die Darstellung der Null setzt man und beliebig. Die Speicherung von in (1.1) erfolgt in der Form
und benötigt
Beispiel 1.4
Sei .
(1) Die Zahl lautet (bei Nichtberücksichtigung der Größen und ) in normalisierter Gleitkomma-Darstellung . Letztere Darstellung schreibt man z.B. für und auch in der Form oder .
(2) Die Zahl lautet in der normalisierten Gleitkomma-Darstellung für und z. B. oder .
Eine normalisierte Gleitkomma-Darstellung mit der Basis , beispielsweise oder , bestimmt die Menge reeller Zahlen, die auf dem Rechner exakt dargestellt werden können, die sog. Maschinenzahlen. Eine solche Zahlendarstellung ermöglicht also nur die Repräsentation einer endlichen Teilmenge der reellen Zahlen. Und zwar ist offenbar insbesondere die kleinste darstellbare positive Zahl durch
und die größte positive Zahl durch
gegeben. Die Mantisse von entspricht offenbar der Dezimalzahl und die von der Dezimalzahl
Der Exponent für beide Zahlen ist bis auf das Vorzeichen gegeben durch die Dezimalzahl
Somit haben und den Dezimalwert
Ist die reelle Zahlenmenge
so können also insbesondere Zahlen nicht auf dem Rechner wiedergegeben werden. Im Fall und melden alle Rechner normalerweise einen Exponentenüberlauf („overflow“), während sie im Fall meist keine Meldung machen und setzen.
Ferner ist offenbar nicht jede Zahl auf dem Rechner, d. h. als darstellbar (z. B. trifft dies für die Zahlen und zu). Somit stellt sich das Problem, eine Zahl durch eine Zahl aus zu approximieren. Man verwendet hierzu einen Rundungsoperator , der jeder Zahl eine Zahl zuordnet, welche sinnvollerweise der folgenden Beziehung genügt:
Im Fall, dass die Aufgabe in (1.2) zwei Lösungen besitzt, rundet man dabei normalerweise (wir legen dies hier auch so fest) z. B. für und eine Endziffer 5 nach oben.
Beispiel 1.5
Sei und . Dann gilt
Allgemein kann man für und eine Mantissenlänge die zu einer beliebigen Zahl gehörende Maschinenzahl folgendermaßen finden. Es sei dazu zunächst in der Form dargestellt, wobei und
mit und seien. Insbesondere ist also . Zu bildet man nun
und setzt dann
Offenbar ist die Zahl für jedes eine Maschinenzahl, d. h. .
Beispiel 1.6
Für und folgt
Für den mit der Rundung verbundenen absoluten Fehler hat man
und für den relativen Fehler, sofern ist,
Bei einer analogen Definition der Rundungsoperation für die Basis erhält man
Diese Vorgehensweise führt auf die Definition der sogenannten relativen Maschinengenauigkeit
Mit dieser gilt also
wie man mit der Setzung sieht.
Beispiel 1.7 (IEEE-Standard)
Die arithmetischen Grundoperationen werden auf digitalen Rechnern durch sog. Gleitpunktoperationen ersetzt, welche Maschinenzahlen wieder auf Maschinenzahlen abbilden. Sind , ist „“ eine der vier Grundoperationen, und , so definiert man die zugehörige Gleitpunktoperation durch
Für sie gilt nach (1.3)
Für das Ergebnis kann natürlich auch gelten. In diesem Fall meldet der Rechner normalerweise einen Exponentenüberlauf oder setzt er .
1.3 Stabilität und Kondition
Unter einem Algorithmus verstehen wir eine eindeutig festgelegte Folge von elementaren Operationen , d. h. ein eindeutig festgelegtes Verfahren zur numerischen Lösung eines Problems oder einer Klasse von Problemen. Zumeist gibt es mehrere unterschiedliche Algorithmen zur Lösung eines Problems, die bei exakter Rechnung zu demselben Ergebnis führen würden, die dies jedoch numerisch aufgrund von Rundungsfehlern, Speicherplatz etc. auf dem Computer im Allgemeinen nicht tun.
Beispiel 1.8
Seien und . Dann gilt bei exakter Rechnung
Bei 4-stelliger Rechnung ergibt sich hingegen
mit 4 in Bezug auf das exakte Ergebnis korrekten Stellen oder alternativ
mit einem Ergebnis, welches lediglich 2 korrekte Stellen aufweist.
Die -Operationen genügen also weder dem Assoziativ- noch dem Distributivgesetz!
Das Ziel der numerischen Mathematik ist die Konstruktion und Analyse von effizienten Algorithmen. Dabei meinen wir mit effizient, dass sie
(a) schnell und sparsam sein, d. h. möglichst wenige Rechenoperationen und damit bei geringem Speicherplatzbedarf wenig Rechenzeit zur Berechnung des gewünschten Resultates benötigen sollten,
(b) numerisch stabil sein sollten, d. h. die Verfälschung der Resultate durch Rundungsfehler nicht wesentlich größer sein sollte als die Verfälschung durch die Eingabefehler.
Unter Eingabefehler versteht man dabei die durch Rundung der Eingabedaten auf dem Rechner sich bereits ergebenden (im Allgemeinen kleinen) Fehler. Ein mathematisches Problem kann aber selbst schon „gutartig“ oder „bösartig“ sein. So nennt man ein mathematisches Problem gut konditioniert, wenn kleine Störungen in den Daten auch nur kleine Fehler in den Lösungen zur Folge haben, und es heißt schlecht konditioniert (ill-conditioned), wenn kleine Störungen in den Daten große Fehler in den Lösungen bewirken können. Bei schlecht konditionierten Problemen ziehen also Eingabefehler auf dem Rechner üblicherweise automatisch große Fehler in den erzielten Resultaten nach sich und zwar für jeden Algorithmus.
Beispiel 1.9
(1) Die Subtraktion etwa gleich großer reeller Zahlen und ist ein schlecht konditioniertes Problem. Denn sind und mit Fehlern und gestört, d. h. hat man statt und
dann ergibt sich
Für (und bzw. ) hat man bezüglich im Ergebnis eine Fehlerverstärkung gegenüber bzw. von
Auf dem Rechner führt dies zum Phänomen der Auslöschung von korrekten Stellen. Hat man z. B. bei 8-stelliger Rechnung
so erhält man
(2) Das Problem, den Schnittpunkt zweier Geraden und , die fast parallel zueinander sind, zu berechnen, ist schlecht konditioniert. Um dies einzusehen, mache man sich geometrisch klar, dass im Fall zweier sich im rechten Winkel schneidender Geraden kleine „Störungen“ der Geraden auch nur kleine Störungen bezüglich des gemeinsamen Schnittpunktes zur Folge haben, während solche Störungen großen Einfluss haben, wenn die Geraden fast parallel zueinander sind.
Bei der Konstruktion von Algorithmen sollte man also, wenn möglich, schlecht konditionierte Teilprobleme vermeiden.
Beispiel 1.10
(1) Der Ausdruck
sollte mittels der numerisch stabileren Darstellung
berechnet werden.
(2) Die Funktion
erlaubt die stabilisierte Darstellung
welche sich zur Berechnung von Funktionswerten für anbietet. Man mache sich klar, dass bei der Auswertung der stabilisierten Darstellung keine Auslöschung auftritt.
1.4 Differentielle Fehleranalyse
Der Einfluss von Störungen in den Daten auf die Lösung eines Problems sowie die Fortpflanzung von Eingangs- und Rundungsfehlern bei numerischen Algorithmen kann durch die sogenannte differentielle Fehleranalyse untersucht werden. Zu deren Beschreibung nehmen wir an, dass ein Problem bzw. eine Berechnungsvorschrift mittels einer zweimal stetig differenzierbaren Funktion durch die Gleichung
bzw. gleichbedeutend durch die Gleichungen
beschrieben wird. Dabei ist also der Daten- und der Ergebnis-Vektor. Für
gilt dann nach dem Satz von Taylor zeilenweise
so dass für hinreichend kleine der Restterm vernachlässigt werden kann und folglich der dominierende relative Fehler gegeben ist durch
mit
Die Größen entscheiden demnach über den Einfluss der relativen Fehler in den Daten auf den relativen Fehler im Ergebnis. Sie werden deshalb häufig auch Verstärkungsfaktoren genannt. Im Fall, dass die Ausgangsgleichung einen Algorithmus beschreibt, sagt man, dass dieser stabil ist, wenn alle „klein“, idealerweise ungefähr gleich 1 sind. Anderenfalls sagt man, er ist instabil.
Im Fall, dass die Ausgangsgleichung ein mathematisches Problem beschreibt, spricht man bei den auch von Konditionszahlen (engl. to condition = bedingen, bestimmen). Sind die Konditionszahlen dem Betrag nach groß, hat man also ein schlecht konditioniertes, anderenfalls ein gut konditioniertes Problem. Für manche Zwecke ist aber diese Definition von Konditionszahlen unpraktisch, so dass auch andere Größen als Konditionszahlen bezeichnet werden (vgl. Definition 2.18).
Beispiel 1.11
Die Lösungen und einer quadratischen Gleichung
sind gegeben durch
wobei wir hier davon ausgehen, dass die Gleichung zwei unterschiedliche reelle Lösungen besitzt, also
ist. Zur Analyse der Fehlerempfindlichkeit der beiden Lösungen von (1.6) in Abhängigkeit von den Eingabedaten und betrachten wir diese nun als Funktionen von und . Wir untersuchen dazu die beiden Gleichungen
(Im Vergleich mit (1.4) ist und entsprechen die rechten Seiten in (1.8) den .) Man hat dafür
Damit errechnet man
Hieraus ergeben sich die Verstärkungsfaktoren
Die Bestimmung der Lösungen von (1.6) ist somit für ein schlecht konditioniertes Problem. Zur Veranschaulichung geben wir ein Zahlenbeispiel. Es seien und . Dann sind und die beiden Nullstellen von (1.6). Für die Verstärkungsfaktoren ergibt sich in diesem Fall
Somit ist zu erwarten, dass Eingabefehler in den Daten und in Bezug auf die Lösungen und von (1.6) um den 100- bis 200-fachen Wert verstärkt werden.
Wir wollen nun zwei unterschiedliche Algorithmen zur Berechnung von
betrachten und zwar unter den Bedingungen
In diesem Fall ist offenbar
d. h. für nicht zu kleine auch und somit das Problem der Bestimmung der Lösungen der quadratischen Gleichung (1.6) gut konditioniert. Ein „Lösungsalgorithmus“ könnte nun zunächst darin bestehen, hintereinander die folgenden Größen zu berechnen
Wegen sollte man als nächstes den unkritischen Wert
berechnen. Zur Berechnung von betrachten wir nun zwei Varianten (vgl. (1.9)):
Da unter den Voraussetzungen (1.10) gilt, tritt bei Variante A zwangsläufig Auslöschung auf. Betrachtet man als Funktion in den Variablen und , so erhält man für die Verstärkungsfaktoren
Also ist die Variante A im Fall (1.10) nicht stabil. Bei Variante B erhält man dagegen
D. h., der Algorithmus B ist stabil. Für und ergibt sich bei exakter (bzw. 4-stelliger) Rechnung
Die exakte Lösung für ist . Bei Rechnung mit 4-stelliger Mantisse erhält man im Fall der Variante B , während man für die Variante A erhält mit einem relativen Fehler bezüglich der exakten Lösung von
Im Fall
gilt offenbar . Somit ist die Berechnung von stabil möglich und von kritisch. Ein stabiler Algorithmus ergibt sich hier durch die Vertauschung der Rollen von und oben.
Wir nennen einen Algorithmus zur Lösung eines bestimmten Problems numerisch stabiler als einen zweiten zur Lösung desselben Problems, wenn der Gesamteinfluss aller Rundungsfehler auf die Lösung bei dem ersten Algorithmus kleiner als bei dem zweiten ist.