Wilfried Rohm, HTL
Saalfelden
Mathematische Inhalte :
- Fehlerrechnung
- Vorbereitung für die Betrachtung numerischer
Aspekte bei komplizierteren numerischen Algorithmen (Reihenentwicklungen,
Lineare Gleichungssysteme)
Kurzzusammenfassung :
Das Thema "numerische Stabilität" kommt
im herkömmlichen Mathematikunterricht zu kurz. Es werden im Hinblick
auf später zu besprechende, kompliziertere numerische Algorithmen
und als Schnittstelle zum EDV-Unterricht die Probleme und Lösungsmöglichkeiten
an Hand einfacher Formeln und Iterationen aufgezeigt. Zentrales Thema ist
das Problem der "numerischen Auslöschung".
Lehrplanbezug:
Die verwendeten Beispiele passen in den 2.Jahrgang, sind als Einstieg
in das Thema "Numerische Methoden" aber auch im 3.Jahrgang denkbar.
Zeitaufwand:
Je nach der zur Verfügung stehenden Zeit und der gewünschten
Ausführlichkeit kann das Thema in 1-3 Unterrichtseinheiten behandelt
werden.
Mediales Umfeld:
verwendete Medien: Demonstrationsrechner(PC) und Taschenrechner (in
den angeführten Beispielen ist es ein SHARP-1403)
verwendete Software: Turbo-Pascal, Version 6.0
Dateinamen zum Herunterladen: RO-SCHLF.EXE
(Demoprogramm zum Thema Rechner-genauigkeit am PC); RO-PINST.EXE
(instabile Berechnung von PI); RO-PSTAB.EXE
(stabile Berechnung von PI). Alle Programme liegen auch als Source-Code
(*.PAS) vor.
Anmerkungen:
Es könnte beim Durchlesen dieses Artikels das Mißverständnis
entstehen, im Mathematikunterricht solle EDV ("Programmieren") betrieben
werden. Es ist mir aber vielmehr darum gegangen, numerisch und damit auch
mathematisch interessante Probleme, die auch beim Programmieren
auftreten können, in einem für den Mathematikunterricht relevanten
Zusammenhang darzustellen. Die angegebenen Pascal-Programme können
nach Besprechung des mathematischen Hintergrundes (bzw. parallel dazu)
mittels Demonstrationsrechner in der Klasse vorgeführt und besprochen,
oder in Abstimmung mit dem EDV-Lehrer (insbesondere im 2.Jahrgang!) von
den Schülern erstellt werden. Hingegen kann auch im Mathematikunterricht
das Gelernte beispielsweise in ein numerisch stabiles Programm zum Lösen
von quadratischen Gleichungen umgesetzt werden (siehe Anhang).
1. Rechnergenauigkeit:
Das Problem der "numerischen Stabiltät" von Algorithmen bzw. Formeln
ist letztlich auf die begrenzte Rechengenauigkeit jeder Rechenmaschine
(Taschenrechner,PC) zurückzuführen. Daher müssen zunächst
die Auswirkungen dieser begrenzten Genauigkeit vor Augen geführt werden.
Dafür gibt es viele Möglichkeiten, von denen hier einige einfach
nachvollziehende dargestellt werden:
Rechnergenauigkeit am Taschenrechner
Bei neueren Taschenrechner ist es bemerkenswerter Weise gar nicht mehr
so einfach, die internen Rechenungenauigkeiten zu demonstrieren, da bei
Verwendung eingebauter Funktionen Algorithmen ablaufen, die die internen
Rechenungenauigkeiten "verschleiern" :
Beispiele:
- (Ö 2)2 ergibt bei den meisten Taschenrechnern
tatsächlich "2". Drückt man hingegen vor dem Quadrieren die "Enter"
bzw. "=" Taste, so weicht das Ergebnis (meistens) vom exakten Wert ab!
- Mehrmaliges Wurzelziehen und anschließendes Quadrieren zeigt
aber die Kumulation der Rechenungenauigkeit auch bei ausschließlicher
Verwendung der Funktionstasten auf:: 10-maliges Wurzelziehen und anschließendes
10-maliges Quadrieren liefert am Taschenrechner (PC-1403) das Ergebnis
1.999999963.
- "199*199*199 - 199^3" liefert am PC-1403 das bemerkenswerte Ergebnis
"0.00024". Dieses Beispiel stammt aus der Bedienungsanleitung und demonstriert,
daß numerische Algorithmen (hier das Potenzieren) "fehlerhaft" arbeiten.
Rechnergenauigkeit am PC :
Im EDV-Unterricht kommen die Schüler meist viel direkter mit dem
Problem der internen Rechenungenauigkeiten in Kontakt. Das folgende Beispiel
verwende ich daher seit Jahren als Einstieg in die Diskussion über
die Folgen der internen Rechenungenauigkeit (Anzumerken ist, daß
Taschenrechnerprogramme sich anders verhalten können !) :
Aufgabenstellung:
Es soll eine Tabelle von Funktionswerten mit dem PC in einer höheren
Programmiersprache (zB.PASCAL) erstellt werden. Als Eingabe sind Anfangswert,
Endwert und Schrittweite der unabhängigen Variablen (hier x) vorzusehen.
In beinahe allen Fällen werden Schüler ohne weitere Vorkenntnisse
ungefähr folgendermaßen vorgehen :
Dieses Programm (-> RO-SCHLF.EXE
bzw. RO-SCHLF.PAS)
verhält sich überraschender Weise bei verschiedenen Werten von
"step" unterschiedlich :
- xa:=-1 , xb:=1 , step := 0.5/0.25/0.125/... führt zu "ordnungsgemäßem"
Abbruch.
- xa:=-1 , xb:=1 , step := 0.1 führt zu Endlosschleife, da 0.1
"intern" als Dualzahl nicht exakt dargestellt werden kann, während
0.5/0.25/0.125/... exakt umgewandelt werden.
Begründung:
Es gilt beispielsweise: (0.1)10 = (0.0001100110011001100110011....)2
d.h. die interne Darstellung der (exakten) Dezimalzahl 0.1 kann gar
nicht exakt sein.
Bemerkung :
Mit diesem PASCAL-Beispiel läßt sich auch ganz gut die
Fehler-"Kumulierung" bei vielen Operationen zeigen.Das Programm liefert
zum Beispiel bei "step:=0.1" nach vielen Iterationen den Wert "x = 479.90000032"
,d.h. bereits einen deutlich "sichtbaren" Fehler.
Aus diesem Beispiel ergibt sich eine allgemeingültige Grundregel für
numerische Berechnungen in Programmen (REAL-Zahlen sind Zahlen in
Gleitkommadarstellung):
Ein weiteres Beispiel:
Ein zum obigen Beispiel ähnliches Problem tritt bei den Fallunterscheidungen
der Lösungen einer quadratischen Gleichung auf :
Ist D=(B2 - 4AC) gleich 0, so liegt bekanntlich eine "reelle Doppellösung"
vor. Eine Abfrage wie
"IF D=0 THEN ...."
wird aber nicht immer das gewünschte Ergebnis liefern !
2. Numerische Auslöschung
Damit wird ein spezieller Rundungsfehler bezeichnet,der auftritt, wenn
zwei nahezu gleichgrosse Zahlen voneinander subtrahiert werden .
Beispiel:
Die Nullen nach dem Dezimalpunkt im Resultat sind nur richtig, wenn die
beiden Operanden 1.2345 und 1.2344 "exakte" Zahlen waren. Waren diese auch
schon durch Rundungsfehler verfälscht, so ist das Resultat
1.xxxx * 10-4
und die mit "xxxx" bezeichneten Stellen sind nicht bekannt. Das Resultat
(nur einer einzigen Rechenoperation !!) hat also einen großen relativen
Fehler. Daher :
Beispiel 1: (aus [2])
soll auf 3 Dezimalstellen genau berechnet werden.
a) Nenner wird zuerst berechnet:
ergibt 120.67 » 121 (aufgerundet)
bzw.» 120 (abgerundet)
Das Ergebnis ist daher entweder ¥ oder
380.
b) Der umgeformte Ausdruck
ergibt den wahren Wert 1140.
Beispiel 2:
Der angeführte Taschenrechner (PC-1403) verarbeitet Zahlen mit
10-stelliger Genauigkeit. Daher ist logisch, daß 1E11 + 1 - 1E11
zur Ausgabe "0" führt.
Beispiel 3: (Iteration am PC)
Berechnung von PI durch Approximation des Kreises durch eingeschriebene
n-Ecke nach einer Iterationsformel (frei nach Archimedes).
An ....Fläche des eingeschriebenen n-Ecks.
Es gilt :
Für r=1 und n=6 ist : A6 =
allgemein für r=1: An =
und an
Wir verwenden die folgende Identität zur Berechnung von A2n aus An
(Rekursionsformel):
Das folgende Struktogramm ist das Grundgerüst des Programms "RO-PINST.EXE",
das die nachfolgenden Ergebnisse liefert:
(Anmerkung: sqrt( ) ... Quadratwurzelfunktion)
Der Grund für die fehlerhafte Berechnung ab
einem gewissen n ist "numerische Auslöschung" in der verwendeten Rekursionsformel.
Wir können jedoch daraus eine stabile Berechnung machen, indem in
der Formel die Auslöschung durch Umformung behoben wird :
Gemäß
erhält man für a=1 und
die numerisch stabile Formel:
Ferner läßt sich das Abbruchkriterium
verbessern: Die Folge der Flächen An ist monoton wachsend und beschränkt
- in einer endlichen Arithmetik kann jedoch An nicht für alle n monoton
wachsend sein, da es ja nur endlich viele Zahlen gibt! Daher sollte die
Iteration abgebrochen werden, sobald A2n < An gilt! Dadurch läuft
das Programm maschinen-unabhängig bis zur bestmöglichen Näherung
für p .(->
Programm RO-PSTAB.EXE)
(Anmerkung: sqrt( ) ... Quadratwurzelfunktion)
Bemerkung : Ein entsprechendes Taschenrechnerprogramm
liefert auch in der unstabilen Form richtige Ergebnisse, was mit einer
anderen internen Verarbeitung zusammenhängen dürfte. Auch ein
PASCAL-Programm "RO-PINST" liefert bis zu den angegebenen n-Werten richtige
Ergebnisse, wenn bei Vorhandensein eines numerischen Coprozessors mit der
weitaus größeren Genauigkeit des Typs "Extended" anstatt "Real"
gearbeitet wird.
Im zweiten Jahrgang werden folgende Formeln besprochen,
die (bei bestimmten Werten) unstabil sind und durch stabile Varianten ersetzt
werden können :
Beispiel 4: (Stabile Formel zur Lösung einer
quadratischen Gleichung)
Die Berechnung der Lösungen einer quadratischen
Gleichung gemäß der Formel
(mit p=B/A und q= C/A)
führt bei ½
p½ >>½
q½ zu Ungenauigkeiten
wegen numerischer Auslöschung.
Zum Beispiel liefert am Taschenrechner (PC-1403)
die Gleichung x² - 108x +1 = 0
die Lösungen x1=108
und die "falsche" Lösung x2=0.
Nach einem numerisch stabilen Algorithmus berechne
man zuerst die betragsmäßig größere Lösung und
anschließend die zweite Lösung mit Hilfe des Satz von Vieta:
Ein weiteres Problem könnte bei großen
Werten von p die Überschreitung des Rechenbereiches durch p²
sein ( Der Datentyp real hat zB. in PASCAL eine Obergrenze von 1.7*1039).
Hier hilft die Umwandlung:
Allerdings muß man dabei
über
berechnen !
Bei Berücksichtigung der angeführten Punkte
kann man ein numerisch stabiles Programm zur Lösung quadratischer
Gleichungen schreiben. (siehe Taschenrechnerprogramm im ANHANG)
Beispiel 5 : (Kosinussatz)
ist instabil für kleine Werte von g
und a» b
wegen numerischer Auslöschung.
Eine algebraisch äquivalente, aber stabile
Formel erhält man durch Anwendung der Summensätze:
3.Ausblick
In diesem Artikel wurde das Thema "Numerische
Stabilität" auf einer sehr elementaren Ebene mit einfachen Beispielen
aus den beiden ersten Jahrgängen behandelt. Wirklich bedeutend wird
dieses Thema bei der Behandlung komplizierterer numerischer Verfahren im
3. und 4.Jahrgang. Dazu folgende Beispiele :
- Potenzreihenentwicklungen, speziell
von alternierenden Reihen, können zum bereits be-schriebenen Problem
der numerischen Auslöschung führen. Geplant ist für die
nächste Ausgabe dieser Zeitschrift ein Artikel "Taylorreihen und Computereinsatz",
in dem unter anderem darauf näher eingegangen werden soll.
- Das numerische Lösen von Gleichungssystemen
ist ein Paradebeispiel für das Suchen nach numerisch stabilen Algorithmen,
weil sehr viele Berechnungsschritte durchzuführen sind. In vielen
Fällen (zB. Gauß-Algorithmus) wird diese Stabilität durch
die sogenannte "PIVOT"-Strategie erreicht. Es erscheint aber sinnvoll,
den Schüler schon VOR Besprechung derartiger Algorithmen für
das Problem der "numerischen Stabilität" sensibilisiert zu haben.
- Hinweis auf die Regeln der Fehlerfortpflanzung:
Addition/Subtraktion : Es addieren sich im ungünstigsten
Fall die absoluten Fehler der Operanden.
Multiplikation/Division : Es addieren sich im
ungünstigsten Fall die relativen Fehler der Operanden.
Numerisch stabile Algorithmen sind gegen das Akkumulieren
von Rundungsfehlern weitgehend unempfindlich.
- Schlecht konditionierte Problemstellungen
können auch mit numerisch stabilen Algorithmen NICHT befriedigend
gelöst werden: Darunter versteht man Aufgabenstellungen, die bei nur
leicht veränderten Ausgangswerten zu sehr unterschiedlichen Ergebniswerten
führen.
Das Resultat der numerischen Rechnung wird durch
Rundungsfehler in allen Fällen so weit verfälscht, daß
es das exakte Resultat leicht geänderter Anfangsdaten ist. Daher erhält
man bei schlechter Kondition der Aufgabenstellung Lösungen, die sehr
stark von der exakten Lösung abweichen. Beispiele :
- Gleichungssysteme mit "beinahe" singulären
Koeffizientenmatrizen
- Berechnung mehrfacher Nullstellen von Polynomen,
zum Beispiel mit dem Newton-verfahren (wodurch sich eine Schnittstelle
zur Chaostheorie ergibt)
4. LITERATURHINWEISE :
[1] Walter Gander: Computermathematik,Birkhäuser
Verlag,1985. (viele numerische Algorithmen mit Stabilitätsbetrachtungen
und ihre Umsetzung in PASCAL-Programme)
[2] Walter Riemer: EDV mit Pascal,Österr.Gerwerbeverlag,1990.
(Anhang über die Problematik numerischer Methoden)
5. ANHANG :
Struktogramm für ein numerisch stabiles Programm
zum Lösen einer quadratischen Gleichung :
(Anmerkung : squ( )...Quadratfunktion
; sqr( )...Wurzelfunktion; abs()...Absolutbetrag)
Umsetzung des obigen Algorithmus auf ein Taschenrechnerprogramm
am Beispiel PC-1403 (etwas altertümliches BASIC ! ; das Programm ist
ohne formatierte Ausgabe und ohne Fallunterscheidung für spezielle
Fälle, etwa A=0, ausgestattet.)
Source- Text der PASCAL-Programme (in etwas vereinfachter
Form):
1) Demo-Programm für Schleifenende
(-> RO-SCHLF.PAS):
2) Berechnung von PI -unstabile Version
(-> RO-PINST.PAS):
3) Berechnung von PI - stabile Version
(-> RO-PSTAB.PAS)