close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Informatik und Numerik - FH Bingen

EinbettenHerunterladen
Informatik und Numerik
Wintersemester
2014/15
16. November 2014
Bachelorstudiengang
Maschinenbau
Softwaretechnik
Top-Down-Entwicklung, Sprachkonstrukte,
Datenstrukturen, MatLab
Numerische Verfahren
Nullstellen, Integration,
Differenzialgleichungen, Lineare Algebra
Statistik
Stichprobe, Vertrauensintervall,
Prof. Dr. Dieter Kilsch
Fachbereich 2
Informatik, Technik und Wirtschaft
Weibull-Verteilungen
Inhaltsverzeichnis
Symbolverzeichnis
v
Einleitung
Kapitel I
§1
§2
§3
§4
§5
§6
vi
Softwareentwicklung
1
Phasen der Softwarekonstruktion
1.A
1.B
1.C
1.D
.
.
.
Anforderungen an die Softwarekonstruktion
Die Definitionsphase
.
.
.
.
Die Entwicklungsphase .
.
.
.
Die Betreuungsphase (Wartung)
.
.
Strukturierung und Sprachkonstrukte
2.A
2.B
2.C
2.D
2.E
2.F
2.G
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Kommunikation
.
.
.
.
.
.
Algorithmen
.
.
.
.
.
.
Wohlstrukturierte Programmierung
.
.
.
Darstellung der Sprachkonstrukte durch Flussdiagramme
Darstellung der Sprachkonstrukte durch Struktogramme
Darstellung der Sprachkonstrukte in einer Metasprache
Implementieren der Sprachkonstrukte in MatLab
.
Datentypen und einfache Datenstrukturen
.
.
.
.
.
.
.
.
.
.
1
1
3
4
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
10
12
15
17
20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
27
30
.
.
.
.
.
.
.
.
Array)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
38
39
40
46
Formatieren, Dateiein- und -ausgabe
.
5.A
5.B
5.C
5.D
5.E
5.F
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
48
51
53
55
56
56
.
.
.
.
.
.
.
.
.
59
59
60
3.A
3.B
3.C
3.D
Speicherplatzgr¨
oßen
.
.
Festkommazahlen (INTEGER)
Gleitkommazahlen (REAL)
.
Einfache Datentypen
.
.
Datenstrukturen
4.A
4.B
4.C
4.D
4.E
.
.
.
.
Numerische Felder
.
.
Mengen
.
.
.
.
Verbund (Records, Structures)
Geschachtelte Felder (Nested Array,
Darstellung von Funktionen
.
.
.
.
.
Cell
.
.
.
.
.
Formatieren numerischer Werte (Kodieren, Verschl¨
usseln)
Lesen numerischer Werte (Dekodieren, Entschl¨
usseln)
Lesen von Textdateien .
.
.
.
.
.
Lesen ge¨
offneter Dateien
.
.
.
.
.
Schreiben in Textdateien
.
.
.
.
.
Lesen und Schreiben in Excel-Dateien
.
.
.
Programmstrukturen
6.A
6.B
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Entstehung eines lauff¨
ahigen Programms
Bestandteile eines Programms
.
.
ii
.
.
.
.
.
.
Inhaltsverzeichnis
6.C
6.D
6.E
6.F
6.G
Kapitel II
§7
§8
§9
iii
Parameter¨
ubergabe bei Prozeduraufruf
Globale und lokale Daten
.
.
Speicherorganisation der Daten
.
Rekursiver Prozeduraufruf
.
.
Datenkapseln
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
72
74
75
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
76
79
80
.
.
.
.
.
.
Bisherige Verfahren als Iterationsverfahren
.
.
Kontrahierende Funktionen und Fixpunktsatz .
.
Das Newton-Verfahren als sukzessive Approximation
.
.
.
.
.
.
.
.
.
.
.
.
83
83
84
86
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
88
88
90
92
.
.
.
.
.
.
.
.
.
.
.
.
95
95
96
97
98
99
.
.
.
.
.
.
100
100
102
.
.
.
.
.
.
.
Das Newton-Verfahren .
.
.
Der Algorithmus von Steffensen (1933)
Nullstellen von Polynomen
.
.
Trapezregel .
.
Simpson-Regel
.
Romberg-Integration
.
.
.
.
.
.
.
.
Eulersches Streckenzugverfahren
Das Verfahren von Runge-Kutta
Modifizierte Euler-Verfahren .
Das Schießverfahren
.
.
Das Differenzenverfahren
.
§ 12 Solving Optimization Problems
12.A
12.B
.
.
.
.
.
.
.
.
.
.
.
.
Zeros of a function
Minimal Points
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Chapter III Numerical Methods in Linear Algebra
105
§ 13 Numerical Solution of a System of Linear Equations
13.A
13.B
13.C
13.D
13.E
Triangular Decomposition
Iterative Solutions of Systems
Orthogonalization
.
Tridiagonalization
.
Eigenvalues of a Matrix
.
.
.
.
of Linear Equations
.
.
.
.
.
.
.
.
.
.
.
.
§ 14 Ausgleichsrechnung, Links- und Pseudoinverse
14.A
14.B
14.C
14.D
14.E
14.F
Kapitel IV
62
64
66
66
68
.
.
.
.
§ 11 Numerische Verfahren f¨
ur explizite Differenzialgleichung
11.A
11.B
11.C
11.D
11.E
.
.
.
.
.
.
.
.
.
§ 10 Numerische Integration
10.A
10.B
10.C
.
.
.
.
.
72
Sukzessive Approximation
9.A
9.B
9.C
.
.
.
.
.
.
.
.
.
Ein einf¨
uhrendes Beispiel
Das Bisektionsverfahren
Regula Falsi
.
.
.
.
.
.
Das Newton-Verfahren
8.A
8.B
8.C
.
.
.
.
.
Numerische Verfahren der Analysis
Bisektionsverfahren und Regula falsi
7.A
7.B
7.C
.
.
.
.
.
Problemstellung und Grundlagen
.
Algebraisch-geometrische L¨
osung
.
Analytische L¨
osung
.
.
.
Hauptachsen symmetrischer Matrizen
Singul¨
arwertzerlegung einer Matrix
Ausgleichen von Messreihen
.
.
Statistik
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
105
105
107
110
111
113
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
116
116
117
120
122
125
126
130
iv
Inhaltsverzeichnis
§ 15 Grundlagen der Wahrscheinlichkeitsrechnung
15.A
15.B
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
130
130
132
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
136
136
137
.
.
.
.
.
.
.
.
Definition
.
.
.
.
.
.
.
.
.
Momente
.
.
.
.
.
.
.
.
.
Approximation einer Messreihe durch Weibull-Verteilungen
.
.
.
.
.
.
.
.
139
139
141
141
Grundlagen .
Zufallsvariable
§ 16 Grundlagen der Statistik
16.A
16.B
.
.
.
.
.
.
.
.
.
Sch¨
atzfunktionen f¨
ur statistische Gr¨
oßen
Vertrauensintervall f¨
ur Mittelwert
.
§ 17 Weibull-Verteilung
17.A
17.B
17.C
.
.
.
.
.
.
Literaturverzeichnis
148
Abbildungsverzeichnis
151
Tabellenverzeichnis
153
Algorithmenverzeichnis
154
Stichwortverzeichnis
155
Symbolverzeichnis
∁Ω A
Komplement¨
armenge von A in Ω
N0
nicht-negative ganze Zahlen, vorzeichenlose ganze Zahlen
A
Komplement¨
armenge von A
130
P (A|B)
bedingte Wahrscheinlichkeit
131
%2$d
Formatangabe mit Reihenfolge
50
%5.2d
Dezimalzahl
49
%5.2E
Formatangabe Deziamlzahl Exponentialformat
49
%5.2e
Formatangabe Deziamlzahl Exponentialformat
49
%5.2f
Formatangabe Deziamlzahl
49
%5.2G
Formatangabe Deziamlzahl kompakt
49
%5.2g
Formatangabe Deziamlzahl kompakt
49
%5.2o
Formatangabe Oktalzahl
49
%5.2u
Formatangabe Dezimalzahl, positive ganze Zahlen ohne Dezimalteil
49
%5i
Formatangabe ganze Zahl
49
%X
Formatangabe Hexadezimalzahl
49
%x
Formatangabe Hexadezimalzahl
49
cellfun
Funktion auf Zellen anwenden
41
whos
von Variablen belegter Speicherplatz
40
130
v
23
Einleitung
Vom nicht-formalen Problem zum formalen Programm
Nicht-formales Problem der realen Umwelt
Intuitive
Abstraktion
beschreibend
¨
Uberpr¨
ufung,
Best¨
atigung
Spezifikation:
Lastenheft • Grobentwurf • Feinentwurf
Konstruktion
vorschreibend
Nachweis
(Beweis)
Formales Programm
Abb. 1: Nicht-formales Problem – formales Programm
Die Software-Technik befasst sich mit dem gesamten Prozess vom Erfassen eines nicht-formalen
Problems der Umwelt bis zu einem fertig erstellten, auf einem Rechner lauff¨
ahigen, formalen Programm. Sie entwickelt systematischen Methoden, Techniken und Hilfsmittel, die diesen Prozess
strukturieren und u
¨ bersichtlicher gestalten. Besonders wichtig ist die Aufteilung der Gesamtentwicklung in verschiedene Phasen, deren Realisierung einen Vergleich mit den vorgesehenen Planungszeiten erm¨
oglichen und so fr¨
uhzeitig Planungsfehler in Bezug auf Projektdauer und -kosten
offenlegen.
Die Bedeutung der Software-Technik wird hervorgehoben durch folgende Fakten [43, S. 268ff]:
• Der Kostenanteil der Softwareentwicklung und -wartung an einem Gesamtprojekt stieg von
weniger als 20% (1955) auf u
¨ ber 85% (1985).
• Der Anteil der Wartungskosten an den Gesamt-Softwarekosten stieg auf 67% (1985).
• Der tats¨
achliche Zeitbedarf f¨
ur ein Softwareprojekt u
¨ bersteigt die geplante Projektzeit um
vi
vii
53% (Hardware: 17%), die tats¨
achlichen Kosten die geplanten Kosten um 72% (Hardware:
15%).
• Der Einsatz moderner Softwaretechniken verdoppelt fast die Produktivit¨
at in der SoftwareErstellung (10 - 15 Zeilen pro Tag auf 20 - 25 Zeilen pro Tag) und reduziert die Wartungskosten
um 10 - 20%.
Erwartungen an das fertige Programm
Was erwarten wir von einem Programm, genauer vom Rechner, auf dem das Programm l¨
auft [29,
S. 45]:
(a) Ausf¨
uhrungsaspekt:
• korrekt:
– Das Programm macht, was programmiert ist.
– Das Programm macht, was spezifiziert ist.
– Das Programm macht, was der Anwender will. (s. §1)
• benutzbar: Das Programm kann vom Benutzer bedient werden.
• robust: Das Programm u
¨ berlebt eine falsche Bedienung.
• effizient: In Bezug auf Speicherplatz und Laufzeit!
(b) Dokumentationsaspekt:
• lesbar: Das Programm ist gut kommentiert und auf verst¨
andliche Weise aus verst¨
and”
lichen Teilen aufgebaut“ [46, S. 84].
• ¨
anderungsfreundlich: z.B.: zentrale Datenhaltung, . . .
• klar dokumentiert: Das Programm mit seiner Dokumentation dient der Kommunikation
des Entwicklers mit dem Wartungspersonal. 2/3 der Arbeit mit einem Programm ist
¨
Wartung und Anderung.
(c) portabel: Auf andere Rechner u
¨ bertragbar.
(d) billig in der Herstellung und Wartung.
Programmiersprachen m¨
ussen alle Aspekte unterst¨
utzen, zwischen den einzelnen Aspekten Es
gibt jedoch Konflikte. Sehr wichtig ist jedoch, dass Fehler in fr¨
uhen Phasen riesige Kosten verursachen!
Ein Beispiel fu
¨ r das Problem der Korrektheit
F¨
ur Beispiele werden im wesentlichen die Sprachen APL, Fortran und Pascal herangezogen, ferner
wird eine Metasprache mit den einzuf¨
uhrenden Sprachkonstrukten benutzt. Das erste Beispiel ist
in Pascal notiert.
Die Fakult¨
atsfunktion n! kann rekursiv programmiert werden:
Fak(n) := IF(n=0) THEN 1 ELSE n·Fak(n-1);
Ausgehend von der Definition der Fakult¨
atsfunktion erscheint diese Anweisung logisch korrekt.
Was passiert beim Aufruf Fak(-5), oder gar Fak(.5)?
Das Programm rechnet ewig weiter!
viii
Einleitung
Kapitel I
Softwareentwicklung
§ 1 Phasen der Softwarekonstruktion
Literatur: Rembold [43, S.267 ff], Pomberger [40, S.6 ff], Meyer [31, S. 1 ff]
Die Definition und Entwicklung von Software wird heute nach der Methode der stufenweisen
Verfeinerung (Top Down Methode) durchgef¨
uhrt. Sie l¨
auft also in verschiedenen Phasen und Abschnitten ab.
Jeder Entwicklungsabschnitt verfeinert die Festlegungen des vorhergehenden Abschnitts. Er
besteht aus T¨
atigkeiten und einer Dokumentation der T¨
atigkeiten und Ergebnisse. Am Ende jedes
¨
Abschnitts erfolgt eine kritische Uberpr¨
ufung der Ergebnisse und Entscheidungen.
Beim Erkennen von Fehlern muss ein Abschnitt und eventuell fr¨
uhere Abschnitte revidiert, also
¨
wiederholt werden. Dies ist auch der Fall bei Anderungen der Aufgabenstellung.
¨
Der Ubergang
zwischen den einzelnen Abschnitten ist fließend. Sie m¨
ussen f¨
ur logisch unabh¨
angig Teile eines Projekts nicht synchron durchlaufen werden, wobei die Gefahr einer umfangreicheren
Revision jedoch nicht untersch¨
atzt werden darf.
Der gesamte Software-Lebenszyklus (Software Life Cycle) beinhaltet außer Definitions- und Enwicklungsphase noch die Betreuungsphase, die sich an die Auslieferung der Software an den Kunden
anschließt.
Die Entwicklung von Phasenmodellen ist sehr stark gepr¨
agt von der Notwendigkeit, den Zeitbedarf und die Kosten der Softwareentwicklung vorherzusagen und zu kontrollieren. Ein Auseinanderlaufen der geplanten und tats¨
achlichen Entwicklungszeit muss vermieden werden. Die Entwicklung
eines Programmpakets wird heute oft anhand eines Netzplans organisiert und kontrolliert.
Es existiert kein einheitliches Schema nach dem die Entstehung von Software vollzogen wird.
Es wird hier ein Modell mit 8 Abschnitten besprochen. Zun¨
achst werden jedoch die Anforderungen
an das Endprodukt genannt.
1.A
Anforderungen an die Softwarekonstruktion
Die u
atsmerkmale einer Ware wie Beschaffenheit, Brauchbarkeit, Haltbarkeit oder
¨ blichen Qualit¨
F¨
ahigkeit m¨
ussen an die Besonderheiten des Produkts Software angepasst werden.
Im Vordergrund stehen zun¨
achst die Funktion und die Bedienung. Im Unterschiede zu harten“
”
Waren kann Software leicht“ nachtr¨
aglich ge¨
andert werden, wobei jedoch strenge Organisations”
und Kontrollmechanismen ber¨
ucksichtigt werden m¨
ussen.
Der Wartungsanteil am Leben eines Softwareprodukts ist im Vergleich zu herk¨
ommlichen Waren also wesentlich gr¨
oßer ([43, S.268]: 67%), es kommen damit noch weitere Qualit¨
atsmerkmale
entscheidend hinzu.
1
2
I Softwareentwicklung
1.A.1
Definitionsphase
Korrektheit: Ein Programm ist korrekt, wenn es die Aufgabenstellung laut Spezifikation korrekt
ausf¨
uhrt. Die Korrektheit eines Programms kann nicht bewiesen werden, ein Programm kann
lediglich getestet werden.
Korrektheit sagt nichts u
¨ ber die Benutzbarkeit aus.
Korrektheit setzt eine korrekte Aufgabenstellung voraus. Sie muss konsistent (widerspruchsfrei)
und nach innen und außen vollst¨
andig sein. Eine korrekte Aufgabenstellung beinhaltet Aussagen u
aren und den irregul¨
aren Ablauf (Fehler des Bedieners und Fehler in der
¨ ber den regul¨
Umgebung).
¨
Es existieren Werkzeuge zur Uberpr¨
ufung der inneren Konsistenz und Vollst¨
andigkeit, nicht
jedoch der ¨
außeren. Diese kann nur getestet werden.
Robustheit: Das Programm arbeitet auch unter außergew¨
ohnlichen, nicht durch die Spezifikation
erfassten, Situationen gut.
Bedienungskomfort (Benutzerfreundlichkeit): Der Benutzer will einfach und effizient arbeiten und das Bedienen des Programms erlernen. Das erfordert eine gute Dialogf¨
uhrung f¨
ur den
unge¨
ubten und den routinierten Benutzer im regul¨
aren und irregul¨
aren Betrieb. Es muss also
auch robust sein.
¨
Effizienz: Das Programm muss alle Ressourcen optimal nutzen: (Speicherplatz, Ubertragungskan¨
ale, Peripherie, Rechen-, Lauf-, Bediener-, Vorbereitungszeit, ... ).
1.A.2
Wirtschaftlichkeitsaspekt
Kompatibilit¨
at (Vertr¨
aglichkeit): Das Programm kann mit anderen Programmen verbunden
werden, es kann mit anderen kommunizieren. Standardisierte Dateiformate und Datenstrukturen
sind f¨
ur eine gute Kompatibilit¨
at erforderlich.
Wartbarkeit: Das Beheben von Fehlern und Anpassen an eine ge¨
anderte Systemumgebung in
hardwarenaher Software ist (einfach) durchf¨
uhrbar. Dies erfordert eine genaue und ausf¨
uhrliche
Dokumentation.
Adaptierbarkeit (Erweiterbarkeit): Die Software l¨
asst sich leicht an eine ge¨
anderte Aufgabenstellung anpassen. Die Anpassung beschr¨
ankt sich dann in der Regel auf wenige Module.
Wiederverwendbarkeit: Die Software kann einfach an neue Bedingungen angepasst und f¨
ur
neue Anwendungen verwendet werden.
Portabilit¨
at: Wie leicht kann das Programm auf verschieden Hard- und Software-Umgebungen
¨
u
der Software auf eine neue Rechnerkon¨ bertragen werden? Sind die Kosten der Ubertragung
figuration h¨
oher als eine Neuentwicklung, so ist Portabilit¨
at nicht gegeben. Wichtig f¨
ur die
Portabilit¨
at ist die Zentralisierung der Schnittstellen.
1.A.3
Wartbarkeitsaspekt
Lesbarkeit: Die Dokumentation von Software besteht aus Programmbeschreibung und Programmlisten. Letztere beinhalten die Realisierung des Produkts. Beide zusammen haben großen
¨
Einfluss auf die Anderbarkeit
und die Wiederverwendung der Software.
Die direkte Dokumentation in den Programmlisten muss um so detaillierter sein, je weniger
lesbar der Programmkode ist (Assembler, APL, Basic).
1 Phasen der Softwarekonstruktion
3
Strukturierung: Unter strukturierter Programmierung versteht man Methoden, die einen u
¨ berschaubaren und leicht verst¨
andlichen Programmentwurf erzwingen. Wichtige Forderungen sind
die GOTO-freie Programmierung und das Verwenden von Schleifen und Alternativen.
Modularisierung: Ein Modul ist ein Programmteil, das getrennt entworfen, implementiert und
getestet wird. Wichtige, zu beschreibende Bestandteile sind seine ¨
außeren Datenschnittstellen,
Datenobjekte und Prozeduren und ihre Effekte.
Verifizierbarkeit: Wie leicht k¨
onnen Abnahmeprozeduren, Testdaten, Prozeduren zur Fehlererkennung w¨
ahrend der Garantie- und Betriebszeit erzeugt werden?
Integrit¨
at: Kann sich das Programmpaket gegen unberechtigten Zugriff auf seine Daten und
Programme oder deren Ver¨
anderungen sch¨
utzen.
1.A.4
Hierarchie
Hierarchischer Entwurf: Planung, Entwurf und Dokumentation in mehreren Ebenen, entsprechend den Phasen der Softwarekonstruktion.
Hierarchischer Aufruf: Die Module sind in verschiedene Hierarchieebenen aufgeteilt. Es werden
3 Hierarchiearten unterschieden:
• allgemeine Hierarchie: Ein Modul ruft nur Module darunter liegender Schichten auf.
• strenge Hierarchie: Ein Modul ruft nur Module der n¨
achstniedrigeren Schicht auf.
• baumartige strenge Hierarchie: Ein Modul ruft als einziger die Module der ihm zugeordneten
n¨
achstniedrigeren Schicht auf.
1.B
Die Definitionsphase
Die erste Phase eines Projekts, die Definitionsphase, beginnt mit der Angebotsaufforderung durch
einen Kunden. Sind die Angaben des Kunden nicht ausreichend zum Erarbeiten eines Angebots,
so kann zun¨
achst ein Angebot zu einer Studie unterbreitet werden.
In der Definitionsphase findet die Systemanalyse und -spezifikation statt. Es muss explizit festgelegt werden, was das zuk¨
unftige System leisten soll. Fehler in diesen Phasen beeintr¨
achtigen
den sp¨
ateren Projektablauf erheblich. Fr¨
uhzeitig m¨
ussen die sp¨
ateren Abschnitte der Tests
und der Abnahme vorbereitet und mit dem Kunden abgestimmt werden.
Die Definitionsphase besteht aus 2 Abschnitten, in denen festgelegt und beschrieben wird, was
realisiert werden soll:
(a) Analyse des Ist- und Soll-Zustands (Anforderungsanalyse):
Das Ziel dieses Abschnitts ist das Erstellen des Lastenhefts. Es ist kundenorientiert und
wird in enger Zusammenarbeit mit dem Kunden oder auch vom Kunden selbst erstellt. Das
Lastenheft enth¨
alt
(a1) die Zielsetzung.
(a2) die Beschreibung des zuk¨
unftigen Systems mit einer Unterscheidung in sofort zu realisierende Komponenten und sp¨
ater zu realisierende Komponenten.
(a3) die Beschreibung der Schnittstelle zwischen Rechnersystem und Umwelt (regul¨
arer und
irregul¨
arer Betrieb).
(a4) organisatorische, personelle und gesetzliche Randbedingungen; z.B.: Arbeitsbedingungen
beim Kunden f¨
ur Entwicklung, Implementierung und Betreuung.
(b) Definition der Aufgaben (Spezifikation): Das Ziel dieses Abschnitts ist das Erstellen des Pflichtenhefts und das Unterzeichnen eines Vertrags. Das Pflichtenheft beschreibt die Aufgaben
rechnerorientiert. Es enth¨
alt
4
I Softwareentwicklung
¨
(b1) eine Uberpr¨
ufung der Vollst¨
andigkeit und Widerspruchsfreiheit der Aufgabenstellung.
Hierzu werden in verst¨
arktem Umfang formale Hilfsmittel herangezogen (Spezifikationssprachen, Entwicklungswerkzeuge).
(b2) eine detaillierte Planung des Entwicklungsumfangs bez¨
uglich Zeitdauer, Kosten, Personal
und Material.
Die Spezifikationen im Pflichtenheft erlauben ein Aufteilen der Aufgaben in Teilaufgaben, die
von den einzelnen Mitglieder der Projektgruppe selbst¨
andig gel¨
ost werden k¨
onnen.
1.C
Die Entwicklungsphase
In der Entwicklungsphase wird festgelegt, wie das zuk¨
unftige System realisiert werden soll. Auch
werden Festlegungen zur Implementierung und zum Testen getroffen.
(c) Der Grobentwurf ist der erste Schritt im Festlegen der Realisierung des zuk¨
unftigen Systems.
Die Beschreibung kann noch auf einem abstrakten Niveau, ohne Einzelheiten des Systems
festzulegen, durchgef¨
uhrt werden. Benutzt werden Methoden des hierarchischen und des modularen Entwurfs.
Es werden verschiedene L¨
osungsalternativen erarbeitet und untersucht. Hierzu z¨
ahlen die
M¨
oglichkeiten, existierende Software einzusetzen oder Neuentwicklungen durchzuf¨
uhren. Die
Auswahl wird anhand akzeptierter Entscheidungskriterien getroffen.
F¨
ur die einzelnen Module wird die Aufgabenstellung definiert und die Testumgebung festgelegt. Die Schnittstellen zwischen verschiedenen Prozessen werden festgeschrieben.
Die Dokumentation des Grobentwurfs kann gegliedert sein in:
1. Zielsetzung des Automatisierungssystems
2. Aufgabenstellung
2.1 Beschreibung des Ist-Zustands
2.1.1 Beschreibung des regul¨
aren Betriebs
2.1.2 Beschreibung des irregul¨
aren Betriebs
2.2 Automatisierungs- und Aufgabenstellung
2.2.1 Forderungen bez¨
uglich des Gesamtsystems
2.2.2 Forderungen bez¨
uglich der Teilprozesse
2.2.3 Forderungen an die Schnittstellen
2.2.4 Zeitliche Forderungen
2.2.5 Aufgabenstellung bei Ausf¨
allen und Fehlbedienungen
3. Erweiterungsm¨
oglichkeiten
4. Spezifikation der Testdaten und -ergebnisse (Testplan)
In 2.2.2 ist insbesondere auf Alternativen und das gew¨
ahltes L¨
osungsverfahren einzugehen.
Inhaltlich m¨
ussen die Themen
• Hardwarekonfiguration,
• Software-Konzept einschließlich der Gliederung in Funktionseinheiten,
• externer und interner Speicherbedarf und
• Bedienungsvorschriften
behandelt werden.
1 Phasen der Softwarekonstruktion
5
(d) Der Feinentwurf: Mit den Methoden der modularen und strukturierten Programmierung werden die (Modul)entw¨
urfe verfeinert. Die dynamischen Verbindungen (Schnittstellen) zwischen
den Moduln werden festgelegt. Ablaufpl¨
ane, Schnittstellenbeschreibungen, Aufstellpl¨
ane, Kabelpl¨
ane, . . . sind Bestandteile der Dokumentation.
Aufbauend auf der Gliederung des Grobentwurfs kann das Dokument folgende Aufteilung zur
Detaillierung von 2.2.2 des Grobentwurfs haben:
n. Teill¨
osung
n.1 Beschreibung der gew¨
ahlten Alternative
n.2 Zus¨
atzliche Forderungen aufgrund der gew¨
ahlten L¨
osung
n.3 Beschreibung der L¨
osungskomponenten
n.4 Beschreibung der Bedienungsfunktionen
n.5 Beschreibung des Datenmodells
n.6 Spezifikation der Kodepr¨
ufung (Prozedur- und Modultests)
(e) Kodierung und Modultests: In diesem Abschnitt wird die Beschreibung im Feinentwurf umgesetzt in Prozeduren und Moduln. Bei der geforderten Detaillierung des Feinentwurfs ist dies
ein trivialer Schritt.
Die kodierten Prozeduren und Moduln werden entsprechend den Spezifikationen im Feinentwurf getestet, die Testergebnisse im Testbericht erfasst.
(f) Integration und Integrationstests: Nach der Integration des Gesamtsystems muss die Kor”
rektheit“ der Anlage nachgewiesen“ werden. Diese Korrektheit kann nicht bewiesen werden.
”
Die Zuverl¨
assigkeit des Systems kann lediglich durch Tests, die nachweisen, dass die Anforderungen des Pflichtenhefts erf¨
ullt werden, demonstriert werden. W¨
ahrend Prozedur- und
Modultests vom einzelnen Programmierer durchgef¨
uhrt werden, erfordern Integrationstests
die Mitarbeit der gesamten Entwicklungsgruppe oder mehrerer Mitglieder.
Beim Testen von Software sind zu beachten:
(f1) Jede Programmzeile muss bei mindestens einem Test durchlaufen werden. Speziell ist
also auch die implementierte Fehlerbehandlung zu testen.
(f2) Es muss mit repr¨
asentativen Daten und mit Daten im oberen und unteren G¨
ultigkeitsbereich getestet werden.
(f3) Es muss mit ung¨
ultigen Daten im repr¨
asentativen Bereich und im oberen und unteren
Bereich getestet werden.
(f4) Es m¨
ussen Belastungstest gefahren werden.
Im Verlauf der Integration und der Integrationstests muss die gesamte Dokumentation u
¨ berarbeitet werden. Im Anschluss an die Integrationstests findet die Abnahme des Gesamtsystems
durch den Auftraggeber nach einem vereinbarten Ablaufplan statt.
1.D
Die Betreuungsphase (Wartung)
Diese Phase der Behebung von Fehlern und der Erweiterungen wird u
¨ blicherweise nicht durch die
Projektgruppe durchgef¨
uhrt. Das Betreuungspersonal ist daher abh¨
angig von der
• guten Dokumentation des Projekts, vor allem des Fein- und Grobentwurfs.
¨
• Dokumentation der Anderungen.
• guten Konfigurationskontrolle und -dokumentation.
¨
• Anderung
der Dokumentationen aller Phasen, falls erforderlich.
(g) Gew¨
ahrleistung: Dieser Abschnitt dauert in vielen F¨
allen 1 Jahr. Das Produkt muss in dieser
Zeit einer strengen Konfigurationskontrolle unterliegen. Der Kunde darf nicht unberechtigt in
die Software eingreifen, er muss St¨
orungen schriftlich melden.
6
I Softwareentwicklung
(h) Softwarepflege: Der Kunde erh¨
alt Informationen u
¨ ber Neu- und Weiterentwicklungen der gelieferten Komponenten.
Fehlerbehebungen und Weiterentwicklungen werden innerhalb eines Rahmen- oder Einzelvertrags durchgef¨
uhrt. Diese Vertr¨
age regeln auch die Konfigurationskontrolle der Anlage.
2 Strukturierung und Sprachkonstrukte
7
§ 2 Strukturierung und Sprachkonstrukte
Literatur: Ludewig [29], Schauer/Barta [46]
2.A
Kommunikation
I Know
You Believe You
Understand What You
Think I Said,
But I Am Not Sure,
You Realise, That
What You Heard,
Is Not What I Meant.
MDCCCCLXXV Jack Dusty
Die menschliche Sprache dient der Kommunikation mit anderen Menschen. Sie bedient sich
der Worte, die durch Klang, Betonung und Gestik eine genauere oder abgewandelte Bedeutung
erlangen. Diese Bedeutung beruht auf der bisherigen Erfahrung der an der Kommunikation beteiligten Menschen. Da diese Erfahrung im Allgemeinen nicht identisch ist, treten immer wieder
Missverst¨
andnissen auf.
Eine andere Quelle von Missverst¨
andnissen ist oft die Unzul¨
anglichkeit, genau das auszudr¨
ucken,
was man meint (s.o.). Und diese Art von Missverst¨
andnissen kann man auch beim Umgang mit
einem Computer erleben. Die Kommunikation mit einem Rechner wird durch eine formale Programmiersprache erm¨
oglicht, von der man annehmen kann, dass der Rechner sie beherrscht.
Kommunikationsfehler mit dem Rechner werden dadurch verursacht, dass der Programmierer
seine Gedanken und Ideen nicht korrekt in der Programmiersprache wiedergibt. Sie m¨
ussen durch
Tests offen gelegt werden und nach einer Fehlersuche und -analyse behoben werden. Die Fehleranalyse hat zu kl¨
aren, ob der Programmierfehler in der Tat das beobachtete Fehlverhalten verursacht
hat.
2.B
Algorithmen
Ein Algorithmus ist eine Vorschrift, die genau angibt, wie ein Prozess oder ein Vorgang auszuf¨
uhren
ist.
Vorschriften dieser Art finden wir u
aglichen Leben:
¨ berall im t¨
• Multiplizieren zweier mehrstelliger Zahlen,
• Bedienen einer Kaffeemaschine,
• Fahren mit dem Auto,
• ...
Das Ziel des Programmierens ist es, einen vorgegebenen Prozess auf dem Rechner ablaufen zu
lassen. Wir m¨
ussen also einen Algorithmus, nach dem der Prozess ablaufen soll, festlegen und auf
den Rechner u
¨ bertragen. Das Festlegen des Algorithmus ist Bestandteil des Feinentwurfs, in der
Kodierungsphase wird er auf den Rechner u
¨ bertragen: er wird in einer (vorgegebenen) Programmiersprache kodiert.
Der Algorithmus muss in der Feinentwurfphase (s. Abb. 2.1) dokumentiert und sp¨
ater kodiert
werden. Welche Anforderungen werden an die Darstellung des Algorithmus gestellt?
Der Algorithmus soll
• aus einfachen Konstrukten aufgebaut sein.
8
I Softwareentwicklung
Grobentwurf
(Programmebene)
detaillierend
Feinentwurf
(Modulebene)
Modulbeschreibung
Algorithmus-Darstellung
Was leistet der Modul?
Wie arbeitet der Modul?
vorschreibend
Programmkode
Abb. 2.1: Feinentwurf
• leicht korrigierbar sein.
• wohlstrukturiert sein: Jeder Anweisungsblock hat einen Eingang und einen Ausgang.
Die Darstellung des Algorithmus soll
• lesbar und verst¨
andlich sein:
F¨
ur das Entwicklungsteam, die Qualit¨
atskontrolle und das Wartungspersonal.
• aus einfachen Konstruktionen aufgebaut sein.
• leicht korrigierbar sein.
• eine gute Grundlage f¨
ur die Kodierung sein.
• soll rechnergest¨
utzt sein.
Der Programmkode des Algorithmus soll
• logisch zu verstehen sein.
Versuchen Sie, den Algorithmus in der Pascal-Prozedur in Alg. 2.1 zu verstehen! Writeln
schreibt den eingeklammerten Text auf den Bildschirm, [29, S. 93]. Die Tatsache, dass der Kode
verst¨
andlich ist, liegt nicht allein an der Programmiersprache, sondern an der Art, wie man in der
gew¨
ahlten Sprache programmiert. Das zeigt das gleiche Beispiel in Fortran in Alg. 2.2, wobei hier
die Funktion zum Schreiben auf den Bildschirm Write(5, ) heißt. Die Routine Pruefprim wurde
hier in einer Fortran-Version notiert, die jedoch gegen¨
uber Pascal noch Einschr¨
ankungen in der
L¨
ange der Namen der Variablen und Prozedurnamen hat.
2 Strukturierung und Sprachkonstrukte
PROCEDURE Pruefprim (n : INTEGER;
VAR prim : BOOLEAN;
VAR teiler: INTEGER);
CONSTANT kleinsteprim = 2;
BEGIN
IF n < kleinsteprim
THEN BEGIN
Writeln(’Falscher Parameter ’,n,’ f¨
ur Pruefprim’);
teiler := 0;
prim := FALSE;
END
ELSE
BEGIN
teiler := kleinsteprim;
WHILE (teiler < n) AND (n mod teiler <> 0) DO
teiler := teiler + 1;
prim := (teiler = n);
IF prim
THEN Writeln (n, ’ ist Primzahl’)
ELSE Writeln (n, ’ hat den Teiler ’), teiler;
END
END;
Alg. 2.1: Die wohlstrukturierte Prozedur Pruefprim (Pascal)
SUBROUTINE Pruefprim (n, prim, teiler)
IMPLICIT NONE
INTEGER n, teiler
LOGICAL prim
PARAMETER (kleiprim = 2)
IF (n .LT. kleiprim) THEN
Write(5,’(’’Falscher Parameter’’,I4,’’ f¨
ur Pruefprim’’)’) n
teiler = 0
prim = .FALSE.
ELSE
teiler = kleiprim
WHILE ((teiler .LT. n) .AND. (n .EQ. (teiler*(n/teiler)))) DO
teiler = teiler + 1
ENDDO
prim = (teiler .EQ. n)
IF prim THEN
Write(5,’(I4, ’’ ist Primzahl’’)’) n
ELSE
Write(5,’(I4, ’’ hat den Teiler ’’,I4)’) n,teiler
ENDIF
ENDIF
RETURN
Alg. 2.2: Die wohlstrukturierte Prozedur Pruefprim (Fortran 77)
9
10
I Softwareentwicklung
Vergleichen Sie hiermit die Fortran-Routine in Alg. 2.3. Die Ursache der Unlesbarkeit ist nicht
die zu benutzende ¨
altere Fortran-Version, sondern die Art der Programmierung [29, S. 91].
10
11
20
30
40
42
70
72
80
SUBROUTINE Pruefpr0 (n, prim, nteiler)
LOGICAL prim
IF (n-2) 10, 40, 20
Write (6, 11) n
FORMAT (’falscher Parameter’, I6, ’f¨
ur Pruefprim’)
nteiler = 0
GOTO 80
DO 30 nteiler = 2, n-1
IF (n - nteiler * (n/nteiler)) 30, 70, 30
CONTINUE
Write (6, 42) n
FORMAT (I6, ’ ist Primzahl’)
nteiler = n
prim = .TRUE.
RETURN
Write (6, 72) n, nteiler
FORMAT (I6, ’ hat Teiler ’, I4)
prim = .FALSE.
RETURN
END
Alg. 2.3: Die Prozedur Pruefpr0 (Fortran)
Dieses Unterprogramm ist nicht lesbar, die Ursachen hierf¨
ur sind:
(a) keine Deklaration der Variablen (implizite Vereinbarung)
(b) arithmetisches IF
(c) 2 Ausg¨
ange aus der Schleife (30, 70)
(d) 2 Ausg¨
ange (RETURN)
(e) 2 Wege zu derselben Stelle ( zu Marke 40 und Marke 80)
(f) GOTO
Er ist nicht wohlstrukturiert, denn er hat mehrere Ausg¨
ange, mehrere Ausg¨
ange aus einer Schleife
und mehrere Wege zu einer Stelle.
2.C
Wohlstrukturierte Programmierung
Ein Modul besteht aus einem Modulkopf, einem Deklarationsteil und einem Anweisungsteil. Der
Modulkopf besteht aus der Aufrufzeile und der Beschreibung des Moduls nach außen. Der Deklarationsteil beinhaltet die Vereinbarung aller Variablen und Parameter, die in diesem Modul benutzt
werden. Im Anweisungsteil ist der Algorithmus, der in diesem Modul realisiert werden soll, kodiert.
Regeln f¨
ur diese Kodierung werden hier behandelt.
Festlegung 2.1 Wohlstrukturierte Module und Modulteile (Anweisungsbl¨
ocke) besitzen einen Eingang und einen Ausgang. Zu jeder Stelle eines Blocks gibt es nur einen Weg. Wohlstrukturierte
Module verzichten auf GOTO. Sie bestehen aus vorgegebenen Sprachkonstrukten.
2 Strukturierung und Sprachkonstrukte
2.C.1
11
Sprachkonstrukte eines wohlstrukturierten Moduls
In der folgenden Liste sind die erlaubten Sprachelemente aufgef¨
uhrt. Ein wohlstrukturierter Modul enth¨
alt die eingeklammerten Anweisungstypen nicht. Sie werden jedoch bei der Kodierung
in Programmiersprachen, die die wohlstrukturierten Konstrukte nicht besitzen, zum Nachbauen
(Emulation) dieser Konstrukte benutzt.
(a) Eine Anweisung in einem Programm ist
(a1) eine Wertzuweisungen,
(a2) eine bedingte Wertzuweisungen oder
(a3) ein Block (siehe unten).
(b) Der Anweisungsteil eines Programms besteht aus:
(b1) einer Sequenz (Folge) von Anweisungen,
(b2) parallele Anweisungen,
(b3) Iteration (Schleife):
i. abweisende Schleife, Schleife mit vorausgehender Pr¨
ufung (WHILE):
Die Bedingung, ob die Anweisungen der Schleife bearbeitet werden sollen, wird am
Anfang jedes Schleifendurchlaufs u
uft.
¨ berpr¨
ii. nicht abweisende Schleife, Schleife mit nachfolgender Pr¨
ufung (UNTIL): Die Bedingung, ob die Anweisungen der Schleife bearbeitet werden sollen, wird am Ende
jedes Schleifendurchlaufs u
uft.
¨ berpr¨
iii. Mengenschleife (FOR): Die Anweisungen der Schleife werden f¨
ur jedes Element der
Menge (logisch parallel) bearbeitet.
iv. Z¨
ahlschleife (FOR): Z¨
ahlschleifen sind logisch Schleifen mit vorausgehender Pr¨
ufung
und auf diese Art in den meisten Programmiersprachen implementiert. Fortran77
bildet eine Ausnahme. Die Z¨
ahlschleife ist in einigen Implementierungen abweisend,
in anderen nicht abweisend.
(b4) Alternative:
i. bedingte Verarbeitung: IF .. THEN .. ENDIF;
ii. einfache Alternative: IF .. THEN .. ELSE .. ENDIF;
iii. mehrfache Alternative:
• CASE
• IF .. THEN .. ELSEIF .. ELSEIF .. ELSE .. ENDIF;
(b5) Block: bestehend aus hier genannten Anweisungstypen
(b6) Prozeduraufruf
2.C.2
Weitere Sprachkonstrukte
Fehlende Sprachelemente einer Programmiersprache erzwingen hierzu eventuell Ausnahmen:
(a) allgemeine Schleife mit Abbruchkriterium
(b) Sprunganweisung:
• GOTO
• NEXT
• UNDO
• RETURN
Schauer und Barta [46, S. 85] unterscheiden daher drei Arten von Sprunganweisungen:
12
I Softwareentwicklung
(a) Notwendig sind Sprunganweisungen zur Realisierung von Kontrollstrukturen, die in der benutzten Programmiersprache nicht vorhanden sind.
(b) In gewissem Umfang vertretbar sind Sprunganweisungen zur Optimierung von Kode und
Laufzeit, zum Beispiel zum Verlassen von Strukturen im Fehlerfall.
(c) Sprunganweisungen zum Betreten von Strukturen sind zu vermeiden.
2.D
Darstellung der Sprachkonstrukte durch Flussdiagramme
Wichtig f¨
ur die Dokumentation ist eine gutes Veranschaulichen des gew¨
ahlten Algorithmus und
seiner Kodierung. Hierf¨
ur k¨
onnen benutzt werden:
(a) Flussdiagramm
(b) Struktogramm
(c) Pseudokode (Metasprache)
Die Konstruktionsteile der Flussdiagramme sind in Abb. 2.2 dargestellt, vgl. [29, S. 94f]. Schleife ohne Pr¨
ufung (j) und Abbruchanweisung (k) sind nicht Teil eines wohlstrukturierten Flussdiagramms.
Als Beispiel folgt das Flussdiagramm zur Routine Pruefpr0, wie sie in Abb. 2.3 programmiert
ist, vgl. [29, S. 92]. Sehr deutlich erkennt man, dass diese Routine nicht wohlstrukturiert ist. Die
Unterpunkte beziehen sich auf die eingekreisten Stellen:
(a) Eine Schleife wird irregul¨
ar verlassen.
(b) Zwei unterschiedliche Wege f¨
uhren zu dieser Stelle. Sie ist nicht das strukturelle Ende einer
Schleife.
(c) Mehrere Ausg¨
ange aus der Routine.
2 Strukturierung und Sprachkonstrukte
(a) Anweisung, Verarbeitung:
S
13
(f) Parallelverarbeitung:
S1
S2
S3
(b) Sequenz (Folge):
(g) Block:
S1
Block
S2
(h) Schleife mit vorausgehender Pr¨
ufung:
S3
✟❍
❍❍
❍❍ C ✟✟
❍✟
F ✟✟
(c) bedingte Verarbeitung:
T
✟❍❍
C ❍
❍
✟
❍❍✟✟
F ✟✟
T
S
(i) Schleife mit nachfolgender Pr¨
ufung:
(d) einfache Alternative:
✟❍❍
F
C ❍
❍
✟
❍❍✟✟
T ✟✟
S1
✟❍
✟✟ C ❍❍ T
❍❍
✟✟
❍✟
F
S2
(j) Schleife ohne Pr¨
ufung:
(e) mehrfache Alternative:
✟❍
✟✟ C1 ❍❍ F
❍❍
✟✟
❍✟ ✟✟❍❍
F
T
✟
❍ C2 ❍
✟
❍❍✟✟
T
S1
S2
S3
(k) Abbruchanweisung: Linie (zum Programmende), kein spezielle Symbol
Abb. 2.2: Elemente eines Flussdiagramms
14
I Softwareentwicklung
Pruefprim(n,prim,nteiler)
<0
n-2
=0
>0
Write(!falscher
Parameter ...!)
nteiler=2
nteiler=0
=0
a
n-nteiler
(n/nteiler)
Write(!... hat Teiler!)
=0
b
nteiler=nteiler+1
prim=.FALSE.
c
nteiler>n-1
RETURN
b
F
T
Write(!... ist Primzahl!)
prim=.TRUE.
c
RETURN
Alg. 2.4: Flussdiagramm der Routine Pruefpr0
2 Strukturierung und Sprachkonstrukte
2.E
15
Darstellung der Sprachkonstrukte durch Struktogramme
Die Konstruktionsteile eines Struktogramms nach Nassi-Shniderman werden in Abb. 2.3 vorgeufung (j) und Abbruchanweisung (k) sind nicht Teil eines
stellt, vgl. [29, S. 94f]. Schleife ohne Pr¨
wohlstrukturierten Struktogramms.
(a) Verarbeitung:
(f) Parallelverarbeitung:
S
S1
S2
S3
S4
S5
(b) Folge:
S1
S2
S3
(g) Block, Prozeduraufruf:
P
(c) Bedingte Verarbeitung:
C
(h) Schleife mit vorausgeh. Pr¨
ufung:
WAHR
C
S
S
(i) Schleife mit nachfolgender Pr¨
ufung:
(d) Einfache Alternative:
S
C
WAHR
S1
C
FALSCH
S2
(j) Schleife ohne Pr¨
ufung:
(e) Mehrfache Alternative:
C1
S1
C2
S2
C3
S3
S
Cn
Sn
(k) Abbruchanweisung:
X
Abb. 2.3: Elemente eines Struktogramms
Z¨
ahl- und Mengenschleifen werden als Schleifen mit vorausgehender Pr¨
ufung dargestellt.
Als Beispiel folgt das Struktogramm der Routine Pruefprim in Alg. 2.5, vgl. [29, S. 97]. Hier
und in Alg. 2.6 wird der Operator /“ f¨
ur die ganzzahlige Division benutzt. Ein korrekter MatLab”
Auddruck hierf¨
ur ist floor(n/teiler)
Man kann nat¨
urlich auch die unverst¨
andliche Routine Pruefpr0 aus Abb. 2.3 in dieser Form darstellten, daraus entsteht aber kein Struktogramm, denn die Darstellung ist nicht aus den erlaubten
Bestandteilen zusammengebaut [29, S. 97]. Dies ist in Alg. 2.6 dargestellt.
Kritikpunkte an diesen Beispielen:
16
I Softwareentwicklung
Pruefprim(n,prim,teiler):
Eingaben:
n
Ausgaben:
prim
teiler
{S nat¨
urliche Zahl}
{L Ist n eine Primzahl?}
{S kleinster Teiler gr¨
oßer 1
}
0: falsche Eingabe
n
WAHR
prim:=FALSCH
<
2
FALSCH
Writeln (‘Falscher
Parameter ‘,n,‘ f¨
ur
Pruefprim‘);
teiler:=2
n = teiler · (n/teiler )
teiler:= teiler+1
prim:=(teiler=n)
prim
WAHR
teiler:=0
Writeln (n,‘
Primzahl‘);
FALSCH
ist
Writeln (n,‘ hat den
Teiler ‘,teiler‘);
Alg. 2.5: Struktogramm der Routine Pruefprim
Pruefpr0(n,prim,teiler):
Eingaben:
n
Ausgaben:
prim
teiler
=2
{S nat¨
urliche Zahl}
{L Ist n eine Primzahl?}
{S kleinster Teiler gr¨
oßer 1
}
0: falsche Eingabe
n
>2
teiler = 2, n − 1
n = teiler ·
(n/teiler )
teiler:=0
WAHR
FALSCH
∅
Write(I6,‘ ist Primzahl‘) n
prim:= .TRUE.
UNDO
Write(I6,‘
hat Teiler ‘,
I6)n,teiler
Write(I4,‘Falscher
Parameter ‘) n
prim:= .FALSE.
Alg. 2.6: Kein Struktogramm der Routine Pruefpr0
(a) Die Ausgabe enth¨
alt redundante Daten:
• n ist Primzahl ⇐⇒ teiler = n ∧ n ≥ 2
<2
2 Strukturierung und Sprachkonstrukte
17
• n ist falsche Eingabe ⇐⇒ teiler = 0
(b) Die Modularit¨
at eines Programms wird erh¨
oht, falls die Berechnung von der Bildschirm-Ein/Ausgabe getrennt wird.
√
(c) Ist n = a · b, so ist einer der Faktoren h¨
ochstens gleich n. Daher reicht es vollkommen aus,
√
Teiler von n zwischen 2 und [ n] (Gaußklammer) zu suchen. Dies reduziert die Laufzeit f¨
ur
Primzahlen n erheblich.
Das Struktogramm einer verbesserten Version steht in Alg. 2.7.
Pruefprim(n,prim,teiler):
Eingaben:
n
Ausgaben:
prim
teiler
{S nat¨
urliche Zahl}
{L Ist n eine Primzahl?}
{S kleinster Teiler gr¨
oßer 1
}
0: falsche Eingabe
n
WAHR
teiler:=0
<
2
FALSCH
teiler:=2
√
(teiler < n) ∧ (n = teiler · (n/teiler ))
teiler:= teiler+1
∅
teiler
=0
Writeln (‘Falscher
Parameter ‘,n,‘ f¨
ur
Pruefprim‘);
>
√
n
Writeln (n,‘
Primzahl‘);
2 ≤ teiler ≤
ist
√
n
Writeln (n,‘ hat den
Teiler ‘,teiler‘);
Alg. 2.7: Struktogramm der verbesserten Routine Pruefprim
2.F
Darstellung der Sprachkonstrukte in einer Metasprache
Die Darstellung eines Algorithmus soll
(a) lesbar und verst¨
andlich f¨
ur Projektteam, Qualit¨
atskontrolle und Wartungsteam,
(b) leicht korrigierbar,
(c) eine gute Vorlage f¨
ur die Kodierung und
(d) rechnerunterst¨
utzt sein.
¨
Das Erstellen und Andern
von Struktogrammen und Flussdiagrammen wird heute bereits durch
spezielle Softwarepakete rechnerunterst¨
utzt. Eine einfachere Art der rechnerunterst¨
utzten Darstellung bieten jedoch Metasprachen. Dies sind Sprachen, die, wie Programmiersprachen, eine fest
definierte Syntax besitzen, jedoch nicht direkt u
ussen. Zum Teil k¨
onnen jedoch
¨ bersetzbar sein m¨
Software-Prototypen automatisch erstellt werden oder Teile des Kodes (halb-)automatisch erstellt
werden.
Hier wird eine Metasprache vorgestellt, die
(a) die oben definierten wohlstrukturierten Sprachkonstrukte in algol¨
ahnlichen Sprachelementen
enth¨
alt,
(b) mathematisch bekannte Zeichen und Ausdr¨
ucke benutzt,
18
I Softwareentwicklung
(c) nur Zeichen aus dem Zeichenvorrat des Rechners benutzt,
(d) aus dem Quellkode reproduzierbar ist oder im Quellkode als Kommentar enthalten sein kann,
(e) im Einzelfall erweiterbar ist.
2.F.1
Allgemeine Regeln
::=
dcl( .... );
;
,
2.F.2
beendet die Kopfzeile eines (Unter-)programms oder einer Funktion.
beinhaltet alle Vereinbarungen des (Unter-)programms oder der Funktion. Dieses
Sprachkonstrukt steht direkt unter der Kopfzeile. Die Vereinbarungen werden in
den folgenden Paragrafen u
¨ ber Datentypen und Datenstrukturen behandelt.
beendet ein Sprachkonstrukt. Die restlichen Zeichen einer Zeile sind Kommentar.
beendet ein Sprachkonstrukt, das mit dem folgenden Sprachkonstrukt parallel
verarbeitet werden kann. Die restlichen Zeichen einer Zeile sind Kommentar.
Namensvereinbarung
Erstes Zeichen
Kleinbuchstabe
weitere Zeichen
Kleinbuchstabe, Ziffer
Modul, Programm, Unterprogramm, Funktion
Großbuchstabe
Kleinbuchstabe, Ziffer
Begriff der Metasprache
Großbuchstabe
Großbuchstabe (Ziffer)
oder
Kleinbuchstabe, (Ziffer)
Variable, Parameter
Kleinbuchstabe
2.F.3
Ausdruck, bedingter und alternativer Ausdruck
Ein Ausdruck ist ein sinnvolles Gebilde aus Variablen, Parametern und Konstanten verkettet mit erlaubten Operatoren. Ein
Ausdruck kann auch alternativ sein:
Einfache alternative Ausdr¨
ucke haben keinen elseif -Teil, bedingte Ausdr¨
ucke weder einen elseif - noch einen else-Teil.
2.F.4
if log. Ausdruck then
Ausdruck;
elseif log. Ausdruck then
Ausdruck;
elseif log. Ausdruck then
Ausdruck;
else
Ausdruck;
endif
Einfache Anweisung
Einfache Anweisungen k¨
onnen sein:
(a) Wertzuweisungen:
Wertzuweisung:
bedingte Wertzuweisung:
alternative Wertzuweisung:
Variable := Ausdruck;
Variable := bedingter Ausdruck;
Variable := alternativer Ausdruck;
(b) Prozeduraufruf: Aufruf eines Unterprogramms oder einer Funktion. Diese werden sp¨
ater intensiver behandelt.
2 Strukturierung und Sprachkonstrukte
(c) Sprungbefehl:
goto marke;
..
.
19
marke hat den Typ SWITCH.1
marke: Anweisung
next;
Beendet Schleifendurchlauf
undo;
Beendet Schleifenbearbeitung
(d) Block: Zusammenfassung von einfachen Anweisungen, Alternativen, Iterationen, Prozeduraufrufen und Spr¨
ungen.
2.F.5
Alternative
Einfache Alternativen haben keinen elseif -Teil, bedingte Alternativen weder einen elseif - noch einen else-Teil.
2.F.6
if log. Ausdruck then
Anweisung;
elseif log. Ausdruck then
Anweisung;
elseif log. Ausdruck then
Anweisung;
else
Anweisung;
endif
Iteration
(a) Schleife mit vorausgehender Pr¨
ufung:
Die Schleife wird durchlaufen, solange der logische Ausdruck
bei Beginn eines Schleifendurchlaufs wahr ist. Ist dieser logische Ausdruck bei Beginn des ersten Schleifendurchlaufs
falsch, so wird die Schleife u
¨ berhaupt nicht durchlaufen.
while log. Ausdruck do
Anweisungen;
end
(b) Schleife mit nachfolgender Pr¨
ufung:
Die Schleife wird solange durchlaufen, bis der logische Ausdruck am Schleifenende wahr ist. Sie wird mindestens durchlaufen.
repeat
Anweisungen;
until log. Ausdruck ;
(c) Z¨
ahlschleife:
i, anf, step und end sind gleichen Typs. Die Schleife wird in der angegebenen Reihenfolge
durchlaufen, im Falle
• step ≥ 0 f¨
ur i ∈ {anf + n step | n ∈ N0 ∧ anf + n ·step ≤ end}
• step ≤ 0 f¨
ur i ∈ {anf + n step | n ∈ N0 ∧ anf + n ·step ≥ end}
Ist diese Menge leer, so wird die Schleife nicht
durchlaufen. Vorsicht: Es gibt Sprachimplementiefor i=anf step step until end do
Anweisungen;
rungen, bei denen die Z¨
ahlschleife mindesten einmal
end
durchlaufen wird. Viele Fortran-Compiler u
¨ bersetzen nach diesem Prinzip.
(d) Mengenschleife:
i und menge m¨
ussen typgleich, menge Mengentyp sein (s. 4.B).
Die Schleife wird f¨
ur jedes Element der Menge menge durchlaufen. Das Ergebnis der Schleifenbearbeitung darf nicht von der
Reihenfolge der Bearbeitung abh¨
angen, die einzelnen Schleifendurchl¨
aufe d¨
urfen also parallel verarbeitet werden.
1
for i ∈ menge do
Anweisungen;
end
Entsprechend fr¨
uheren Ausf¨
uhrungen darf ein Sprungbefehl i.A. nur in der Fehlerbehandlung benutzt werden.
20
I Softwareentwicklung
Es folgen drei Beispiele. Die I/O-Routinen werden in der Fortran-Syntax in die Metasprache
aufgenommen.
(a) Im ersten Beispiel (Alg. 2.8) werden alle Zahlen, die in einer Datei stehen, aufsummiert. Jeder
Satz der Datei enth¨
alt eine Zahl.
Summe(sum) ::=
dcl(
i
type INTEGER*4;
eingelesene Zahl
sum
type INTEGER*4;
Summe der eingelesenen Zahlen
eof
type LOGICAL;
Dateiende ?
);
sum := 0;
repeat
Read(6,END=eof) i;
Datei-Ende: eof ist wahr
IF(not eof) sum := sum + i;
until eof ;
return;
Alg. 2.8: Addition von Zahlen aus einer Datei
(b) Im zweiten Beispiel wird eine Meldung auf alle angemeldeten Bildschirme geschickt, s. Alg. 2.9.
Messag(text,tmenge) ::=
dcl( text
type CHARACTER*80;
tmenge
type SET INTEGER*4;
i type INTEGER*4;
);
for i ∈ tmenge do
Assign(5,’TT’,i);
Write(5) text;
end
return;
auszugebender Text
Menge der Nummern offener Bildsch.
Nummer eines offenen Bildschirme
Alg. 2.9: Meldung auf alle angemeldeten Bildschirme
(c) Das dritte Beispiel in Alg. 2.10, 21 notiert die verbesserte Routine Pruefprim in der Metasprache. Im Gegensatz zum Struktogramm wird hier eine R¨
uckgabe definiert.
2.G
Implementieren der Sprachkonstrukte in MatLab
¨
Die Ubertragung
der Sprachkonstrukte in einer Programmiersprache, die diese Konstrukte nicht
kennt, erfordert ein einheitliches Emulieren dieser Konstrukte.
2 Strukturierung und Sprachkonstrukte
21
Pruefprim(n, r) ::=
dcl(
n
type INTEGER*4;
zu testende Zahl
r
type INTEGER*4;
0: Eingabefehler
;
1: n ist Primzahl
;
>1: kleinster Teiler
teiler
type INTEGER*4;
m¨
oglicher Teiler von n
kleinsteprim
type INTEGER*4;
kleinste Primzahl
kleinsteprim
:== 2; Parameter:
kleinste Primzahl
);
if n < kleinsteprim then
r := 0;
else
teiler := kleinsteprim;
√
while teiler ≤ n ∧ n mod teiler = 0 do
teiler := teiler+1
end
√
r := if teiler ≤ n then teiler else 1 endif
endif
if r=0 then
Write(5) ’Falsche Eingabe ’,n;
elseif r=1 then
Write(5) n, ’ ist Primzahl’;
else
Write(5) n, ’ hat den Teiler ’, r;
endif
Alg. 2.10: Die verbesserten Routine Pruefprim in der Metasprache
2.G.1
Alternativer Ausdruck
MatLab kennt keine alternative Ausdr¨
ucke. Diese m¨
ussen als Alternativen implementiert werden
a := if l1 then
ausdr1
elseif l2 then
ausdr2
else
ausdr3
endif
if l1
a=ausdr1;
elseif l2
a=ausdr2;
else
a=ausdr3;
end
Am Ende jeder Zeile darf ein Semikolon oder Komma stehen. Werden die Zeilen zusammengezogen, so ist eines der beiden Zeichen erforderlich.
2.G.2
Alternative Anweisung
if l1 then
anweis1
elseif l2 then
anweis2
else
anweis3
endif
if l1
anweis1;
elseif l2
anweis2;
else
anweis3;
end
22
I Softwareentwicklung
oder
switch ausdruck
case wert1; anweis1;
case wert2; anweis2;
otherwise ; anweis3;
end
In der if-then-else-Konstruktion k¨
onnen mehrere logische Ausdr¨
ucke wahr sein, ausgef¨
uhrt
wird der Ausdruck hinter dem ersten wahren logischen Ausdruck.
In der switch-case-Konstruktion darf bei jedem Durchlauf nur ein Fall zutreffen.
2.G.3
Iteration
(a) Schleife mit vorausgehender Pr¨
ufung:
while lwei do
anweis
end
while lwei
anweis;
end
(b) Schleife mit nachfolgender Pr¨
ufung:
repeat
anweis1
labr=ausdruck
anweis2
until labr ;
labr=0;
while ∼labr
anweis1;
labr= ausdruck;
anweis2;
end
Die Anweisungen bestehen aus den Anweisungen anweis1, einer Neuberechnung des logischen
Werts labr ( Wird abgebrochen?“) und den Anweisungen anweis2.
”
(c) Z¨
ahlschleife:
for i=anf step step until end do
anweis
end
for i=anf:step:end
anweis;
end
F¨
ur step=1 kann :step“ entfallen.
”
(d) Mengenschleife:
for i ∈ menge do
anweis
end
for i=menge
anweis;
end
3 Datentypen und einfache Datenstrukturen
23
§ 3 Datentypen und einfache Datenstrukturen
Literatur: Rembold[43]
3.A
Speicherplatzgr¨
oßen
Wie werden Zahlen im Rechner gespeichert? Aufgrund der Organisation des Rechnerspeichers stehen f¨
ur die Speicherung eine bestimmte Anzahl von SZellenßur Verf¨
ugung. Diese Anzahl kann bis
zu einer Obergrenze w¨
ahrend der Programmierung oder des Programmlaufs gew¨
ahlt werden:
Bit: kleinste, atomare Speichereinheit: Das Bit kann zwei Speicherzust¨ande annehmen, die
durch 0 und 1 symbolisiert werden. Diese Einheit wird von manchen Sprachen (z.B: APL)
zur Speicherung logischer Gr¨
oßen benutzt.
Byte: Ein Byte sind 8 Bit. Diese Einheit wird von allen Sprachen f¨ur das Speichern eines Textzeichens benutzt2 . Ferner werden vorzeichenlose, ganze Zahlen in dieser Einheit gespeichert,
also die Menge [0, 255] ∩ N0 .
In dieser Einheit wird in vielen Programmiersprachen Speichergr¨
oße f¨
ur die vereinbarten
Variablen festgelegt.
Wort: Ein Wort kann die Anzahl der Bit sein, die ein Prozessor verarbeitet oder auch die Anzahl
der Bit, die im Speicher mit einer Adresse angesprochen werden.
Tab. 3.1: Wortgr¨oßen der Prozessoren
Wortgr¨
oße in Bits
8
16
32
64
80
Prozessor
8088
80286
80386
Rechnertype
PC
AT
PS
80.87
alle
Ab dem Pentium-Prozessor ist der mathematische Koprozessor im Hauptprozessor integriert.
3.B
3.B.1
Festkommazahlen (INTEGER)
Darstellung nicht-negativer Festkommazahlen
Festkommazahlen haben das Komma an einer fest vereinbarten Stelle, in der Regel meint man ganze
Zahlen.
F¨
ur die Speicherung von Festkommazahlen werden in der Regel 1, 2 oder 4 Byte benutzt. Es
stehen also 8, 16 oder 32 Bit zur Verf¨
ugung. Diese Anzahl wird mit t bezeichnet, die Bits werden
mit 0 beginnend nummeriert, also von 0 bis t − 1, s. Abb. 3.1. Das Bit t − 1 wird zur Speicherung
des Vorzeichens benutzt, die restlichen Bits 0, . . . , t − 2 sind Datenbits. Jedes Bit mit der Nummer
i enth¨
alt die Information ai ∈ {0, 1}. Damit kann eine Bitbelegung (0, at−2 , at−3 , ...a1 , a0 ) als Zahl
im Dualsystem interpretiert werden:
2
Im neuen Unicode-Format werden zwei Byte benutzt.
24
I Softwareentwicklung
...
at−1 at−2
t-1
t-2
a9
a8
a7
a6
a5
a4
a3
a2
a1
a0
9
8
7
6
5
4
3
2
1
0
Abb. 3.1: Nummerierung der Bits
Satz 3.1 (Speicherung nicht-negativer Festkommazahlen)
t−2
ai 2i wird durch D (z ) = (0, at−2 , at−3 , . . . , a1 , a0 ) dargestellt.
Die Zahl z =
i=0
Die kleinste so darstellbare Zahl ist (0, . . . , 0), also z = 0; die gr¨
oßte (0, 1, . . . , 1), also
t−2
2i =
zmax =
i=0
2t−1 − 1
= 2t−1 − 1 .
2−1
Damit k¨
onnen bei einer Darstellung mit t Bit unter Ber¨
ucksichtigung eines Vorzeichenbits die
ganzen Zahlen im Bereich [0, 2t−1 − 1] dargestellt werden. Dies ist in Tab. 3.2 dargestellt. (zmin
wird erst weiter unten hergeleitet.)
Tab. 3.2: Darstellungsbereich der Festkommazahlen
Bezeichnung
Integer*2
Integer*4
(T10)
Anzahl
Byte
2
4
(10)
t
16
32
53
Anzahl
Datenbits
15
31
53
zmin = −2t−1
zmax = 2t−1 − 1
−32768
−2147483648
≈ −9·1015
32767
2147483647
≈ 9·1015
¨
Bemerkung 3.2 (Uberlauf
) Das theoretische Erscheinen von Stellen as = 1 (s ≥ t) in einem
¨
Rechenergebnis bezeichnet man als Uberlauf.
Dieses Ergebnis ist im Rechner (¨
ublicherweise) nicht
mehr darstellbar. Je nach Sprache und ihrer Implementierung verh¨
alt sich der Rechner unterschiedlich:
• Algol meldet einen Fehler.
• Fortran unterschl¨
agt diese Stellen und arbeitet weiter.
• MatLab und APL wechseln zu dem Datenformat f¨
ur Gleitkommazahlen (REAL).
3.B.2
Basiskomplement¨
ardarstellung negativer Festkommazahlen
Am einfachsten“ werden negative Zahlen durch Setzen des Vorzeichenbits und der Darstellung
”
ihres Betrags im Datenteil dargestellt. Diese Methode bildet aber die Null als nicht-negative und
als nicht-positive Zahl auf (0, 0, . . . , 0) und (1, 0, . . . , 0) ab. Daher wird eine andere Methode
gesucht, die außerdem noch Berechnungsvorteile aufweist.
Bekannt ist diese Methode aus der Bezeichnung der Winkel. So werden Winkel im Bereich
[180◦ , 360◦ ) und negative Winkel [−180◦ , 0◦ ) identifiziert und beim Berechnen von Summen und
Differenzen werden am Ende die Reste modulo 360◦ betrachtet; ein 420◦ -Winkel wird mit 60◦
bezeichnet.
3 Datentypen und einfache Datenstrukturen
25
Definition 3.3 (Basiskomplement¨
ardarstellung) Die Basiskomplement¨
ardarstellung negativer
Zahlen bezogen auf die Basis b bei s Stellen wird angeben durch die Abbildung:


Ks,b (n) := 
[−b s , −1] → [b s , 2 b s − 1]
n
→
2 bs + n


.

Beispiel 3.4


[−16, −1] → [16, 31]
K4,2 (n) := 
n
→ 32 + n
hender Tabelle ab.


bildet entsprechend nebenste-

Worin liegt der Vorteil dieser Methode? Dies soll anhand des Zehnersystems mit zwei Stellen, also b = 10 und s = 2 untersucht werden. Nebenstehend ist die Addition der beiden Zahlen 31 und −26 dargestellt. Bei
normaler Addition in der rechten Spalte, also in der Basiskomplement¨
ardarstellung, erh¨
alt man einen Wert u
ber
200.
Da
das
endg¨
u
ltige
Ergebnis
¨
auf nur zwei Stellen beschr¨
ankt ist, muss 200 subtrahiert werden und wir
erhalten das korrekte Ergebnis.
n
−1
−2
..
.
K4,2 (n)
31
30
..
.
−15
−16
17
16
Wert
31
+
−26
5
→
→
←
K2,10
31
+
174
205
Das Ergebnis kann auch anders gedeutet werden: Die Hunderterstelle arbeitet als Vorzeichenstelle: Ist sie ungerade, so ist die Zahl negative, ist sie gerade, so ist die Zahl nicht-negativ. Der
Vorteil dieser Methode besteht also im einfachen Addieren negativer und positiver Zahlen.
¨
Was passiert bei Uberlauf?
Wir berechnen 31 + 72 im nebenstehenden
Schema.
Das Rechnen in der Basiskomplement¨
ardarstellung entspricht also dem
s
Rechnen mit Resten modulo 2 · b Also im ring Z/n Z. Wir stellen die
Reste dar im Bereich [−b s , b s − 1].
3.B.3
Wert
31
+
72
→
−97
←
→
K2,10
31
+
72
103
Duale Komplement¨
ardarstellung negativer Festkommazahlen
Die Darstellung einer Zahl im Rechner benutzt t −1 Datenbits, also benutzen wir f¨
ur die Darstellung
negativer Zahlen die Abbildung


Kt−1,2 (n) := 
[−2t−1 , −1] → [2t−1 , 2t − 1]
n
→
2t + n


.

Hieraus folgt sofort:
Verfahren 3.5 (Duale Darstellung von Festkommazahlen) Die Abbildung




Dt−1,2 (n) := 


[−2t−1 , 2t−1 − 1] →
[0, 2t − 1]
n
→ n
n ∈ [0, 2t−1 − 1]
t
n
→ 2 + n n ∈ [−2t−1 , −1]







bildet alle ganzen Zahlen aus dem Intervall [−2t−1 , 2t−1 − 1] injektiv, also umkehrbar, auf das
Intervall [0, 2t ] im Rechner ab und wir rechnen modulo 2t . Die kleinste darstellbare Zahl ist damit
zmin = −2t−1 , die gr¨
oßte ist zmax = 2t−1 − 1.
26
I Softwareentwicklung
Beispiel 3.6 Ist t = 4, so benutzen wir 3 Datenbits. Darstellbar sind die Zahlen [−8, 7] (im
Rechner: [0, 15]). Wir rechnen also modulo 16 und es gilt
−2 + −3 ≡ 14 + 13 = 27 ≡ −5
¨
(Uberlauf)
¨
(Uberlauf)
−5 + −6 ≡ 11 + 10 = 21 ≡ 5
5 + 4 ≡ 9 ≡ −7
Damit ist die Addition nicht-negativer und negativer Zahlen zur¨
uckgef¨
uhrt auf die Addition
nicht-negativer Zahlen, die im Rechner als Addition von Dualzahlen einfach zu implementieren ist.
Als n¨
achstes betrachten wir die Implementierung der Negation einer Zahl und damit der Subtraktion:
3.B.4
Duales Stellenkomplement einer Festkommazahl
Definition 3.7 (Stellenkomplement) Das Stellenkomplement zur Basis b berechnet zu einer
Zahl in jeder Stelle der Darstellung, einschließlich f¨
uhrender Nullen, die Differenz zu b − 1:
t−1
t−1
ai b i
St,b
:=
i=0
i=0
(b − 1 − ai )b i .
Folgerungen 3.8
t−1
t−1
i
n + St,b (n) =
ai b +
i=0
t−1
=
i=0
t−1
i
i=0
(b − 1 − ai )b =
t−1
(b − 1)b i =
− n = St,b (n) + 1 − b
=⇒
i=0
(ai + b − 1 − ai )b i
i=0
b i+1 − b i = b t − 1
t
Bei der Berechnung des Stellenkomplements m¨
ussen alle t Bit (Vorzeichenbit und Datenbits)
ber¨
ucksichtigt werden. Mit s = t und b = 2 folgt f¨
ur das duale Stellenkomplement
t−1
t−1
i
St,2
ai 2
i=0
:=
i=0
(1 − ai )2i .
(3.1)
und
−n = St,2 + 1 − 2t .
(3.2)
¨
Da das Stellenkomplement bei b = 2 das Andern
des Bitwerts ist, kann man das Negative mit
Hilfe des Stellenkomplements einfach berechnen:
Verfahren 3.9 (Negative einer Zahl) Das Negative einer Zahl erh¨
alt man bei einer t-Bit-Darstellung durch Addition einer Eins zum Stellenkomplement
t−1
−n =
t−1
ai 2i
1 + St,2
i=0
− 2t ≡ 1 + St,2
ai 2i
i=0
Beispiel 3.10 Das Negative der Zahl 103 bei einer 8-Bit-Darstellung (mit Vorzeichen) wird damit
berechnet nach
−103 = −(64 + 32 + 4 + 2 + 1) = −011001112 ≡ 1 + 100110002 ≡ 100110012 (256) .
Zur Kontrolle berechne ich
100110012 = 128 + 16 + 8 + 1 = 153 .
⋄
3 Datentypen und einfache Datenstrukturen
3.B.5
27
Umrechnung in ein anderes Zahlensystem
Wie lautet die Zahl 109 im Dualsystem, im Oktal- oder Hexadezimalsystem, also bezogen auf die
Basis 2, 8 oder 16? Im Hexadezimalsystem benutzen wir neben den Ziffern 0,1, ..., 9 noch die Ziffern
A, B, C, D, E und F mit den Werten 10, 11, 12, 13, 14 und 15.
s−1
ai b i , also z = as as−1 ...a1 a0 bezogen auf die Basis b mit Rest durch
Dividieren wir z =
b, so erhalten wir
i=1
s−1
z = r1 b + ao
mit
ai b i−1 .
r1 =
i=0
Wiederholen wir diesen Algorithmus, benannt nach Euklid3 , so erhalten wir:
Verfahren 3.11 (Euklidischer Algorithmus) Mit z = r0 berechnen wir nacheinander:
r0 = r1 b + a0
r1 = r2 b + a1
r2 = r3 b + a2
..
.
rs−1 = 0·b + as−1
Beispiel 3.12 Die Zahl 109 wird im Dual-, Oktal- und Hexadezimalsystem dargestellt:
109 = 54 · 2 + 1
109 = 13 · 8 + 5
27 = 13 · 2 + 1
1 = 0·8+1
54 = 27 · 2 + 0
13 = 6 · 2 + 1
13 = 1 · 8 + 5
109 = 6 · 16 + 13
6 = 0 · 16 + 6
6 = 3·2+0
3 = 1·2+1
1 = 0·2+1
Damit gilt 10910 = 11011012 = 1558 = 6D16 . Zur Probe berechnen wir:
• 11011012 = 26 + 25 + 23 + 22 + 20 = 64 + 32 + 8 + 4 + 1 = 109 ,
• 1558 = 1 · 82 + 5 · 81 + 5 · 80 = 64 + 40 + 5 = 109 ,
• 6D16 = 6 · 162 + 13 · 160 = 96 + 13 = 109 .
¨
Der Ubergang
von der Dualdarstellung zur Oktal- oder Hexadezimaldarstellung kann vereinfacht
gef¨
uhrt werden. Jeweils 3 (bzw. 4) Stellen, beginnend mit der Einerstelle, werden zusammengefasst
und umgerechnet:
11011012 = (12 )(1012 )(1012 )8 = 1558 ,
11011012 = (1102 )(11012 )16 = 6D16 .
3.C
⋄
Gleitkommazahlen (REAL)
Der u
ur die doppeltgenaue
¨ bliche Speicherplatzbedarf einer Gleitkommazahl ist 4 Byte (REAL*4), f¨
Darstellung werden 8 Byte (REAL*8) ben¨
otigt. Pascal benutzt noch das Format REAL*6. Die Darstellungen der Gleitkommazahlen sind in den einzelnen Rechnern sehr unterschiedlich. Wir gehen
lediglich auf das Standardformat von IEEE4 ein (vgl. [20]), das vom mathematischen Koprozessor
unterst¨
utzt und von APL und MatLab benutzt wird.
3
4
Euklid von Alexandria, gr. Mathematiker, ca. 365 - ca. 300 v. Chr.
Institute of Electrical and Electronic Engineers, Normen 754 und 854
28
I Softwareentwicklung
3.C.1
Das IEEE-Gleitkommaformat
Definition 3.13 Eine gespeicherte Zahl x hat im IEEE-Gleitkommaformat die Darstellung
x = s(x ) · m(x ) · 2e(x ) .
Dabei sind:
• s(x ) = ± das Vorzeichen, es ben¨
otigt 1 Bit.
t−1
• m(x ) =
mi 2−i die Mantisse mit t logischen Bits.
i=0
Bei einer normalisierten Darstellung der Mantisse wird m0 = 1 verlangt. Die Mantisse hat
also die Gestalt m(x ) = 1. . . .. Stellt ein Rechner nur normalisierte Mantissen dar, so wird
die f¨
uhrende 1 oft nicht gespeichert. Dies ist beim Prozessor 80.87 bei den Formaten SHORT
REAL (REAL*4) und LONG REAL (REAL*8) der Fall.
n−1
• e(x ) =
i=0
ei 2i − bias der Exponent mit n Bits.
bias wird gew¨
ahlt, um negative und positive Exponenten darstellen zu k¨
onnen. In der Regel
wird
bias = 2n−1 − 1
gew¨
ahlt.
Oft wird der kleinste Exponent (−bias) und der gr¨
oßte Exponent ( 2n−1 − bias) nicht genutzt.
¨
Diese k¨
onnen dann zur Charakterisierung nicht-normalisierter Zahlen, Unterlauf und Uberlauf
herangezogen werden.
Als Beispiele betrachten wir die Standard-Formate des mathematischen Koprozessors 80.87:
SHORT REAL (Real*4), LONG REAL (Real*8) und T10 (Real*10). Die Anzahl der zur Speicherung benutzten Bits ist durch den Angabe der Bytes gekl¨
art. Interessant bleiben Fragen nach der
Anzahl der logischen Bit, minimalem und maximalem Exponenten, dem darstellbaren Zahlbereich
und der Darstellung nicht-normalisierter Zahlen.
Festlegung 3.14 (Gleitkommaformate des mathematischen Koprozessors)
und der gr¨
oßte Exponent werden nicht genutzt. In allen Formaten gelten also
Der kleinste
• bias = 2n−1 − 1 ,
• emin = 1 − bias = 1 − 2n−1 + 1 = 2 − 2n−1 und
• emax = 2n − 2 − bias = 2n − 2 − 2n−1 + 1 = 2n−1 − 1 = bias .
SHORT REAL und LONG REAL erlauben nur normalisierte Mantissen und haben damit ein
logisches Bit weniger Speicherbedarf.
Folgerungen 3.15
(a) Die gr¨
oßte darstellbare positive Zahl ist
t−1
zmax =
i=0
1 · 2−i
· 2emax =
2−t − 1 emax
·2
= (1 − 2−t ) 21+emax ≈ 21+emax
1/2 − 1
log10 (zmax ) ≈ log10 (2) · (1 + emax ) = log10 (2) · 2n−1 ≈ 0.301 · 2n−1 .
(b) F¨
ur die kleinste normalisierte positive Zahl gilt
log10 (zmin ) = log10 1 · 20 · 2emin
≈ log10 (2) · emin ≈ 0.301 · 2 − 2n−1 .
(c) Die kleinste nicht-normalisierte positive Zahl ist
log10 (zn,min ) = log10 1 · 2−(t−1) · 2emin
≈ 0.301 · 3 − 2n−1 − t .
≈ log10 (2) · (emin + 1 − t)
Dies ist der kleinste Abstand zwischen Maschinenzahlen.
3 Datentypen und einfache Datenstrukturen
29
(d) Die Maschinengenauigkeit wird oft als ε angegeben, wenn z1 := 1 + ε die kleinste Maschinenzahl gr¨
oßer 1 ist. In der Mantisse von 1 + ε ist das erste und letzte Bit gesetzt, der Exponent
null:
z1 = (20 + 21−t ) · 20 = 1 + 21−t .
¨
Tab. 3.3 gibt einen Uberblick
u
¨ber die Zahlenformate.
MatLab enth¨
alt die Konstanten eps, realmin und realmax f¨
ur die Maschinengenauigkeit, die im
LONG-Format kleinste und gr¨
oßte darstellbare Zahl, s. Tab. 3.5.
Tab. 3.3: Gleitkommaformate des math. Koprozessors
Format
log. Stellen
Mant. Exp.
t
n
SHORT
LONG
T10
3.C.2
24
53
64
Speicherplatz
Mant. Exp.
8
11
15
23
52
64
8
11
15
bias
=
emax
emin
127
1023
16383
−126
−1022
−16382
log10
(zmax ) (zmin )
38
308
4932
−37
−307
−4932
nur
normal.
ja
ja
nein
ε
≈
10−6.9
10−15.6
10−19.0
Gebrochene Dualzahlen
Wie werden rationale Zahlen in gebrochene Dualzahlen konvertiert? Der ganze Teil wird nach dem
euklidischen Algorithmus, s. 3.11, berechnet. Der echte Restbruch wird, wie beim berechnen der
Dezimalstellen, durch Division des Z¨
ahlers durch den Nenner und Multiplikation des Rests mit der
Basis gewandelt. Dies wird an einem Beispiel erl¨
autert:
Beispiel 3.16 (Umrechnung von Bru
¨ chen in Dualpunktdarstellung)
(a) Nach der Abtrennung des ganzen Anteils
7
3
= 210 +
10
1
3
= 102 +
10
1
3
10
1
muss jetzt noch
als Dualpunktzahl geschrieben werden. In
3
jedem Schritt wird der Rest, im ersten der vorhandene Z¨
ahler,
zun¨
achst mit 2 multipliziert. Nach zwei Schritten beginnt die
Periode, wir erhalten als Ergebnis
1
7
= 0.012 und
= 10.012 = 1.0012 · 21 .
3 10
3 10
1 : 3 = 0 Rest 1
(1 · 2) : 3 = 0 Rest 2
(2 · 2) : 3 = 1 Rest 1
(1 · 2) : 3 = 0 Rest 2
Ihre normalisierte Darstellung im SHORT-Format lautet demnach 1.001010101..01 · 21 . Die
Mantisse besitzt 23 Nachkommastellen, die Zahl wird abgerundet dargestellt. Ihre normalisierte Darstellung im LONG-Format lautet 1.001010101....010 · 21 . Die Mantisse besitzt 52
Nachkommastellen, die Zahl wird aufgerundet dargestellt.
(b) Analog ergibt sich
1
10
10
= 0.000112 = 1.10012 · 2−4 .
Die 53. Nachkommastelle ist eine Eins, also wird auch 1/10 in der Darstellung als LONG-Zahl
aufgerundet.
⋄
30
I Softwareentwicklung
Beispiel 3.17 (Darstellungsfehler)
7
= 1.0012 · 21 wird bei der Darstellung im SHORT-Format mit 24 Bits nach
3 10
unter gerundet, denn die 24. Nachkommastelle der Mantisse ist 0. Der Fehler ist hierbei
1
1
· 2−20 ≈ 0.08 · 10−6 ≈ 8 · 10−8 .
e = (0 − .01)2 · 2−23 · 21 = · 2−22 =
3
12
Sie wird bei der Darstellung im LONG-Format mit 53 Bits nach oben gerundet, denn die 53.
Nachkommastelle der Mantisse ist 1. Der Fehler ist hierbei
2
1
e = 1 − .10 2 · 2−52 · 21 = 1 −
· 2−51 = · 2−50 ≈ .17 · 10−15 ≈ 2 · 10−16 .
3 10
6
(a) Die Zahl
1
= 1.10012 · 2−4 wird bei der Darstellung im SHORT-Format mit 24 Bits
10 10
nach oben gerundet, denn die 24. Nachkommastelle der Mantisse ist 1. Der Fehler ist hierbei
(b) Die Zahl
e = 1 − .1100
2
· 2−23 · 2−4 =
1−
12
15
10
· 2−27 =
1
· 8 · 2−30 ≈ 1.6 · 10−9 .
5
Sie wird bei der Darstellung im LONG-Format mit 53 Bits nach oben gerundet, denn die 53.
Nachkommastelle der Mantisse ist 1. Der Fehler ist hierbei
9
2
· 2−56 = · 16 · 2−60 ≈ 6 · 10−18 = 10−17 .
e = 1 − .1001 2 · 2−52 · 2−4 = 1 −
15 10
5
3.D
Einfache Datentypen
Definition 3.18 (Einfache Datentypen) Der Datentyp legt die zu speichernde Datenart fest.
Die u
¨blichen einfachen Datentypen sind in Tab. 3.4 gelistet.
Tab. 3.4: Einfache Datentypen
Name
Bedeutung
INTEGER
REAL
COMPLEX
LOGICAL
CHARACTER
Festkommazahlen
Gleitkommazahlen
komplexe Gleitkommazahlen
logische Gr¨
oßen
Texte
Standardgr¨
oße in Byte
APL
MatLab
8
16
1/8
1
8
16
1
1
Bemerkung 3.19 (Numerische Datentypen) Standardm¨
aßig speichern MatLab und APL numerische Daten im doppelt-genauen LONG-Format (REAL*8). MatLab stellt Konvertierungsroutinen zum Erzeugen der Formate
• einfach-genau: short,
• ganzzahlig: intn mit n = 8, 16, 32, 64 Bits.
• vorzeichenlos ganzzahlig: uintn mit n = 8, 16, 32, 64 Bits.
• komplex: complex(a,b) liefert a+bi, also a + j b; complex(a) a + j 0.
MatLab bezeichnet den Speicherplatzbedarf und die Routinen bei der Konvertierung in Festkommazahlen nicht die Anzahl der Bytes sondern die Anzahl der Bits. Die Konvertierungsroutinen zum
Erzeugen ganzzahliger Zahlen runden zur n¨
achsten ganzen Zahl. 0.5 wird zum gr¨
oßeren Betrag hin
gerundet.
3 Datentypen und einfache Datenstrukturen
31
MatLab kennt aber keine Festkommaarithmetik. Bei jeder numerischen Operation werden die
Operanden zun¨
achst in Gleitkommazahlen konvertiert, dann die Operation ausgef¨
uhrt und, falls
eine der Zahlen eine Festkommazahl ist, das Ergebnis wieder in dasselbe Festkommaformat gewandelt: int8(pi)+4.9 ergibt den Wert 8!
Andere Rundungsroutinen sind floor und ceil (ceiling), die ab, bzw. aufrunden. Diese sind in
MatLab und APL (Ä, Ó) vorhanden.
MatLab kennt noch die Rundungsroutinen round (rundet zur n¨
achstgelegenen ganzen Zahl, bei
.5 zur betragsgr¨
oßeren) fix (rundet zur n¨
achstgelegenen betragskleineren ganzen Zahl, also immer
in Richtung Null).
Frage 3.20 Interessant erscheinen generell folgende Fragen, die letzten drei habe ich bereits besprochen, die ersten drei werden im weiteren Verlauf behandelt.
(a) Wie unterscheiden sich einfach und mehrfach belegbare Datenspeicherpl¨
atze?
(b) Wie m¨
ussen die Datentypen vereinbart werden?
(c) Welche Operationen sind f¨
ur die einzelnen Datentypen erlaubt?
(d) Wie werden die Zahlen physikalisch dargestellt?
(e) Welcher Zahlbereich kann dargestellt werden?
¨
(f) Wie ist der Uberlauf
organisiert?
3.D.1
Einfach und mehrfach belegbare Gr¨
oßen und ihre Datentypvereinbarung
Wir beginnen mit den ersten beiden Punkten aus 3.20, die in MatLab und APL keine wirklich Rolle
spielen aber in vielen anderen Sprachen wichtig sind. Ihre inhaltliche Bedeutung ist jedoch auch in
diesen Sprache wichtig.
Definition 3.21 (Variable, Parameter, Konstanten) Es gibt verschiedene logische Speicherungsarten f¨
ur Daten, die sich in der Wertbelegung und den Benutzungsm¨
oglichkeiten unterscheiden:
Variable: Speicherplatzhalter mit Namen, dem immer wieder neu ein Wert zugewiesen werden kann.
Konstante: Speicherplatzhalter ohne Namen mit einmal festgelegtem Wert.
Parameter: Speicherplatzhalter mit Namen mit einmal festgelegtem Wert.
Tab. 3.5 enth¨
alt die wichtigsten MatLab-Konstanten, die aber nicht konstant sind. MatLab speichert sie als Variable! Die Syntax vieler Programmiersprachen (Fortran, Algol, Pascal, Java,
. . .) verlangt an bestimmten Stellen (z. B. Dimensionsvereinbarungen f¨
ur Felder, s.u.) Konstanten
oder Parameter, sie erlaubt an diesen Stellen keine Variablen. Diese Problem tritt weder bei MatLab
noch bei APL auf, da es keine statische Dimensionsvereinbarungen gibt. Diese Programmiersprachen kennen den Typ Parameter nicht.
Bemerkung 3.22 (Datentypvereinbarung) Viele Programmiersprachen (Algol, Pascal, C, Java . . .) verlangen, dass vor dem Benutzen einer Gr¨
oße diese mit der Angabe der zu benutzenden
Bytes zu deklarieren. INTEGER*4“ legt eine Festkommazahl mit 4 Bytes fest, REAL*8“ eine Gleit”
”
kommazahl mit 8 Bytes fest. Damit liegt die Speicherplatzbelegung und der Wertebereich der Variablen fest. Bei MatLab und APL wird durch eine Zuweisung (Wertbelegung) der Typ festgelegt
oder ge¨
andert. Der Standardtyp f¨
ur numerische Daten ist doppelt-genau.
32
I Softwareentwicklung
Tab. 3.5: Variable“ Konstanten in MatLab
”
MatLab
Bedeutung
pi
i
j
eps
realmin
realmax
Inf
NaN
π
j
j
relative Maschinengenauigkeit f¨
ur Gleitkommazahlen ε = 2−52
kleinste positive Gleitkommazahl: 2−1022
gr¨
oßte Gleitkommazahl: (2 − ε)21022
unendlich
Keine-Zahl (Not-a-Number)
Tab. 3.6: Einfache Datentypen in MatLab und erlaubte Operationen
Typ
innere
Operationen
DOUBLE
INTEGER*n
(n ∈ {1, 2, 4, 8, 16})
COMPLEX
CHAR
LOGICAL
3.D.2
Vergleichsoperationen
Konstanten
+ - * / ^
< <= == >= > ∼=
1 3.57 15.4E+23
int8(12) int8(-2)
+ - * / ^
== ∼= (< <= >= >)
< <= == >= > ∼=
< <= == >= > ∼=
3.57E+14+1.5i
’a’ ’*’
0 1
& | ∼ xor any all
Operationen auf den Datentypen
Die Operationen und das Erzeugen von Konstanten sind in Tab. 3.6 zusammengefasst.
Bemerkung 3.23 (Zus¨
atzliche Funktionen fu
ur reelle Zahlen a und
¨ r komplexen Zahlen) F¨
b oder eine komplexe Zahl z = a + j b berechnen
(a) complex(a,b) die komplexe Zahl z = a + b j,
√
(b) abs(z) den Betrag |z | = a 2 + b 2 ,
(c) angle(z) den Argumentwinkel arg(z ),
(d) real(z) den Realteil Re(z ) = a,
(e) imag(z) den Imagin¨
arteil Im(z ) = b,
(f) conj(z) die komplex konjugierte Zahl z¯ = a − j b.
Der Befehl compass(z) stellt die komplexe Zahl z als Zeiger“ dar.
”
Die MatLab-Implementierung der komplexen Zahlen beinhaltet folgende Eigenschaften:
Bemerkung 3.24
(a) Der MatLab-Typ einer komplexen Zahl ist double.
(b) Die Vergleiche < <= >= > beziehen sich bei komplexen Zahlen ausschließlich auf den Realteil.
Der logische Ausdruck complex(3,4)<complex(3,5) hat den Wert falsch.
Auf einige MatLab-Besonderheiten sei hingewiesen:
3 Datentypen und einfache Datenstrukturen
33
Bemerkung 3.25 (MatLab-Besonderheiten)
(a) MatLab rechnet grunds¨
atzlich im Format REAL. Sind die Operanden beide Gleitkommazahlen,
so wird das Ergebnis wieder in dieses Format gewandelt, also zur n¨
achstgelegenen ganzen Zahl
gerundet.
(b) class(a) gibt den Typ der Variablen a an.
unschten Typ hat.
(c) isrealdouble(a), islogical(a) gibt an, ob die Variable a den gew¨
(d) Die Funktionen true und false erzeugen die Werte 0 und 1.
(e) Der kleiner-gleich“-Vergleich (a <= b) bei logischen Gr¨
oßen ist genau dann wahr, wenn a
”
falsch oder b wahr ist. Er ist damit eine Ersatzfunktion f¨
ur die logische Implikation a⇒b.
(f) Die u
onnen auch auf CHAR-Gr¨
oßen angewandt werden.
¨ blichen numerischen Operationen k¨
Vor der Ausf¨
uhrung dieser Operation wird das Zeichen in seinen ASCII-Kode gewandelt. Die
Funktion char wandelt den ASCII-Kode in das Zeichen. Damit liefert char(’a’+5) das f¨
unfte
Zeichen nach a“.
”
34
I Softwareentwicklung
§ 4 Datenstrukturen
4.A
Numerische Felder
MatLab kennt weder Skalare noch Vektoren. Das Standardformat sind zweidimensionale Felder
(Matrizen). Skalare Gr¨
oßen werden als (1, 1)-Matrizen, Vektoren als einzeilige Matrizen gespeichert.
Allgemein beendet ; einen zu berechnenden Ausdruck, ohne dass das berechnete Ergebnis am
Bildschirm ausgegeben wird. Soll das Ergebnis am Bildschirm sichtbar werden, muss , den Ausdruck
abschließen. Fehlen diese Zeichen am ende einer Zeile, so wird das berechnete Ergebnis ausgegeben.
4.A.1
Verknu
¨ pfungen auf numerischen Felder
Festlegung 4.1 (Erzeugen von Feldern, Auswahl von Komponenten)

(a) m = [1 2 3 4;5 6 7 8] erzeugt die Matrix m = 
1 2 3 4
5 6 7 8


.
(b) m(2,3) liefert 7, m(:,1:3) die ersten drei Spalten, m(:,end-2:end) die letzten drei und
m(:,1:2:4) die erste und dritte Spalte.


0 0
0


 1
1
1




 2
4
8

.
(c) v = [0:5]’; w = [v v.^2 v.^3] erzeugt w = 

 3
9
27



 4 16
64 


5 25 125
(d) m(:) liefert die Komponenten der Matrix als Spaltenvektor, m(:)’ als Zeilenvektor.
(e) length(w) liefert 6, die L¨
ange der l¨
angsten Achsen. Bei einem Vektor also seine Gr¨
oße.
(f ) size(w) liefert 6 3, die L¨
ange jeder Achse. size(w,1) die L¨
ange der ersten, size(w,2) die
L¨
ange der zweiten Achse. length(size(w)) die Anzahl der Achsen.
(g) MatLab speichert die Inhalte einer Matrix spaltenweise und erlaubt den Zugriff mit der Elementnummer: m(5) liefert damit das Element m(1,3), also 3.
(h) y = reshape(w,2,9) erzeugt eine (2,9)-Matrix aus den Daten von w, reshape(w,2,3,3)
ein dreiachsiges Feld.
 Hierbei muss beachtet werden,dass MatLab die Daten spaltenweise
0 2 4 0 4 16 0 8 64 
gilt.
speichert, also y = 
1 3 5 1 9 25 1 27 125
(i) y = repmat(m,3,4) erzeugt eine (6,16)-Matrix durch vervielf¨
altigen der Matrix m, dreimal
in vertikaler, also erster Achsrichtung und viermal in Richtung der zweiten Achse:


1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4


 5 6 7 8 5 6 7 8 5 6 7 8 5 6 7 8 




 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 

y=


 5 6 7 8 5 6 7 8 5 6 7 8 5 6 7 8 


 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 


5 6 7 8 5 6 7 8 5 6 7 8 5 6 7 8
(j) zeros(n) erzeugt die Nullmatrix des Typs (n,n), zeros(n,m) erzeugt die Nullmatrix des Typs
(n,m).
(k) ones(n) erzeugt eine Matrix des Typs (n,n), ones(n,m) ein Matrix des Typs (n,m), die nur
aus Einsen besteht.
(l) eye(n) erzeugt die Einheitsmatrix des Typs (n,n), eye(n,m) eine Matrix des Typs (n,m) die
auf
 der links
 oben beginnenden Diagonalen Einsen und sonst nur Nullen hat. eye(2,3) liefert
1
0
0

.
0 1 0
4 Datenstrukturen
35

(m) diag([1 2 3 4]) erzeugt die Diagonalmatrix






1
0
0
0
0
2
0
0
0
0
3
0
0
0
0
4







.
(n) diag([1 2 3 4],1) erzeugt die Matrix, deren obere, diag([1 2 3 4],-2) deren zweite untere Nebendiagonale aus den angegebenen Zahlen besteht.
(o) F¨
ur eine mindestens zweispaltige oder zweizeilige Matrix liefert diag(m) die Diagonale als
Vektor. Mit obigem Beispiel also 1, 6.

(p) tril(m) erzeugt die untere Dreiecksmatrix m = 

(q) triu(m) erzeugt die obere Dreiecksmatrix m = 
1 0 0 0
5 6 0 0
1 2 3 4
0 6 7 8




.
.
(r) magic(n) erzeugt eine (n,n)-Matrix mit gleicher Spalten- und Zeilensumme.
(s) rand(n) erzeugt gleichm¨
aßig verteilte Zufallsmatrix des Typs (n,n).
(t) randn(n) erzeugt normal verteilte Zufallsmatrix des Typs (n,n).
Tab. 4.1: Numerische Verkn¨upfungen von Matrizen
Symbol
Bedeutung
+
Addition, auch (komponentenweise) Matrixaddition
-
Subtraktion, auch (komponentenweise) Matrixsubtraktion
*
Multiplikation, auch Matrixmultiplikation (nach dem Falk-Schema)
\
Linksdivision von Matrizen, s. 4.2
/
Rechtsdivision von Matrizen, s. 4.2
^
Potenzieren: Basis und Exponent m¨
ussen quadratisch sein, eine der
beiden skalar
’
komplex konjugieren und Transponieren
.*
komponentenweise Multiplikation
.\
komponentenweise Linksdivision
./
komponentenweise (Rechts-)Division
.^
komponentenweises Potenzieren
.’
Transponieren (ohne komplexe Konjugation)
In MatLab sollen alle numerischen Verkn¨
upfungen die in der Mathematik u
¨ bliche Bedeutung
haben. So stehen +“ f¨
ur die Matrixaddition und *“ f¨
ur die Matrixmultiplikation, obwohl sie
”
”
grunds¨
atzlich verschieden berechnet werden. Eine alternative Berechnungsvorschrift wird mit .*“
”
bezeichnet. Die numerischen Verkn¨
upfungen sind in Tab. 4.1 gelistet.
Bemerkung 4.2 (Matrixdivision) Die Linksdivision A\B berechnet die L¨
osung des linearen Gleichungssystems A · X = B:
(a) Bei quadratischen Matrizen gleicher Gr¨
oße entspricht dies A−1 · B.
(b) Bei u
oßenm¨
aßig g¨
ultigen) linearen Gleichungssystem A · X = B wird eine
¨ berbestimmten (gr¨
L¨
osung im Sinne der linearen Ausgleichsrechnung berechnet, s. 14.8.
36
I Softwareentwicklung
(c) Bei unterbestimmten (gr¨
oßenm¨
aßig g¨
ultigen) linearen Gleichungssystem A · X = B wird eine
L¨
osung im Sinne der Pseudoinversen berechnet, s. 14.10.
Analog berechnet die Rechtsdivision B/A die exakte, ausgeglichene, oder pseudoinverse L¨osung des
linearen Gleichungssystems X · A = B. Dies entspricht bei quadratischen Matrizen gleicher Gr¨
oße
B · A−1 .
Diese Definition muss man beachten, wenn einer der Faktoren ein Skalar (genauer eine 1-1Matrix) ist. F¨
ur einen Zeilenvektor v berechnet
• 5\v die L¨
osung der Gleichung 5 · x = v , und damit die komponentenweise Division, w¨
ahrend
v\5 die pseudeo-inverse L¨
osung des linearen Gleichungssystems v · x = 5 ermittelt. x ist dann
ein Spaltenvektor gleicher L¨
ange wie der Zeilenvektor v .
• berechnet v/5 die L¨
osung der Gleichung x · 5 = v , und damit die komponentenweise Division,
w¨
ahrend 5/v zu einem Fehler f¨
uhrt, weil x · v = 5 kein g¨
ultiges lineares Gleichungssystem ist.
Sind v und w Spaltenvektoren gleicher L¨
ange, so berechnet v\w die ausgeglichene L¨
osung der
Gleichung v · x = w und damit das Vielfache des Vektors v , das w am n¨
achsten liegt.
4.A.2
Numerische Funktionen auf Feldern
Die Vielzahl der Funktionen, die MatLab zu Verf¨
ugung stellt, kann hier nur angedeutet werden. Die
¨
MatLab-Hilfe gibt einen Uberblick.
Viele dieser Funktion arbeiten entlang einer Achse, die voreingestellt ist und durch Eingabe
festgelegt werden kann. Die Voreinstellung ist f¨
ur echte Matrizen die erste Achse (vertikal). Da
Vektoren einzeilige Matrizen sind, gibt es hier ein Widerspruch zwischen struktureller und logischer
Voreinstellung, die MatLab im Sinne der logischen Voreinstellung l¨
ost. Dies kann zu Problemen
f¨
uhren, wenn man außer Acht l¨
asst, dass einzeilige Matrizen als Vektoren behandelt werden.
Bemerkung 4.3 (Weitere Operationen auf Vektoren) v, w bezeichnen Vektoren, also einzeilige oder einspaltige Matrizen, gleicher L¨
ange. Es berechnen
(a) norm(v) den Betrag des Vektors v. Was berechnet abs(v)?
(b) dot(v,w) das Skalarprodukt und liefert damit f¨
ur Vektoren als einzeilige Matrizen dasselbe
Ergebnis wie v*w’.
(c) cross(v,w) das Kreuz- oder Vektorprodukt der dreidimensionalen Vektoren v und w.
Bemerkung 4.4 (Weitere Operationen auf Matrizen) MatLab bietet Operationen zum Berechnen der Inversen und Determinante quadratischer Matrizen an. Diese Algorithmen sind aufw¨
andigen, ihre Ergebnisse beinhalten zum Teil erhebliche Rundungsfehler.
(a) det(m) berechnet die Determinante und
(b) inv(m) die Inverse der Matrix m, falls ihre Determinante nicht null ist.
Zum L¨
osen von linearen Gleichungssystem ist das berechnen der Inversen zu aufw¨
andig. Hier bietet die Linksmultiplikation nach Tab. 4.1 eine bessere L¨
osung. Die numerischen Methoden dieser
Algorithmen werden im Numerik-Teil dieses Skripts behandelt.
Bemerkung 4.5 (Achsabh¨
angig arbeitende Funktionen)
Tabelle arbeiten entlang der ersten (vertikalen) Achse.
Die Funktionen in der folgenden
Ist m ein (5,6)-Matrix, so berechnet mean(m) spaltenweise
den Mittelwert der in m gespeicherten Werte, liefert also
einen 6-elementigen Zeilenvektor. mean(m,1) liefert den Mittelwert entlang der ersten Achse, mean(m,2) den Mittelwert
entlang der zweiten Achse, also zeilenweise. Ist v ein Vektor,
also eine einzeilige Matrix, so liefert mean(v) den Mittelwert
des Vektors, mean(v,1) den Mittelwert entlang der ersten
Achse, also den Vektor v und mean(v,2) den Mittelwert der
Komponenten des Vektors.
Name
Bedeutung
mean
std
sum
prod
max
min
Durchschnitt
Standardabweichung
Summe
Produkt
Maximum
Minimum
4 Datenstrukturen
37
std, sum und prod verhalten sich gleich. max und min dagegen sind anders festgelegt: Der Ausdruck max(m) liefert einen 6-elementigen Vektor mit den Maximalwerten jeder Spalte und max(v)
das Maximum der in v gespeicherten Werte. Allgemein liefert max(m1,m2) komponentenweise das
Maximum der Matrizen m1 und m2 gleicher Gr¨
oße, wobei eine der beiden Variablen auch eine skalare
Gr¨
oße sein darf. Ein m¨
ogliches drittes Argument bezeichnet die Achsrichtung. max(m,[],1) liefert
spaltenweise das Maximum, min(m,[],2) das zeilenweise Minimum.
Dieses Beispiel zeigt, dass das strukturelle Verhalten der Funktionen bei Achsangabe unterschiedlich ist. MatLab versucht die Eingaben auf ihren Sinn hin zu pr¨
ufen. Dies f¨
uhrt meiner Meinung nach eher zu Verwirrungen als zu Klarheit. Der Anwender muss auf jeden Fall gr¨
undlich in
der MatLab-Dokumentation lesen, um zu wissen, was diese Funktionen bei Matrizen und Vektoren
berechnen.
Bemerkung 4.6 (Skalare Operationen) Ist einer der beiden Operatoren eine skalare Gr¨
oße, so
wird diese mit jeder Komponente verkn¨
upft. Das entspricht bei * der Skalarmultiplikation. [1 2
3]*7 ergibt den Vektor (7, 14, 21).
4.A.3
Logische Indizierung
F¨
ur den Vektor v=[-1:5] liefert der logische Ausdruck v>1 das Ergebnis
0 0 0 1 1 1 1.
Die Funktion find(v>1) gibt f¨
ur den logischen Vektor 0 0 0 1 1 1 1 die Indizes mit logischem
Wert wahr“ an:
”
4 5 6 7
Der Ausdruck v(find(v>1)) schließlich gibt die Werte in v an, die gr¨
oßer 1 sind:
2 3 4 5
Dieser Ausdruck kann k¨
urzer formuliert werden. v(v>1) liefert dasselbe Ergebnis.
Definition 4.7 (Logische Indizierung) Ist m eine mehrzeilige Matrix und l eine logische Matrix
gleicher Gr¨
oße, so liefert m(l) einen Spaltenvektor der Komponenten, f¨
ur die die zugeh¨
orige lKomponenten wahr ist.
Ist v eine einzeilige Matrix (also ein Vektor) und l eine logische Matrix gleicher Gr¨
oße, so liefert
v(l) einen Zeilenvektor der Komponenten, f¨
ur die die zugeh¨
orige l-Komponente wahr ist.
Diese logische Indizierung kann auch f¨
ur Wertzuweisungen benutzt werden, eine effiziente M¨
oglichkeit, umst¨
andliche Fallunterscheidungen und Schleifen zu vermeiden. Hierin sehe ich die Gr¨
unde
f¨
ur die Leistungssteigerung bei feldorientierten Sprachen wie MatLab und APL .
Bemerkung 4.8 (Logische Indizierung bei Wertzuweisungen)
m=[’abcdefg’;’hijklma’] ¨
andert der Ausdruck
m(m==’a’)=’A’
die beiden ’a’ zu ’A’:
Abcdefg
hijklmA
4.A.4
Bei der (2,7)-Textmatrix
Numerische Felder mit drei und mehr Achsen
Durch m=[1 2 3;4 5 6;7 8 9] wird eine (3,3)-Matrix definiert. Der Ausdruck
m(:,:,2)=[11,12,13;14,15,16;17,18,19] definiert zus¨
atzlich zu Zeilen und Spalten eine
dritte Achse. Diese wird in MatLab Seite“ genannt. Jetzt liefern m(3,2,1) die Zahl 8 und m(3,2,2)
”
die Zahl 18.
38
I Softwareentwicklung
Beispiel 4.9 Alternativ kann die Funktion cat benutzt werden:
m= cat(3,[1 2 3;4 5 6;7 8 9],[11,12,13;14,15,16;17,18,19])
baut dieselbe drei-achsige Matrix auf, m=cat(3,m,reshape([-1:-1:-9],3,3)) f¨
ugt eine dritte Seite mit den negativen Zahlen von -1 bis -9 hinzu. s. Abb. 4.1
¨
MatLab h¨
alt einige Uberraschungen
f¨
ur Felder mit mehr als zwei Achsen bereit:
(a) F¨
ur m=[1 2 3;4 5 6] liefert n=reshape(m,[1,size(m)]) wie erwartet ein dreiachsiges Feld
it den Achsl¨
angen 1, 2 und 3. reshape(m,[size(m),1]) f¨
ugt keine Achse am Ende hinzu.
(b) Auch repmat f¨
ugt am Ende keine Achse der L¨
ange 1 hinzu, aber am Anfang oder in der Mitte.
(c) Werden beim Zugriff auf Felder Achsen einelementig, so werden diese am Ende entfernt.
Einelementige Achsen am Anfang bleiben erhalten, s. Abb. 4.2
>> format compact
>> m=[1 2 3;4 5 6;7 8 9];
>> m=cat(3,m,reshape([11:19],3,3)’);
>> m=cat(3,m,reshape([-1:-1:-9],3,3))
m(:,:,1) =
1
2
3
4
5
6
7
8
9
m(:,:,2) =
11
12
13
14
15
16
17
18
19
m(:,:,3) =
-1
-4
-7
-2
-5
-8
-3
-6
-9
>> format compact
>> m=repmat(5,[3,3,1,3]);
>> size(m)
ans =
3
3
1
3
>> size(m(1,1,:,:))
ans =
1
1
1
3
>> size(m(:,:,:,1))
ans =
3
3
Abb. 4.2: Zugriff auf mehrachsige Felder
Abb. 4.1: cat-Funktion
4.B
Mengen
Mengen numerischer Werte werden als Vektoren, Zeichenmengen als Textvektoren und allgemeine
Mengen als geschachtelte Felder (s. 4.D) gespeichert. Beim Arbeiten mit Mengen muss man beachten, dass diese jedes Element nur einmal beinhalten d¨
urfen. Hierf¨
ur gibt es MatLab die Funktion
unique, die aus einem Vektor alle Wiederholungen l¨
oscht. Die Enhaltenseinsfunktion und Weitere
Mengenverkn¨
upfungen sind in Tab. 4.2 zusammengestellt, die numerische Mengen, Textmengen
und allgemeine Mengen arbeiten.
Die Ergebismengen der Verkn¨
upfungen sind aufsteigend geordnet. Die Verkn¨
upfungsfunktionen
liefern im ersten Ergebnis die Resultate der angegebenen Verkn¨
upfungen. Sie haben alle als weitere
Ergebniskomponenten die Positionsangaben, die verkn¨
upfungsabh¨
angig sind. So liefert
[c,ia,ib]=intersect(a,b) als zus¨
atzlich Ergebnis Indexvektoren mit c=a(ia) und c=b(ib).
Beispiel 4.10 Mit a=2.*[1:50], den geraden nat¨
urlichen Zahlen bis 100 und b=5.*[1:20], den
durch f¨
unf teilbaren nat¨
urlichen Zahlen bis 100 liefert intersect(a,b) die Menge aller durch 10
teilbaren Zahlen bis 100: (2N ∩ 5N = 10N).
4 Datenstrukturen
39
Tab. 4.2: Funktionen zur Bearbeitung von Mengen
Funktion
Verkn¨
upfung
math. Formel
ismember(a,b)
Enthaltensein
a ∈b
intersect(a,b)
Durchschnitt
a ∩b
Mengendifferenz
a\b
Vereinigung
a ∪b
setdiff(a,b)
union(a,b)
Mengenerzeugen
unique
4.C
Verbund (Records, Structures)
Literatur: Schauer [46, S. 40ff]
W¨
ahrend bei Feldern alle Komponenten gleichen Typs sein m¨
ussen, k¨
onnen die einzelnen Komponenten eines Verbunds verschiedenen sein in Datentyp und Struktur. Sie entsprechen dem Inhalt
eines Satzes einer Datei, anschaulich also einer Karteikarte.
4.C.1
Definition, Wertzuweisung und -abfrage
Als Beispiel wird eine Adressdatenbank betrachtet. Gespeichert werden Zu- und Vorname, sowie
die Adresse bestehend aus Postleitzahl, Ortsname und Straße mit Hausnummer, s. Abb. 4.3. Die
einzelnen Komponenten der Variablen tragen Namen, u
¨ ber die sie auch angesprochen werden.
Person
Adresse
Name
Ort
Straße
Zuname
Vorname
PLZ
Ortsname
Abb. 4.3: Eintr¨age einer Adressdatenbank
Der Ausdruck
person=struct(’Name’,struct(’Zuname’,’Meyer’,’Vorname’,’Hans’),...
’Adresse’,struct(’Strasse’,’Marktplatz 5’,’Ort’,...
struct(’PLZ’,’02345’,’Ortsname’,’Großstadt’)))
definiert den Verbund in einem Zug. Dies kann nat¨
urlich auch St¨
uck f¨
ur St¨
uck gemacht werden.
Der Ausdruck person.Adresse.Ort greift auf die beiden Baumenden PLZ“ und Ortsname“
”
”
zu, person.Adresse.Ort.PLZ auf die Postleitzahl. Weitere Zugriffe sind in Abb. 4.4 zusammengefasst.
Verbundteile k¨
onnen ge¨
andert werden: person.Adresse.Strasse=’Hauptstraße 13’;“ doku”
mentiert einen Umzug innerhalb des Orts.
Verbundteile k¨
onnen auch wieder gel¨
oscht werden: patient = rmfield(Person,’Name’);“
”
l¨
oscht den Name mit Nachname und Vorname im Verbund person.
40
I Softwareentwicklung
>> person
person =
Name: [1x1 struct]
Adresse: [1x1 struct]
>> person.Name
ans =
Zuname: ’Meyer’
Vorname: ’Hans’
>> person.Adresse
ans =
Strasse: ’Marktplatz 5’
Ort: [1x1 struct]
>> person.Adresse.Ort
ans =
PLZ: ’02345’
Ortsname: ’Großstadt’
>>person.Adresse.Ort.PLZ
ans =
02345
Abb. 4.4: MatLab-Protokoll: Abfrage Verbund
4.C.2
Felder von Verbunden
Das Benutzen von Feldern von Verbunden erm¨
oglicht, bildlich gesprochen, Personenkarteien zu
f¨
uhren. Mit der Festlegung
person(2).Name=struct(’Name’,’Schmidt’,’Vorname’,’Hans’)
oder
person(2).Adresse.Ort.PLZ=’54411’
werden Teile der Karteikarte“ definiert. Die Weiteren Teil existieren strukturell, sind aber leer.
”
size(person) weist person als (1,2)-Matrix aus.
Der Systembefehl whos gibt eine Liste aller benutzten Variablen mit dem belegten Speicherplatz
aus.
4.D
4.D.1
Geschachtelte Felder (Nested Array, Cell Array)
Definition geschachtelter Felder
Dies ist der allgemeinste Datentyp. Geschachtelte Felder sind Felder, also Vektoren oder Matrizen,
deren Komponenten geschachtelte oder einfache Strukturen beliebigen Typs sein k¨
onnen.
Der Ausdruck
cell={[1 2 3;4 5 6;7 8 9], {’abcd’; [1 2 3 4]}; 3+4i, [-2 3;4 5];...
struct(’Na’,’alpha’,’Wert’,5),17}
erzeugt eine geschachtelte Matrix:
cell =
[3 +
[3x3 double]
4i]
[1x1 struct]
{2x1 cell }
[2x2 double]
[
17]
4.11 (Zugriff und Zuweisung)
(a) Der Zugriff erfolgt u
¨ ber
4 Datenstrukturen
41
• cell{1,1}:
ans =
1
2
4
5
7
8
• cell{1,1}(1,2):
ans =
2
• cell{3,1}.Na
ans =
alpha
abcd
other
structure
3
6
9
3+4i
sparse
char
17
double
Abb. 4.5: Darstellung des geschachtelten Felds mit
cellplot
(b) Analog k¨
onnen Zellen ver¨
andert werden: Mit cell{1,1}(1,2)=7
>>cell{1,1}
ans =
1
7
4
5
7
8
3
6
9
4.12 (Zusammenfassen von Variablen oder ihren Inhalten) Sind a und b Variable, so ist
(a) [a b], falls m¨
oglich, eine Zusammenfassung der Inhalt von a und b ohne Schachtelung,
(b) {a b} eine Zusammenfassung mit Schachtelung der Variablen a und b. Dies ist immer m¨
oglich.
4.D.2
Konvertierungen
4.13 (Konvertierung)
(a) Die Funktion num2cell wandelt einen numerischen Vektor in einen Zellenvektor:
>> num2cell([1 2 3 4 5])
ans =
[1]
[2]
[3]
[4]
[5]
(b) Die Umkehrung wird von MatLab nicht zur Verf¨
ugung gestellt. Dies muss dann selbst programmiert werden. Die Funktion Cel2Num, s. Alg. 4.1, kehrt die Wirkung von num2cell
um:
>> Cel2Num(x)
ans =
1
2
3
4
5
(c) Als weiter Beispiele f¨
uge ich die Funktionen Mat2Cel, s. Alg. 4.2 und Cel2Mat, s. Alg. 4.3
an, die eine Matrix spalten- oder zeilenweise in Zellenvektoren wandeln und umgekehrt einen
Zellenvektor in eine Matrix wandeln.
4.14 (Operation auf den Zellen) MatLab stellt f¨
ur das Operieren auf den einzelnen Zellen die
Funktion
cellfun(func,cell,’UniformOutput’,log)
zur Verf¨
ugung. Hierbei sind
42
I Softwareentwicklung
function r=Cel2Num(cells)
% V1.2 30.10.2013 Dieter Kilsch
(25.10.1999)
% Cel2Num converts numerical or character cells to a numerical vector
% cells AM cell matrix (matrix of cells)
% r
M resulting matrix
% local variables
% scells
V
size of cells
%-------------------------------------------------------------------scells = size(cells);
if length(scells)>1; cells=cells(:); end;
%2.1
r=[];
for i=1:length(cells)
if isa(cells{i},’double’); r=[r,cells{i}];
else
r=[r,str2num(cells{i})];
end
end
if length(scells)>1; r=reshape(r,scells); end
Alg. 4.1: Die Funktion Cel2Num
function cells=Mat2Cel(mat,ax)
%Mat2Cel(mat,ax) puts the rows or columns of a matrix into cells.
% V1.1 16.07.1998 Dieter Kilsch
% mat
M
matrix to be nested
% ax
S
number of axis to be nested
[DEF.: 2]
% cells CV cells of vectors
%-------------------------------------------------------------------if nargin<2; ax=2; end;
if ax==1; for i=1:size(mat,2); cells{i}=mat(:,i); end;
elseif ax==2; for i=1:size(mat,1); cells{i}=mat(i,:); end;
else
error([’Wrong axis chosen: ’,num2str(ax)]);
end;
Alg. 4.2: Die Funktion Mat2Cel
• func ein Funktionsgriff, siehe 4.E.2. Es k¨
onnen auch einige Textvariable eingegeben werden:
– ’isreal’: true for cells containing a real array
– ’isempty’: for cells containing an empty array
– ’islogical’: true for cells containing a logical array
– ’length’: the length of the contents of each cell
– ’ndims’: the number of dimensions of the contents of each cell
– ’prodofsize’: the number of elements of the contents of each cell
• cell ein geschachteltes Feld
• log die logische Gr¨
oße true oder false, die angibt, ob func nur eine skalare numerische
Ausgabe hat. Die Standardeinstellung ist true.
Dies wird an einigen Beispiele veranschaulicht:
4 Datenstrukturen
43
function r=Cel2Mat(cellvec,cells,cellind)
% Cel2Mat returns a matrix whose columns are the vectors in a cell.
% V1.1 24.09.1999 Dieter Kilsch
% Cells and elments of each cell to be selected may be specified.
% Vectors in the cells with different length will be filled with 0.
% cellvec
C-V cell vector (vector of cells)
% cells
V
indices of cellvec to be taken.
[DEF.: all]
%
0: all
% cellind
V
indices in each cell to be taken.
[DEF.: all]
% r
M
resulting matrix
%-------------------------------------------------------------------if(nargin<2); cells=0; end;
if(nargin==3);
for i=1:length(cellvec); cellvec{i}=cellvec{i}(cellind);end;
end;
if(all(cells==0)); cells=[1:length(cellvec)]; end;
anzcells=length(cells);
%
%
maximal length of the cells’ content and initializing the result
rr=0; for i=1:anzcells; rr=max(rr,length(cellvec{cells(i)})); end;
if anzcells==0;
r=[];
else
if ischar(cellvec{cells(1)});
r=repmat(r,rr,anzcells);
r=’ ’; else r=0; end;
for i=1:anzcells;
rr=cellvec{cells(i)};
if iscell(rr) & length(rr)==1; rr=rr{1}; end;
r(1:length(rr),i)=rr’;
end;
end;
Alg. 4.3: Die Funktion Cel2Mat
>> cellfun(’isreal’,{[-1:10], [2 4 6], []})
ans =
1
1
1
>> cellfun(@mean,{[-1:10], [2 4 6], []})
ans =
4.5000
4.0000
NaN
>> cellfun(@(x) sum(x.^2),{[-1:10] [2 4 6] []})
ans =
386
56
0
>> cellfun(@(x) x.^2,{[-1:10], [2 4 6], []},’UniformOutput’,false)
ans =
[1x12 double]
[1x3 double]
[]
>> cellfun(@num2str,{[-1:10], [2 4 6], []},’UniformOutput’,false)
44
I Softwareentwicklung
ans =
[1x46 char]
’2 4 6’
’’
>> cellfun(@(x) x.^2,{[-1:10], [2 4 6], [2 3]})
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set ’UniformOutput’ to false.
>> cellfun(@(x) x.^2,{[-1:10], [2 4 6], []},’UniformOutput’,true)
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set ’UniformOutput’ to false.
Weitere Beispiele und Erweiterungen sind in der MatLab-Hilfe enthalten.
4.D.3
Mengen geschachtelter Felder
Alle in Tab. 4.2 gelisteten Funktionen k¨
onnen auch auf Mengen geschachtelter Felder angewandt
werden:
>> a={’alpha’ ’beta’ ’gamma’};
>> b={’gamma’ ’delta’};
>> c=union(a,b)
c =
’alpha’
’beta’
’delta’
>> ismember(’alpha’,a)
ans =
1
’gamma’
Damit steht eine gute Datenstruktur zum Verwalten und Verarbeiten von Mengen jeder Art zur
Verf¨
ugung. Auch hier kann die cellfun-Funktion wieder gut eingesetzt werden:
• cellfun(’length’,c) berechnet die L¨
ange jedes Elements der Menge c,
• max(cellfun(’length’,c)) die L¨
ange des gr¨
oßten Elements und
• sum(cellfun(’length’,c)) die Summe u
angen der Elemente in c.
¨ ber alle L¨
Ich schließe zwei weitere Funktionen an, die beim Arbeiten mit geschachtelten Feldern helfen. Ich
habe sie von APL importiert, sie stehen auf meiner Internetseite zur Verf¨
ugung.5
• TakeInCel(c,2) nimmt die ersten beiden Elemente jedes Elements in c:
ans =
’al’
’be’
’de’
’ga’
• TakeInCel(c,-3) nimmt die letzten drei Elemente jedes Elements in c:
ans =
’pha’
’eta’
’lta’
’mma’
• DropInCel unterdr¨
uckt Werte am Anfang oder Ende einer Zelle:
>> DropInCel(c,2)
ans =
’pha’
’ta’
’lta’
’mma’
>> DropInCel(c,-3)
ans =
’al’
’b’
’de’
’ga’
5
Auch eine Implementierung der APL-Funktion Each, die vergleichbar zu cellfun arbeitet, ist
dort enthalten.
4 Datenstrukturen
45
function r=TakeInCel(cells,varargin)
%TakeInCel takes starting or trailing (vargin<0) elements in each cell.
% V1.1 02.11.2005 Dieter Kilsch
(DK051026)
% The elements in vargin are fifo-processed.
% cells
A. input cells
% vargargin V
>0 number of starting elements to be taken
%
<0 number of trailing elements to be taken
% r
A. resulting cell vector
% local variables
% i,j
S
Schleifenz¨
ahler
% ntr
S
neutral element
%-------------------------------------------------------------------------if length(varargin)==0 r=cells;
else
r=reshape(cells,1,prod(size(cells)));
for j=Cel2Num(varargin) for i=1:length(r);
if length(r{i})<abs(j)
if isnumeric(r{i}) ntr=0; else ntr=’ ’; end;
if j<0 r{i}=[repmat(ntr,1,-j-length(r{i})),r{i}];
else
r{i}=[r{i},repmat(ntr,1,j-length(r{i}))]; end
elseif j<0 r{i}=r{i}(end+j+1:end);
else r{i}=r{i}(1:j);
end;end;end;
r=reshape(r,size(cells));
end
Alg. 4.4: Die Funktion TakeInCel
function r=DropInCel(cells,varargin)
%DropInCel drops starting or trailing (vargin<0) elements in each cell.
% V1.1 02.11.2005 Dieter Kilsch
(DK051026)
% The elements in vargin are fifo-processed.
% cells
A. input cells
% vararggin V
>0 number of starting elements to be dropped
%
<0 number of trailing elements to be dropped
% r
A. resulting cell vector
% local variables
% i,j
S
Schleifenz¨
ahler
%-------------------------------------------------------------------------if length(varargin)==0 r=cells;
else
r=reshape(cells,1,prod(size(cells)));
for j=Cel2Num(varargin) for i=1:length(r);
if length(r{i})<abs(j) r{i}=r{i}(1:0);
elseif j<0 r{i}=r{i}(1:end+j);
else r{i}=r{i}(j+1:end);
end;end;end;
r=reshape(r,size(cells));
end
Alg. 4.5: Die Funktion DropInCel
46
I Softwareentwicklung
4.E
4.E.1
Darstellung von Funktionen
Polynome
Polynome werden durch ihre Koeffizienten dargestellt, die in einem Vektor aufsteigend oder absteigend gespeichert werden. F¨
ur die Manipulation von Polynomen stellt MatLab einige Funktionen
zur Verf¨
ugung. Hierbei sind die Koeffizienten absteigend zu speichern, pol=[1 7 -1] stellt also
p(x ) = x 2 + 7x − 1 dar. Enthalten die Vektoren pol und qol die Koeffizienten zweier Polynome p
und q, so berechnen
• polyval(pol,2) den Wert p(2),
• roots(pol) die Nullstellen von p(x ) n¨
aherungsweise,6
• conv(pol,qol) die Koeffizienten des Produkts p(x ) · q(x ),
• [s,r]=deconv(p,q) die Division mit Rest p(x ) = s(x ) · q(x ) + r (x ), wobei der Grad von r
kleiner als der Grad von q ist,
• polyder(pol) die Koeffizienten der Ableitung p ′ (x ),
• polyint(pol) die Koeffizienten der Stammfunktion
p(x ) mit der Integrationskonstanten 0,
MatLab bietet auch eine Funktion polyfit, die f¨
ur eine gegebene St¨
utzstellenmenge {(xi , yi ) | i =
0, . . . , n} die Koeffizienten desjenigen Polynoms p des Grades n bestimmt, das an allen Stellen
p(xi ) = yi (i = 0, . . . , n) erf¨
ullt.
4.E.2
Funktionsgriff (function handle)
Ein Funktionsgriff erlaubt, einer von MatLab bereitgestellten oder selbstdefinierten Funktion einen
Namen zu geben:
Beispiel 4.15 (Funktionsgriff )
(a) Mit dem Ausdruck p = @(x) polyval([3 2 1], x) wird der Funktionsgriff p der Funktion
p(x ) = 3x 2 + 2x + 1 vereinbart.
¨
(b) Die in den Ubungen
besprochenen Funktion PolHor ist feld-f¨
ahig programmiert. Damit liefert die Definition p = @(x) PolHor([1 2 3], x) ebenfalls den Funktionsgriff p zur selben
Funktion.
Zu beachten ist, dass polyval die Koeffizienten des Polynoms absteigend ben¨
otigt, PolHor dagegen
aufsteigend.
F¨
ur beide Beispiele liefert der Aufruf p([-1 0 1]) die Werte des Polynoms p(x ) an den Stellen
−1, 0, 1, s. Abb. 4.6. Der Ausdruck fplot(p,[-5,5]) zeichnet diese Funktion u
¨ ber dem Intervall
[−5, 5], s. Abb. 4.7.
4.E.3
Einbinden von Grafiken in Textsystem
MatLab erlaubt das Speichern von Funktionsgrafen in verschiedenen Formaten, die je nach zu speicherndem Inhalt und verwendetem Textsatzsystem unterschiedlich gut eignen:
• jpg ist hervorragend zum Speichern von Fotodateien geeignet, sie werden aber verlustbehaftet
komprimiert. Dieses Format ist nicht geeignet, Funktionsgrafen oder Text zu speichern, weil
die Kompression die Farbinformationen umgebungsabh¨
angig speichert und damit streut. Die
Darstellung eines Funktionsgrafen wirkt dadurch unscharf und in seiner Umgebung k¨
ornig.
A
Dieses Format kann in MS-Word- und mit pdfL TEX-Dokumente eingebunden werden.
• emf (enhanced meta file) ist ein MS-Format, die Weiterentwicklung von wmf (Windows metafile). Es kann f¨
ur Word genutzt werden, liefert aber nicht die besten Ergebnisse.
6
In [42] ist eine Beispiel angegeben, das auf die Rundungsfehler dieser Berechnung ausdr¨
uckliche hinweist!
4 Datenstrukturen
47
90
>> p = @(x) PolHor([1 2 3], x)
p =
@(x)PolHor([1,2,3],x)
>> p(3)
ans =
34
>> p([-1 0 1])
ans =
2
1
6
>> fplot(p,[-5,5])
Abb. 4.6: MatLab-Protokoll: Funktionsgriff
80
70
60
50
40
30
20
10
0
−5
0
5
Abb. 4.7: Graf der Funktion p(x ) = 1 + 2x + 3x 2
• png (portable network graphics file) ist ein Format mit verlustfreier Datenkompression, das
vom WWW-Konsortium anerkannt ist und von Webbrowsern unterst¨
utzt wird. Es liefert
besserer Ergebnisse und kann in MS-Word-, MS-Powerpoint und mit pdfLATEX eingebunden
werden.
• eps (encapsulated postscript) ist ein vektorf¨
ahiges Grafik-Format von Adobe, das mit LATEX
und MS-Word genutzt werden kann, es liefert hier die besten Ergebnisse. Die Darstellung in
MS-Powerpoint ist dagegen nicht gut. MatLab speichert die Achsbeschriftungen zum Teil nicht
vollst¨
andig. Mit ghostview (und ghostscript) k¨
onnen eps-Dateien in pdf- und png-Dateien
konvertiert werden.
• pdf (portable document format) ist ein Adobe-Format. Es kann in pdfLATEX eingebunden
werden und liefert Ergebnisse in gleicher Qualit¨
at wie eps.
In diesem Skript sind alle MatLab-Grafiken als eps-Dateien mit LATEX eingebunden.
MatLab-Sitzungen sollten nicht als Grafiken sondern als Text in eine Dokumentation u
¨ bernommen werden. Dieser Test muss zu besseren Lesbarkeit in einem nicht-proportionalen Font (gleiche
Breite aller Zeichen) gesetzt werden.
48
I Softwareentwicklung
§ 5 Formatieren, Dateiein- und -ausgabe
Ich gehe auf Textdateien ein und die Methode, diese zu lesen und zu schreiben. Das Lesen und
Schreiben von Excel-Dateien ist in der MatLab-Hilfe beschrieben. Unter Formatieren versteht man
allgemein die Wandlung numerischer Werten in Textformat. Im ersten Teil werden wir aus numerischen Feldern Textfelder kreieren und umgekehrt.
Alle hier erw¨
ahnten Funktionen sind ausf¨
uhrlich in der MatLab-Dokumentation beschrieben.
5.A
Formatieren numerischer Werte (Kodieren, Verschlu
¨ sseln)
5.A.1
Kodierungsfunktionen
Festlegung 5.1 Zum Konvertieren stehen Funktionen zur Verf¨
ugung, die in Tab. 5.1 zusammengestellt sind.
Tab. 5.1: Konvertierungsroutinen (Kodierung)
Funktion
Konvertierung (Kodierung)
Definitionsbereich
char
nach unten gerundete pos. Zahlen zu ASCII-Zeichen
(sinnvoll im Bereich [0,255])
Zahlen zu Text des gerundeten ganzen Werts
Zahlen zu Text, ggf. mit Formatkontrolle
Zahlen zu MatLab-ausf¨
uhrbarem Ausdruck
doppeltgenaue zu einfach genauen Gleitkommazahlen
Nicht-negative Zahlen zu Hexadezimal-Format
Nicht-negative Zahlen zu Bin¨
arformat
Nicht-negative Zahlen zu angegebenem Format
[0, 65535]
int2str
num2str
mat2str
single
dec2hex
dec2bin
dec2base
[-realmax,
[-realmax,
[-realmax,
[-realmax,
[0, 252 − 1]
[0, 252 − 1]
[0, 252 − 1]
realmax]
realmax]
realmax]
realmax]
Beispiel 5.2
>> char(252)
ans =
u
¨
>> int2str(pi)
ans =
3
>> dec2bin(122)
ans =
1111010
5.A.2
>> dec2hex(127)
ans =
7F
>> dec2base(127,8) % Octalzahl
ans =
177
>> mat2str([1 2;3 4;5 6])
ans =
[1 2;3 4;5 6]
Formatkontrolliertes Kodieren
Festlegung 5.3 Die Art der Formatierung wird durch ein Formatierungszeichen (Spezifikator)
festgelegt, siehe Tab. 5.2. Die vollst¨
andige Festlegung der Formatierung gibt die Breite des Textfeldes
und eventuell die Anzahl der die Anzahl der Nachkommastellen an.
’%12.5f’ benutzt insgesamt 12 Zeichen, davon 5 nach dem Dezimalpunkt. F¨
ur den ganzen Anteil
bleiben wegen des Vorzeichens 5 Stellen. MatLab erh¨
oht die Breite, wenn die gew¨
ahlte Breite zu
klein ist. F¨
ur beides gelten Standardwerte, wenn sie nicht angegeben werden.
In der Formatangabe darf zus¨
atzlich beliebiger Text angegeben werden, der in die Ausgabe u
¨bernommen wird.
5 Formatieren, Dateiein- und -ausgabe
49
Tab. 5.2: Formatierungszeichen
Spezifikator
c
d
e
E
f
g
G
i
o
s
u
x
X
Bedeutung
Textzeichen
ganze Zahl oder Dezimalzahl in Exponentialnotation (e)
Dezimalzahl in Exponentialnotation (e)
Dezimalzahl in Exponentialnotation (E)
Dezimalzahl mit Dezimalpunkt
Dezimalzahl, ohne u
ussige Nullen, Exponent (e)
¨ berfl¨
Dezimalzahl, ohne u
ussige Nullen, Exponent (E)
¨ berfl¨
ganze Zahl
vorzeichenlos Oktalzahl,
mit Breitenangabe aber wie g
Zeichenkette
Dezimalzahl in Exponentialnotation (e) nur bei Bedarf
Hexadezimalzahl mit Kleinbuchstaben: 0-9,a-f
Hexadezimalzahl mit Großbuchstaben: 0-9,A-F
Beispiel 5.4
(a) >> sprintf(’%d, %d, %e, %E, %f, %g, %o, %u’,[1.5,[11:17]])
ans =
1.500000e+000, 11, 1.200000e+001, 1.300000E+001, 14.000000, 15, 20, 17
(b) >> sprintf(’%5.2d, %5.2d, %5.2e, %5.2E, %5.2f, %5.2g, %5.2o, %5.2u’,-[1.5,[11:17]])
ans =
-1.50e+000,
-11, -1.20e+001, -1.30E+001, -14.00,
-15, -1.60e+001, -1.70e+001
(c) >> sprintf(’%o, %x, %X, ’,[11:18])
ans =
13, c, D, 16, f, 10, 21, 12,
Reichen die Formatangaben nicht aus, so werden sie zyklisch (von vorne) nochmals benutzt.
(d) >> sprintf(’Der Verlust am %d.%g.%i betrug %4.1f%%.’,[3 6 1998 11.3])
ans =
Der Verlust am 3.6.1998 betrug 11.3%.
¨
Ganze Zahlen k¨onnen mit den Spezifikatoren d, g oder i ausgegeben werden. Zur Anderung
der
F¨
ullzeichen und Ausgabe der Vorzeichen s. 5.7.
Festlegung 5.5 (Variable Formatl¨
ange) * kennzeichnet eine variable Formatl¨
ange. Sie kann
an jeder Stelle statt einer Zahlenangabe stehen. Festgelegt wird sie durch zus¨
atzliche Variable in der
Ausgabeliste:
>> sprintf(’%*e, %*.*E, %*.*f’,10,1.5,5,2,4.7,5,2,5.7)
ans =
1.500000e+000, 4.70E+000, 5.70
Bemerkung 5.6
(a) Analog arbeiten die Funktionen
assert: Ausgabe einer Fehlermeldung abh¨
angig von einer logischen Bedingung.
error: Ausgabe einer Fehlermeldung.
warning: Ausgabe einer Warnung.
Die genaue Arbeitsweise dieser Funktionen ist in der MatLab-Dokumentation angegeben.
50
I Softwareentwicklung
(b) Die Reihenfolge der Ausgabe kann mit Hilfe des $-Zeichens angegeben werden:
>> sprintf(’%2$d, %4$e, %1$E, %3$f, %5$g’,11,12,13,14,15)
ans =
12, 1.400000e+001, 1.100000E+001, 13.000000, 15
Hierbei muss jeder Ausgabewert in der Ausgabeliste stehen, Vektoren werden nicht aufgebrochen, sie sind nicht erlaubt.
Festlegung 5.7 (Zeilen- und Ausrichtungskontrolle)
(a) Tab. 5.3 enth¨
alt Kontrollzeichen, mit denen die schreibmaschinen¨
ublichen Umbr¨
uche und
R¨
uckschritte erm¨
oglicht werden, wobei vor allem \n von Bedeutung ist.
(b) Tab. 5.4 enth¨
alt Zeichen f¨
ur die Kontrolle der Ausrichtung. Die Standardausrichtung ist
rechtsb¨
undig, das Vorzeichen + entf¨
allt.
>> sprintf(’Der Gewinn am %02d.%02g.%i \nbetrug %+4.1f%%.’,[3 6 1998 11.3])
ans =
Der Gewinn am 03.06.1998
betrug +11.3%.
Hierbei entsteht keine Textmatrix, sondern ein Textvektor, der bei der Ausgabe von \n am
Bildschirm einen Zeilenumbruch erzeugt.
\n und \r erzeugen am Bildschirm einen Zeilenumbruch und ein CARRIAGE RETURN. Das folgende Zeichen wird also am Anfang der n¨
achsten Zeile ausgegeben.
Tab. 5.3: Spezielle Formatierungszeichen
Spezifikator
\b
\f
\n
\r
\t
\\
%%
5.A.3
Bedeutung
Tab. 5.4: Spezielle Formatierungszeichen
Spezifikator
BACKSPACE: Zur¨
ucksetzen
FORM FEED: Seitenumbruch
LINE FEED: Zeilenumbruch
CARRIAGE RETURN: Zeilenanfang
TAB: horizontaler Tabulator
\
%
+
0
Bedeutung
linksb¨
undig
Vorzeichen immer ausgeben
f¨
uhrende Nullen ausgeben
Formatieren auf der MatLab-Oberfl¨
ache
Die Ausgabe auf der MatLab-Oberfl¨
ache wird durch den format-Befehl festgelegt:
(a) format short: Gleitkommazahlen mit 5 Ziffern
(b) format long : Einfach-genaue Gleitkommazahlen mit 5 Ziffern, doppelt-genaue mit 15 Ziffern
(c) format short e: Gleitkommazahlen mit 5 Ziffern im Exponentialformat
(d) format long e: Einfach-genaue Gleitkommazahlen 7 Ziffern, doppelt-genaue mit 15 Ziffern
im Exponentialformat
(e) format short g: Optimum der Ausgabe: Fest- oder Gleitkommazahl mit 5 Ziffern.
(f) format long g: Optimum der Ausgabe: Fest- oder Gleitkommazahl mit 5 (einfach-genau)
oder 15 Ziffern (doppelt-genau).
(g) format short eng: Ingenieur-Format: Gleitkommazahlen mit 4 Nachkommastellen, also mindestens 5 Ziffern, der Exponent ist ein Vielfaches von 3
5 Formatieren, Dateiein- und -ausgabe
51
(h) format long eng: Ingenieur-Format: Gleitkommazahlen mit 16 signifikanten Stellen, der Exponent ist ein Vielfaches von 3
(i) format hex: Ausgabe in Hexadezimalformat
(j) format compact: unterdr¨
uckt Leerzeilen nach Ergebnisausgabe
(k) format loose: erzeugt Leerzeilen nach Ergebnisausgabe
5.B
5.B.1
Lesen numerischer Werte (Dekodieren, Entschlu
¨ sseln)
Dekodierungsfunktionen
Festlegung 5.8 Zum Konvertieren stehen Funktionen zur Verf¨
ugung, die in Tab. 5.5 zusammengestellt sind.
Tab. 5.5: Konvertierungsfunktionen (Dekodierung)
Funktion
Konvertierung zu numerischen Werten von
uintn
str2num
str2double
hex2num
hex2dec
bin2dec
base2dec
Text
Text
Text
Text
Text
Text
Text
zu ASCII-Kode (n=8, 16, 32, 64)
zu Zahlen, keine geschachtelten Felder
zu Zahlen, auch geschachtelte Felder
mit 16 Hexadezimalziffern zu IEEE-Gleitkommazahl
mit Hexadezimalziffern zu nicht-negativer Dezimalzahl
mit Bin¨
arziffern zu nicht-negativer Dezimalzahl
mit Ziffern in angeg. Zahlensystem zu nicht-negativer Dezimalzahlen
Beispiel 5.9
>> uint8(’16’)
ans =
49
54
>> 16==str2num(’16’)
ans =
1
>> str2double({’16’ ’17’})
ans =
16
17
>> base2dec(’12’,3)
ans =
5
5.B.2
>> hex2num(’3FF0000000000000’)
ans =
1
>> hex2num(’BFF0000000000000’)
ans =
-1
>> hex2num(’FFFFFFFFFFFFFFFF’)
ans =
NaN
Formatkontrolliertes Dekodieren
Dies ist die Umkehrung der Kodierung, wie sie in 5.A.2 beschrieben ist. Die MatLab-Dekodierungsfunktion heißt sscanf. Eine vollst¨
andige Beschreibung dieser Funktion ist in der MatLabDokumentation enthalten, ich gehe nur auf die wichtigsten Punkte ein.
Festlegung 5.10 (Vollst¨
andiger Aufruf von sscanf) In [au,za,fe,ne]=sscanf(te,fo,gr)
bedeuten
te: zu dekodierender Text,
fo: Formatangabe nach 5.2. Es gelten:
(a) Bei Angabe einer Feldbreite wird diese Anzahl an Zeichen dekodiert.
52
I Softwareentwicklung
gr:
au:
za:
fe:
ne:
(b) Bei Fehlen einer Feldbreite wird bis zum n¨
achsten Leerzeichen dekodiert.
(c) Bei Angabe eines * (variable Feldbreite) wird der Text bis zum n¨
achsten Leerzeichen
u
¨bersprungen.
(optional) Anzahl der zu lesenden Zeichen. Dies kann eine positive Zahl, aber auch inf (Lese
bis zum Ende des Texts), und [m,n] (Lese m n) Zeichen und f¨
ulle ein Matrix mit bis zu m
Zeilen spaltenweise, n==inf ist erlaubt).
Der Standardwert ist inf
numerische Werte,
(optional) Anzahl dekodierter Werte,
(optional) Fehlertext im Fehlerfall,
(optional) Index des ersten nicht-gelesenen Zeichens in te.
Ist te eine Textmatrix, so wird diese spaltenweise gelesen und dekodiert:
Beispiel 5.11
>> format compact
A =
abc 46 6 ghi
def 7 89 jkl
>> sscanf(A, ’%*s %d %d %*s’)
ans =
476
869
Das Ergebnis ist ein Spaltenvektor. Der erste Versuch, durch Transponieren das gew¨
unschte Ergebnis zu erhalten, scheitert:
>> sscanf(A’, ’%*s %d %d %*s’)
ans =
46
6
89
Zwischen dem Textende in der ersten Zeile und dem Textanfang der zweiten steht kein Leerzeichen. MatLab setzt die beiden Zeilen einfach hintereinander, so dass f¨
ur den zweiten Textteil (%s)
’ghidef’ genommen wird. Die Formatangabe wird wieder von vorne begonnen und ’7’ ist der
n¨
achste Text, der u
¨ bersprungen wird.
Es muss als eine Spalte von Leerzeichen am Anfang oder Ende hinzugef¨
ugt werden:
>> sscanf([A,[’ ’]’]’, ’%*s %d %d %*s’)
ans =
46
6
7
89
Das sofortige Dekodieren in eine (2,2)-Matrix ist m¨
oglich mit einer Gr¨
oßenangabe:
>> sscanf([A,[’ ’]’]’, ’%*s %d %d %*s’,[2 inf])
ans =
46
7
6
89
5.B.3
Funktionen zum Bearbeiten von Textvektoren
Ich stelle wichtige Funktionen zusammen, die das Suchen und extrahieren in Textvektoren erm¨
oglichen:
5 Formatieren, Dateiein- und -ausgabe
53
Tab. 5.6: Bearbeiten von Textvariablen
Funktion
Beschreibung
findstr
strmatch
strtok
strrep
Anfangsposition des
Anfangsposition des
Extrahiert den Text
Sucht einen Textteil
gesuchten Texts
gesuchten Texts, auch in geschachtelten Feldern
vor oder zwischen Trennzeichen (Leerzeichen)
und ersetzt ihn durch einen zweiten.
Beispiel 5.12 (strtok)
>> format compact
>> txr=’ aaa bbb ccc’
txr =
aaa bbb ccc
>> while (length(txr)>0); [tx,txr]=strtok(txr), end
tx =
aaa
txr =
bbb ccc
tx =
bbb
txr =
ccc
tx =
ccc
txr =
Empty string: 1-by-0
5.C
5.C.1
Lesen von Textdateien
Die Funktion textread
Eine erste Methode, Daten einzulesen, wird anhand einer Textdatei erl¨
autert, die in der ersten Zeile
den Parameternamen, in der zweiten die Maßeinheit und in den weiteren die Messeinstellungen und
Messwerte enth¨
alt.
Beispiel 5.13 (Einlesen mit Leerzeichen als Trennsymbol)
file = textread(’d:\fachtext\math\math4\skrfeia1.dat’, ’%s’);
liest den Inhalt der Datei d:\fachtext\math\math4\skrfeia1.dat (s. Abb. 5.1) in den geschachtelten Spaltenvektor file. Als Trennsymbol wird das Leerzeichen genutzt, Leerzeichen am Anfang
einer Zeile werde unterdr¨
uckt. Die Gr¨
oße des Ergebnisses:
>> format compact
>> size(file)
ans =
40
1
Bei sechs Zeilen und sieben Spalten werden eigentlich 42 Zellen erwartet, aber die zweite Zeile
enth¨
alt zwei L¨
ocher“. Es ist sinnvoller, keine Eingabe“ durch ein Sonderzeichen zu markieren,
”
”
wie es in der Datei skrfeia2.dat durch Doppelhochkomma gemacht ist, s. Abb. 5.2. Das Ergebnis
enth¨
alt jetzt 42 Zellen:
>> format compact
>> file=textread(’d:\fachtext\math\math4\skrfeia2.dat’, ’%s’);
>> file=reshape(file,7,6)’
54
I Softwareentwicklung
mess
1
15
16
17
last
N
1
40
4
1
dros
%
0
0
9.523809524
9.523809524
lamb tkra
◦C
0.8
17
1.2
34
0.8
27
0.9
28
zund
◦
11.3
11.3
26.3
30.8
schl
%
36
67.5
46.5
46.5
Abb. 5.1: Die Datei skrfeia1.dat
mess
"
1
15
16
17
last
N
1
40
4
1
dros
%
0
0
9.523809524
9.523809524
lamb tkra
◦C
"
0.8
17
1.2
34
0.8
27
0.9
28
zund
◦
11.3
11.3
26.3
30.8
schl
%
36
67.5
46.5
46.5
Abb. 5.2: Die Datei skrfeia2.dat
file =
’mess’
’\grqq{}
’1’
’15’
’16’
’17’
Die Zeilen 3
’last’
’dros’
’lamb’
’tkra’
’N’
’%’
’\grqq{}
’1’
’0’
’0.8’
’17’
’40’
’0’
’1.2’
’34’
’4’
’9.523809524’
’0.8’
’27’
’1’
’9.523809524’
’0.9’
’28’
bis 6 werden in numerische Werte gewandelt:
>> cellfun(@str2num,file(3:end,:))
ans =
1
1
0
0.8
17
15
40
0
1.2
34
16
4
9.5238
0.8
27
17
1
9.5238
0.9
28
>> file(3:end,:)=cellfun(@str2num,file(3:end,:),’UniformOutput’,0)
file =
’mess’
’last’
’dros’
’lamb’
’tkra’
’zund’
’schl’
’\grqq{}
’N’
’%’
’\grqq{}
’◦ C’
’◦ ’
[
1]
[
1]
[
0]
[ 0.8]
[ 17]
[11.3]
[ 36]
[ 15]
[ 40]
[
0]
[ 1.2]
[ 34]
[11.3]
[67.5]
[ 16]
[
4]
[9.5238]
[ 0.8]
[ 27]
[26.3]
[46.5]
[ 17]
[
1]
[9.5238]
[ 0.9]
[ 28]
[30.8]
[46.5]
’zund’
’◦ C’
’11.3’
’11.3’
’26.3’
’30.8’
11.3
11.3
26.3
30.8
’schl’
’◦ ’
’36’
’67.5’
’46.5’
’46.5’
’%’
36
67.5
46.5
46.5
’%’
Alternativ k¨
onnen die Spalten durch ein Trennzeichen gekennzeichnet werden und dann mit
Angabe des Trennzeichens eingelesen werden. Die Datei skrfeia1.csv enth¨
alt ;“ als Trennzeichen,
”
s. Abb. 5.3. Das Ergebnis enth¨
alt jetzt 42 Zellen, die jedoch alle Leerzeichen am Anfang und Ende
enthalten k¨
onnen:
Beispiel 5.14 (Einlesen einer csv-Datei)
>> file = textread(’d:\fachtext\math\math4\skrfeia1.csv’, ’%s’,’delimiter’,’;’);
>> reshape(file,7,6)’
ans =
’mess ’
’last ’
’dros
’
’lamb ’
’tkra ’
’zund ’
’schl’
’’
’N
’
’%
’
’’
’◦ C
’
’◦
’
’%’
’1
’
’1
’
’0
’
’0.8 ’
’17
’
’11.3 ’
’36’
’15 ’
’40
’
’0
’
’1.2 ’
’34
’
’11.3 ’
’67.5’
’16 ’
’4
’
’9.523809524 ’
’0.8 ’
’27
’
’26.3 ’
’46.5’
’17 ’
’1
’
’9.523809524 ’
’0.9 ’
’28
’
’30.8 ’
’46.5’
Die Daten k¨
onnen auch zeilenweise eingelesen und dann weiter verarbeitet werden:
5 Formatieren, Dateiein- und -ausgabe
mess ;
;
1
;
15 ;
16 ;
17 ;
last
N
1
40
4
1
;
;
;
;
;
;
dros
%
0
0
9.523809524
9.523809524
55
;
;
;
;
;
;
lamb ;
;
0.8 ;
1.2 ;
0.8 ;
0.9 ;
tkra ;
;
17
;
34
;
27
;
28
;
◦C
zund ;
;
11.3 ;
11.3 ;
26.3 ;
30.8 ;
◦
schl
%
36
67.5
46.5
46.5
Abb. 5.3: Die Datei skrfeia1.csv
Beispiel 5.15 (Zeilenweises Einlesen)
>> file = textread(’d:\fachtext\math\math4\skrfeia1.dat’, ’%s’,’delimiter’,’\n’),
file =
’mess last
dros
lamb tkra
zund schl ’
◦
◦
’N
%
C
%’
’1
1
0
0.8
17
11.3 36’
’15
40
0
1.2
34
11.3 67.5’
’16
4
9.523809524 0.8
27
26.3 46.5’
’17
1
9.523809524 0.9
28
30.8 46.5’
5.D
Lesen ge¨
offneter Dateien
Der Nachteil, die Anzahl der Spalten wissen zu m¨
ussen, kann aufgehoben werden, wenn zeilenweise
verarbeitet wird. Obwohl dies mit textread nach 5.15 m¨
oglich ist, will ich hier eine andere Methode
vorstellen. Zum Bearbeiten ge¨
offneter Dateien gibt es weitere flexible Funktionen.
¨
Verfahren 5.16 (Offnen
und Schließen von Dateien)
(a) fi=fopen(’d:\fachtext\math\math4\skrfeia2.dat’)
offnet die Datei im Lesemodus: Schreiben ist nicht m¨
oglich, RO. Die positive Zahl fi ist
¨
der Dateiidentifikator (Dateigriff). Gibt fopen eine negative Zahl zur¨
uck, so ist ein Fehler
aufgetreten, fi ist der Fehlerkode.
(b) fi=fopen(’d:\fachtext\math\math4\skrfeia2.dat’,n)
offnet die Datei mit Angabe des Modus, s. Tab. 5.7
¨
(c) fclose(fi) schließt die Datei.
(d) fgetl(fi) liest die n¨
achste Zeile,
(e) fscanf(fi,fo) liest den Rest der Datei unter der Formatkontrolle von fo.
Tab. 5.7: Formatierungszeichen
Modus
Beschreibung
Abk¨
urzung
’r’
’w’
’a’
Nur Lesen
Schreiben, ggf. erzeugen
am Ende erg¨
anzen, ggf. neu erzeugen
RO
W
A
Beispiel 5.17 (Einlesen der Datei skrfeia2.dat)
>> format compact
>> fi = fopen(’d:\fachtext\math\math4\skrfeia2.dat’),
fi =
3
>> txr=fgetl(fi)
56
I Softwareentwicklung
txr =
mess last
dros
lamb tkra
zund schl
>> c=cell(0,0); while (length(setdiff(txr,’ ’))>0);[tx,txr]=strtok(txr); c=[c,{tx}];
>> txr=fgetl(fi)
txr =
◦
◦
"
N
%
"
C
%
>> d=cell(0,0); while (length(setdiff(txr,’ ’))>0);[tx,txr]=strtok(txr); d=[d,{tx}];
>> c=[c;d]
c =
’mess’
’last’
’dros’
’lamb’
’tkra’
’zund’
’schl’
’\grqq{}
’N’
’%’
’\grqq{}
’◦ C’
’◦ ’
’%’
>> d=fscanf(fi,’%f’);
>> fclose(fi)
ans =
0
>> d=reshape(d,size(c,2),(length(d)/size(c,2)));d=d’
d =
1
1
0
0.8
17
11.3
15
40
0
1.2
34
11.3
16
4
9.5238
0.8
27
26.3
17
1
9.5238
0.9
28
30.8
>> c=[c;num2cell(d)]
c =
’mess’
’last’
’dros’
’lamb’
’tkra’
’zund’
’schl’
’\grqq{}
’N’
’%’
’\grqq{}
’◦ C’
’◦ ’
’%’
[
1]
[
1]
[
0]
[ 0.8]
[ 17]
[11.3]
[ 36]
[ 15]
[ 40]
[
0]
[ 1.2]
[ 34]
[11.3]
[67.5]
[ 16]
[
4]
[9.5238]
[ 0.8]
[ 27]
[26.3]
[46.5]
[ 17]
[
1]
[9.5238]
[ 0.9]
[ 28]
[30.8]
[46.5]
5.E
end
end
36
67.5
46.5
46.5
Schreiben in Textdateien
Beim Schreiben in Dateien muss die Dateien zum Schreiben ge¨
offnet werden:
fi = fopen(’d:\fachtext\math\math4\skrfeia3.dat’,’w’)
Geschrieben wird mit der Funktion fprintf, deren Syntax bis auf den Dateigriff der Syntax der
Funktion sprintf entspricht. Im folgenden Beispiel werden drei Spalten zeilenweise in die Datei
d:\fachtext\math\math4\skrfeia3.dat geschrieben:
Beispiel 5.18
>>
>>
>>
>>
fi = fopen(’d:\fachtext\math\math4\skrfeia3.dat’,’w’);
text={’Messnummer’ ’Belastung’ ’Drosselklappen¨
offnung’};
for i=1:length(text); fprintf(fi,’%25s (%4s) [%1s]: %5g %5g %5g %5g\n’,text{i},c{:,i});end
fclose(fi);
Das Ergebnis ist in Abb. 5.4 enthalten.
Messnummer (mess) ["]:
Belastung (last) [N]:
Drosselklappen¨
offnung (dros) [%]:
1
1
0
15
16
17
40
4
1
0 9.52381 9.52381
Abb. 5.4: Die Datei skrfeia3.dat
5.F
Lesen und Schreiben in Excel-Dateien
5.19 (Einlesen einer Excel-Datei) Der Ausdruck
[numdat,text,rohdat]=xlsread(datei,blatt,bereich)
liest Daten aus einer Excel-Datei ein. Dabei sind
5 Formatieren, Dateiein- und -ausgabe
57
• numdat die eingelesenen numerischen Daten als numerisches Feld,
• text die eingelesenen Textfelder als geschachteltes Feld,
• rohdat alle Felder als geschachteltes Feld,
• datei der Dateiname als Textvektor,
• blatt der Name des Tabelle (Blatt) als Textvektor oder Nummer des Blatts als Zahl,
• bereich der Bereich in Excel-Format, z.B.: ’a2:d5’.
blatt und bereich k¨
onnen im Aufruf fehlen. Die Standard-Werte sind 1 f¨
ur blatt und alles“ f¨
ur
”
bereich.
5.20 (Schreiben einer Excel-Datei) xlswrite schreibt numerische Felder oder geschachtelte
Felder in Excel. Der Ausdruck
[erfolg,meldung]=xlswrite(datei,feld,blatt,bereich)
schreibt Daten in die Excel-Datei datei. Dabei sind
• erfolg gleich 1 bei erfolgreichem Schreiben, andernfalls 0,
• meldung bei nicht erfolgreichem Schreiben die Fehlermeldung als Verbund,
• feld die zu schreibenden Daten als geschachteltes Feld,
• datei, blatt und bereich werden wie bei xlsread benutzt, einschließlich der Standardwerte.
Kann bei drei Eingabeparametern der dritte als Bereich interpretiert werden, so wird der Inhalt
von feld auf das erste Blatt (Standard f¨
ur blatt) in den angegebenen Bereich geschrieben.
Ist der angegebene Bereich kleiner als die Gr¨
oße des Felds, so wird nur der angegebene Bereich
gef¨
ullt. Ist der angegebene Bereich gr¨
oßer als die Gr¨
oße des Feldes, so wird bei Gr¨
oße 1 des Feldes
feld jedes Feld des Bereichs mit diesem Wert gef¨
ullt. Andernfalls werden die u
ahligen Felder
¨ berz¨
mit #N/A“ gef¨
ullt.
”
Beispiel 5.21 >> tt=[num2cell(reshape([1:10],5,2)’);{’alpha’ ’beta’ ’gamma’ ’delta’ ’epsil
tt =
[
1]
[
2]
[
3]
[
4]
[
5]
[
6]
[
7]
[
8]
[
9]
[
10]
’alpha’
’beta’
’gamma’
’delta’
’epsilon’
>> xlswrite(’c:\temp\beispiel.xlsx’,tt,’B1’,’a1:e3’)
>> x=xlsread(’c:\temp\beispiel.xlsx’,’B1’,’a1:d3’);
>> [x,y]=xlsread(’c:\temp\beispiel.xlsx’,’B1’,’a1:d3’);
>> x
x =
1
2
3
4
6
7
8
9
>> y
y =
’alpha’
’beta’
’gamma’
’delta’
>> [x,y,z]=xlsread(’c:\temp\beispiel.xlsx’,’B1’,’a1:e3’);
>> x
x =
1
2
3
4
5
6
7
8
9
10
>> y
y =
’alpha’
’beta’
’gamma’
’delta’
’epsilon’
>> z
z =
[
1]
[
2]
[
3]
[
4]
[
5]
[
6]
[
7]
[
8]
[
9]
[
10]
58
I Softwareentwicklung
’alpha’
>>
’beta’
’gamma’
’delta’
’epsilon’
6 Programmstrukturen
59
§ 6 Programmstrukturen
6.A
Entstehung eines lauff¨
ahigen Programms
Literatur: Rembold [43, S. 244ff]
Lauff¨
ahige Programme k¨
onnen in rechnerabh¨
angiger Maschinen- oder Assemblersprache oder einer, gr¨
oßtenteils rechnerunabh¨
angigen, h¨
oheren Programmiersprache geschrieben werden. Der vom
¨
Assembler oder einem Ubersetzer
(Compiler) erzeugte Maschinenkode wird durch den Binder ausf¨
uhrbar gemacht, der Lader bringt das Programm zur Ausf¨
uhrung.
6.A.1
Maschinensprache und Assembler
Die heutigen Standardrechner haben eine von-Neumann-Architektur, deren wesentliches Merkmal
darin besteht, dass die Daten und das Programm im Speicher liegen. Damit werden Programme wie
Daten behandelt. Ein lauff¨
ahiges Programm besteht aus im Speicher abgelegtem Maschinenkode,
auch Objekt(kode) genannt. Ein einfacher Rechner besteht nach [29, S. 22ff] aus
(a) Rechnerkern mit Steuerwerk und Rechenwerk,
(b) Speichereinheit
(c) Ein/Ausgabe-Einheit (Verbindung zu Bildschirm, Maus, Tastatur, Drucker, ext. Speicher, . . .)
(d) Bedienkonsole (Kn¨
opfe, Schalter, Anzeige).
Das Rechenwerk enth¨
alt die Register (auch Akkumulator), in denen Rechenoperationen durchgef¨
uhrt werden k¨
onnen. Die Anzahl der Bits der Register ist eine wesentliche Architekturgr¨
oße des
Rechners.
In der Maschinensprache werden alle Operationen (Rechen-, Steuerbefehle, ..) und alle Operanden (Register-, Speicherinhalt, ...) durch Zahlen angegeben. Diese umst¨
andliche Art der Programmierung wurde fr¨
uh durch die Assemblersprache vereinfacht, die die Operatoren nicht mehr durch
Zahlen sondern symbolisch notiert. Diese Sprache wird durch ein Programm, den Assembler, in
Maschinenkode u
¨ bersetzt. Ein Beispiel hierzu steht in [29, S. 22ff].
6.A.2
¨
Ubersetzer
(Compiler)
Das Programmieren in h¨
oheren Sprachen setzt keine Kenntnisse u
¨ ber den Maschinenkode des Rechners voraus, diese Arbeit ist damit zum großen Teil rechnerunabh¨
angig. Der Sprachkode muss nat¨
ur¨
lich in Objekte (Maschinenkode) u
ullt der Ubersetzer
(Compiler).
¨ bersetzt werden, diese Aufgabe erf¨
¨
Manche Programmiersprachen erlauben ein getrenntes Ubersetzen
einzelner Programmteile, die
dann sp¨
ater mit dem Binder zusammengef¨
ugt werden. Bei anderen Sprachen wird das gesamte
Programm auf einmal u
oren Fortran und Modula-2, zur
¨ bersetzt und gebunden. Zur ersten Art geh¨
zweiten Pascal.
¨
Die Arbeitsweise von Ubersetzern
wird zum Beispiel in [43, S. 256ff] beschrieben.
6.A.3
Binder (Task-Builder, Linker)
Der Binder bindet die als Objekte (Maschinenkode) vorliegenden Programmteile zu einem Programm zusammen. Diese Programmteile sind, vgl. 6.B
¨
(a) durch Assembler oder Ubersetzer
entstandene Anwenderprozeduren,
(b) Prozeduren aus Objektbibliotheken,
(c) Systemprozeduren (z.B.: math. Funktionen, Ein/Ausgabe- oder Kommunikationroutinen),
60
I Softwareentwicklung
(d) Aufruf von speicherresidenten Prozeduren,
(e) Schnittstellen zu speicherresidenten Daten (system global common).
Ferner organisiert der Binder das Nachladen von u
¨ berlagerten Programmteilen (Overlay). Das
¨
Uberlagern
von Programmteilen ist notwendig, falls das gesamte Programm gr¨
oßer als ein adressierbaren Teil des Speichers wird. Hierauf wird hier nicht weiter eingegangen.
¨
Bei einigen Programmiersprachen, wie zum Beispiel Pascal, wird das Ubersetzen
und Binden
zusammengefasst. Um dennoch auch hier Maschinensprache mit verarbeiten zu k¨
onnen, erlauben
diese Sprachen in der Regel das Einf¨
ugen von Zeilen in Maschinensprache.
6.A.4
Lader
Der Lader l¨
adt das (in einer Datei vorhandene) Programm in den Speicher und bringt es zur
Ausf¨
uhrung.
Einige Betriebssysteme (DEC: RSX-11M, VAX, VMS) unterteilen das Laden in zwei Phasen:
(a) Das Installieren (Install): Hier wird nicht das gesamte Programm sondern lediglich der Programmkopf geladen. Der Programmkopf enth¨
alt den Programmnamen und weitere Informationen zur Konfiguration, die beim Installieren festgelegt werden k¨
onnen.
Unter Windows entspricht das Installieren ohne das Programm sofort auszuf¨
uhren, der SchnellstartOption.
(b) Das Ausf¨
uhren (Run, Execute): Der Programmrumpf wird geladen, das Programm wird ausgef¨
uhrt.
6.A.5
Interpreter
¨
Ubersetzte
Programme werden vor dem Ausf¨
uhren insgesamt u
¨ bersetzt und gebunden. Interpreter
u
uhren es aus (Basic, APL ).
¨ bersetzen das Programm zeilenweise und f¨
• Vorteile:
(a) Der Sprachkode ist maschinenunabh¨
angiger, da der Interpreter an die Maschine angepasst werden kann. Dadurch ist das Arbeiten am Rechner problemorientiert und rechnerunabh¨
angig, man arbeitet an einer abstrakten Maschine.
(b) Ein zeilenweises Testen ist m¨
oglich, die Fehlerstelle schneller sichtbar.
(c) Der Interpreterkode ist in der Regel kompakter als Maschinenkode, das gesamte Programm ben¨
otigt also weniger Speicherplatz als ein u
¨ bersetztes Programm.
• Nachteile: Eventuell muss ein Verlust an Laufzeiteffizienz in Kauf genommen werden.
MatLab u
uhrt eine Konfigurationskontrolle
¨ bersetzt alle Funktionen beim ersten Benutzen und f¨
durch, die sicherstellen soll, dass ge¨anderte Funktionen beim n¨
achsten Aufruf neu u
¨ bersetzt werden.
Dies misslingt, wenn die Funktion ge¨
andert und in einem anderen, u
¨bergeordneten Verzeichnis
gespeichert wird. Trotzdem ist MatLab ein Interpreter, denn es werden keine lauff¨
ahigen Programme
erzeugt.
6.B
Bestandteile eines Programms
Literatur: Pomberger [40, S. 102ff], Schauer, Barta[46, S. 86ff]
Eingegangen wird auf die Bestandteile von Programmen bei der Verwendung zu u
¨ bersetzender Sprachen wie Fortran, Pascal, Modula-2 u.a.. Auch auf die Besonderheit einer interpretativen
Sprache mit einem interaktiv zu bearbeitenden Arbeitsbereich (APL, MatLab) wird hingewiesen.
6 Programmstrukturen
6.B.1
61
Prozedur
Eine Prozedur ist die kleinste aufrufbare Einheit eines Programms. Sie kann von jeder Stelle des
Programms mit Aufrufparametern aktiviert werden, die Ergebnisse werden auf Ergebnisparametern
zur¨
uckgegeben.
Die meisten Sprachen unterscheiden Unterprogramme und Funktionen. Funktionen haben im
allgemeinen einen Ergebnisparameter. Diese k¨
onnen nat¨
urlich auch allgemeine Felder (Zellenfelder)
sein. APL und MatLab kennen nur Funktionen.
Als spezielle, nicht ausf¨
uhrbare Prozedur besitzt Fortran die BLOCK DATA Routine. Diese
dient zum Initialisieren der Werte von programmglobalen Variablen (COMMON), s. Alg. 6.1.
BLOCK DATA BDAdmini
IMPLICIT NONE
INTEGER*4
INTEGER*4
INTEGER*4
PARAMETER
CHARACTER*6
INTEGER*4
INTEGER*4
aderro
aderpa(5)
adstle
(adstle=20)
adstro(adstle)
adstlo(adstle)
adstpo
! Error Code
! Error Parameters
! Length of Trace Stack
COMMON
/ADMINI/
aderro,aderpa,adstro,adstlo,adstpo
DATA
DATA
END
aderro,aderpa,adstlo,adstpo/
27*0/
adstro
/’Root’,19*’ ’/
! Trace Stack: Routines
! Trace Stack: Locations
! Pointer to Actual Routine
Alg. 6.1: BLOCK DATA-Anweisung
Der gemeinsame Datenbereich wird in den benutzenden Routinen durch seinen Namen Admini
identifiziert, die Variablen belegen die Speicherpl¨
atze des Datenbereichs entsprechend der Reihenfolge in der COMMON-Anweisung.
In diesem Beispiel werden alle ganzzahligen Variablen mit 0 vorbelegt, die 1. Komponente des
Textvektors mit dem Wort ’Root’ f¨
ur Hauptmodul. Der Parameter adstle, der die Kellertiefe
angibt, geh¨
ort nicht zu den gemeinsamen, programmglobalen Variablen. Die Verwendung dieser
Datenstruktur wird sp¨
ater als Beispiel f¨
ur eine Datenkapsel erl¨
autert.
Die L¨
ange des gemeinsamen Datenbereichs wird beim Binden des Programms nicht u
uft!
¨ berpr¨
6.B.2
Modul
Eine oder mehrere, inhaltlich zusammengeh¨
orige, Prozeduren werden in einer Datei zusammengefasst und gleichzeitig u
onnen Prozeduren aus Sprachbibliotheken (z.B. Ein¨ bersetzt. Ferner k¨
/Ausgaberoutinen) und programmglobale Datenstrukturen in den Modul aufgenommen werden.
Das Modulkonzept erm¨
oglicht das Verwenden von Objektkode in mehreren Programmen bei ein¨
maligem Ubersetzen.
Sind mehrere Prozeduren in einem Modul zusammengefasst, so kann jeder einzelne von außen
aufgerufen werden. Es kommt jedoch h¨
aufig vor, dass nur einer oder wenige von außen aufgerufen
werden. Nach außen muss lediglich die Schnittstelle f¨
ur die Ein- und Ausgangsparameter bekannt
sein, der Algorithmus kann verborgen bleiben.
62
6.B.3
I Softwareentwicklung
Programm
Ein Programm besteht aus einer lauff¨
ahigen oder ausf¨
uhrbaren Zusammenfassung von Moduln
und Prozeduren aus Bibliotheken. Es kann durch Schnittstellen an speicherresidente Bibliotheken
und systemglobale Datenstrukturen angeschlossen sein. Das Programm wird durch einen Namen
identifiziert, der in der Regel gleich dem Dateinamen der ausf¨
uhrbaren Datei ist. Unter den Betriebssystemen DOS und Windows sind dies Dateien mit den Erweiterungen exe oder com.
Diese Einheiten sind nicht bei allen Programmiersprachen vorhanden. Fortran und Modula-2
kennen alle Einheiten, bei Turbo-Pascal (bis zur Version 4) besteht das gesamte Programm aus nur
einem Modul, es wird immer geschlossen u
¨ bersetzt.
In APL und MatLab arbeitet man mit einem Arbeitsbereich, der alle globalen Daten und alle
Funktionen beinhaltet. Jede Funktion kann interaktiv, also vom Benutzer am Bildschirm, und von
anderen Funktionen aufgerufen werden. Eine Funktion ist also zugleich Prozedur und Programm
in obigem Sinne.
6.C
Parameteru
¨ bergabe bei Prozeduraufruf
Literatur: Schauer, Barta [46, S. 89ff]
Beim Aufruf einer Prozedur werden den formalen Parametern in der Definition der Prozedur
die aktuellen Aufrufparameter zugeordnet. Die formalen Parameter k¨
onnen Eingangsparameter,
Ausgangsparameter oder Durchgangsparameter (Ein- und Ausgangsparameter) sein.
Bei den g¨
angigen Programmiersprachen sind alle Typen m¨
oglich. APL und MatLab trennen jedoch streng zwischen den Eingangsparametern und dem Ausgangsparameter, soweit sie vorhanden
sind. Es gibt in diesen Sprachen also keine Durchgangsparameter. Ein aktueller Ausgangsparameter muss eine Variable sein, er darf kein Ausdruck sein. Dagegen k¨
onnen die Eingangsparameter
Ausdr¨
ucke sein.
Die Parameter¨
ubergabe ist in den einzelnen Programmiersprachen unterschiedlich organisiert.
Es kann der Wert, die Adresse oder der Name der aktuellen Variablen u
uckgege¨ bergeben bzw. zur¨
ben werden. F¨
ur den Programmierer ist es wichtig zu wissen, wie die Parameter¨
ubergabe organisiert
ist und wo eine formale Variable aktuell verankert ist. Dies l¨
asst bei der Fehlersuche R¨
uckschl¨
usse
auf eventuell unliebsame Nebeneffekte zu.
6.C.1
Wertu
¨ bergabe (Call by Value)
Der Wert des Eingangsausdrucks wird berechnet und auf den formalen Parameter, der in diesem
Fall eine lokale Variable ist, u
uckgabe wird der Wert des lokalen formalen
¨ bertragen. Bei der R¨
Parameters auf den aktuellen Ausgangsparameter u
¨ bertragen. APL benutzt ausschließlich diese
Methode.
Der G¨
ultigkeitsbereich des formalen Parameters ist durch die Eigenschaft, eine lokale Variable zu
sein, festgelegt: Er ist damit auf diese Prozedur und eventuell aufgerufene Prozeduren eingeschr¨
ankt.
Variablen gleichen Namens in u
ultigkeit.
¨ bergeordneten Prozeduren haben dagegen hier keine G¨
Das nebenstehende Beispiel in APL soll dies verdeutlichen, zun¨
achst
wird die Funktion notiert, dann die interaktiv eingegebenen Befehle
und ihre Ergebnisse:
Die Variablen a und b der Funktion Subr werden beim Aufruf mit 3
und 4 belegt und zu 9 und 16 ge¨
andert. Die Variablen a und b des
Arbeitsbereichs (oder der u
¨ bergeordneten Funktion) behalten ihren
Wert.
Diese Art der Parameter¨
ubergabe ist eine sichere Methode, sie vermeidet Nebeneffekte.
[0]
[1]
[2]
[3]
rûa Subr b
aûa*2
bûb*2
rûa-b
aû3
bû4
rûa Subr b
a,b,r
3 4 ¢7
6 Programmstrukturen
6.C.2
63
Adressu
¨ bergabe (Call by Reference)
Bei dieser Art der Parameter¨
ubergabe wird als Anfangsadresse des formalen Parameters die Anfangsadresse des aktuellen Parameters u
anderung des formalen Parameters
¨ bergeben. Bei einer Ver¨
im Unterprogramm wird damit im gleichen Augenblick der Wert des aktuellen Parameters ge¨
andert.
Fortran kennt nur die Adress¨
ubergabe.
Dies ist eine schnelle Art der Parameter¨
ubergabe. Sie u
asst jedoch dem Programmierer
¨ berl¨
Kontrolle u
¨ ber die Unterscheidung zwischen Ein-/Ausgabeparameter und bei Fortran auch die
Typ- und L¨
angenkontrolle.
Streng genommen sind hier als aktuelle Parameter nur Variable und keine Ausdr¨
ucke erlaubt. Fortran erlaubt jedoch
auch Ausdr¨
ucke als aktuelle Parameter: Der Compiler weist
den Wert des Ausdrucks einer neu definierten Variablen zu
und f¨
uhrt den Unterprogrammaufruf mit dieser Variablen
durch.
Klar ist, das die Adress¨
ubergabe f¨
ur Ausgangsparameter
keine Ausdr¨
ucke oder Konstanten erlaubt. Der FortranCompiler u
uft dies jedoch nicht, was zu unerw¨
unsch¨ berpr¨
ten Nebeneffekten f¨
uhren kann. In Fortran sind Konstanten
eigentlich auch Variable, der Compiler kann nur im vereinbarenden Unterprogramm u
ufen, dass keine Wertzu¨ berpr¨
weisung erfolgt.
Im folgenden Beispiel wird beim Aufruf des Unterprogramms Subr der Speicherplatz, auf den der Compiler die
Konstante 2 abgelegt hat, mit 4 u
¨ berschrieben. Solche Programmfehler erfordern viel Zeit, bis sie gefunden sind.
PROGRAM Falsch
INTEGER*4 a
..
.
CALL Subr(a,2,4)
..
.
Write(6,*) 2 !Schreibt 4!
..
.
END
SUBROUTINE Subr(a,b,c)
INTEGER*4 a,b,c
..
.
b = c
..
.
END
Ein weiteres Beispiel mit Nebeneffekten aufgrund der Adress¨
ubergabe steht bei [29, S. 73f].
6.C.3
Namensu
¨ bergabe (Call by Name)
Bei der Namens¨
ubergabe wird der Wert des aktuellen Parameters an jeder verwendeten Stelle
explizit berechnet. Ist der aktuelle Parameter ein Ausdruck, z.B. eine Funktion, so werden die an der
aktuellen Stelle g¨
ultigen Werte der globalen Variablen und Argumente der Funktion ber¨
ucksichtigt.
¨
Diese Art der Ubergabe
ist bei Algol60 m¨
oglich. Sie kann in MatLab nachempfunden werden, indem
ein Ausdruck, der eine Variable x beinhaltet, als Textvektor an eine Funktion u
¨ bergeben wird.
Mit dem Aufruf Steffensen(’x-exp(-x)’,1,1E-13) wird eine Nullstelle von f (x ) = x − e −x
ausgehend vom Startwert x = 1 und der Toleranz 10−13 berechnet:
In der Funktion werden in den
function x0=Steffensen(f,xanf,tol)
Zeilen 2 und 6 die Funktionswerx=xanf;y=eval(f);
te f¨
ur die Werte x und f(x) ausgewertet, also f(x) und f(f(x)) beif abs(y) <= tol; x0=x;
rechnet. Funktion eval f¨
uhrt den
else x=x+y;
in der Textvariablen gespeicherten
x0=Steffensen(f,xanf-(y*y)/(eval(f)-y),tol);
Ausdruck aus.
end
¨
Die Ubergabe einer Funktion als Funktionsgriff (s. 4.E.2) ist allerdings besser, da z.B. nicht auf den
Namen der Variablen geachtet werden muss.
APL kennt nur Wert¨
ubergabe. Fortran kennt nur Adress¨
ubergabe. Pascal und Modula-2 kennen Wert- und Adress¨
ubergabe. Hier muss jedoch ein Ausgangsparameter immer mit Adresse u
¨ bergeben werden. Ein Beispiel in Pascal:
64
I Softwareentwicklung
Der Parameter n wird mit Adresse, i mit Wert u
ogli¨ bergeben. M¨
che Aufrufe sind INCREMENT (y,5)
oder INCREMENT (y,y), wobei beim
letzten Aufruf der Wert von y verdoppelt wird.
6.D
PROCEDURE INCREMENT (VAR n: INTEGER; i:INTEGER);
BEGIN
n:=n+i
END
Globale und lokale Daten
Literatur: Schauer, Barta [46, S. 96ff], Pomberger [40, S. 103ff], Ludewig [29, S. 82ff]
6.D.1
Gu
¨ ltigkeitsbereich von Variablen
Die Variablen einer Prozedur k¨
onnen lokal, also nur in dieser Prozedur, oder global, also auch
in u
¨ bergeordneten Prozeduren innerhalb des Programms, gelten. In allen Sprachen sind formale
Aufrufparameter einer Prozedur lokal. Auf die speziellen system-globalen Variablen wird hier nicht
eingegangen.
In Fortran sind Variablen implizit lokal, unabh¨
angig von der Deklarationsart (explizit oder
implizit). Durch eine COMMON-Anweisung k¨
onnen sie zu globalen Variablen erkl¨
art werden (s. 6.B, ein
weiteres Beispiel folgt bei der Behandlung von Datenkapseln.) In verschiedenen Unterprogrammen
benutzte globale Variable werden anhand ihrer Position im COMMON-Bereich identifiziert, nicht an
hand ihres Namens.
In Pascal, Algol60 sind alle in einer Prozedur deklarierten Variablen lokal, nicht in einer
Prozedur vereinbarten Variablen sind global. Diese m¨
ussen aber in einer u
¨ bergeordneten Prozedur
vereinbart sein zu der sie dann lokal sind.
In MatLab sind alle in einer Funktion benutzten Variablen lokal, globale Variable m¨
ussen als solche vereinbart werden: global a b c vereinbart die Variablen a, b, c als global.
In verschiedenen Unterprogrammen
oder Funktionen global vereinbarte
Variablen werden anhand ihres Namens identifiziert.
In der Darstellung deuten ,:‘ und
,.‘ die G¨
ultigkeit beim Aufruf oder
beim R¨
ucksprung, jedoch nur außerhalb der gerufenen Routine, an.
function r=Subr(a,b)
global d
c=a^2;
d=b^2;
r=c-d;
>> global d
>> a=3;
>> b=4;
>> c=5;
>> d=6;
>> r=Subr(3+a,1+b);
>> [a,b,c,d,r]
ans =
3
4
5
% G¨
ultigkeit der Variablen
% a b c d r a’ b’ c’ r’
%
|
% |
|
% | |
|
% | | | |
% | | | |
% : : : | . | | | | |
% | | | | |
25
11
In Modula-2 und Ada erlauben Moduln der Umwelt durch eine Export-Anweisung explizit das
Benutzen von hier deklarierten Daten. Andere Moduln k¨
onnen diese dann importieren.
6 Programmstrukturen
In APL sind alle Variablen außer
¨
den Ubergabeparametern
implizit
global, durch Angabe in der Definitionszeile k¨
onnen sie zu lokalen Variablen erkl¨
art werden. Ein Beispiel
erl¨
autert den G¨
ultigkeitsbereich:
In der untergeordneten Funktion
Subr hat neben den lokalen Variablen a’, b’, c’ und r’ noch die globale Variable d G¨
ultigkeit. Ihre Wert
¨
wird ver¨
andert. Diese Anderung
einer globalen Variablen in einer Prozedur nennt man Nebeneffekt oder
Nebenwirkung.
6.D.2
65
[0]
[1]
[2]
[3]
rûa Subr b;c
cûa*2
dûb*2
rûc-d
aû3
bû4
cû5
dû6
rû(3+a) Subr 1+b
a,b,c,d,r
3 4 5 25 11
.
ã G.ultigkeit
der Variablen
ã
a b c d r a' b' c' r'
ã
Í
ã
Í Í
ã
Í Í Í
ã
Í Í Í Í
ã
: : : Í . Í Í Í Í
ã
Í Í Í Í Í
ã
Nebenwirkungen
Das gef¨ahrliche an Nebenwirkungen ist, dass sie beim Aufruf einer Prozedur nicht unmittelbar
erkennbar sind. Nebenwirkungen sind deshalb zu vermeiden. In den F¨
allen der unvermeidbaren Notwendigkeit sind sie gut zu dokumentieren. Ein hoffentlich u
¨ berzeugendes Beispiel soll dies
belegen:
Die nebenstehende Funktion erh¨
oht den Wert der globalen Variablen n um 1 und gibt ihn zur¨
uck.
Was passiert bei nebenstehenden Aufrufen, wenn jeder
Ausdruck von rechts nach links abgearbeitet wird?
6.D.3
Trick ::=
DCL(Trick TYPE INTEGER);
Trick := n := n+1;
RETURN;
Werte von n
vor
nach
dem Aufruf
n:=1;
Trick+n
n+Trick
1
2
1
2
3
Ergebnis
3
6
Globale Variable und Modularisierung
Das Benutzen globaler Daten widerspricht im strengen Sinne der modularen Programmierung.
Die Schnittstellen zwischen den Prozeduren liegen nicht offen, durch die Nebenwirkungen werden
die Prozeduren zu eng gekoppelt. Darunter leidet das Testen und Warten der Prozeduren, eine
¨
Anderung
der Deklaration nicht-lokaler Daten wirkt sich auf alle benutzenden Prozeduren aus.
Auf der anderen Seite eignen sich globale Variablen und Datenstrukturen sehr gut zum Speichern
von Konstanten oder Daten, die einmal geladen werden und dann nur noch gelesen werden, also
als zus¨
atzlich Eingangsparameter dienen. In Mehrprogrammsystemen der Echtzeitprogrammierung
werden system-globale Datenbereiche als Schnittstellen zwischen Programmen benutzt und sind
dort aus Gr¨
unden der Laufzeiteffizienz von großer Bedeutung.
Die Verwendung globaler Daten in diesem Sinne wird durch das Konzept der Datenkapsel beschrieben. Hier greifen nur die zur Datenkapsel geh¨
orenden Prozeduren auf die globalen Daten zu
und geben sie den aufrufenden Prozeduren zur¨
uck.
Als positiv ist in Fortran in MatLab zu werten, dass globale Variable explizit als global deklariert
werden m¨
ussen.
66
I Softwareentwicklung
6.E
Speicherorganisation der Daten
(a) Statisches Speichern der Daten (Fortran): Die Variable besitzt ihren Speicherplatz w¨
ahrend
der gesamten Programmlebenszeit.
¨
Der Ubersetzer
reserviert den ben¨
otigten Speicherplatz f¨
ur alle Variable des Programms. Beim
Aufruf einer Routine werden die lokalen Variablen nicht initialisiert, sie haben den Wert, den
sie beim Verlassen des letzten Aufrufs hatten. Dies muss beim Programmieren ber¨
ucksichtigt
werden!
Diese Methode ist unfexibel, die meisten Speicherpl¨
atze werden nur kurzzeitig benutzt.
Rekursive Programmierung ist nicht m¨
oglich, denn f¨
ur jede Inkarnationen ist weiterer Speicherplatz f¨
ur die lokalen Variablen n¨
otig.
(b) Speichern der Daten in einem Laufzeitstapel (auch: Keller, Stapel (stack)), (Pascal, Modula2, APL , MatLab): Sie arbeiten im lifo-Modus (last-in-first-out): Beim Aufruf einer Prozedur
werden alle lokalen Variablen mit Namen und Werten auf den Stapel gelegt. Beim Zugriff auf
eine Variable wird die zuletzt auf den Stapel gelegte Variable mit dem gew¨
unschten Namen
benutzt. Damit werden lokale Variable bevorzugt vor globalen Variablen gleichen Namens,
die in diesem Fall also keine G¨
ultigkeit haben, vgl. Beispiel in 6.D. Beim R¨
ucksprung aus
einer Prozedur werden alle ihre Variable vom Stapel entfernt.
Diese Methode arbeitet sehr speichereffizient. Ferner erlaubt sie rekursives Programmieren,
da die lokalen Variablen bei jeder Inkarnation neu im Stapel angelegt werden.
Der Stapel pulsiert (¨
andert seine Gr¨
oße) w¨
ahrend des Programmablaufs. Er kann bei großem
Speicherbedarf u
¨ berlaufen, worauf bei rekursivem Programmieren zu achten ist.
6.F
Rekursiver Prozeduraufruf
Literatur: Schauer, Barta [46, S. 101ff], Ludewig [29, S.75ff]
Die einfachste Definition der Rekursion lautet:
Rekursion:
siehe Rekursion.
In der Software-Technik bedeutet Rekursion, dass sich eine Prozedur selbst aufruft, direkt oder
indirekt.
Die erste Definition zeigt zugleich die Grenzen der Anwendung der Rekursion in der Programmentwicklung: Eine Rekursion in einem Programm muss irgendwann einmal abbrechen.
Als erstes Beispiel eines rekursiven Programmaufrufs wurde das Steffensen-Verfahren zur Bestimmung von Nullstellen bereits erw¨
ahnt.7 Als Abbruchkriterium wird hier der Funktionswert
benutzt, der sich 0 n¨
ahert.
6.F.1
Sortieralgorithmus
Als weiteres Beispiel betrachten wir das Ordnen
einer Menge von Zahlen. Die Grundidee des nebenstehenden Algorithmus besteht darin, zuerst
alle Elemente zu ordnen, die kleiner als das erste sind, und alle Elemente zu ordnen, die gr¨
oßer
als das erste sind. Im Ordnen der beiden echten
Teilmenge bestehen die rekursiven Aufrufe. Abgebrochen wird die Rekursion bei einelementigen
und leeren Mengen.
7
6.C.3
Ord(a)::=
DCL( a TYPE SET INTEGER;
b TYPE SET INTEGER;);
IF(|a|≤1) THEN Ord := a;
ELSE
b:={x∈a | x<a[1]};
Ord:=(Ord b),a[1],Ord((a-b)-a[1]);
ENDIF;
6 Programmstrukturen
67
Dieser Algorithmus erlaubt auch mehrfaches Auftreten des gleichen Elements in der eingegebenen
Liste, in der geordneten Liste treten gleiche Elemente in der gleichen Anzahl wie in der eingegebenen Liste auf. Allerdings ist bei Listen mit
vielen mehrfachen Eintr¨
agen den nebenstehende
in MatLab notierte Algorithmus effizienter.
function b = Ord(a)
if(length(a) <= 1) b = a;
else
b=[Ord(a(a<a(1))),a(a=a(1)),...;
Ord(a(a>a(1)))];
end;
Es folgt die APL-Kodierung, APL beinhaltet diesen Algorithmus allerdings auch in der Systemfunktion Upgrade.
[0]
[1]
[4]
[5]
6.F.2
rûOrd a;l
ý(1¦Òrû,a)/0
lûr<r[1]
rû(Ord l/r),r[1],Ord 1Õ(~l)/r
Rekursives Programmieren
Voraussetzung f¨
ur einen rekursiven Programmaufruf ist, dass bei jeder Inkarnation auch die Aufrufparameter und die lokalen Parameter neu angelegt werden. Folglich erlauben nur jene Programmiersprachen Rekursionen, die lokale Daten auf einem Laufzeitstapel anlegen. Fortran erlaubt also
keine Rekursion.
Beim Programmieren ist darauf zu achten, dass alle Variablen, die in einer Prozedur vor einem
rekursiven Aufruf beschrieben und danach gelesen werden, lokal sind! Andernfalls wird der Wert
dieser Variablen in der n¨
achsten Inkarnation ver¨
andert! Als Beispiel beachte man die Ver¨
anderungen
der Menge b in obigem Pseudokode beim Aufruf Ord {2,4,3,1}, falls b global w¨
are! Analog beachte
man den Wert der global angenommen Variablen l im APL-Kode beim entsprechen Aufruf Ord 2
4 3 1. Das Ergebnis w¨
are 4 2 3 4.
Auf der anderen Seite kostet das Neuanlegen der lokalen Variablen Speicherplatz. Es ist auch
oft sinnvoll, Daten in einer rekursiven Funktion global zu halten, falls dies unter Ber¨
ucksichtigung
¨
der obigen Uberlegungen
erlaubt ist.
6.F.3
Der Turm von Hanoi
Rekursives Programmieren erzeugt in vielen F¨
alle kurze Algorithmen. Dies soll anhand des Beispiels
Der Turm von Hanoi“ dargelegt werden. Es ist die Aufgabe des Software-Entwicklers, die Rekursion
”
im Entwicklungsprozess herauszuarbeiten. Da in APL Schleifen zeitintensiv ablaufen, bietet hier
in vielen F¨
allen die Rekursion eine laufzeiteffiziente Alternative. In MatLab ist dieser Zeitvorteil
nicht vorhanden, weil die Funktionen nur einmal u
¨ bersetzt werden. Die Elleganz bei Verwenden
von Rekursionen im Programmkode bleibt der Vorteil!
Die Aufgabe besteht darin, einen Turm aus nach oben kleiner werdenden Scheiben scheibenweise
abzutragen und an einer anderen Stelle wieder aufzubauen. Dabei m¨
ussen folgende Regeln beachtet
werden:
(a) Es darf nur einen Turm als Zwischenlager existieren. Es gibt also einen Anfangs-, einen Endund einen Zwischenturm.
(b) Niemals liegt eine gr¨
oßere Scheibe auf einer kleineren.
(c) Es darf immer nur eine Scheibe bewegt werden.
Die Idee des Algorithmus besteht in folgender Aufteilung der Gesamtaufgabe, wobei mit A, E,
Z der Anfangs-, End- und Zwischenturm bezeichnet wird:
1. Zun¨
achst wird der Turm bis auf die unterste Scheibe nach Z u
¨ bertragen, wobei E als Zwischenturm dient.
2. Jetzt wird die unterste Scheibe auf E gelegt.
3. Schließlich wird der verkleinerte Turm von Z nach E u
¨ bertragen, wobei A als Zwischenturm
dient.
68
I Softwareentwicklung
F¨
ur den ersten und dritten Schritt kann dieser Algorithmus wieder rekursiv aufgerufen werden.
Bei jedem Schritt bleiben die Bedingungen (a) - (c) erf¨
ullt, wobei die zweite Bedingung einer
¨
genaueren Uberlegung
bedarf: Bei den Schritten 1 und 3 werden jeweils die Turmspitzen bewegt,
also bleibt sie erhalten. Beim 2. Schritt liegen, da er unmittelbar nach dem 1. Schritt ausgef¨
uhrt
wird, alle kleineren Scheiben auf dem Turm Z, auf E liegen (auch in der Rekursion) nur gr¨
oßere
Scheiben.
Zur Implementierung des Algorithmus wird
ein Turm durch einen Vektor dargestellt, dessen erstes Element der untersten Scheibe entspricht. Die Werte der Vektorkomponenten
sind nat¨
urliche Zahlen und stellen die Gr¨
oße
der Scheiben dar. Der Anfangsturm der H¨
ohe 5 wird also dargestellt durch den Vektor
(5,4,3,2,1).
Dieser Algorithmus benutzt zwei Funktionen, die Funktion Length liefert die L¨
ange
der Vektors, die Funktion Top(n,a) die Spitze des Turms, also die letzten n Komponenten des Vektors a.
6.G
Hanoi(a,e,z)::=
DCL (a TYPE ARRAY INTEGER;
e TYPE ARRAY INTEGER;
z TYPE ARRAY INTEGER;
n TYPE INTEGER; L¨
ange des Vektors a
)
n := Length(a);
IF(n>0) THEN
Hanoi(Top(n-1,a),z,e);
e := e,a;
unterste a-Scheibe auf e
Hanoi(z,e,a);
ENDIF
Datenkapseln
Literatur: Schauer, Barta [46, S. 106ff]
Datenkapseln beinhalten Datenstrukturen, auf die nur durch Routinen zugegriffen wird, die zur
Datenkapsel geh¨
oren. Diese Routinen heißen Zugriffsfunktionen. Die Realisierung der Datenstruktur
wird dadurch f¨
ur den Rest des Programms versteckt oder abgekapselt.
Bekannte Beispiele von Datenkapseln sind die I/O-Routinen, die jeder Compiler anbietet. Als
weiteres wichtiges Beispiel sei hier die Realisierung eines Kellers mit den Zugriffsfunktionen Init
(Initialisierung), Push und Pop genannt. Hierauf wird auch in dem weiter unten aufgef¨
uhrten Beispiel zur¨
uckgegriffen.
6.G.1
Realisierung in einzelnen Sprachen
Fortran: Die Daten werden in einem globalen Datenbereich, einem COMMON-Block, gehalten. Die
Zugriffsroutinen werden u
¨ blicherweise mit einer initialisierenden BLOCK DATA - Routine in einem
Modul zusammengefasst. Sie k¨
onnen durch den EXTERNAL-Befehl explizit eingebunden werden.
Pascal: Die Daten m¨
ussen explizit in dem Hauptprogramm vereinbart werden. Damit sind sie
dann als globale Daten definiert. Die Zugriffsroutinen m¨
ussen als Pascal-Kode in das Programm
aufgenommen und mit u
ur den Anwendungspro¨ bersetzt werden. Damit ist die Datenkapsel“ f¨
”
grammierer nicht mehr verdeckt.
Modula-2:
Datenkapseln k¨
onnen mit dem MODULE-Konzept realisiert werden.
APL: Eine initialisierende Funktion legt die Daten der Datenkapsel als globale Daten an. Auf
diese Daten kann dann jede Zugriffsfunktionzugreifen. Bei Verwendung von Datenkapseln darf kein
Unterprogramm unbeabsichtigt die Namen der Datenkapsel-Variablen als nicht-lokale Variable benutzen.
Eine andere M¨
oglichkeit zur Realisierung von Datenkapseln ist durch die Implementierung eines
Auxiliary Processors“ gegeben. In diesem Fall ist die Datenstruktur v¨
ollig versteckt.
”
6 Programmstrukturen
69
MatLab: Eine initialisierende Funktion legt die Daten der Datenkapsel mit dem Befehl global als
globale Daten an. Auf diese Daten kann dann jede Zugriffsfunktion zugreifen, sie muss die Variablen
ebenfalls mit dem Befehl global als global festlegen.
6.G.2
Beispiel: Speichern der Aufrufhierarchie und Ausgabe mit Fehler im Fehlerfall in Fortran.
In dieser Datenkapsel werden die Namen der Routinen in ihrer Aufrufsequenz und Positionen in den aufrufenden Routinen im gemeinsamen Datenbereich Admini gespeichert. Ferner werden im Fehlerfall die
Fehlernummer und Fehlerparameter abgelegt. Alle Informationen, also
Fehlernummer, -parameter, und Aufrufsequenz bis zur Fehlerstelle einschließlich der Positionen der n¨
achsten Routine k¨
onnen (in Fehlerfall)
ausgegeben werden. Auf den gemeinsamen Datenbereich wird nur u
¨ ber
die Zugriffsroutinen zugegriffen.
Abb. 6.1: Datenkapsel Admini
Datenstruktur: Die Namen der Routinen und Position in einer Routine werden in einem Keller
(last-in-first-out), dessen Tiefe durch einen Parameter definiert ist, gehalten. Weitere Variablen
nehmen die Fehlernummer und Fehlerparameter im Fehlerfall auf. Die Datenstruktur wird in dem
COMMON Admini abgelegt. Die Deklarationen werden in eine Datei Admini.dat geschrieben, die
dann per INCLUDE Admini.dat in jede Zugriffsroutine aufgenommen wird. Die Datei Admini.dat
ist in Abb. 6.2
INTEGER*4
INTEGER*4
INTEGER*4
PARAMETER
CHARACTER*6
INTEGER*4
INTEGER*4
aderro
aderpa(5)
adstle
(adstle=20)
adstro(adstle)
adstlo(adstle)
adstpo
! Error Code
! Error Parameters
! Length of Trace Stack
! Trace Stack: Routines
! Trace Stack: Locations
! Pointer to Actual Routine
COMMON
/ADMINI/
aderro,aderpa,adstro,adstlo,adstpo
Abb. 6.2: Admini.dat
Initialisierung: Die Datenstruktur wird in der BLOCK DATA-Routine Bdadmini, die in Abb. 6.3
enthalten ist, initialisiert: Alle numerischen Variablen werden auf 0 gesetzt, alle Textvariable mit
Leerzeichen gef¨
ullt, außer der ersten.
BLOCK DATA BDAdmini
IMPLICIT NONE
INCLUDE Admini.dat
DATA
DATA
END
aderro,aderpa,adstlo,adstpo/
27*0/
adstro
/’Root’,19*’ ’/
Abb. 6.3: BLOCK DATA Bdadmini
70
I Softwareentwicklung
Eintragen des aktuellen Unterprogrammnamens in Adpush(routin): Der Aufruf dieser
Routine ist die erste Anweisung in jedem Unterprogramm. Sie ist in Abb. 6.4 dargestellt.
SUBROUTINE Adpush(routin)
IMPLICIT NONE
CHARACTER*6 routin
INCLUDE Admini.dat
aderpa = 0
IF(adstpo=adstle) THEN
Write(6,*) ’Adpush: Keller in Admini voll’
ELSE
adstpo = adstpo + 1
!Zeiger erh¨
ohen
adstro(adstpo) = routin
!Name der Routine eintragen
adstlo(adstlo) = 1
!Position im Programm: 1
ENDIF
END
Abb. 6.4: Adpush
Streichen des aktuellen Unterprogramms in Adpop: Der Aufruf dieser Routine ist die letzte
Anweisung in jedem Unterprogramm bei fehlerfreiem Verlauf, s. Abb. 6.5.
SUBROUTINE Adpop
IMPLICIT NONE
INCLUDE Admini.dat
adstpo = adstpo - 1
END
!Zeiger erh¨
ohen
Abb. 6.5: Adlpop
Setzen einer Positionsnummer in Adlset(loc): Diese Routine kann jederzeit aufgerufen werden, um die aktuelle Positionsnummer im aktuellen Unterprogramm zu ¨
andern, s. Abb. 6.6
SUBROUTINE Adlset(loc)
IMPLICIT NONE
INTEGER*4 loc
INCLUDE Admini.dat
adstlo(adstpo) = loc
END
Abb. 6.6: Adlset
6 Programmstrukturen
71
Adeset(fehler,fehpa1,fehpa2,fehpa3,fehpa4,fehpa5): Im Falle eines Fehlers werden mit dieser Routine die Fehlernummer und Fehlerparameter in die Datenkapsel eingegeben (Abb. 6.7)
SUBROUTINE Adeset(fehler,fehpa1,fehpa2,fehpa3,fehpa4,fehpa5)
IMPLICIT NONE
INTEGER*4 fehler,fehpa1,fehpa2,fehpa3,fehpa4,fehpa5
INCLUDE Admini.dat
aderro = fehler
aderpa(1) = fehpa1
aderpa(2) = fehpa2
aderpa(3) = fehpa3
aderpa(4) = fehpa4
aderpa(5) = fehpa5
END
Abb. 6.7: Adeset
Ausgabe: Adedis, Adeprt: Diese Routinen zur Fehlerausgabe geben die Fehlernummer, die Fehlerparameter und die im Keller gespeicherte Aufrufsequenz mit den Positionen auf den Drucker,
den Anwender-Bildschirm und den Monitor-Bildschirm aus und Schreiben eine Meldung in das
LOG-Buch des Systems. Diese Routinen sind mit ihren weiteren Aufrufen systemabh¨
angig, da
sie spezielle Bildschirmausgaben und Systemroutinen zur Ausgabe auf den Monitor und in das
LOG-Buch benutzen.
Kapitel II
Numerische Verfahren der Analysis
§ 7 Bisektionsverfahren und Regula falsi
In diesem und den folgenden Paragrafen behandeln wir Verfahren zur Bestimmung der Nullstellen
beliebiger Funktionen, das L¨
osungverfahren f¨
ur viele Fragestellungen beinhaltet, da viele Probleme
zu Nullstellenproblemen umformuliert werden k¨
onnen.
(a) f (x ) = c wird auf f (x ) − c = 0 umgestellt.
(b) Die Frage nach einem Extremwert einer Funktion ist gleichbedeutend mit der Frage nach
einer Nullstelle ihrer Ableitung.
7.A
Ein einfu
¨ hrendes Beispiel
Die Gravitationskraft der Erde ist nicht u
ahe
¨ berall gleich. Ein Gravitationszentrum liegt in der N¨
der Philippinen. Dies hat zur Folge, dass geostation¨
are Satelliten u
¨ ber Afrika nach Osten driften.
Um das zu Verhindern m¨
ussen in festen Zeitintervallen Man¨
over durchgef¨
uhrt werden, die den
Satelliten in westlicher Richtung beschleunigen, vgl. Abb. 7.1. Hierzu besitzt der rotierende Satellit,
z.B. Meteosat, eine radiale D¨
use, die f¨
ur eine kurze Impulsdauer ∆t gefeuert wird. Wie groß ist ihr
Impuls in der gew¨
unschten Richtung, der x-Achse in Abb. 7.2?
Abb. 7.1: Satellit auf seiner Erdumlaufbahn
Abb. 7.2: Bereich, in dem die
D¨
use brennt
Der Impuls ist die u
¨ ber die Impulsdauer integrierte Kraft in der geforderten Richtung
∆t
2
Pd =
F cos(ωt) dt =
2F
sin
ω
∆ϕ
2
.
− ∆t
2
72
7 Bisektionsverfahren und Regula falsi
73
Die Effektivit¨
at ist folglich
sin ∆ϕ
2
Pd
=
∆ϕ
F ∆t
2
.
Bis zu welcher Impulsdauer ∆t ist die Effektivit¨
at gr¨
oßer oder gleich 80%?
sin
∆ϕ
2
∆ϕ
2
≥ 0.8
⇔
sin
∆ϕ
2
≥ 0.8
∆ϕ
.
2
Im Grenzfall stellt sich also die Frage nach der kleinsten positiven Nullstelle der Funktion f (x ) =
sin(x ) − 0.8x .
Bemerkung 7.1 Welche L¨
osungsm¨
oglichkeiten gibt es f¨
ur das Nullstellenproblem?
(a) grafisch:
• Zur Bestimmung des Schnittpunkts zweier Funktionen kann man beide Funktionen zeichnen und den Schnittpunkt durch ablesen oder durch Messen bestimmen, s. Abb. 7.3.
• Nach dem Zeichnen der Funktion wird die Nullstelle n¨
aherungsweise aus der Zeichnung
abgelesen, s. Abb. 7.4.
(b) Taylorpolynom: Die Funktion (oder Teile von ihr) werden durch ihre Taylorpolynom des
Grades 2 oder 3 ersetzt:
sin(x ) ≈ x −
⇒
0.2x −
⇒
x1 = 0
x3
6
x3
=x
6
1 x2
−
5
6
√
und x2/3 = ± 1.2 ≃ ±1.095
Diese N¨
aherungen k¨
onnen als Startwert f¨
ur weitere Verfahren herangezogen werden.
(c) Spezielle Nullstellenverfahren:
• Bisektion
• Regula falsi
• Newton-Verfahren
• Steffensen-Verfahren
• Iterationsverfahren (Sukzessive Approximation)
Abb. 7.3: sin(x ) = 0.8x
Abb. 7.4: sin(x ) − 0.8x = 0
Im Weiteren Verlauf gehen wir auf die speziellen Nullstellenverfahren ein. Sie unterscheiden sich
sehr in ihren Voraussetzungen an die Funktion und in ihrer Konvergenzgeschwindigkeit.
74
7.B
II Numerische Verfahren der Analysis
Das Bisektionsverfahren
Wir beginnen mit dem Bisektionsverfahren, das mit einer Intervallhalbierung die Nullstelle immer
enger einschließt.
Bezeichnungen 7.2 Wir legen Bezeichnungen und Voraussetzungen fest:
Gegeben sei eine stetig Funktion f : [a, b] → R (f ∈ C 0 ([a, b]) ) mit f (a) · f (b) < 0 (Ein Wert
ist positiv, der andere negativ.). Aufgrund dieser Voraussetzung existiert immer eine Nullstelle in
dem betrachteten Intervall: ∃¯
x ∈ (a, b) : f (¯
x) = 0 .
Verfahren 7.3 (Bisektion) Das Bisektionsverfahren ist gegeben durch
(a) Startwerte: a0 := a , b0 := b
(b) Iteration: s. Abb. 7.5
bn
1. Schritt: Intervallmittelpunkt: xn+1 := an +
2
2. Schritt: Intervallh¨
alfte mit Nullstelle:
f (an ) · f (xn+1 ) > 0 → an+1 := xn+1 , bn+1 := bn
f (an ) · f (xn+1 ) < 0 → an+1 := an , bn+1 := xn+1
(c) Abbruch: Mit der Fehlerschranke R, die oft als R = 10−6 gesetzt wird, wird das Bisektionsverfahren abgebrochen, falls |f (xn+1 )| < R oder |an+1 − bn+1 | < R · |an+1 | ist. Wir setzen im
Falle
• |f (xn+1 )| < R
:
x¯ :≈ xn+1
• bn+1 − an+1 < R :
x¯ :≈
,
an+1 +bn+1
2
.
Satz 7.4 (Fehlerabsch¨
atzung)
(a) A priori Absch¨
atzung:
|xn − x¯ | ≤
1
2n (b
− a) .
(b) Erf¨
ullt f ∈ C 1 ([a, b]) die Bedingung
∃m ∈ R>0 ∀x ∈ [a, b] : |f ′ (x )| ≥ m > 0,
so gilt die a posteriori Absch¨
atzung:
|xn − x¯ | ≤
|f (xn )|
m
.
Beweis: Die a priori Absch¨atzung wird durch vollst¨andige Induktion nachgewiesen, die a posteriori Absch¨
atzung folgt aus dem Mittelwertsatz der Differenzialrechnung:
f (xn ) − f (¯
x)
= f ′ (ξ)
xn − x¯
⇒ |xn − x¯ | =
Abb. 7.5: Bisektion
f (xn ) − f (¯
x)
|f (xn )|
≤
.
′
f (ξ)
m
Abb. 7.6: Regula falsi
⋄
7 Bisektionsverfahren und Regula falsi
7.C
75
Regula Falsi
Wir behalten die Voraussetzungen und Bezeichnungen von 7.2 bei.
Das Bisektionsverfahren benutzt als n¨
achste Iterationsstelle die Mitte des Intervalls [an , bn ],
in dem die Nullstelle garantiert liegen muss. Meistens liegt die Nullstelle xn der Sekante zwischen
(an , f (an )) und (bn , f (bn )) n¨
aher an der gesuchten Nullstelle, vgl. Abb. 7.6:
f (bn ) − f (an )
·(xn+1 − an )
bn − an
bn f (an ) − an f (an ) − an f (bn ) + an f (an ) f (bn ) − f (an )
=
+
·xn+1
bn − an
bn − an
bn f (an ) − an f (bn ) f (bn ) − f (an )
=
+
·xn+1
bn − an
bn − an
Diese Idee nutzt das
0 = f (an ) +
Verfahren 7.5 (Regula falsi) Das Verfahren Regula falsi ist gegeben durch
(a) Startwerte: a0 := a , b0 := b
(b) Iteration:
an f (bn ) − bn f (an )
f (bn ) − f (an )
• 1. Schritt:
xn+1 :=
• 2. Schritt:
f (an ) · f (xn+1 ) > 0
f (an ) · f (xn+1 ) < 0
→
→
an+1 := xn+1 , bn+1 := bn
an+1 := an , bn+1 := xn+1
(c) Abbruch: Mit der Fehlerschranke R, die oft als R = 10−6 gesetzt wird, wird das Verfahren
abgebrochen, falls |f (xn+1 )| < R oder |an+1 − bn+1 | < R · |an+1 | ist. Wir setzen im Falle
• |f (xn+1 )| < R
:
• |an+1 − bn+1 | < R :
x¯ :≈ xn+1
x¯ :≈
,
an+1 +bn+1
2
.
F¨
ur die Fehlerabsch¨
atzung erhalten wir denselben Satz wie bei der Bisektion.
Anschaulich wird Regula falsi schneller die Nullstelle finden, wenn dies auch in der Fehlerabsch¨
atzung noch nicht zum Tragen kommt, da dies mathematisch nicht begr¨
undet werden kann. Im
n¨
achsten Kapitel werden wir Verfahren kennen lernen, die noch schneller konvergieren.
Sowohl Bisektionsverfahren als auch Regula falsi k¨
onnen auch auf nicht-stetige Funktionen angewandt werden, soweit die weiteren Voraussetzungen von 7.2 erf¨
ullt sind. Enth¨
alt das Intervall
dann keine Nullstelle, so finden diese Verfahren ein Sprungstelle, an der die x-Achse u
¨ bersprungen
wird.
76
II Numerische Verfahren der Analysis
§ 8 Das Newton-Verfahren
Bezeichnungen 8.1 Wir legen Bezeichnungen und Voraussetzungen f¨
ur den gesamten Paragrafen
fest:
Gegeben sei eine stetig differenzierbare Funktion f : [a, b] → R (f ∈ C 1 ([a, b]) ) mit den Eigenschaften
• ∃m ∈ R>0 ∀x ∈ [a, b] : |f ′ (x )| ≥ m > 0
• f (a) · f (b) < 0
Aufgrund der zweiten Voraussetzung existiert immer eine Nullstelle x¯ ∈ [a, b], aufgrund der ersten
(wegen des Mittelwertsatzes der Differenzialrechnung) genau eine: ∃!¯
x ∈ [a, b] : f (¯
x) = 0 .
8.A
Das Newton-Verfahren
Verfahren 8.2 (Tangentenverfahren von Newton1 )
Funktion f im Punkt (xn , f (xn )) und deren Nullstelle xn+1 :
Wir berechnen die Tangente an die
t(x ) = f (xn ) + (x − xn ) · f ′ (xn )
⇒ 0 = f (xn ) + (xn+1 − xn ) · f ′ (xn )
⇒
xn+1 = xn −
f (xn )
f ′ (xn )
(8.1)
Mit der Fehlerschranke R, oft R = 10−6 , wird das Verfahren abgebrochen, falls |f (xn+1 )| < R oder
|xn+1 − xn | < R ist. Wir setzen dann x¯ :≈ xn+1 .
Abb. 8.1: Tangentenverfahren nach Newton
Die Konvergenzeigenschaften formulieren wir in einem Satz:
Satz 8.3 Die Funktion f ∈ C 2 (I ) mit dem abgeschlossenen Intervall I erf¨
ulle2
(a) ∃m ∈ R>0 ∀x ∈ I : |f ′ (x )| ≥ m > 0
(b) ∃M ∈ R>0 ∀x ∈ I :
(c) ∃¯
x ∈ I : f (¯
x) = 0
|f ′′ (x )|
.
≤M
,
,
Dann gelten mit einem ̺ ∈ R>0 , das ̺ <
2m
M
erf¨
ullt,
(a) x¯ ist die einzige Nullstelle von f in I.
(b) Das Newton-Verfahren konvergiert f¨
ur jeden Startwert x0 im Intervall [¯
x − ̺, x¯ + ̺] ∩ I :
∀x0 ∈ [¯
x − ̺, x¯ + ̺] ∩ I : limn→∞ xn = x¯
1
Sir Isaac Newton, engl. Physiker, Mathematiker, Astronom, Alchemist, Philosoph und Verwaltungsbeamter,
1642/43 (Woolsthorpe) - 1727 (Kensington)
2
An den Intervallgrenzen werden einseitige Ableitungen betrachtet.
8 Das Newton-Verfahren
(c) A priori Absch¨
atzung: Mit q =
77
M
2m |x0
(d) A posteriori Absch¨
atzung: |xn − x¯ | ≤
− x¯ | < 1 gilt |xn − x¯ | ≤
1
m |f (xn )|
≤
M
2m |xn
− xn−1
2m 2n
M q
|2
Beweis:
(a) Gibt es zwei verschiedene Nullstellen x¯1 und x¯2 , so folgt nach dem Mittelwertsatz der Differenzialrechnung:
f (¯
x1 ) − f (¯
x2 )
∃ ξ ∈ (¯
x1 , x¯2 ) : f ′ (ξ) =
=0
x1 − x2
Dies ist ein Widerspruch zur Voraussetzung |f ′ (ξ)| ≥ m > 0.
(b) folgt aus c) wegen q < 1.
(c) Diese Behauptung wird durch Induktion nach n bewiesen. Der Induktionsanfang f¨
ur n = 0
folgt aus der Definition von q:
2m
2m 20
|x0 − x¯ | =
q=
q .
M
M
Der Induktionsschritt ben¨
otigt einige Vorbereitungen: Aus der Taylorentwicklung des Grades
1 um xn mit Restgliedabsch¨
atzung folgt zun¨
achst f¨
ur ein ξ ∈ [¯
x , xn ]
′′
f (ξ)
0 = f (¯
x ) = f (xn ) + f ′ (xn )(¯
x − xn ) +
(¯
x − xn )2 .
2
Diese Gleichung teilen wir durch f ′ (xn ) und erhalten
f (xn )
f ′′ (ξ)
0= ′
+ x¯ − xn +
(¯
x − xn )2
f (xn )
2f ′ (xn )
und hieraus durch Einsetzen des Newton-Verfahrens
f (xn )
f ′′ (ξ)
x¯ − xn+1 = x¯ − xn + ′
= − ′
(¯
x − xn )2 .
f (xn )
2f (xn )
... Jetzt kann der Induktionsschluss von n auf n+1 nachgewiesen werden:
IV M
f ′′ (ξ)
2m 2n 2
2m 2n+1
2
(¯
x
−
x
)
≤
q
=
q
.
n
′
2f (xn )
2m M
M
(d) Der Mittelwertsatz der Differenzialrechnung liefert f¨
ur ein ξ1 ∈ (xn , x¯ ) oder ξ1 ∈ (¯
x , xn ) mit
|¯
x − xn+1 | =
0 = f (¯
x ) = f (xn ) + f ′ (ξ1 )(¯
x − xn ),
die Taylorentwicklung des Grades 1 um xn−1 mit Restgliedabsch¨
atzung ein ξ2 ∈ (xn , xn−1 )
oder ξ2 ∈ (xn−1 , xn ) mit
f ′′ (ξ2 )
f (xn ) = f (xn−1 ) + f ′ (xn−1 )(xn − xn−1 ) +
(xn − xn−1 )2 .
2
=0 (nach Newton-Verfahren)
Die erste Gleichung dividieren wir durch f ′ (ξ1 ) und setzen die zweite ein:
f (xn )
1
f ′′ (ξ2 )
M
)|
=
|¯
x − xn | =
≤
|f
(x
(xn − xn−1 )2 ≤
|xn − xn−1 |2 .
n
′
f (ξ1 )
m
2m
2m
⋄
Beispiel 8.4 Wir suchen die kleinste positive Nullstelle der Funktion f (x ) = sin(x ) − 0.8x :
Nach Bemerkung 7.1 gilt x¯ ≈ 1.1. Mit I0 = [0.9, π2 ] und den Ableitungen f ′ (x ) = cos(x ) − 0.8 und
f ′′ (x ) = − sin(x ) erhalten wir f¨
ur x ∈ I0
|f ′ (x )| ≥ | cos(0.9) − 0.8| = 0.1784
und |f ′′ (x )| ≤ 1 .
2·0.1784
Ich benutze damit m = 0.1784 und M = 1. Da ̺ := 0.3 die Ungleichung ̺ < 2m
=
M =
1
0.3568 erf¨
ullt, k¨
onnen wir I = [0.9, 1.3] setzen. Das Newton-Verfahren konvergiert also f¨
ur jedes
x0 ∈ [0.9, 1.3].
Wie viele Iterationsschritte sind n¨
otig, um ein auf 8 Stellen genaues Ergebnis zu garantieren?
M
M
0.3
Mit q = 2m
|x0 − x¯ | ≤ 2m
̺ ≤ 0.3568
≤ 0.841 erhalten wir aus der a priori Absch¨
atzung
2m 2n
n
|¯
x − xn | ≤
q ≤ 0.3568 · 0.8412
.
M
78
II Numerische Verfahren der Analysis
Wir stellen 8 genauer Dezimalstellen, also |¯
x − xn | ≤ 0.5 · 10−8 , dadurch sicher, dass wir 0.3568 ·
n
0.8412 ≤ 0.5 · 10−8 fordern. Dies ist ¨
aquivalent zu
log10 (0.3568) + 2n · log10 (0.841) ≤ log10 (0.5) − 8
log10 (0.5) − 8 − log10 (0.3568)
⇔
2n ≥
log10 (0.841)
log10 (0.5) − 8 − log10 (0.3568)
⇔
n ≥ log2
≈ 6.706 .
log10 (0.841)
Folglich m¨
ussen wir n=7 w¨
ahlen, nur dann haben wir nach der Berechnung sicher 7 genaue Stellen.
W¨
ahrend der Rechnung k¨
onnen wir nat¨
urlich auch die a posteriori Absch¨
atzung heranziehen und
dadurch vielleicht fr¨
uher aufh¨
oren zu rechnen.
In nebenstehendem Beispiel setzen wir das Abbruchkriterium auf
10−10 . Es steht also ein Programm
mit doppelt-genauer Arithmetik
zur Verf¨
ugung:
Nullstellenbestimmung nach Newton
f¨
ur die Funktion f(x) = sin(x) -.8*x
Iterationsanfang
:
.900
Maximale Anzahl der Iterationsschritte:
20
Abbruchkriterium
: .1E-09
n
0
1
2
3
4
5
6
x(n)
.90000000
1.25499130
1.14578740
1.13135540
1.13119266
1.13119259
1.13119259
f(x(n))
|x(n)-x(n-l)|
.6333E-01
-.5345E-01
-.5595E-02
-.9467E-04
-.2899E-07
-.2442E-14
.0000E+00
.9000E+00
.3550E+00
.1892E+00
.1443E-01
.2527E-03
.7721E-07
.6661E-14
Nach 6 Schritten wurde eine Nullstelle
bei 1.1311926 gefunden.
Die a posteriori Absch¨
atzungen nach 4 und 5 Iterationen
|f (x4 )|
0.2899·10−7
(a)
|x4 − x¯ | ≤
≈
≈ 1.6·10−7 ,
m
0.1784
M
1
(b)
|x4 − x¯ | ≤
(x4 − x3 )2 ≈
(0.2527·10−3 )2 ≈ 1.8·10−7 ,
2m
2·0.1784
|f (x5 )|
0.2442·10−14
(c)
|x5 − x¯ | ≤
≈
≈ 1.4·10−14 ,
m
0.1784
M
1
(d)
|x5 − x¯ | ≤
(x5 − x4 )2 ≈
(0.7721·10−7 )2 ≈ 1.5·10−14
2m
2·0.1784
zeigen, dass 4 Iterationen nicht ausreichen, wohl aber 5.
Das zweite Beispiel verdeutlicht
das m¨
ogliche Verhalten des Verfahrens, wenn die Startbedingungen nicht eingehalten werden: Das
Verfahren konvergiert nicht zur
n¨
achstgelegenen Nullstelle sondern
zu einer zuf¨
allig gefunden anderen.
Nullstellenbestimmung nach Newton
f¨
ur die Funktion f(x) = sin(x) -.1*x
Iterationsanfang
: 1.700
Maximale Anzahl der Iterationsschritte:
20
Abbruchkriterium
: .1E-09
n
0
1
2
3
4
5
6
x(n)
1.70000000
5.29049412
8.35149940
8.42706508
8.42321369
8.42320393
8.42320393
f(x(n))
.8217E+00
-.1367E+01
.4362E-01
-.2473E-02
-.6237E-0S
-.4912E-10
-.2229E-15
|x(n)-x(n-l)|
.1700E+01
.3590E+01
.3061E+01
.7557E-01
.3851E-02
.9761E-05
.6279E-10
Nach 6 Schritten wurde eine Nullstelle bei
8.4232039 gefunden.
8 Das Newton-Verfahren
8.B
79
Der Algorithmus von Steffensen (1933)
Das Newton-Verfahren benutzt die Ableitung der Funktion, die dort ebenfalls berechnet werden
muss. Steffensen ersetzt im Newton-Verfahren diese Ableitung durch einen Differenzenquotienten
f (xn + hn ) − f (xn )
f ′ (xn ) ∼
mit 0 < |hn | ≪ 1
hn
und w¨
ahlt f¨
ur hn den Funktionswert f (xn ), der ja in der Iteration gegen Null gehen soll.
Verfahren 8.5 (Steffensen (1933))
xn+1 = xn −
(f (xn ))2
f (xn + f (xn )) − f (xn )
Die Konvergenzeigenschaften formulieren wir wieder in einem Satz:
Satz 8.6 F¨
ur eine Funktion f ∈ C 2 (I ) mit einem abgeschlossenen Intervall I , das eine Nullstelle
x¯ mit f ′ (¯
x ) = 0 enth¨
alt, gilt mit
2
̺M
M := sup g ′′ (ξ) , ̺ <
und
q=
<1
(8.2)
M
2
ξ∈I
mit der Funktion


(f (x ))2
x−
f (x + f (x )) − f (x )
g(x ) :=

x¯


:
x = x¯
:
x = x¯ 
(a) Das Steffensen-Verfahren konvergiert f¨
ur jeden Startwert x0 im Intervall
x − ̺, x¯ + ̺] ∩ I : limn→∞ xn = x¯
[¯
x − ̺, x¯ + ̺] ∩ I gegen x¯ : ∀x0 ∈ [¯
(b) A priori Absch¨
atzung: |xn − x¯ | ≤
2
M
n
· q2
Beweis: Die erste Behauptung folgt aus der zweiten, folglich zeigen wir nur diese. Sie wird durch
eine Induktion nach n nachgewiesen.
Der Induktionsanfang f¨
ur n = 0 folgt mit ̺ =
2q
, s. Gleichung 8.2, aus x0 ∈ [¯
x − ̺, x¯ + ̺]:
M
2
· q1 .
M
F¨
ur den Induktionsschritt betrachten wir die Funktion g(x ). Es gelten xn+1 = g(xn ) und x¯ =
g(¯
x ), sie hat also den Fixpunkt x¯ . F¨
ur den ersten Term des Nenners gilt nach dem Mittelwertsatz
der Differenzialrechnung f¨
ur ein ξ ∈ (x , x + f (x )):
|x0 − x¯ | ≤ ̺ =
f (x + f (x )) = f (x ) + f ′ (ξ) · (x + f (x ) − x ) = f (x ) + f ′ (ξ) · f (x ) .
Wir berechnen die Ableitung von g an der Stelle x¯ und verwenden die obige Formel an der Stelle
x = x¯ + h im oberen Nenner:
x¯ + h −
g(¯
x + h) − g(¯
x)
g ′ (¯
x ) = lim
= lim
h→0
h→0
h
=
lim
h−
(f (¯
x +h))2
f (¯
x +h)·f ′ (ξ)
(f (¯
x +h))2
f (¯
x +h+f (¯
x +h))−f (¯
x +h)
h
− x¯
( mit ξ ∈ (¯
x + h , x¯ + h + f (¯
x + h) ) )
h
1
f (¯
x + h) − 0
1
= 1 − lim ′
· lim
= 1− ′
· f ′ (¯
x) = 0
h→0 f (ξ)
h→0
h
f (¯
x)
Aus dem Taylorpolynom 2. Grades um x¯ mit Restgliedabsch¨
atzung
′′
g (ξ)
g(x ) = g(¯
x ) + g ′ (¯
x ) · (x − x¯ ) +
· (x − x¯ )2
2
f¨
ur ein ξ ∈ (x , x¯ ) oder ξ ∈ (¯
x , x ) erhalten wir mit xn+1 = g(xn ) und g(¯
x ) = x¯
′′
|g (ξ)|
|xn+1 − x¯ | =
· (xn − x¯ )2 .
2
h→0
80
II Numerische Verfahren der Analysis
Hieraus erhalten wir die Absch¨
atzung
M
|xn+1 − x¯ | ≤
· (xn − x¯ )2 .
2
... F¨
ur x0 ∈ [¯
x − ̺, x¯ + ̺] weisen wir jetzt den Induktionsschluss von n auf n+1 nach: Mit der
Induktionsvoraussetzung aus obiger Formel erhalten wir
|xn+1 − x¯ | ≤
8.C
M
M
· (xn − x¯ )2 ≤
2
2
2 2n
q
M
2
=
2 2n+1
q
M
.
Nullstellen von Polynomen
Wie untersuchen die Lage der Nullstellen eines Polynoms. Wie groß kann eine Nullstelle sein?
Satz 8.7 (Lage der Nullstellen) F¨
ur ein Polynom
n
n−1
ai x i
p(x ) =
mit
an = 0
und
i=0
i=0
|ai | > 0
setzen wir
n−1
r0
:
positive L¨
osung der Gleichung
r1 :=
n−i
max
i=0,...,n−1
r2 :=
max
i=0,...,n−1
r3 :=
|an | =
i=0
|ai |
,
x n−i
ai
,
an
ai
.
an
ai
.
a0
max
i=1,...,n
F¨
ur eine Nullstellen x¯ von p(x ) und diese Zahlen gelten:
(a) |¯
x | ≤ r0
(b) r1 ≤ r0 ≤ 2r1
(c)
1
1+r3
< |¯
x | < 1 + r2
Beweis: Die Ableitung der Funktion
n−1
f (x ) =
i=0
ist
|ai |
x n−i
n−1
(n − i )|ai |
.
x n−i+1
i=0
F¨
ur x > 0 ist sie immer negativ, damit ist f (x ) f¨
ur x >
0 streng monoton fallend. Diese Eigenschaft nutzen wir
mehrfach aus.
Ferner existiert wegen lim f (x ) = ∞ und lim f (x ) =
f ′ (x ) = −
x →∞
x →0+
0 die Zahl r0 mit f (r0 ) = |an |. Da f (x ) streng monoton
ist f¨
ur x > 0, kann f keine weitere Stelle mit dieser
Eigenschaft haben.
Abb. 8.2: Zur Lage der Nullstellen
Da f streng monoton fallend ist, gelten
x < r0
⇐⇒
f (x ) > |an |
und
x > r0
⇐⇒
f (x ) < |an | .
Das werden wir im weiteren Verlauf des Beweises oft ausnutzen.
⋄
8 Das Newton-Verfahren
81
n−1
(a)
p(¯
x ) = 0 ⇐⇒
an = −
i=0
n−1
ai
impliziert
x¯ n−i
|an | ≤
i=0
|ai |
= f (|¯
x |) .
|¯
x |n−i
Aufgrund obiger Bemerkung ist die |¯
x | ≤ r0 .
(b) Bezeichnet j den Index mit dem maximalem Wert f¨
ur
n−1
f (r1 ) =
i=0
|ai |
=
r1n−i
n−1
|ai |
i=0
aj
an
n−j
n−i
n−i
ai
an
, so folgt aus
|aj |
≥
n−j
aj
an
= |an |
n−j
mit der Monotonie von f (x ) die Ungleichung r1 ≤ r0 . Die Gleichung
n−1
f (2r1 ) =
i=0
n−1
≤
i=0
n−1
|ai |
=
(2r1 )n−i
i=0
n−1
|ai |
2n−i
|ai |
=
n−i
2 r1n−i
n−i
=
i=0
ai
an
n−i
n−1
i=0
|ai |
2n−i
|an |
= |an |
2n−i
n−j
n−1
i=0
aj
an
1
2n−i
n−i
< |an |
liefert aufgrund der Monotonie r0 ≤ 2r1 . Damit ist r1 ≤ r0 ≤ 2r1 gezeigt.
(c) Wir beginnen mit der rechten Ungleichung. Ist |¯
x | ≤ 1, so ist alles gezeigt. Nehmen wir also
|¯
x | > 1 an:
Wir teilen 0 = p(¯
x) =
n−1
n
x¯ = −
i=0
n
¯i
i=0 ai x
durch an und l¨
osen nach |¯
x |n auf. Aus
ai i
x¯
an
erhalten wird die Absch¨
atzung
n−1
n
|¯
x | ≤
i=0
|ai | i
|¯
x | ≤ r2
|an |
Diese dividieren wird durch
|¯
x | < 1 + r2 .
n−1
|¯
x |i = r2
i=0
n
|¯
x | , l¨
osen
r2 |¯
|¯
x |n − 1
x |n
<
.
|¯
x| − 1
|¯
x| − 1
nach x¯ auf und erhalten
F¨
ur die linke Ungleichung definieren wir ein Polynom
q(y) := y n · p
1
y
n
ai y n−i .
=
i=0
q hat die gleichen Koeffizienten wie p, jedoch mit Hauptkoeffizient a0 . Folglich gilt f¨
ur die
Nullstelle 1/x¯ nach der verifizierten Absch¨
atzung
1
< 1 + r3 .
|¯
x|
Hieraus folgt
1
|¯
x| >
.
⋄
1 + r3
Ohne Beweis schließen wir einen Satz u
utigen Fall an
¨ ber einen besonders gutm¨
Satz 8.8 (Nullstellen reeller Polynome ohne komplexe Nullstellen)
Ist p ein Polynom ohne komplexe Nullstellen, so konvergiert das Newton-Verfahren f¨
ur jeden Startwert, der gr¨
oßer als die gr¨
oßte (kleiner als die kleinste) Nullstelle ist, gegen diese Nullstelle.
Der Beweis nutzt aus, dass in diesem Falle alle Extremstellen zwischen den Nullstellen liegen und
damit außerhalb des Intervalls von der kleinsten zur gr¨
oßten Nullstelle die Ableitung von null
verschieden ist.
82
II Numerische Verfahren der Analysis
Ist die Voraussetzung des Satzes nicht erf¨
ullt, so kann es eines Extremstelle gr¨
oßer als die gr¨
oßte
Nullstelle (oder kleiner als die kleinste) geben. Mit einem Startwert gr¨
oßer als die Extremstelle
konvergiert das Newton-Verfahren nur zuf¨
allig gegen die gesuchte Nullstelle.
Dieser Satz hat jedoch in der Technik eine Bedeutung bei symmetrischen Matrizen:
Bemerkung 8.9 Da alle Eigenwerte symmetrischer Matrizen reell sind, sind alle Nullstellen der
charakteristischen Polynome symmetrischer Matrizen reell und damit die Voraussetzungen des Satzes erf¨
ullt. Die charakteristischen Polynome symmetrischer Matrizen des Grades n haben damit
auch n Nullstellen, wenn sie mit ihrer Vielfachheit gez¨
ahlt werden.
Symmetrisch sind zum Beispiel dreidimensionale Spannungs- und Dehnungsmatrizen, aber auch
h¨
oherdimensionale Matrizen, die in Finit-Element-Berechnungen auftreten.
9 Sukzessive Approximation
83
§ 9 Sukzessive Approximation
9.A
Bisherige Verfahren als Iterationsverfahren
Tab. 9.1: Nullstellenverfahren als Iterationen
Verfahren
Funktion
Iteration
Newton
ΦN (x ) := x −
f (x )
f ′ (x )
xn+1 = xn −
Steffensen
ΦS (x ) := x −
(f (x ))2
f (x + f (x )) − f (x )
xn+1
Regula falsi
ΦR (x ) wird entsprechend definiert.
xn+1 = ΦR (xn )
Bisektion
ΦB (x ) wird entsprechend definiert.
xn+1 = ΦB (xn )
f (xn )
= ΦN (xn )
f ′ (xn )
(f (xn ))2
= xn −
= ΦS (xn )
f (xn + f (xn )) − f (xn )
Alle Iterationsfunktionen Φ in Tab. 9.1 sind stetig, daher liefert ein Grenz¨
ubergang
x¯ = lim xn+1 = lim Φ(xn ) = Φ( lim xn ) = Φ(¯
x) .
n→∞
n→∞
n→∞
Der Grenzwert der Iteration x¯ ist also ein Fixpunkt des Verfahrens, der Funktion Φ. Ferner erkennt
man an obigen Definitionen, dass x genau dann Nullstelle von f ist, wenn es ist Fixpunkt von Φ
ist.
Die Iterationsvorschriften in Tab. 9.1 wurden aufgrund geometrischer Ideen oder deren Verfeinerungen gefunden. Die letzte Aussage kann jedoch auch von anderen Iterationsvorschriften erf¨
ullt
werden:
Beispiel 9.1 (Spezielle Iterationsverfahren zur Nullstellenbestimmung)
√
√
x 2 − 2x − 8 = 0 ⇔ x = 2x + 8 ∨ x = − 2x + 8
1
⇔ x = (x 2 − 8)
2
8
⇔ x=
x −2
8
⇔ x =2+
x
Abb. 9.1: Sukzessive Approximation, |φ′ | < 1
Frage 9.2
Abb. 9.2: Sukzessive Approximation, |φ′ | > 1
Welches Verfahren konvergiert f¨
ur welchen Startwert gegen welchen Fixpunkt?
84
II Numerische Verfahren der Analysis
• Abb. 9.1 und 9.2 zeigen, dass die Betr¨
age der Ableitungen notwendig kleiner 1 sein m¨
ussen.
• Ferner muss es um einen Fixpunkt x¯ ein Intervall I geben, dass in sich abgebildet wird:
Φ(I ) ⊂ I .
Dies ist der Fall, falls
∃ q < 1 ∀x , y ∈ I : |Φ(x ) − Φ(y)| ≤ q|x − y|
gilt. Die im letzten Punkt beschriebene Eigenschaft heißt kontrahierend. Sie wird im Weiteren
eingehender untersucht.
9.B
Kontrahierende Funktionen und Fixpunktsatz
Definition 9.3 (Kontrahierende Funktion) Eine Funktion Φ : I → I auf einem abgeschlossenen Intervall I heißt kontrahierend, falls
∃(q < 1)∀(x , y ∈ I ) : |Φ(x ) − Φ(y)| ≤ q|x − y|
gilt.
Satz 9.4 (Eigenschaften kontrahierender Funktionen)
Mit der Bezeichnung xn+1 := Φ(xn ) gelten:
Φr (xs ) = Φr −1 (xs+1 ) = ... = xr +s ,
r
r
|Φ (x ) − Φ (y)|
|xr +l − xr +m |
≤
(9.1)
|xn+i − xn |
=
(x ) − Φ
r −1
≤
(9.1)
r
(y) ≤ q |x − y| ,
(9.2)
q r |xl − xm | ,
(9.3)
|Φr (xl ) − Φr (xm )|
(9.2)
i
≤
=
|xn+i − xn |
q Φ
r −1
|xn+j − xn−1+j |
j =1
q i+1
≤
(9.3)
≤
i
j =1
q j |xn − xn−1 |
−q
q
|xn − xn−1 | ≤
|xn − xn−1 | ,
q −1
1−q
(9.3)
q
qn
|xn − xn−1 | ≤
|x1 − x0 | .
1−q
1−q
(9.4)
(9.5)
Welche differenzierbare Funktionen Φ : I → I sind kontrahierend? Zur Beantwortung dieser Frage
ziehen wir den Mittelwertsatz der Differenzialrechnung heran und erhalten mit q := max |Φ′ (x )|
x ∈I
Φ(x ) − Φ(y)
aus der Gleichung
= |Φ′ (ξ)| ≤ q die Absch¨
atzung
x −y
∀(x , y ∈ I ) : |Φ(x ) − Φ(y)| ≤ q|x − y| .
Hieraus folgt
(9.6)
Satz 9.5 Ist Φ : I → I differenzierbar und maxx ∈ I |Φ′ (x )| < 1, so ist Φ kontrahierend mit
q := maxx ∈ I |Φ′ (x )|.
Wir kommen zum zentralen Satz dieses Kapitels:
Satz 9.6 (Fixpunktsatz) (Stefan Banach)
Ist Φ : I → I eine auf dem abgeschlossenes Intervall I stetige und kontrahierende Abbildung, so
gelten:
(a) Φ hat genau einen Fixpunkt auf I :
∃! x¯ ∈ I : Φ(¯
x ) = x¯
(b) Φ konvergiert f¨
ur jeden Startwert aus I gegen x¯ : Mit xn+1 = Φ(xn ) gilt
∀ x0 ∈ I lim xn =¯
x
n→∞
qn
|x1 − x0 |
1−q
(d) Zweite `
a priori Absch¨
atzung:
∀ n ∈ N : |¯
x − xn | ≤ q n |¯
x − x0 |
q
` posteriori Absch¨
(e) A
atzung:
∀ n ∈ N : |¯
x − xn | ≤
|xn − xn−1 |
1−q
(c) Erste `
a priori Absch¨
atzung:
∀ n ∈ N : |¯
x − xn | ≤
9 Sukzessive Approximation
85
Beweis: Zun¨achst zeigen wir, dass die Folge xn f¨ur jeden Startwert x0 ∈ I konvergiert: Gl. 9.5
besagt
qn
|x1 − x0 | .
1−q
Die linke Seite kann damit unabh¨
angig von i begrenzt werden. Damit ist diese Folge eine CauchyFolge, die nach [25, Satz 19.3, Seite 108] einen Grenzwert hat:
|xn+i − xn | ≤
x¯ := lim xn .
n→∞
Jetzt werden die einzelnen Behauptungen nachgewiesen:
(a) Existenz eines Fixpunkts: Mit Hilfe der Stetigkeit von Φ (Vertauschbarkeit von Funktion und
Grenzwert) zeigen wir, dass jeder Grenzwerte einer solchen Folge ein Fixpunkt von Φ ist:
Φ(¯
x ) = Φ( lim xn ) = lim Φ(xn ) = lim xn+1 = x¯
n→∞
n→∞
n→∞
(9.7)
Eindeutigkeit des Fixpunkts: Seien x¯1 und x¯2 zwei verschiedene Fixpunkt von Φ, so gilt wegen
Φ(¯
x1 ) = x¯1 und Φ(¯
x2 ) = x¯2
|¯
x1 − x¯2 | = |Φ(¯
x1 ) − Φ(¯
x2 )| ≤ q|¯
x1 − x¯2 | < |¯
x1 − x¯2 |
Dies ist ein Widerspruch, also k¨
onnen x¯1 und x¯2 nicht verschieden sein.
(b) Die Existenz des Grenzwerts ist gezeigt. Dass dieser gleich dem Fixpunkt ist, folgt aus Gl. 9.7.
(c) Mit Gl. 9.5 folgt
|¯
x − xn | = | lim xn+i − xn | = lim |xn+i − xn | ≤
i→∞
i→∞
qn
|x1 − x0 | .
1−q
(d) Mit |¯
x − xn | = |Φ(¯
x ) − Φ(xn−1 )| ≤ q|¯
x − xn−1 | folgt die Aussage durch eine Induktion nach
n.
(e) Mit Gl. 9.4 folgt:
|¯
x − xn | = | lim xn+i − xn | = lim |xn+i − xn | ≤
i→∞
i→∞
q
|xn − xn−1 | .
1−q
Beispiel 9.7 Wir greifen Beispiel 9.1 auf. Die Funktion
f (x ) = x 2 − 2x − 8
hat die Nullstellen x1 = −2 und x2 = 4. Diese versuchen wir jetzt durch sukzessive Approximation
mit den Iterationsvorschriften aus 9.1 zu bestimmen:
√
(a) Φ1 (x ) = 2x + 8
mit dem Definitionsbereich
DΦ1 = [−4 ; ∞) :
Wir bestimmen den Bereich, auf dem Φ1 kontrahierend ist:
√
1
•
2x + 8 > 1 ⇐⇒ 2x + 8 > 1
< 1 ⇐⇒
Φ′1 (x ) = √
2x + 8
⇐⇒ x > −3.5
• Wir w¨
ahlen zum Beispiel I = [−3, 100] (riesig groß!) und berechnen, wobei wir ausnutzen,
dass Φ1 monoton wachsend ist, denn Φ′ (x ) ist auf dem Definitionsbereich positiv:
√ √
Φ1 (I ) = Φ1 ([−3 ; 100]) = [Φ1 (−3) ; Φ1 (100)] =
2 ; 208 ⊆ I
Damit ist Φ1 kontrahierend auf I . Das Iterationsverfahren konvergiert f¨
ur jeden Startwert aus
diesem Intervall gegen 4.
Setzt man das Wissen u
ahre Lage der Nullstelle voraus, startet man nat¨
urlich
¨ ber die ungef¨
besser mit einem kleineren Intervall, z.B. I = [3 ; 5].
√
(b) Φ2 (x ) = − 2x + 8
mit dem Definitionsbereich
DΦ2 = [−4 ; ∞) :
Analog zum ersten Beispiel ergibt sich
−1
Φ′2 (x ) = √
und damit
Φ′2 (x ) < 1 ⇐⇒ x > −3.5 .
2x + 8
86
II Numerische Verfahren der Analysis
Wegen Φ2 (x ) ≤ 0 f¨
ur alle x ∈ DΦ2 w¨
ahlen wir I = [−3, 0] und berechnen, wobei wir ausnutzen,
dass Φ1 monoton fallend ist,
√
√
Φ2 (I ) = Φ2 ([−3 ; 0]) = [Φ2 (0) ; Φ2 (−3)] = −2 2 ; − 2 ⊆ I .
Damit ist Φ2 kontrahierend auf I . Das Iterationsverfahren konvergiert f¨
ur jeden Startwert aus
diesem Intervall gegen −2.
(c) Φ3 (x ) =
Wegen
1
2
x2 − 8
mit dem Definitionsbereich
Φ′3 (x ) = |x | < 1 ⇐⇒
D Φ3 = R :
−1<x <1
ist dieses Verfahren auf keinem Intervall, das eine der beiden Nullstellen enth¨
alt, konvergent.
8
mit
DΦ4 = R\{2}
und
WΦ4 = R\{0} :
(d) Φ4 (x ) = x −2
Wir bestimmen den Bereich, auf dem Φ4 kontrahierend ist:
−8
Φ′4 (x ) =
liefert
(x − 2)2
√
Φ′4 (x ) < 1 ⇐⇒ 8 < (x − 2)2 ⇐⇒ 2 2 < |x − 2|
√
√
⇐⇒ 2 2 < x − 2 ∨ 2 2 < 2 − x
√
√
⇐⇒ x > 2 + 2 2 ≈ 4.8 ∨ x < 2 − 2 2 ≈ −0.8
Nur der zweite Fall verspricht Erfolg. Da Φ4 monoton fallend ist, erhalten wir f¨
ur I = [−6 ; −1]
8
Φ4 (I ) = Φ4 ([−6 ; −1]) = [Φ4 (−1) ; Φ4 (−6)] = − ; −1 ⊆ I .
3
Damit ist Φ4 kontrahierend auf I . Das Iterationsverfahren konvergiert f¨
ur jeden Startwert aus
diesem Intervall gegen −2.
(e) Φ5 (x ) = 2 + x8
mit
DΦ5 = R\{0}
und
WΦ5 = R\{2}
Wir bestimmen den Bereich, auf dem Φ4 kontrahierend ist:
−8
Φ′5 (x ) = 2
liefert
x
√
Φ′5 (x ) < 1 ⇐⇒ 8 < x 2 ⇐⇒ 2 2 < |x |
√
√
⇐⇒ x > 2 2 ≈ 2.8 ∨ x < −2 2 ≈ −2.8
Nur der erste Fall verspricht Erfolg. Da Φ5 monoton fallend ist, erhalten wir f¨
ur I = [3 ; 8]
14
⊆I .
3
Damit ist Φ5 kontrahierend auf I . Das Iterationsverfahren konvergiert f¨
ur jeden Startwert aus
diesem Intervall gegen 4.
Φ5 (I ) = Φ5 ([3 ; 8]) = [Φ5 (8) ; Φ5 (3)] = 3 ;
9.C
Das Newton-Verfahren als sukzessive Approximation
Wir wenden den Banachschen Fixpunktsatz auf das Newton-Verfahren an und berechnen zun¨
achst
Φ′N (x ) =
x−
f (x )
f ′ (x )
′
=1−
f ′ (x )2 − f (x )f ′′ (x )
f (x )f ′′ (x )
=
.
f ′ (x )2
f ′ (x )2
Satz 9.8 (Das Newton-Verfahren als Iterationsverfahren)
Gilt auf dem Intervall I = [¯
x − r ; x¯ + r ] f¨
ur ein q ∈ R
f (x )f ′′ (x )
≤q <1,
f ′ (x )2
(9.8)
so konvergiert das Newton-Verfahren f¨
ur jeden Startwert aus den Intervall I = [¯
x − r ; x¯ + r ] gegen
den einzigen Fixpunkt x¯ in diesem Intervall.
9 Sukzessive Approximation
87
Beweis: Wir weisen die Voraussetzungen des Banachschen Fixpunktsatzes nach:
• Nach Satz 9.5 ist die Abbildung Φ kontrahierend.
• F¨
ur y ∈ [¯
x − r ; x¯ + r ] gilt
|Φ(y) − x¯ | = |Φ(y) − Φ(¯
x )| ≤ q|y − x¯ | ≤ q r < r .
Damit bildet Φ das Intervall I in sich ab: Φ(I ) ⊆ I .
′′
)
Nachgewiesen werden muss die Eigenschaft f (xf ′)f(x )(x
< 1 f¨
ur alle Punkte des Intervalls I . In
2
einer fr¨
uheren Ausgabe von [34] war dies lediglich f¨
ur den Startwert der Iteration gefordert. Dies
reicht nicht aus, wie das folgende Beispiel mit der Funktion f (x ) = log10 (x ) − cos(2x ) mit dem
Startwert x0 = 12.9 zeigt:
1
+ 2 sin(2x )
x ln(10)
1
f ′′ (x ) = − 2
+ 4 cos(2x )
x ln(10)
f (12.9)f ′′ (12.9)
Trotz
≈ 0.63 < 1 konvergiert
f ′ (12.9)2
das Verfahren nicht:
f ′ (x ) =
Abb. 9.3: Beispiel f (x ) = log10 (x ) − cos(2x )
12.9 12.64430941 12.3136661112.54453072 14.43042011 16.28046976 15.84833421
15.43712714 15.76785174 14.99892732 15.52462139 15.8983136 15.54404881
15.94146081 15.60771226 16.1836212 15.80392991 15.27304755 15.63235988
16.38354447 15.87985259 15.51010235 15.87068765 15.49114952 15.83909682
15.41063058 15.73974384 14.45268202 16.16357974 15.7929377215.21095061
15.5974028 16.12661066 15.7708865 15.03223318 15.53111271 15.91184742
15.56603244 16.00230442 15.67487272 17.56273395 19.5488805 18.98690459
18.42808708 18.8364933 28.269691 168.9379767 169.9886825 168.8406506
169.976704 168.8059038 169.9827395 168.8237096 169.9789179 168.8125077
169.9811393 168.8190492 169.9797676 168.8150197 169.9805876 168.8174324
169.9800871 168.815961 169.980389 168.8168489169.9802055 168.8163095
169.9803165 168.8166358169.9802492168.8164379 169.9802899168.8165578
169.9802652 168.8164852 169.9802802 168.8165292 169.9802711 168.8165025
INTERRUPT
In der neuen Ausgabe ist diese Voraussetzung ge¨
andert. Jede Iterationsstelle muss Gleichung
9.8 erf¨
ullen. Dies erfordert zus¨
atzliche Rechenzeit w¨
ahrend der Berechnung! Die vorherige Ein¨
schr¨
ankung des Startintervalls und Uberpr¨
ufung von 9.8, gegebenenfalls auch grafisch, ziehe ich
vor.
88
II Numerische Verfahren der Analysis
§ 10 Numerische Integration
Gesucht ist eine N¨
aherung f¨
ur den Wert des Integrals einer Funktion f (x ) auf dem Intervall [a, b].
Hierbei ist, wie oft in den Anwendungen, die Funktion nicht analytisch gegeben, sondern es sind
lediglich die Funktionswerte an einigen Stellen innerhalb des Intervalls bekannt.
Diese Stellen heißen St¨
utzstellen. Sie zerlegen das Intervall in Teilintervalle (Partition des Intervalls). H¨
aufig werden die St¨
utzstellen in gleichem Abstand genommen, z.B. als Messstellen einer
Versuchsreihe. In diesem Fall spricht man von einer ¨
aquidistanten Partition des Intervalls.
Bezeichnungen 10.1 Wir legen allgemeine Bezeichnungen fest, die im gesamten Paragrafen beibehalten werden, vgl. Abb. 10.1:
Gegeben: Eine Partition a = x0 < x1 < . . . < xn = b des Intervalls [a, b] und die
Funktionswerte an den St¨
utzstellen f (x0 ), f (x1 ), . . . , f (xn ).
gesucht: Eine gute N¨
aherung f¨
ur das Integral I =
u
at der N¨
aherung.
¨ ber die Qualit¨
b
a
f (x ) dx und eine Aussage
Intervalll¨
ange: H := b − a
aquidistante Partition: Die Schrittweite ist konstant.
¨
xn − xo
H
=
n
n
xn − x0
H
Zerlegung: xi := x0 + i ·
= x0 + i ·
= x0 + i · h
n
n
Schrittweite: h := x1 − x0 =
10.A
(i = 0, ..., n)
Trapezregel
Gem¨
aß Abb. 10.2 teilen wir das Intervall [a, b] zun¨
achst nicht auf (n = 1, h = H ) und berechnen
b
ache des Trapezes, das mit Hilfe der beiden
eine erste N¨
aherung f¨
ur I = a f (x )dx durch die Fl¨
Punkte (x0 , f (x0 )) und (x1 , f (x1 )) gebildet wird:
Verfahren 10.2 (einfache Trapezregel)
h
(10.1)
I ≃ T := (f (x0 ) + f (x1 ))
2
Wir sch¨
atzen den Fehler mit Hilfe der Tangenten, jeweils bis zur halben Schrittweite, ab und berechnen die Fl¨
ache nach Abb. 10.3 als T ∗ -Regel:
L =
R =
h
(f (x0 ) + f (x0 ) +
4
h
(f (x1 ) + f (x1 ) −
4
¨
Abb. 10.1: Aquidistante
Partition
h ′
f (x0 )) =
2
h ′
f (x1 )) =
2
h
f (x0 ) +
2
h
f (x1 ) −
2
h2 ′
f (x0 )
8
h2 ′
f (x1 )
8
Abb. 10.2: Trapezregel
Abb. 10.3: T ∗ -Regel
10 Numerische Integration
T∗ = L + R =
= T+
89
h
h2
(f (x0 ) + f (x1 )) + (f ′ (x0 ) − f ′ (x1 ))
2
8
h2 ′
(f (x0 ) − f ′ (x1 ))
8
(10.2)
Behauptung: : Hat f ∈ C 2 ([x0 , x1 ]) keinen Wendepunkt auf dem Intervall [x0 , x1 ], so gelten:
T ≤ I ≤ T∗
oder
T ≥ I ≥ T ∗,
und
h 3 ′′
|f ′ (x0 ) − f ′ (x1 )| =
|f (ξ)|
|I − T | ≤ |T ∗ − T | =
8
8
h2
f¨
ur ein
ξ ∈ [x0 , x1 ]
(10.3)
Die erste Gleichheit gilt wegen Gl. 10.2, die letzte folgt mit dem Mittelwertsatz der Differenzialrechnung.3
Verfahren 10.3 (Trapezregel bei ¨
aquidistanter Partition) Mit den Bezeichnungen H = b −
b−a
H
a und h = n = n wenden wir die einfache Trapezregel (Verfahren 10.2) auf jedes Teilintervall
an:
T (h) =
h
(f (x0 ) + 2f (x1 ) + ... + 2f (xn−1 ) + f (xn )) = h
2
Fehlerabsch¨
atzung:
F¨
ur f ∈
erhalten f¨
ur geeignete ξi ∈ [xi−1 , xi ]
|I − T (h)| ≤
h3
8
C 2 ([a, b])
n
i=1
|f ′′ (ξi )| ≤
f (x0 ) + f (xn )
+
2
n−1
f (xi )
(10.4)
i=1
wenden wir in jedem Teilintervall Gl. 10.3 an und
h3 · n
h 2 (b − a)
max |f ′′ (ξ)| =
max |f ′′ (ξ)|
8 ξ∈[a,b]
8
ξ∈[a,b]
(10.5)
Diese Herleitung setzt voraus, dass die Funktion in keinem Teilintervall einen Wendepunkt hat.
Dies wird bei fortschreitender Verringerung der Schrittweite n¨
aherungsweise erreicht, so dass diese
Formel in jedem Fall eine gute N¨
aherung an den Fehler darstellt.
1.4
Beispiel 10.4 Wir berechnen
2
e −x dx . Das unbestimmte Integral
2
e −x dx besitzt keine
1
elementare Stammfunktion, die Berechnung muss daher numerisch erfolgen:
T (0.2) = 0.1 · e −1 + 2e −1.44 + e −1.96
T (0.1) = 0.05 · e
−1
+ 2e
−1.21
+ 2e
−1.44
≈ .098
+ 2e −1.69 + e −1.96
≈ .0974
Verfahren 10.5 (Trapezregel bei fortgesetzter Intervallhalbierung)
Zur Verbesserung
der N¨
aherung werden die Teilintervalle und damit die Schrittweite fortlaufend halbiert. Es gelten
h1 = H , h2 = H/2 und im m-ten Schritt mit n = 2m−1 und hm = H/2m−1 nach Gl. 10.4


2m−1 −1
H
H  f (x0 ) + f (xn )
i ·H 
+
Tm = T
= m−1
f x0 + m−1
(10.6)
2m−1
2
2
2
i=1
In dieser Gleichung ersetzen wir m durch m + 1 und isolieren in dem neuen Ausdruck Tm . Damit
kann bei jeder Intervallhalbierung das bisher erreichte Ergebnis weiter benutzt werden und so die
Berechnung des neuen Ergebnisses erheblich beschleunigt werden!
Tm+1 = T
=
H
2m
1
H
· m−1
2 2
2m −1
H
f (x0 ) + f (xn )
= m
+
2
2

2m−1 −1
f
(x
)
+
f
(x
)
0
n

+
f
2
i=1
Tm
3
174]
f
i=1
x0 + i ·
x0 + (2i )
H
2m

H 
2m
Mit einer aufw¨
andigeren Fehlerabsch¨
atzung erh¨
alt man sogar |I − T | ≤
h 3 ′′
|f (ξ)|; ξ ∈ [x0 , x1 ] , s. z.B. [48, S.
12
90
II Numerische Verfahren der Analysis
H
+ m
2
2m−1
f
i=1
x0 + (2i − 1)
H
2m
Dies fassen wir zusammen
T1 = T (H ) =
Tm+1 =
10.B
H
H
(f (x0 ) + f (xn )) =
(f (x0 ) + f (x0 + H ))
2
2
Tm
H
+ m ·
2
2
2m−1
f
x0 + (2i − 1)
i=1
;
(10.7)
H
2m
(10.8)
Simpson-Regel
Bemerkung 10.6 (Exakte Polynom-Integration)
(a) T berechnet Polynome 1. Grades genau.
(b) Versuch: Eine Linearkombination pT1 +qT2 soll Polynome des Grades kleiner oder gleich zwei
genau berechnen! Wie sind p und q zu w¨
ahlen?
Zur Beantwortung setzen wir f¨
ur zwei Integrale diese Linearkombination gleich dem exakten
Integralwert und bestimmen aus diesen zwei Gleichungen die Parameter p und q:
1
1 =
1 dx = p · T1 + q · T2 = p · 1 + q · 1
0
1
3
1
=
0
x 2 dx = p · T1 + q · T2 = p ·
1
3
+q ·
2
8
Das Gauß-Schema
1
1
1
1
2
3
8
1
3
liefert die L¨
osung q =
→
4
3
1 1
0 − 18
1
− 16
und p = − 13 .
Dieses Ergebnis formulieren wir zu einem neuen Verfahren. Mit der Bezeichnung h =
folgt aus Gl. 10.7 und 10.8:
H
2
= x1 −x0
Verfahren 10.7 (Simpson-Regel)
S
:=
=
=
4 · T21 + H2 f x0 + H2
4 · T2 − T1
=
3
3
H
(f
(x
)
+
f
(x
+
H
))
+
2Hf
x0 + H2
0
0
2
3
h
(f (x0 ) + 4f (x1 ) + f (x2 ))
3
− T1
=
=
T1 + 2Hf x0 +
3
H
2
H
(f (x0 ) + 4f (x1 ) + f (x2 ))
6
T1 benutzt x0 = a und x1 = b, T2 benutzt x0 = a, x1 = a+b
2 und x2 = b. Die Simpson-Regel ist
auch als Keplersche Fassformel bekannt. Nachgewiesen werden muss noch, dass sie alle Polynome
des Grades kleiner gleich zwei exakt integriert. Es gilt sogar der
Satz 10.8 Die Simpson-Regel integriert Polynome dritten Grades exakt.
10 Numerische Integration
91
Beweis: Wir integrieren das um die Mitte des Integrationsintervalls x1 =
Polynom dritten Grades
x0 +x2
2
entwickelte
3
f (x ) =
i=0
ai (x − x1 )i
.
Bei der Berechnung des Integrals benutzen wir die Bezeichnung h = x1 − x0 = x2 − x1 und beachten,
dass sich die Terme mit geradem Exponenten aufheben:
3
x2
f (x )dx
=
x0
i=0
1
ai
(x − x1 )i+1
i +1
x2
x0
a1
a1
= a0 (x2 − x1 ) − a0 (x0 − x1 ) + (x2 − x1 )2 − (x0 − x1 )2
2
2
a2
a2
a3
a3
3
3
+ (x2 − x1 ) − (x0 − x1 ) + (x2 − x1 )4 − (x0 − x1 )4
3
3
4
4
a1 2 a1 2 a2 3 a2 3 a3 4 a3 4
= a0 h + a0 h + h − h + h + h + h − h
2
2
3
3
4
4
2
3
= 2a0 h + a2 h
3
S
=
h
3
3
3
ai (−h)i + 4a0 +
i=0
ai h i
i=0
h
(a0 − a1 h + a2 h 2 − a3 h 3 + 4a0 + a0 + a1 h + a2 h 2 + a3 h 3 )
=
3
h
2
=
(6a0 + 2a2 h 2 ) = 2a0 h + a2 h 3
3
3
Damit ist der Beweis gef¨
uhrt.
⋄
Wie bei der Trapezregel teilen wir das Gesamtintervall [a, b] in Teilintervalle auf und wenden
die Simpson-Regel auf jedes Teilintervall an. Da die Simpson-Regel immer drei St¨
utzstellen, also
zwei Teilintervalle benutzt, wird das Gesamtintervall in eine gerade Anzahl von Teilintervallen mit
einer ungeraden Anzahl von St¨
utzstellen zerlegt.
Verfahren 10.9 (Simpson-Regel bei beliebiger Schrittweite)
Mit der Partition
a = x0 < x1 < . . . < x2m = b (m ∈ N) des Intervalls [a, b] der Schrittweite h = b−a
2m erhalten wir
als N¨
aherung des Integrals
S (h) =
h
3
m−1
f (x0 ) + 2
m
f (x2k ) + 4
k =1
f (x2k −1 ) + f (x2m ) .
k =1
Ohne Beweis f¨
ugen wir eine Fehlerabsch¨
atzung an: F¨
ur f ∈ C 4 gilt
b
a
f (x )dx − S (h) ≤
b−a 4
h max f (4) (ξ) .
180
ξ∈[a,b]
Bemerkung 10.10
(a) Die Simpson-Regel S = 43 · T2 − 13 · T1 integriert Polynome dritten Grades exakt. Dies erreicht
auch die Regel
1
2
h
h2
T + T ∗ = (f (x1 ) + f (x0 )) + (f ′ (x0 ) − f ′ (x1 )) ,
3
3
2
12
mit der Tangentenregel T ∗ .
(b) Simpsons urspr¨
ungliche Idee ersetzt eine beliebige Funktion durch ein Polynom zweiten Grades, das durch die St¨
utzstellen (x0 , f (x0 )), (x1 , f (x1 )) und (x2 , f (x2 )) (xi := x0 +i ·h; i = 0, 1, 2)
geht und integriert dieses Polynom exakt:
Der Ansatz p2 (x ) = a + b · x + c · x 2 liefert das lineare Gleichungssystem
a + b · x0 + c · x02 = f (x0 )
a + b · x1 + c · x12 = f (x1 )
a + b · x2 + c · x22 = f (x2 ) ,
92
II Numerische Verfahren der Analysis
das mit Hilfe der Cramerschen Regel gel¨
ost werden kann. Wir geben sofort das Ergebnis an,
das als Lagrangesche Interpolationsformel bekannt ist. Zur Probe kann p2 (xi ) = f (xi ) schnell
verifiziert werden:
2
2
p2 (x ) =
f (xi )
i=0
j =0
j =i
x − xj
xi − xj
Das Integral u
¨ ber p2 berechnen wir mit Hilfe der linearen Substitution x = x0 +h·s, dx = h ds:


x2
2
p2 (x ) dx
x0
=
0



= h

= h
2
2
f (xi )
i=0
j =0
j =i
2
f (x0 )
2
s −j
 h ds
i −j
2
(s − 1)(s − 2) ds − f (x1 )
0
2
f (x0 )
2
0
0
s(s − 2) ds +
2
s 2 − 3s + 2 ds − f (x1 )
s3
0
s 2 − 2s ds +
s2
f (x2 )
2
0
2
f (x2 )
2
0
s3
f (x0 )
f (s2 )
3·
= h
−
+ 2 · s − f (x1 )
− s2 +
2
3
2
3
2
f (x2 ) 8
f (x0 ) 8
8
− 6 + 4 − f (x1 )
−4 +
−2
= h
2
3
3
2
3
h
=
(f (x0 ) + 4f (x1 ) + f (x2 ))
3
Bemerkung 10.11 (Simpson-Regel bei fortgesetzter Intervallhalbierung)
mus
H
4Ti+1 − Ti
Si := S
=
i
2
3

2
s(s − 1) ds 

s 2 − s ds 
s3 s2
−
3
2
2
0
Der Algorith-
• ist genau f¨
ur Polynome dritten Grades,
• liefert eine einfache Berechnung f¨
ur die Simpsonregel und
• konvergiert schneller als Ti .
10.C
Romberg-Integration
Bemerkung 10.12
(a) In dem Ansatz Ci = pSi+1 + qSi werden p und q so gew¨
ahlt, dass Polynome vierten Grades
exakt integriert werden. Es ergeben sich
• p=
16
15
1
q = − 15
,
• Polynome f¨
unften Grades werden exakt integriert und
• eine h¨
ohere Konvergenzgeschwindigkeit.
(b) In dem Ansatz Di := pCi+1 + qCi werden p und q so gew¨
ahlt, dass Polynome sechsten Grades
exakt integriert werden. Es ergeben sich
• p=
64
63
1
q = − 63
,
• Polynome siebten Grades werden exakt integriert und
• eine h¨
ohere Konvergenzgeschwindigkeit.
10 Numerische Integration
93
Dieses Verfahren wird verallgemeinert:
Verfahren 10.13 (Romberg-Integration der Stufe n) Zur n¨
aherungsweisen Berechnung des
b
Integrals I = a f (x )dx berechnet das Rombergverfahren
(a) in der Anlaufrechnung nach der Trapezregel mit fortgesetzter Intervallhalbierung (Gl. 10.7,
10.8) mit H := b − a
H
(f (a) + f (b))
T1 :=
2

2i−1
1
H
H
Ti+1 :=
Ti + i−1
f a + (2j − 1) i 
2
2
2
j =1
(b) im Aufbau eines Dreiecksschemas (das in einer Matrix gespeichert wird)
Ri,o := Ti
Ri,k
:=
(i = 1, ..., n)
4k Ri+1,k −1 −
4k − 1
(Anlaufrechnung)
Ri,k −1
k = 1, ..., n − 1
;
i = 1, ..., n − k
Das Dreiecksschema wird dargestellt. Die erste Spalte enth¨
alt die Anlaufrechnung, die weiteren
Spalten die Ergebnisse der einfach zu berechnenden zweiten Formel:
k R
Ri,1 Ri,2
Ri,3
Ri,4
· · · · · · Ri,n−2 Ri,n−1
i,o
i
T1
S1
C1
D1
R1,4
· · · · · · R1,n−2 R1,n−1
T2
S2
C2
D2
R2,4
· · · · · · R2,n−2
..
T3
S3
C3
D3
.
··· ···
..
..
T4
S4
C4
.
.
···
..
..
T5
S5
.
.
Rn−4,4
..
..
.
.
T6
Dn−3
..
..
.
.
Cn−2
..
Sn−1
.
Tn
(c) Das Ergebnis, also die beste N¨
aherung, steht in R1,n−1 .
Bemerkung 10.14
(a) Ri,k ist exakt auf P2k +1 .
(b) Die Genauigkeit der Ergebnisses h¨
angt von der Anzahl der signifikanten Stellen in der Anlaufrechnung ab.
(c) Die Stufe n wird solange erh¨
oht, bis hinreichend viele Stellen im Ergebnis unver¨
andert bleiben.
Hierbei k¨
onnen die bisherigen Ergebnisse im Schema benutzt werden.
Beispiel 10.15 Integration der Monome ungeraden Grades bis elf auf dem Intervall [0, 4] mit dem
Romberg-Verfahren sechster Stufe:
• 12 4 î0 4 6 Romberg 't*1'
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
8.0000
.0000
8.0000
8.0000
8.0000
8.0000
.0000
.0000
8.0000
8.0000
8.0000
.0000
.0000
.0000
8.0000
8.0000
.0000
.0000
.0000
.0000
8.0000
.0000
.0000
.0000
.0000
.0000
94
II Numerische Verfahren der Analysis
Die Trapez-Regel integriert jedes Polynom 1. Grades exakt, folglich stimmen alle Werte der RombergTabelle mit dem Integralwert u
¨berein.
• 12 4 î0 4 6 Romberg 't*3'
128.0000
80.0000
68.0000
65.0000
64.2500
64.0625
64.0000
64.0000
64.0000
64.0000
64.0000
.0000
64.0000
64.0000
64.0000
64.0000
.0000
.0000
64.0000
64.0000
64.0000
.0000
.0000
.0000
64.0000
64.0000
.0000
.0000
.0000
.0000
64.0000
.0000
.0000
.0000
.0000
.0000
Die Simpson-Regel integriert jedes Polynom dritten Grades exakt, folglich stimmen ab der zweiten
Spalte alle Werte der Romberg-Tabelle mit dem Integralwert u
¨berein.
• 12 4 î0 4 6 Romberg 't*5'
2048.0000
1088.0000
788.0000
709.2500
689.3281
684.3330
768.0000
688.0000
683.0000
682.6875
682.6680
.0000
682.6667
682.6667
682.6667
682.6667
.0000
.0000
682.6667
682.6667
682.6667
.0000
.0000
.0000
682.6667
682.6667
.0000
.0000
.0000
.0000
682.6667
.0000
.0000
.0000
.0000
.0000
Die dritte Spalte integriert jedes Polynom f¨
unften Grades exakt, folglich stimmen ab dieser Spalte
alle Werte der Romberg-Tabelle mit dem Integralwert u
¨berein. Entsprechendes kann in den beiden
folgenden Beispielen beobachtet werden.
• 12 4 î0 4 6 Romberg 't*7'
32768.0000 11264.0000
16640.0000
8464.0000
10508.0000
8210.2500
8784.6875
8193.1602
8341.0420
8192.0728
8229.3151
.0000
8277.3333
8193.3333
8192.0208
8192.0003
.0000
.0000
8192.0000
8192.0000
8192.0000
.0000
.0000
.0000
8192.0000
8192.0000
.0000
.0000
.0000
.0000
8192.0000
.0000
.0000
.0000
.0000
.0000
• 12 4 î0 4 6 Romberg 't*9'
524288.0000
263168.0000
151268.0000
116968.3906
107918.4312
105624.9005
176128.0000
113968.0000
105535.1875
104901.7781
104860.3902
.0000
109824.0000 104896.0000 104857.6000 104857.6000
104973.0000 104857.7500 104857.6000
.0000
104859.5508 104857.6006
.0000
.0000
104857.6311
.0000
.0000
.0000
.0000
.0000
.0000
.0000
.0000
.0000
.0000
.0000
• 12 3 î0 4 7 Romberg 't*11'
8388608.000
4198400.000
2276348.000
1632883.965
1457825.828
1413098.029
1401854.625
2801664.000
1635664.000
1418395.953
1399473.116
1398188.762
1398106.824
.000
1557930.667
1403911.417
1398211.593
1398103.139
1398101.362
.000
.000
1401466.667 1398108.000 1398101.333 1398101.333
1398121.120 1398101.340 1398101.333
.000
1398101.417 1398101.333
.000
.000
1398101.334
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
11 Numerische Verfahren f¨
ur explizite Differenzialgleichung
95
§ 11 Numerische Verfahren fu
¨ r explizite Differenzialgleichung
Zun¨
achst behandeln wir Einschrittverfahren f¨
ur explizite Differenzialgleichung erster Ordnung. Sp¨
ater gehen wir auf die Behandlung von expliziten Differenzialgleichung zweiter Ordnung ein.
11.A
Eulersches Streckenzugverfahren
Verfahren 11.1 Wir betrachten das Anfangswertproblem
y ′ (x ) = f (x , y) ;
y(a) = ya
auf dem Intervall [a, b]. Das Eulersche Streckenzugverfahren berechnet eine N¨
aherung η(x , h) zur
Schrittweite h = b−a
der
L¨
o
sung
nach
folgendem
Algorithmus:
n
η0 := ya ,
xi
:= a + i h
(i = 0, . . . , n)
ηi
:= ηi−1 + h y ′ (xi−1 ) = ηi−1 + h f (xi−1 , ηi−1 )
(i = 1, . . . , n) .
η(x , h) ist ein Streckenzug.
F¨
ur die Berechnung der n¨
achsten St¨
utzstelle wird nur der aktuelle Wert ber¨
ucksichtigt, nicht die
vorhergehenden. Daher ist dieses Verfahren ein Einschrittverfahren.
Satz 11.2 Wir betrachten das Anfangswertproblem y ′ (x ) = f (x , y) ; y(a) = ya auf dem Intervall
[a, b]. F¨
ur den Eulerschen Streckenzug η(x , h) gilt die Fehlerabsch¨
atzung
∀ x ∈ [a, b] |y(x ) − η(x , h)| < h sup |f,y (x , y)| .
x ∈[a,b]
Beweis: s. [52, 7.1]
Dieses Verfahren hat die Konvergenzordnung 1 (Exponent von h) und konvergiert damit nicht
gut. Der wesentliche Grund liegt in der schlechten Wahl der Steigungen. Ist y1 falsch berechnet,
so wird eine falsche Steigung genommen und dieser Effekt verst¨
arkt sich noch in den folgenden
Schritten (s. Abb. 11.1). Zur Verbesserung werden im Folgenden mehrere Zwischenwerte f¨
ur x und
y betrachtet.
Abb. 11.1: Eulersches Streckenzugverfahren
Abb. 11.2: Verfahren von Runge-Kutta
96
II Numerische Verfahren der Analysis
11.B
Das Verfahren von Runge-Kutta
Verfahren 11.3 Wir betrachten das Anfangswertproblem
y ′ (x ) = f (x , y) ; y(a) = ya
auf dem Intervall [a, b]. Das Verfahren von Runge-Kutta berechnet eine N¨
aherung der L¨
osung nach
4
folgendem Algorithmus (vgl. Abb. 11.2 ):
b−a
n
:= x0 + i h
h :=
xi
(i = 0, . . . , n)
η0 := ya
ki1 := f (xi−1 , ηi−1 )
h
h
ki2 := f xi−1 + , ηi−1 + k1i
2
2
h
h
ki3 := f xi−1 + , ηi−1 + k2i
2
2
ki4 := f (xi−1 + h , ηi−1 + h k3i )
ηi
:= ηi−1 +
h(ki1 + 2ki2 + 2ki3 + ki4 )
6
(i = 1, . . . , n)
Mit η(x , h) bezeichnen wir den so gewonnenen Streckenzug.
Satz 11.4 Das Verfahren von Runge-Kutta ist ein Verfahren 4. Ordnung, d.h.
∃k ∈ R>0 ∀ x ∈ [a, b] |y(x ) − η(x , h)| < k h 4
Beweis: s. [52, 7.1]
Eine sinnvolle Wahl f¨
ur die Schrittweite ist in vielen F¨
allen h =
1
.
10 sup |f,y (x , y)|
Beispiel 11.5
(a) Wir betrachten das Anfangswertproblem y ′ (x ) = x −y; y(0) = 1 im Intervall [0, 1]. Die L¨
osung
dieser Differenzialgleichung ist nach [26, 19.9(b)] y(x ) = 2e −x + x − 1. Wegen f,y (x , y) = −1
wird die Schrittweite h = 0.1 gew¨
ahlt. Die Werte der Berechnung des ersten Schritts werden
tabellarisch erfasst:
x
η
k1j = f (x , η) = x − η k1j (j = 1, 4) 2 k1j (j = 2, 3)
0
1
−1
−1
0.05 0.95
−0.9
−1.8
0.05 0.955
−0.905
−1.81
0.1 0.9095
−0.8095
−0.8095
−5.4195
Hieraus wird η1 = 1 − 0.1 ·
y(0.1) = 0.9096748.
5.4195
6
= 0.909675 berechnet. Zum Vergleich der exakte Wert:
Diese numerische Berechnung wir nat¨
urlich mit dem Rechner durchgef¨
uhrt. Hier seine Ergebnisse, zum Vergleich mit zwei Schrittweiten, wobei η den Streckenzug und y die exakter
L¨
osung bezeichnet:
4
Diese Abbildung zeigt eine Funktion, die durch den Punkt (xi−1 , µi−1 ) verl¨
auft und die Differenzialgleichung
erf¨
ullt.
11 Numerische Verfahren f¨
ur explizite Differenzialgleichung
Schrittweite 0.1 :
97
Schrittweite 0.5 :
x
η(x , h)
y(x )
0.0 1.0000000 1.0000000
0.1 .9096750 .9096748
0.2 .8374618 .8374615
0.3 .7816368 .7816364
0.4 .7406406 .7136401
0.5 .7130619 .7130613
0.6 .6976239 .6976233
0.7 .6931712 .6931706
0.8 .6986586 .6986579
0.9 .7131400 .7131393
1.0 .7357595 .7357589
x
η(x , h)
y(x )
.0 1.0000000 1.0000000
.5 .7135417 .7130613
1.0 .7363417 .7357589
(b) Als weiteres Beispiel betrachten wir das leicht ge¨
anderte Anfangswertproblem
y ′ (x ) = x − 10y ;
y(0) = 1
im Intervall
[0, 1]
mit der L¨
osung
101 −10x x
1
y(x ) =
e
+ −
100
10 100
nach [26, 19.9(b)] (a=1, b=-10, c=0, vgl. a)). Die numerischen Ergebnisse lauten:
Schrittweite 1:
Schrittweite 0.01:
x
η(x , h)
y(x )
0.0 1.0000000 1.0000000
0.1 .3715586 .3715582
0.2 .1466889 .1466886
0.3 .0702851 .0702849
0.4 .0484989 .0484988
0.5 .0468054 .0468053
0.6 .0525036 .0525035
0.7 .0609210 .0609210
0.8 .0703388 .0703388
0.9 .0801246 .0801246
1.0 .0900459 .0900459
x
η(x , h)
y(x )
.0
1.0000000 1.0000000
1.0 294.0000000 .0900459
Schrittweite 0.5:
x
η(x , h)
y(x )
0.0 1.0000000 1.0000000
0.5 13.885416
0.468053
1.0 189.8875868 .0900459
Schrittweite 0.1:
x
η(x , h)
y(x )
0.0 1.0000000 1.0000000
0.1 .3787500 .3715582
0.2 .1520312 .1466886
0.3 .0732417 .0702849
0.4 .0499731 .0484988
0.5 .0474899 .0468053
0.6 .0528087 .0525035
0.7 .0610533 .0609210
0.8 .0703950 .0703388
0.9 .0801481 .0801246
1.0 .0900555 .0900459
11.C
Modifizierte Euler-Verfahren
Zur numerischen L¨
osung einer expliziten Differenzialgleichung erster Ordnung
y ′ (x ) = f (x , y) ;
y(a) = ya
berechnet das Euler-Verfahren die N¨
aherung an den Funktionswert an der Stelle xi+1 mit Hilfe der
N¨
aherung und der Steigung aus der Differenzialgleichung an der Stelle xi :
x0 = a ;
xi = x0 + i · h ;
η0 = y0 ;
ηi+1 = ηi + h · f (xi , ηi )
f¨
ur
i = 0, . . . , n .
98
II Numerische Verfahren der Analysis
Modifizierte Verfahren benutzen Werte, die mit Hilfe der Differenzialgleichung im Intervall [xi , xi+1 ]
prognostiziert werden:
x0 = a ;
xi = x0 + i · h ;
η0 = y0 ;
Ich stelle zwei Verfahren vor:
ηi+1 = ηi + h · Φ(xi , ηi , f )
f¨
ur
i = 0, . . . , n .
Verfahren 11.6 (Heun, 1900) Das Verfahren von Heun benutzt den Mittelwert aus der Steigung
am Anfang und der ersten Prognose am Ende des Intervalls:
1
Mit Φ(x , y, f ) = (f (x , y) + f (x + h, y + hf (x , y))) erhalten wir
2
h
ηi+1 = ηi + (f (xi , ηi ) + f (xi+1 , ηi + hf (xi , ηi ))) .
2
Verfahren 11.7 (Collatz, 1960) Das modifizierte Euler-Verfahren benutzt die prognostizierte
h
h
Steigung in der Intervallmitte: Mit Φ(x , y, f ) = f x + , y + f (x , y) erhalten wir
2
2
ηi+1 = ηi + h · f
11.D
xi +
h
h
, ηi + f (xi , ηi )
2
2
.
Das Schießverfahren
Das Schießverfahren l¨
ost ein explizites Randwertproblem zweiter Ordnung auf dem Intervall [a, b]
y ′′ (x ) = f (x , y, y ′ ) ;
y(a) = ya ; y(b) = yb
numerisch.
Beispiel 11.8 (Balkenlinie) F¨
ur einen mit einer Linienlast q(x ) belasteten Balken der L¨
ange l, der
an seinen Enden mit einem Los- und einem Festlager gest¨
utzt ist, gelten f¨
ur das Schnittmoment
My (x )
My (0) = 0 ;
My (l) = 0 ;
und die Biegelinie w (x )
w (0) = 0 ;
w (l) = 0 ;
My′′ (x ) = −q(x )
w ′′ (x ) = −
1
My (x ) .
E Iyy
⋄
Mit Hilfe des Taylorpolynoms zweiten Grades
h 2 ′′
y (xi−1 )
2
werden analog zum Eulerschen Streckenzug-Verfahren die N¨
aherungen an die Funktion und ihre
Ableitung in den St¨
utzstellen iterativ berechnet. Der Algorithmus verlangt jedoch eine Anfangssteigung y0′ , die nicht gegeben ist. In der Iteration wird als Steigung das arithmetische Mittel aus
der Steigung an der aktuellen und n¨
achsten St¨
utzstelle genommen.
T2 (y, xi−1 , xi ) = y(xi−1 ) + h · y ′ (xi−1 ) +
Verfahren 11.9 (Schießverfahren) F¨
ur eine explizite Differenzialgleichung zweiter Ordnung
y ′′ (x ) = f (x , y, y ′ ) ;
y(a) = ya ; y(b) = yb
und einen Startwert ya′ liefert das Verfahren
xi
= xi−1 + h ;
η0 = ya
ki
=
ηi′
=
η0′
=
′
ηi−1
+h ·
′
ηi−1 + ki
2
(i = 0, . . . , n)
ya′
′′
′
′
y (xi−1 ) = yi−1
+ h · f (xi−1 , ηi−1 , ηi−1
)
′
= ηi−1
+
h
′
f (xi−1 , ηi−1 , ηi−1
)
2
h2
f (xi−1 , ηi−1 , ηi′ )
(i = 1, . . . , n)
2
eine numerische N¨
aherung an die Funktion, wenn S (f , ya , ya′ ) := ηn nahe an yb liegt.
ηi
= ηi−1 + h · ηi′ +
11 Numerische Verfahren f¨
ur explizite Differenzialgleichung
99
Bei einer Wahl einer Anfangssteigung ya′ als Startwert liefert der Prozess eine N¨
aherung ηn f¨
ur yb .
F (ξ) := yb − S (f , y0 , ξ) berechnet den Fehler, dessen Nullstelle mit Hilfe eines Nullstellenverfahrens
(Bisektion, Newton-Verfahren) berechnet werden kann.
11.E
Das Differenzenverfahren
Das Differenzenverfahren l¨
ost ein explizites Randwertproblem zweiter Ordnung auf dem Intervall
[a, b]
y ′′ (x ) = f (x ) ;
y(a) = ya ; y(b) = yb
numerisch. Die zweite Ableitung darf also weder vom Funktionswert noch von der Ableitung abh¨
angen. Dies ist in Beispiel 11.8 der Fall. Mithilfe der Differenzenquotienten f¨
ur die linksseitige erste
und rechtsseitige zweite Ableitung erhalten wir eine lineares Gleichungssystem f¨
ur die unbekannten
N¨
aherungswerte der Funktion:
Verfahren 11.10 (Differenzenverfahren) F¨
ur eine explizite Differenzialgleichung zweiter Ordnung
y ′′ (x ) = f (x ) ;
y(a) = ya ; y(b) = yb
liefert
xi
= xi−1 + h ;
(i = 0, . . . , n)
y(xi − h) − y(xi )
ηi − ηi−1
ηi′ ≈
≈
−h
h
′
′
′
η
− ηi′
y (xi + h) − y (xi )
f (xi ) = yi′′ ≈
≈ i+1
≈
h
h
die n − 1 Gleichungen
ηi+1 − 2ηi + ηi−1 = h 2 · f (xi ) ;
ηi+1 −ηi
h
−
h
ηi −ηi−1
h
=
ηi+1 − 2ηi + ηi−1
h2
(i = 1, . . . , n − 1) .
zur Bestimmung der n − 1 Unbekannten η1 , . . . , ηn−1 . Mit den bekannten Werten η0 = ya und
ηn = yb lautet das zu l¨
osende lineare Gleichungssystem


−2
1
0 0
0
0
0
0 h 2 f (x1 ) − ya
 1 −2

1 0
0
0
0
0 h 2 f (x2 )


2
 0

1 −2 1
0
0
0
0 h f (x3 )




..

 .
.


2
 0

0
0 0
1 −2
1
0 h f (xn−3 )


2
 0

0
0 0
0
1 −2
1 h f (xn−2 )
2
0
0
0 0
0
0
1 −2 h f (xn−1 ) − yb
Es ist diagonaldominant5 und hat Tridiagonalgestalt.
Die genannten Eigenschaften des linearen Gleichungssystems erh¨
ohen die Geschwindigkeit und
Genauigkeit der numerischen L¨
osung.
5
Der Betrag des Diagonalelements ist gr¨
oßer oder gleich der Summe der Betr¨
age der anderen Elemente einer Zeile
100
II Numerische Verfahren der Analysis
§ 12 Solving Optimization Problems
Literature: Engeln-M¨ullges/Niederdrenk [15], Preuß/Wenisch [41], Schwetlick/Kretschmar [48].
A history of the algorithms may be found in [18].
Finding the minimal or maximal point of a function f : Rn → R is a quite common problem
in engineering, economics and further areas applying mathematical tools. Replacing f by −f
interchanges maximal and minimal points, so we may restrict the investigation on minimal points.
In this section we explain several algorithms but nearly never state or proof their convergence.
They may be found in the literature.
Example 12.1
The underlying experiment from which we obtain a set of measurements
{(xi , fi ) | i = 1, . . . , n} obeys the law f (x ) = A · sin(ωx + ϕ) .
We would like to find a set of parameters satisfying the n equations in 3 unknowns
A · sin(ωxi + ϕ) = fi
(i = 1, . . . , n) .
(12.1)
This system is over-determined so we only can find a best fit, the best parameters A, ω and ϕ! As
these equations are non-linear Gauß’ least square method for an over-determined system of linear
equations [26, 4.D, Page 36] does not apply, see also 14.7.
We start with the sum of squared errors in (12.1) taken half for later convenience
1
E (A, ω, ϕ) =
2

n
i=1
(A · sin(ωxi + ϕ) − fi )2 .

(12.2)

A
A · sin(ωx1 + ϕ) − f1





Setting w = 
and
d
(w
)
=
···
ω

ϕ
A · sin(ωxn + ϕ) − fn




we get
1
d(w ), d (w ) .
2
We are looking for a minimum of this differentiable function, so its gradient is zero:
1 −−→
(12.2)
−−→
0 = grad E (w ) = grad d(w ), d (w )
= d (w )T d ′ (w ) .
2
E (w ) =
(12.3)
(12.4)
Lemma 12.2 If f : Rn → Rm has a total derivative we get for the gradient
−−→
grad f (x ), f (x ) = 2 · f (x )T · f ′ (x )
with the Jacobian f ′ (x ).
Proof: Taking a constant vector c ∈ R we calculate
−−→
grad
f (x ), c
−−→
= grad
m
m
ci fi (x )
i=1
=
i=1
−−→
ci grad fi (x ) =

−−→

 grad f1 (x ) 
T

c 

···
 −−→

grad fm (x )
= c T · f ′ (x ) .
Applying the product rule and the commutativity of the scalar product we get the desired result.
⋄
12.A
Zeros of a function
We now go on to investigate methods to find zeros of a vector values function which will later on
be applied to the above situation.
Given a function f : Rn → Rm we are looking for a point x ∈ Rn satisfying f (x ) = 0. A well
known method to find zeros of a real valued function in one variable ist the Newton algorithm
which successively calculates the zero of the tangent line to the function. We are extending this
method to functions in higher dimensions.
12 Solving Optimization Problems
101
From [26, 8.E, Page 61] we get the description of the tangent hyperplane to the point f (xk ) to
be
t(xk , x ) = f (xk ) + f ′ (xk )(x − xk )
(12.5)
with the Jacobian f ′ (xk ) ∈ Rmn . To find a point xk +1 with t(xk , xk +1 ) = 0 we have to solve the
system of linear equations
f ′ (xk ) · y = −f (xk )
with
y = xk +1 − xk .
(12.6)
Method 12.3 (Newton-Raphson) Given a differentiable function f : Rn → Rm , a starting point
x0 , an error bound R and a maximal number kmax of iterations we successively
(a) solve the system of linear equations f ′ (xk ) · y = −f (xk ) , and
(b) set xk +1 = xk + y .
The algorithm stops, if either
(a) xk +1 − xk ≤ m · R · xk , or
(b) f (xk +1 ) ≤ n · R, or
(c) k = kmax .
The last stop criteria means a non-successful termination of the algorithm, in general.
The critical question behind this algorithm is whether or not the system of linear equations
(12.6) is solvable!
Remark 12.4 We discuss some cases for the matrix f ′ (xk ) ∈ Rmn :
(a) n = m: The matrix f ′ (xk ) is quadratic:
If the functional determinant is non-zero it is uniquely solvable. Otherwise it may have no
solution or infinitely many.
(b) n < m: There are more equations than unknowns:
In general there is no solution. Using least square methods we find a best solution y minimizing the error, see [26, 4.D, Page 36] or 14.8.
(c) m < n: There are less equations than unknowns:
In general there are infinitely many solutions. We may choose a solution of minimal norm
(absolute value), see 14.10.
Example 12.5
−−→
(a) We look at a differentiable function f : R2 → R: Using its derivative f ′ (x ) = grad f (x ) the
system of linear equations Eq. 12.6 consists of one equation in the two unknowns x and y.
The set of solutions form a line, from which we may choose the point closest to the origin.
If we visualize this function in R3 by setting z = f (x , y) we get the tangent plane by
E:
t(λ, µ) =









x
1
0






 + µ
.
+
λ
y 
0
1





f (x , y)
f,x (x , y)
f,y (x , y)
The set of zeros of this tangent plane is its intersection with Exy which forms a line. We
choose the orthogonal projection of the origin onto this line as a solution of Eq. 12.6.
(b) Next we look at a differentiable function f : R → R2 : The image f (R) of this function is
a curve in the plane which may contain the origin whose inverse image we are looking for.
The system Eq. 12.6 of linear equations consists of two equations in one unknown so 12.4(b)
applies.
102
II Numerische Verfahren der Analysis
12.A.1
Gradient Descent
The gradient descent method applies to a function f : Rn → R. The gradient of this function always
shows in the direction in which the function rises most steeply. So if we are looking for a zero and
the function value is positive we have to go in opposite direction. This leads to
Method 12.6 (Gradient Descent for Finding Zeros)
Given a differentiable function f :
Rn → R, a starting point x0 ∈ Rn , an error bound R and a maximal number of iterations kmax
we successively calculate
−−→
xk +1 = xk − σk · sign(f (xk )) · grad f (xk ) .
σ starts with 1 or .5 and decreases to a small positive value, say 10−4 , we could use the formula
1 − 1 − 10−4 · k/kmax . If the function values change sign σ is taken half.
The iteration stops if
(a) the maximal number kmax of iterations has been done, or
(b) the absolute value of the function gets less than the error bound R, or
(c) the distance between iteration point gets less than the error bound R, or
(d) the norm of the gradient gets less than the error bound R.
Only case two yields a positive result: a zeros has been found! Cases three and four could mean
that the iteration point lies closed to a minimal (or maximal) point of the function.
In this algorithm we try to get the function value smaller until it is negative. Then we try to
get it bigger, and so on. If we only try to make it smaller we hope to finally find a minimal point!
12.B
Minimal Points
12.B.1
Gradient Descent
Method 12.7 (Gradient Descent for Finding Minimal Points) Given a differentiable function f : Rn → R, a starting point x0 ∈ Rn , an error bound R and a maximal number of iterations
kmax we successively calculate
−−→
xk +1 = xk − σk · grad f (xk ) .
σ starts with 1 or .5 and decreases to a small positive value, say 10−4 , we again use the formula
1 − 1 − 10−4 · k/kmax .
The iteration stops if
(a) the maximal number kmax of iterations has been done, or
(b) the distance between iteration point relatively gets less than the error bound R, or
(c) the norm of the gradient gets less than the error bound R.
In general, the first case does not yield a positive result! The other cases give a minimal point
of the function. In general this is a local minimum!
12.B.2
Newton-Type Methods
To apply the Newton-Raphson algorithm 12.3 to Eq. 12.4 we need the second derivative of the
real-valued E which is called the Hesse-matrix. Applying the product rule we get
E ′′ (x ) = d(x )T d ′ (x )
′
= d ′ (x )T · d ′ (x ) + d(x )T · d ′′ (x )
(12.7)
Assuming that the second derivative is small close to a minimal point the second summand may
be dropped:
E ′′ (x ) ≈ d ′ (x )T · d ′ (x )
(12.8)
As a product of a matrix and its transpose E ′′ (x ) is symmetric and semi-definit. We get the
12 Solving Optimization Problems
103
Method 12.8 (Newton-Gauß) To find a minimal point of the function
1
E (x ) =
d(x ), d(x ) : Rn → R
2
for a given differentiable function d : Rn → Rm , a starting point x0 , an error bound R and a
maximal number kmax of iterations we successively
(a) solve the system of linear equations
d ′ (xk )T d ′ (xk ) · y = −d (xk )T d ′ (xk ) , and
(b) set xk +1 = xk + y .
The algorithm stops, if either
(a) y ≤ m · R · xk , or
(b) d (x )T d ′ (x ) ≤ n · R, or
(c) k = kmax .
The last stop criteria means a non-successful termination of the algorithm.
A problem may occur if d ′ (xk )T d ′ (xk ) is non-regular so the system of linear equations may be
non-solvable. As it is symmetric we may use a relaxation method:
Remark 12.9 If A is symmetric and −µ (µ ≥ 0) smaller than all eigenvalues of A then A + µ Id
is positive definit.
Proof: If A only has positive eigenvalues, this matrix is positive definit an µ may be chosen to
be 0.
Assuming the smallest eigenvalue of A being λ. For a vector x of unit length we have
−µ x
2
<λ x
2
≤ Ax , x
,
which yields
(A + µ Id)x , x = Ax , x + µ Id x , x = Ax , x + µ x
2
>0
following [26, 24.12, Page 155].
⋄
Using the above ideas we get
Method 12.10 (Levenberg-Marquardt Algorithm) To find a minimal point fo the function
1
E (x ) =
d(x ), d(x ) : Rn → R
2
for a given differentiable function d : Rn → Rm , a starting point x0 , an error bound R and a
maximal number kmax of iterations we successively
(a) choose a non-negative µ making d ′ (xk )T d ′ (xk ) positive definit
(b) solve the system of linear equations
d ′ (xk )T d ′ (xk ) + µ Id · y = −d (x )T d ′ (x ) , and
(c) set xk +1 = xk + y .
The algorithm stops, if either
(a)
y
≤ m · R, or
(b)
d (x )T d ′ (x ) ≤ n · R, or
(c) k = kmax .
The last stop criteria means a non-successful termination of the algorithm.
Remark 12.11 We look at two special cases for µ:
(a) µ = 0: In this case the algorithm equals the Newton-Gauß method.
104
II Numerische Verfahren der Analysis
(b) µ is very large, so that µ Id dominates d ′ (xk )T d ′ (xk ): In this case we get
1 −−→
xk +1 = xk − grad E (x ) ,
µ
so we obtain the gradient descent.
So the Levenberg-Marquardt algorithm is a mixture of gradient descent and Newton’s method used
to find a zero of the gradient.
These algorithms all need to solve systems of linear equations which we are going to have a
closer look in the next section.
Chapter III
Numerical Methods in Linear Algebra
§ 13 Numerical Solution of a System of Linear Equations
In this section we explain several algorithms but nearly never state or proof their convergence.
ullges/Niederdrenk [15], Preuß/Wenisch [41],
They may be found in the Literature: Engeln-M¨
Schwetlick/Kretschmar [48]. A history of the algorithms may be found in [18].
13.A
Triangular Decomposition
13.A.1
LU-Factorization
In [26, 2.15, Page 17] we introduced the LU-factorization1 of a square matrix:
Theorem 13.1 (LU-Factorization1 ) Every Matrix M ∈ Rnn factorizes into a product M =
PLRQ with permutation matrices P and Q , a lower left unitriangular2 matrix L and an upper
right triangular matrix R geschrieben werden.
If M is regular (or invertible) Q = Id may be chosen.
The permutation matrices P and Q are products of the permutation matrices which perform the
necessary interchanging of rows or columns.
R is the upper triangular matrix resulting in the Gauß-algorithm, L the inverse of the product
of all elementary lower triangular matrices each of which establishes one step of the Gauß-algorithm
by left-multiplication.
To simplify the presentation we assume that interchange of rows or columns is needed by the
Gauß3 algorithm, so we have P = Q = Id and A = LR.
Method 13.2 (Solution with the LU-factorization) Setting y = Rx the system of linear equations b = Ax = LRx = Ly can be solved in two steps:
(a) the system Ly = b step by step starting with the last
(b) the system Rx = y step by step starting with the first
unknown variable.
1
LU: Lower left - Upper right (LR-Zerlegung)
triangular matrix the diagonal elements of which are all one
3
Carl Friedrich Gauß, german mathematician, 1777 - 1855
2
105
106
III Numerical Methods in Linear Algebra
Apart from the Gauß-algorithm we may get the LU-factorization by directly calculating the
factorization:
Method 13.3 (Direct LU-factorization, Crout4 -Method) From presenting the factorization
A = LR using the falk-scheme


r11 · · · r1j · · · r1n



..
.. 
 0
.
. 



1
..
.





 l
 i1

 ..
 .

0
0
···
0
1
..
.
ln1 · · · lni
0
0
0
0
0
0
··· 1












=







0

a11
..
.
· · · a1j
..
.
· · · a1n
..
.
ai1
..
.
···
···
0
0











0
rjj
0
0
0
aij
..
.
an1 · · · anj
···
rjn
..
.
0
rnn













ain 

.. 

. 

· · · ann
we get
(a) 1 · r1j = a1j → r1j = a1j (j = 1, . . . , n) ,
ai1
(i = 2, . . . , n)
li1 · r11 = ai1 → li1 =
r11
(b) l21 · r1j + 1 · r2j = a2j → r2j = a2j − l21 · r1j (j = 2, . . . , n) ,
ai2 − li1 · r12
li1 · r12 + li2 · r22 = ai2 → li2 =
(i = 3, . . . , n)
r22
21 a12
requires 0 = r22 = a22 − l21 · r12 = a22 − aa21
· a12 = a11 a22a−a
⇔
11
11
...
and in general f¨
ur i = 1, . . . , n:
i−1
(a)
k =1
i
(b)
0 = a11 a22 − a21 a21 ,
i−1
lik rkj + 1 · rij = aij
lrk rki = ari
k =1
requires a11 = 0,
→
→
lri =
rij = aij −
ari −
lik rkj
(j = i , . . . , n)
k =1
i−1
k =1 lrk rki
(r = i + 1, . . . , n)
rii
The last formula requires rii = 0 which leads to the condition that the upper central minors5 must
be non-zero, whereas the total determinant may be zero.
13.A.2
Cholesky Factorization of Positive Definit Matrices
If the matrix A = LU is symmetric
A = AT = (LU )T = U T LT
yields another lower-upper decomposition. To reduce calculation time one might want to get
U T = L but this is only possible if we skip the assertion that the L-part is unitriangular. These
ideas lead to the Cholesky6 factorization:
Method 13.4 (Cholesky factorization) From presenting the factorization A = LLT using the
falk-scheme


l11 · · · lj 1 · · · ln1



..
.. 
 0
.
. 









4
0
0
ljj
0
0
0
0
0
···
lnj
..
.
0
lnn







Prescott Durand Crout, US-american mathematician, 1907-1984
obere zentrale Unterdeterminanten
6
Andr´e-Louis Cholesky, french mathematician, 1875 (Montguyon) - 1918 (1st world war)
5
13 Numerical Solution of a System of Linear Equations

l11

 .
 ..


 l
 i1

 ..
 .

0
···
0
0
lii
..
.
ln1 · · · lni
we get
0

0
0
0
0












0
· · · lnn
=











a11
..
.
· · · a1j
..
.
· · · a1n
..
.
ai1
..
.
···
···
aij
..
.
an1 · · · anj






ain 

.. 

. 

· · · ann
√
(a) l11 · l11 = a11 → l11 = a11
ai1
li1 · l11 = ai1 → li1 =
(i = 2, . . . , n) ,
l11
2
2
(b) l21
+ l22
= a22
→
requires a11 ≥ 0,
requires a11 > 0,
2
a11 · a22 − a12
requires a11 a22 − a21 a21 ≥ 0,
a11
l21 · lj 1
−
(j = 3, . . . , n) requires a11 a22 − a21 a21 > 0
l22
2 =
a22 − l21
l22 =
l21 · lj 1 + l22 · lj 2 = a2j
107
→
lj 2 = a2j
...
min(i,j )
and in general for i = 1, . . . , n the equation
lik ljk = aij yields
k =1
i−1
(a) lii =
aii −
lik ljk
k =1
i
(b)
lik ljk = aij = aji
k =1
→
lji =
aji −
i−1
k =1 lik ljk
lii
(j = i + 1, . . . , n) .
i−1
Theses results require aii −
must be positive.
lik ljk > 0 which leads to the condition that the upper central minors
k =1
According to [26, 9.3, Page 62] this property is equivalent to A being positive definit. For
convenience we state equivalent properties of a symmetric matrix being positive definit:
Theorem 13.5 The following properties of a symmetric matrix A are equivalent:
(a) A is positive definit, e.g. ∀ x ∈ Rn \{0} : Ax , x > 0,
(b) All central upper minors are positive.[26, 9.3, Page 62]
(c) All eigenvalues are positive.
There are algorithms which work very well for positive definit matrices. The method of 12.9
sometimes allows to transfer results for positive definit matrices to semi definit matrices.
Remark 13.6 An extension of the Cholesky decomposition is a factorization
A = LDLT
where L is a unitriangular und D a diagonal matrix.
13.B
Iterative Solutions of Systems of Linear Equations
13.B.1
Improving a One-Step Iterative Method
Solving a system of linear equations Ax = b numerically yields an approximation x˜ to the true
solution x . Using
∆x := x − x˜
108
III Numerical Methods in Linear Algebra
we get
A∆x = A x − x˜ = Ax − Ax˜ = b − Ax˜ ,
which is a system of linear equations to determine ∆x . Using this we find x¯ + ∆x to be a better
approximation to the true solution. This explains the following algorithm:
Method 13.7 (Improving the Solution of as System of Linear Equations) The solution of
a system of linear equations Ax = b is iteratively improved by the algorithm:
(a) Starting Value: x0 = 0
(b) Iteration:
(b1) Solve the system of linear equations A∆x = b − Axi .
(b2) Put xi+1 := xi + ∆x .
(c) Stop Criterion: Using an error bound R which often is chosen to be R = 10−6 the algorithm
stops when it reaches b − Axi < R · b .
13.B.2
Successive Approximations
We decompose the matrix A into a sum A = L + D + U where L denotes its lower left part, D
its diagonal and U its upper right part. A system of linear equations b = Ax = (L + D + U )x is
rewritten as
D x = b − (L + R)x .
This equation is used to define an iterative method to solve the Ax = b:
xk +1 = D −1 (b − (L + R)xk ) .
(13.1)
Multiplying a vector with D −1 is just dividing its components by the elements of the diagonal D .
We write this calculation down for every component:
Method 13.8 (Jacobi7 -Method)


xk +1,i =
1 
 bi −
aii
n
j =1
j =i

aij xk ,j 
(i = 1, . . . , n)
(13.2)
xik +1 is already known when calculating xjk +1 j > i , so one could use xik +1 instead of xik . This
is used in the following iterative algorithm
Method 13.9 (Gauß8 -Seidel9 Method, Successive Displacement10 )


i−1
n
1 
xk +1,i =
bi −
aij xk +1,j −
aij xk ,j  (i = 1, . . . , n)
aii
j =1
j =i+1
The changes in the values of x are weighted by a factor normally just greater than 1, so instead
of
xk +1,i = xk ,i +

1 
bi −
aii
i−1
j =1
n
aij xk +1,j −
j =i

aij xk ,j 
(i = 1, . . . , n)
which is equivalent to the Gauß-Seidel method we calculate
7
Carl Gustav Jakob Jacobi, german mathematician, 1804-1851
Carl Friedrich Gauß, german mathematician, 1777 - 1855
9
Philipp Ludwig von Seidel, german mathematician, 1821 (Zweibr¨
ucken) - 1896 (M¨
unchen)
10
Einzelschrittverfahren
8
13 Numerical Solution of a System of Linear Equations
109
Method 13.10 (Successive Over-Relaxation11 - SOR)


i−1
n
w 
aij xk +1,j −
aij xk ,j  (i = 1, . . . , n) .
xk +1,i = xk ,i +
bi −
aii
j =1
j =i
For w = 1 this formula reduces to the Gauß-Seidel method. In general w > 1 results in faster
convergence.
We summarize these result in matrix notation
Summary 13.11 Let A = L + D + R be the decomposition of a matrix in its lower left, diagonal
and upper right part. We have
(a) D xk +1 + (L + R)xk = b
(Jacobi),
(b) (L + D )xk +1 + Rxk = b
(Gauß-Seidel),
(c) (wL + D )xk +1 + ((w − 1)D + wR)xk = w b , hence
1
1
L + D xk +1 +
1−
D + R xk = b
w
w
from which we get
(SOR).
(a) xk +1 = D −1 b − (L + R)xk
(Jacobi),
(b) xk +1 = (L + D )−1 b − Rxk
(Gauß-Seidel),
(c) xk +1 =
13.B.3
L+
−1
1
D
w
b−
1−
1
w
D + R xk
.
(SOR)
⋄
Convergence Theorem
Next we look at the convergence of the above algorithms. They all can be written in the form
Φ(x ) = M x + c ;
with
where we have
(a) M = −D −1 (L + R) ,
−1
(b) M = −(L + D )
(c) M = − L +
c = D −1 b
(Jacobi),
−1
R,
1
D
w
M ∈ Rn,n , x , c ∈ Rn ,
c = (L + D )
−1
1−
1
w
b
D +R
(Gauß-Seidel),
,
c=
L+
1
D
w
−1
b
(SOR).
Remark 13.12 A successive iteration Φ(x ) = M x + c has the following properties:
(a) It has a unique fixed point if and only if Id −M is a regular matrix.
(b) M determines the error behavior.
Proof:
(a)
Φ(x ) = x
⇔
(Id −M )x = c
If Id −M is regular the system of linear equations has a unique solution. Otherwise there is
no solution or there are infinitely many!
(b) If dk := x − xk with the fixed point x then
dk +1 = x − xk +1 = M x + c − (M xk + c) = M x − M xk = M (x − xk ) = M dk .
(13.3)
What are the properties of the matrix which make the algorithm converge? If the matrix is
symmetric we expect the eigenvalues to have absolute value less than one:
11
¨
Sukzessive Uberrelaxation
110
III Numerical Methods in Linear Algebra
For a symmetric matrix M ∈ Rn,n with eigenvalues
Definition 13.13 (Spectral Radius)
λ1 , . . . , λn we define
̺(M ) := max{|λ1 |, . . . , |λn |}
to be the spectral radius of the matrix.
Theorem 13.14 If the spectral radius ̺(M ) of a symmetric matrix M ∈ Rn,n is less than one, the
iteration
Φ(x ) = M x + c
converges.
n
Proof: Let {ˆei | i = 1, . . . , n} be an eigen base of
n
dk
=
M k d0
and d0 =
ci eˆi . Then
i=1
n
ci λki eˆi
=
i=1
13.C
Rn,n
d0 ̺(M )k = n d0 ̺(M )k
≤
⋄
i=1
Orthogonalization
Orthogonalization describes the process to transform a set of linearly independent vectors to orthogonal vectors spanning the same subspace. It is equivalent to a factorization A = QR of a
matrix A into a product of an orthogonal and an upper triangular matrix.
Method 13.15 (Gram12 -Schmidt13 ) The algorithm of Gram-Schmidt orthogonalizes the rows
of the matrix A one after the other:
q1
(a)
q1 = a1
(13.4)
and
qˆ1 =
q1
(b) Assume the first k − 1 rows are orthogonalized. Now we have to find qk so that the two sets
{q1 , . . . , qk −1 , ak }
and
{q1 , . . . , qk −1 , qk }
span the same subspace (ak will be replaced by qk ). The new vectors will be normalized:
k −1
qk = ak −
ak , qˆj qˆj
und
qˆk =
j =1
qk
qk
f¨
ur k = 2, . . . , n
.
(13.5)
Defining
Q
= (ˆ
q1 , . . . , qˆn )
R = (rij )
and
with
(13.6)
rii = qi ,
rij = aj , qˆi
(j > i )
(13.7)
we get the desired factorization.
It turns out that changing the remaining rows as early as possible, contrary to gathering all the
necessary changes in 13.5. This lead to a numerically more stable algorithm
Method 13.16 (Gram-Schmidt, modified) After determining qk in Eq. 13.5 we will subtract
the term aj , qˆk qˆk from the rows aj (j > k ):
(1)
(a) Initialization: ak
= ak f¨
ur k = 1, . . . , n
(b) Calculating steps for k = 1, . . . , n:
(k )
qˆk
(k +1)
aj
12
13
=
ak
(k )
,
ak
(k )
= aj
(k )
− aj , qˆk
qˆk (j = k + 1, . . . , n) .
Jørgen Pedersen Gram, danish mathematician, 1850 (Haderslev) - 1916 (Kopenhagen)
Erhard Schmidt, german mathematician, 1876 (Dorpat (now Tartu, Estland) - 1959 (Berlin)
13 Numerical Solution of a System of Linear Equations
111
Finally Eq. 13.6 and 13.7 yield the same factorization as the standard Gram-Schmidt method.
A method found by Householder14 transforms the matrix by applying Householder reflections
which reflect the first column of a matrix to the first axes, thereby creating zeros under beneath
the diagonal.
Method 13.17 (Householder) The Householder algorithm transforms a regular matrix into an
upper triangular matrix R. The transformation is achieved by applying reflections to the matrix A
thereby creating a factorization A = QR with Q to be the product of the inverses all used reflections:
R = Sn · . . . · S1 · A
yields
A = S1−1 · . . . · Sn−1 · R = S1 · . . . · Sn ·R = QR .
Q:=
We demonstrate the idea of the algorithm on the first row of the matrix:
We are looking for a reflection which maps the first column a1 of A onto a vector k eˆ1 of the same
length. In addition the angle ∠(a1 , k eˆ1 ) is chosen to be greater than 90◦ . So we need
k = − sign(a11 ) · a1 .
A reflection Sv with a mirror plan perpenticular to v maps v onto vecv . It is given by the matrix
v ·v T
.
v, v
In order to map the vector a1 of A onto k eˆ1 we must have
k eˆ1 − a1
v=
.
2
Once this is done we go on with a partial matrix obtained by skipping the first row and column
and proceed in the same way. Geometrically we are working in eˆ1⊥ , the subspace orthogonal to the
subspace spanned by eˆ1 . A reflection in eˆ1⊥ does not change eˆ1 .
Sv = E − 2
Reflections are (symmetric and) orthogonal, so their product is orthogonal as well.
13.D
⋄
Tridiagonalization
In several numerical methods tridiagonal matrices are easier to handle. Therefore we look for an
algorithm to transform a symmetric matrix to this shape. We do so by rotating the axes of the
underlying space. The Jacobi method transform a symmetric matrix to tridiagonal shape and a
non-symmetric matrix to an upper Hessenberg15 matrix.
Definition 13.18 (Givens16 -Rotation) The matrix

1
0
0
0
0
0

..

.

 0
1
0
0
0
0

 0
0
cos(α)
0
0
−
sin(α)

 0
0
0
1
0
0


.
..
Drs (α) = 

 0
0
0
0
1
0

 0
0
sin(α)
0
0
cos(α)

 0
0
0
0
0
0



0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
..
0
.
1





















is identical to the identity matrix but in the r-th und s-th row and column. It rotates the plane Ers
with rotation angle α. Drs (α) is an orthogonal matrix.
14
Alston Scott Householder, US-american mathematician, 1904 (Rockford, Il. USA) - 1993 (Malibu, Ca. USA)
Gerhard Hessenberg, german mathematician and engineer, 1904 - 1959
16
Wallace Givens, US-american mathematician and computer scientist, 1910 (Alberene, US) - 1993
15
112
III Numerical Methods in Linear Algebra
Method 13.19 (Jacobi17 , Givens) The Jacobi-Givens method aims to get the elements below
the secondary diagonal zero by successively conjugating A with Givens rotations.
A′ = Drs (α)−1 A Drs (α) = Drs (α)T A Drs (α) .
In every step the angle α and the rotating plane Ers has to be chosen so that a zero appears in a
wanted position. Using the abbreviations A = (aij ), Drs (α) = (dij ), Drs (α)T = (tij ) and c = cos(α),
s = sin(α) we calculate
n
n
n
aij′ =
k =1 l =1
Using
n
tik akl dlj =

1




0




0



0
dij =
c





−s




s


c
dki akl dlj .
k =1 l =1
i, j ∈
/ {r , s} ∧
i, j ∈
/ {r , s} ∧
i ∈ {r , s} ∧ j
i∈
/ {r , s} ∧ j
i =r ∧ j =r
i =r ∧ j =s
i =s ∧ j =r
i =s ∧ j =s
i =j
i =j
∈
/ {r , s}
∈ {r , s}























we get
¨
(keine Anderung)
•
i, j ∈
/ {r , s}
:
aij′ = aij
:
arj′ = drr arj + dsr arj = carj + sarj
•
i =r ∧ j =r
:
′ =d a d +d a d +d a d +d a d
arr
rr rr rr
rr rs sr
sr sr rr
sr ss sr
•
i =r ∧ j =s
:
•
i =s ∧ j ∈
/ {r , s}
:
•
•
•
i =r ∧ j ∈
/ {r , s}
= c 2 arr + cs(ars + asr ) + s 2 ass
i =s ∧ j =r
:
i =s ∧ j =s
:
′ =d a d +d a d +d a d +d a d
ars
rr rr rs
rr rs ss
sr sr rs
sr ss ss
= cs(ass − arr ) + c 2 ars − s 2 asr
asj′ = drs arj + dss asj = −sarj + casj
′ =d a d +d a d +d a d +d a d
asr
rs rr rr
rs rs sr
ss sr rr
ss ss sr
= cs(ass − arr ) − s 2 ars + c 2 asr
′ = d a d +d a d +d a d +d a d
ass
rs rr rs
rs rs ss
ss sr rs
ss ss ss
= s 2 arr − sc(ars + asr ) + c 2 ass
′ = 0 below the secondary diagonal (p ≥ q +2) we may use the transformation
If we want to get apq
Dq+1,p (α). In the above formulas we have to choose (r = q + 1, s = p) and get
′
′
0 = apq
= as,r
−1 = −sar ,r −1 + cas,r −1 = −saq+1,q + cap,q
From tan(α) =
s
c
=
ap,q
aq+1,q
we conclude to have to choose α = arg(aq+1,q , ap,q ) as the rotation angle.
If we proceed column by column the elements made zero stay zero. So we get an upper Hessenberg
matrix in (n−2)(n−1)
steps.
2
Remark 13.20 The Jacobi algorithm transforms a symmetric matrix into a tridiagonal matrix.
Proof: The transformation conserves symmetry: (D T AD )T = D T AT D TT = D T AD .
⋄
There also exists a Householder transformation to transform a symmetric matrix into a tridiagonal matrix by conjugation with Householder reflections, compare [48]:
Method 13.21 (Householder) The Householder tridiagonalization transforms a symmetric matrix in a tridiagonal symmetric matrix by conjugating with a product of Householder reflections.
We demonstrate the idea of the algorithm on the first row of the matrix:
The first axis eˆ1 must belong to the reflection plane so that left multiplication does not change the
first row and right multiplication does not change the first column. Hence the first component of
the vector v must be zero.
17
Carl Gustav Jakob Jacobi, german mathematician, 1804-1851
13 Numerical Solution of a System of Linear Equations
113
To ensure that the elements of the first column are zero but the top two the vector a1 = a11 eˆ1 + b
n
ai1 eˆi must be mapped onto a vector a11 eˆ1 + k eˆ2 in the plane E12 of the same length
with b :=
i=2
n
a11 eˆ1 + k eˆ2 = a1
⇐⇒
2
a11
+ k2 =
n
2
ai1
i=1
⇐⇒
2
ai1
k=
i=1
As in 13.17 we set
a11 eˆ1 + k eˆ2 − a1
k eˆ2 − b
v ·v T
=
and
Sv = E − 2
.
2
2
v, v
Conjugation with this reflection yields the desired result.
v=
Once the first row and column are done we go on with a partial matrix obtained by skipping the
first row and column and proceed in the same way as in 13.17. They are symmetric so conjugation
conserve symmetry by the argument of 13.20.
Reflections are orthogonal, so their product is orthogonal as well.
⋄
Applying this method to an non-symmetric matrix transforms it to an upper Hessenberg matrix.
13.E
Eigenvalues of a Matrix
Further literature: Saad [45]
13.E.1
Jacobi Algorithm
Method 13.22 (Jacobi) This algorithm rotates a coordinate plane to get the off-diagonal elements belonging to this plane zero. We use the matrices Drs from 13.D and choose α so that the
conjugation
A′ = Drs (α)−1 A Drs (α) = Drs (α)T A Drs (α)
′ zero. From the formulas in 13.19, case i = r ∧ j = r , we get for a symmetric
makes the element ars
matrix the equation
′
0 = ars
= cs(ass − arr ) + (c 2 − s 2 )asr .
Using t = tan(α) = s/c and dividing by −c 2 asr we get
ass − arr
t 2 − 2dt − 1 = 0
with
d=
.
2asr
From the solutions t1/2 = d ±
d 2 + 1 we choose the t with smaller absolute value and achieve
1
t
und
s = tc = √
.
1 + t2
1 + t2
The product of all applied rotation matrices defines the transformation matrix to diagonal shape.
c=√
Unfortunately this process does not preserve the values of the components made zero. But when
always choosing the non-diagonal element of biggest absolute value an iterative process will approach
a diagonal matrix.
13.E.2
von Mises Algorithm
The symmetric matrix A admits an orthonormal basis {ˆ
ei | i = 1, . . . , n}, the eigenvalues of
these vectors are λi (i = 1, . . . , n) ordered with respect to their absolute value. For any vector
x0 = ni=1 ξi eˆi ∈
/ ker A we successively may calculate
n
k
xk = A · xk −1 = A · x0 =
n
λki ξi eˆi
i=1
=
λk1
ξ1 eˆ1 +
i=1
λi
λ1
k
ξi eˆi
.
114
III Numerical Methods in Linear Algebra
If λ1 has different absolute value from the other eigenvalues, the fractions
lim
k →∞
λi
λ1
k
tend to zero so
Ak x0 − λk1 x0 = 0
(13.8)
Method 13.23 (von Mises18 ) If all the eigenvalues of the symmetric matrix A ∈ Rnn are different the following algorithm calculates all eigenvalues and eigenvectors:
(a) Starting with a vector x0 ∈
/ ker A we successively calculate
xk +1 =
until
Axk
Axk
xk +1 − xk
k >0
< n · R with an error bound R,
(b) eˆ := xk +1 and λ := Aˆ
e , eˆ
are the corresponding eigenvalue and eigenvector.
e · eˆT (deflation).
(c) Skip the eigenvalue λ; Replace A by A − λˆ
(d) Start again, until n eigenvalues are found.
In a lot of situations one needs the smallest eigenvalue. The following idea using a spectral
shift generally allows to calculate for a given number the closest eigenvalue to that number and its
eigenvector:
Method 13.24 (Inverse Iteration, Wielandt19 -Iteration) For µ ∈ R and the eigenvalue λ
1
(with eigenvector eˆ) of the symmetric matrix A closest to µ the fraction
is the biggest
λ−µ
eigenvalue of the matrix (A − µ Id)−1 with the same eigenvector eˆ! So starting with a vector x0 and
successively
(a) solving (A − µ Id)y = xk
(b) setting xk +1 =
we find the
1
λ−µ ,
x
x
from which it is easy to get the eigenvalue λ of A, and the eigenvector eˆ of A. ⋄
Working with non-symmetric matrices one uses the fact that A and AT have the same eigenvalues ([26, 24.2, Page 152]) and that knowledge on eigenvalues and eigenvectors may be taken from
the symmetric matrix AAT , see 14.E.
For iterative algorithms Wielandt developed a method to shift eigenvalues for non-symmetric
matrices extending the deflation used in 13.23, see [45]:
Theorem 13.25 (Wielandt-Deflation) Given a matrix A ∈ Rnn with spectrum
σ(A) = {λi , i = 1, . . . , n}
and corresponding eigenvectors
{ˆ
ei , i = 1, . . . , n}
and an arbitrary vector v with eˆ1 , v = 0. Then the matrix A − eˆ1 · v T has spectrum
σ(A − eˆ1 · v T ) = {λ1 − v , eˆ1 , λ2 , . . . , λn } .
Proof:
(a) i = 1: (A − eˆ1 · v T )ˆ
e1 = Aˆ
e1 − eˆ1 (v T eˆ1 ) = (λ1 − v , eˆ1 ) eˆ1
(b) i > 1: A and AT do have the same eigenvalues ([26, 24.2, Page 152]). For an eigenvector gi
of AT corresponding to λi we get
(A − eˆ1 · v T )T gi = (AT − v · eˆ1T )gi = λi gi − v eˆ1 , gi = λi gˆi .
18
19
Richard von Mises, austrian mathematician, 1883 (Lemberg, now Lwiw/Ukraine) - 1953 Boston/Mass.
Helmut Wielandt, german mathematician, 1910 (Niedereggenen) - 2001 (Schliersee)
⋄
13 Numerical Solution of a System of Linear Equations
To find a corresponding eigenvector of A − eˆ1 · v T one has to determine s from
ei − sˆ
e1 ) = λi (ˆ
ei − sˆ
e1 ) :
(A − eˆ1 · v T )(ˆ
The left hand side gets
λi eˆi − (sλ1 − v , eˆi + s v , eˆ1 ) eˆ1 .
The bracket must be sλi , so s(λ1 − λi + v , eˆ1 ) = v , eˆi
and
v , eˆi
.
λ1 − λi + v , eˆ1
To get a non-zero denominator one has to choose an appropriate vector v .
s=
115
116
III Numerical Methods in Linear Algebra
§ 14 Ausgleichsrechnung, Links- und Pseudoinverse
14.A
Problemstellung und Grundlagen
Problemstellung 14.1 (Ausgeglichene Lo
¨sung) Wir betrachten das lineare Gleichungssystem
mn
Ax = b mit der Koeffizientenmatrix A ∈ R , der rechten Seite b ∈ Rm und dem gesuchten Vektor
x ∈ Rn . Existiert eine L¨
osung, so heißt diese exakt.
Als ausgeglichene L¨
osung bezeichnen wir einen Vektor x ∈ Rn mit der Eigenschaft
Ax − b
2
ist minimal
(kleinste Fehlerquadrate).
(14.1)
Dieser ist eindeutig bestimmt, falls A keinen Rangdefekt hat. Existieren mehrere (ausgeglichene)
L¨
osungen, so wird auf eindeutige Weise eine dieser L¨
osungen durch die zus¨
atzliche Forderung
x
2
ist minimal
(14.2)
ausgew¨
ahlt.
Berechnungsm¨
oglichkeiten f¨
ur diese ausgeglichene L¨
osung werden vorgestellt.
Definition 14.2 (Rang und Rangdefekt eine Matrix) Die Anzahl der linear unabh¨
angigen
Zeilen oder Spalten einer Matrix A ∈ Rmn heißt Rang r(A) der Matrix. Es gilt immer r(A) ≤
min(m, n). Bei Gleichheit hat die Matrix A vollen Rang, andernfalls besitzt sie einen Rangdefekt.
F¨
ur die algebraische Behandlung linearer Gleichungssystem sind die folgenden Aussagen wichtig,
die aus dem Isomorphiesatz f¨
ur lineare Abbildungen (Rn / ker A ∼
= bil A) folgen:
Definition 14.3 (Bild und Kern einer Matrix) F¨
ur eine Matrix A ∈ Rmn ist die Abbildung
v → Av : Rn → Rm eine lineare Abbildung. Es werden definiert:
bil A := {Av ∈ Rm | v ∈ Rn } heißt Bild von A.
ker A := {v ∈ Rn
| Av = 0} heißt Kern von A.
Satz 14.4 Bild A und Kern A sind Unterr¨
aume von Rm bzw. Rn . F¨
ur ihre Dimensionen gelten:
(a) dim bil A = dim bil AT = r(A)
(b) dim bil A + dim ker A = n
(c) dim bil AT + dim ker AT = m
Satz 14.5 (Lineare Gleichungssysteme, Kern und Bild)
Ax = b gelten:
F¨
ur das lineare Gleichungssystem
(a) Es hat genau dann eine exakte L¨
osung, wenn b in Bild A liegt.
(b) Es besitzt f¨
ur jeden Vektor b ∈ Rm genau dann (mindestens) eine L¨
osung, wenn der Rang
von A gleich m ist (r(A) = m).
(c) Die allgemeine (ausgeglichene) L¨
osung ist die Summe aus einer speziellen L¨
osung und einer
allgemeinen L¨
osung des homogenen linearen Gleichungssystems Ax = 0. Die L¨
osungen des
homogenen linearen Gleichungssystems bilden genau den Kern von A.
Von zentraler Bedeutung f¨
ur das weitere Vorgehen ist der folgende
Satz 14.6 (Kern und Bild der transponierten Matrix) F¨
ur A ∈ Rmn gelten:
(a) Rn = ker A ⊥ bil AT (orthogonale direkte Summe)
(b) Rm = ker AT ⊥ bil A
14 Ausgleichsrechnung, Links- und Pseudoinverse
Beweis:
,
k , AT w
117
bezeichne das Skalarprodukt. F¨
ur k ∈ ker A und AT w ∈ bil AT gilt
= Ak , w
=0.
Damit stehen ker A und bil AT orthogonal zu einander. Aufgrund von 14.4 ist
dim ker A + dim bil AT = n ,
womit a) nachgewiesen ist. b) folgt analog.
14.B
⋄
Algebraisch-geometrische L¨
osung
Der letzte Satz erlaubt eine Beschreibung und Berechnung der ausgeglichenen L¨
osung:
Satz 14.7 (Die ausgeglichene L¨
osung) Ist x
eine ausgeglichene L¨
osung des linearen Gleichungssystems Ax = b, so gelten:
(a) Ax ist die orthogonale Projektion von b auf
Bild A.
(b) Ax − b ∈ ker AT .
(c) AT Ax = AT b
Beweis:
(a) Die orthogonale Projektion (Lot f¨
allen) liefert immer einen Punkt k¨
urzesten Abstands.
(b) ker AT ist das orthogonale Komplement zu
Bild A nach 14.6
(c) AT Ax − AT b = AT (Ax − b) = 0 nach
b).
⋄
ar, so kann sie invertiert
Ist die Matrix AT A regul¨
werden und eine ausgeglichene L¨
osung berechnet
werden:
Abb. 14.1: Lineare Abbildung ohne Rangdefekt
¨
Satz 14.8 (Uberbestimmte
lineare Gleichungssysteme ohne Rangdefekt) Ist das lineare
Gleichungssystem Ax = b mit A ∈ Rmn u
¨berbestimmt (m > n) oder quadratisch (m = n) und hat
A vollen Rang r(A) = n, so gelten:
(a) ker A = {0}
(b) AT A ∈ Rnn ist positiv definit und damit regul¨
ar.
(c) x = (AT A)−1 AT b ist die eindeutig bestimmte ausgeglichene L¨
osung.
Beweis:
(a) Nach 14.4 ist dim ker A = n − dim bil A = n − r(A) = n − n = 0.
(b) F¨
ur v = 0 gilt : AT Av , v
= Av , Av
(c) folgt aus 14.7(c), die Eindeutigkeit aus (a).
=
Av
2
> 0.
⋄
Definition 14.9 (Die Linksinverse und die Rechtsinverse) F¨
ur eine Matrix A ∈ Rmn vollen
Ranges setzen wir:
(a) F¨
ur m ≥ n heißt die Matrix AL := (AT A)−1 AT ∈ Rnm Linksinverse von A. Sie erf¨
ullt
AL A = Idn (Einheitsmatrix des Typs n,n).
(b) F¨
ur m ≤ n heißt die Matrix AR := AT (AAT )−1 ∈ Rnm Rechtsinverse von A. Sie erf¨
ullt
AAR = Idm .
118
III Numerical Methods in Linear Algebra
Erw¨
ahnt sei, dass im Fall (b) AT eine Linksinverse hat und nach (a)
Idm = ((AAT )−1 A) · AT = A · AT (AAT )−1
T
und damit A · AT (AAT )−1 = Idm gilt.
⋄
AT A
Hat A einen Rangdefekt, so ist
nicht regul¨
ar und es existieren mehrere (ausgeglichene)
L¨
osungen! Gesucht ist nach Gl. 14.2 eine (ausgeglichene) L¨
osung kleinsten Betrags.
Satz 14.10 (Lineare Gleichungssysteme mit Rangdefekt) Die Koeffizientenmatrix A ∈ Rmn
des linearen Gleichungssystems Ax = b habe einen Rangdefekt. Mit r = r(A) = dim bil AT bestehe
die Matrix B = (b1 , . . . , br ) ∈ Rnr spaltenweise aus den Basisvektoren von bil AT . Dann gelten:
(a) Die ausgeglichene L¨
osung kleinsten Betrags liegt in bil AT .
(b) AB ∈ Rmr hat vollen Rang und besitzt wegen m > r eine Linksinverse
−1
−1 T T
(AB)L = (AB)T (AB)
(AB)T = B T AT AB
B A ∈ Rrm .
osung kleinsten Betrags.
(c) x = B(AB)L b ist die ausgeglichene L¨
Abb. 14.2: Lineare Abbildung mit Rangdefekt
Beweis:
(a) F¨
ur die orthogonale Zerlegung v = k + w einer ausgeglichenen L¨
osung v ∈ Rn mit k ∈ ker A
T
und w ∈ bil A gilt:
v
2
=
v, v = k + w, k + w
=
k
2
+ 0 + 0+
w
2
= k, k
+ k, w
+ w, k
+ w, w
.
Wegen b = Av = A(k + w ) = Ak + Aw = Aw ist auch w eine ausgeglichene L¨
osung.
F¨
ur k = 0 hat w kleineren Betrag.
(b) F¨
ur v ∈ ker AB gelten
14.6
Bv ∈ bil B ∩ ker A = bil AT ∩ ker A = {0}
und damit Bv = 0. Wegen ker B = {0} ist auch v = 0.
(c) Wegen bil B = bil AT und (1) bleibt zu zeigen, dass x eine ausgeglichene L¨
osung ist. Hierzu
gen¨
ugt nach 14.7(b) zu zeigen, dass Ax − b ∈ ker AT gilt:
AT Ax − AT b = AT AB(AB)L b − AT b
14.11(a)
=
AT b − AT b = 0 .
⋄
Die letzte Gleichheit wird im folgenden Hilfssatz bewiesen, dessen Beweis die zweite Aussage
des Satzes benutzt.
14 Ausgleichsrechnung, Links- und Pseudoinverse
119
Hilfssatz 14.11 Mit den Bezeichnungen von 14.10 gelten:
(a) AT AB(AB)L = AT
(c)
B(AB)L
T
(b) B(AB)L AAT = AT
AT A = A
T
(d) AAT B(AB)L
= A
Beweis:
(a) Sei v = k + w die orthogonale Zerlegung von v ∈ Rm mit k ∈ ker AT und w ∈ bil A. Dann
existiert, da AB vollen Rang hat, ein u ∈ Rr mit ABu = w und es folgen mit der Definition
der Linksinversen
AT AB(AB)L v
= AT AB(AB)L k + AT AB(AB)L w
= AT AB B T AT AB
= 0 + AT AB
AT v
−1
B T AT k + AT AB B T AT AB
B T AT AB
−1
B T AT AB u = AT ABu
−1
B T AT ABu
und
= AT k + AT w = 0 + AT ABu = AT ABu.
(b) W¨ahlen wir v ∈ Rm , so liegt AT v in bil AT = bil B und es gibt ein w ∈ Rr mit B w = AT v .
Es folgt:
B(AB)L AAT v = B(AB)L AB w = B B T AT AB
(c) Aus a) folgt A = ATT =
AT AB(AB)L
T
(d) Aus b) folgt A = ATT =
B(AB)L AAT
T
=
−1
B T AT AB w = B w = AT v .
B(AB)L
T
AT A.
= AAT B(AB)L
T
.
⋄
Definition und Satz 14.12 (Die Pseudoinverse) Mit B ∈ Rnr nach 14.10 definieren wir die
˜ von A ∈ Rmn durch
Pseudoinverse A
˜ := B(AB)L = B B T AT AB −1 B T AT ∈ Rmn .
A
Es gelten:
˜ = A
(a) AAA
˜ ist symmetrisch
(c) AA
˜ A
˜ = A
˜
(b) AA
˜ ist symmetrisch
(d) AA
Diese Eigenschaften legen die Pseudoinverse eindeutig fest.
Beweis:
(a) Gleichheit muss lediglich f¨
ur v ∈ bil AT = bil B nachgewiesen werden, also f¨
ur v = Bu mit
r
u∈R :
˜
AAAv
= AB(B T AT AB)−1 B T AT ABu = ABu = Av .
˜ A
˜ = B(AB)L AB(AB)L = BE (AB)L = B(AB)L = A
˜
(b) AA
˜ = AB(B T AT AB)−1 B T AT ist symmetrisch.
(c) AA
(d) Entsprechend der orthogonalen Summe Rn = ker A ⊥ bil AT wird der Vektor v = k + AT u
mit k ∈ ker A und u ∈ Rm zerlegt. Es gelten:
˜ v1 , v2
AA
˜ k1 + AT u1 ), v2
AA(
=
T u , k + AT u
˜
AAA
1
2
2
=
A T u 1 , k2 + A T u 2
=
u1, A(k 2 + AT u2)
=
u1 , AAT u2
˜ k2 + A T u 2 )
v1 , AA(
=
A T u1 , A T u2
=
k1 +
=
k1 + A T u 1 , A T u 2
=
A(k1 + AT u1 ), u2
=
AAT u1 , u2
=
A T u1 , A T u2
=
14.11(b)
˜ v2
v1 , AA
=
14.11(b)
˜ symmetrisch.
Damit ist AA
AT u
und
T
˜
1 , AAA u2
.
120
III Numerical Methods in Linear Algebra
Die Eindeutigkeit wird nach [12, Lemma 1.5.1] bewiesen: Zu A ∈ Rmn sei A+ ∈ Rnm eine weitere
Matrix mit den Eigenschaften a) - d). Es gelten:
˜
A
(b)
=
˜ A
˜ = A(A
˜ A)
˜ T = A
˜A
˜ T AT (a)
˜A
˜ T AT A+T AT
AA
= A
=
˜ AA
˜
A
=
˜ T AT A+T A+ = AT A+T A+ =
AT A
T
AA+
T (c)
(b)
(d)
+ (b) ˜
+
˜ AAA
˜
˜
˜ T A+ A
= AA
= AAA+ = AAA
AA+ = AA
(a)
A+ A
T
(d)
T
A+
(b)
A+ = A+ AA+ = A+
⋄
Die Pseudoinverse wurde unabh¨
angig von Moore20 [32] und Penrose21 [38, 39] eingef¨
uhrt.
˜ ∈ Rmn von A ∈ Rmn gelten:
Satz 14.13 (Weitere Eigenschaften) F¨
ur die Pseudoinverse A
˜
˜ T = AT
˜ =A
(b) A
(a) A
˜ ist symmetrische Projektion auf bil A.
(c) AA
˜ ist symmetrische Projektion auf bil AT .
(d) AA
T = AT AA
˜
˜ = AT
(e) AAA
˜T = A
˜ T AT A = A
(f ) AAT A
Beweis:
˜ T erf¨
˜ bzw. AT eindeutig
(a), (b): A bzw. A
ullen alle vier aus 14.12, die die Pseudoinverse von A
festlegen.
(c), (d): Die Symmetrie steht in 14.12(c) und (d), die Projektion folgt aus (a), (b):
˜ 2 = AAA
˜ A
˜ = AA
˜
˜ 2 = AA
˜ AA
˜ = AA
˜ .
(AA)
und
(AA)
(e) und (f) sind aus 14.11 u
¨ bernommen.
−1
−1
⋄
Die Linksinverse AL = AT A
AT und die Rechtsinverse AR = AT AAT
von A erf¨
ullen,
falls sie existieren, die Eigenschaften 14.12(a) - (d) Sie sind damit auch die Pseudoinverse von A.
Ist A invertierbar, so ist A−1 ebenfalls die Pseudoinverse von A.
Bemerkung 14.14 (Vollrangzerlegung und Pseudoinverse [12]) Hat die Matrix A ∈ Rmn
den Rang r, so heißt eine multiplikative Zerlegung A = BC mit B ∈ Rmr und C ∈ Rrn eine
Vollrangzerlegung von A. In diesem Fall haben alle Matrizen A, B und C den Rang r. B besitzt
ullt alle Eigenschaften nach 14.12(a)eine Linksinverse B L und C eine Rechtsinverse C R . C R B L erf¨
˜ = C R B L von A.
(d), daher ist dieses Produkt die Pseudoinverse A
Werden die LR- und QR-Zerlegung einer Matrix des Ranges r mit Spaltentausch durchgef¨
uhrt,
so sind alle Koeffizienten des R-Faktors ab der Zeile r+1 null. Man rechnet leicht nach, dass in
diesem Fall A das Produkt der ersten r Spalten des L- oder Q-Faktors und der ersten r Zeilen des
R-Faktors ist. Die Permutationsmatrizen f¨
ur Zeilen- und Spaltentausch werden hierbei den beiden
Faktoren zugeschlagen. Auf diese Weise erh¨
alt man also Vollrangzerlegungen der Matrix A. Der
Q-Faktor ist urspr¨
unglich orthogonal. Die Linksinverse der um einige Spalten verkleinerten Matrix
erh¨
alt man auch in diesem Fall durch Transponieren.
14.C
Analytische L¨
osung
Wir suchen die Minima nach den Regeln der Analysis: An der Minimalstelle einer reellwertigen
Funktion in mehreren Argumenten ist ihr Gradient, ein Zeilenvektor, 0 T .
Satz 14.15 (Ableitungen des Skalarprodukts und der Norm) F¨
ur f , g : Rn → Rm gelten
mit den totalen Ableitungen (Fundamentalmatrizen) f ′ (x ) = (fi,j (x )) und g ′ (x ) = (gi,j (x )) aus
Rmn
′
−−→
(a) grad f (x ), g(x ) = g(x )T ·f ′ (x ) + f (x )T ·g ′ (x ) oder kurz
f, g
= g T ·f ′ + f T ·g ′
20
21
Eliakim Hastings Moore, US-am. Mathematiker, 1862-1932
Roger Penrose, engl. theor. Physiker, geb. 1931
14 Ausgleichsrechnung, Links- und Pseudoinverse
−−→
(b) grad f (x )
2
121
= 2· f (x )T ·f ′ (x )
F¨
ur f (x ) = Ax : Rn → Rm mit A ∈ Rmn und b ∈ Rm gelten:
(c) f ′ (x ) = A
−−→
(d) grad Ax − b
x
−−→
(e) grad Ax =
2
= 2·(Ax − b)T ·A = 2· AT (Ax − b)
T
T AT A
Ax
Beweis:
−−→
grad
(a)
f (x ), g(x )
m
−−→
= grad
fi (x )gi (x )
i=1
m
=
fi,j (x )gi (x ) + fi (x )gi,j (x )
i=1
j =1,...,n
T
′
′
T
= g(x ) · f (x ) + f (x ) · g (x )
(b)
−−→
grad f (x )
(c)
fi,j (x ) =
−−→
= grad
2
f (x ), f (x )
n
= 2· f (x )T ·f ′ (x )
n
k =1
aik ·xk
=
,j
k =1
( aik ·xk ),j = aij
(d) folgt offensichtlich aus (b) und (c).
(e) Ein Vergleich von
−−→
grad Ax
2 (d)
−−→
grad Ax
2
= 2·(Ax )T ·A = 2x
T
AT A
mit
= ( Ax
−−→
) = 2 Ax · grad Ax
2 ′
liefert das Ergebnis.
⋄
Mit der Aussage (d) kann die L¨
osung des Ausgleichsproblems sofort charakterisiert werden:
ost das Ausgleichsproblem Ax = b mit
Satz 14.16 (Lo
¨sung des Ausgleichsproblems) x ∈ Rn l¨
mn
m
T
T
A ∈ R
und b ∈ R genau dann, wenn A Ax = A b. Ist AT A invertierbar, so l¨
ost x =
T
−1
T
(A A) A b das Ausgleichsproblem eindeutig. Dies ist f¨
ur eine Matrix A vollen Ranges nach 14.8
der Fall.
Hat A ∈ Rmn nicht vollen Rang, so besteht die Aufgabe der Ausgleichsrechnung im Finden
derjenigen L¨
osung x ∈ Rn , f¨
ur die zus¨
atzlich x 2 minimal wird. Wir betrachten jetzt den Fall
m ≥ n. Der andere Fall wird u
ost [22, 39] :
¨ ber die Transponierte gel¨
Satz 14.17 (Regularisierungsverfahren)
(a) F¨
ur A ∈ Rmn und a ∈ R+ ist AT A + a · Id positiv definit.
(b) Ax − b
2
+a x
2
ist genau f¨
ur (AT A + a · Id)x = AT b minimal.
˜ = lim (AT A + a · Id)−1 · AT
(c) Es gilt A
a→0
122
III Numerical Methods in Linear Algebra
Beweis:
(a) F¨
ur v ∈ Rn\{0} gilt:
(AT A + a · Id)v , v
=
AT Av , v + av , v
=
Av , Av + a v , v
=
Av
2
+a v
2
≥ a v
2
> 0
(b) Nach 14.15 gilt:
Ax − b 2 + a x 2 ist minimal, genau dann wenn
−−→
0 T = grad Ax − b 2 + a x 2 = 2(Ax − b )T ·A + 2ax T
= 2 x
T
AT A + a · Id − b
T
A
gilt. Transponieren dieser Gleichung liefert die Aussage.
(c) Der Vektor x (a) := AT A + a · Id
kann, minimiert wegen b) Ax − b
−1
ur jedes a > 0 berechnet werden
AT b, der wegen a) f¨
2 + a x 2.
x = lim x (a) = lim (AT A + a · Id)−1 · AT b
a→0
a→0
minimiert wegen a → 0 den quadrierten Betrag Ax − b 2 .
Betrags mit dieser Eigenschaft, da x (a) den Ausdruck Ax − b
2
x ist der Vektor kleinsten
+ a x 2 minimiert.
Eine weitere Berechnungsvariante benutzt die Eigenwerte und Eigenvektoren der symmetrischen
aftigen wir uns zun¨
achst mit den Eigenvektoren symmetriMatrizen AT A und AAT . Daher besch¨
scher Matrizen.
14.D
Hauptachsen symmetrischer Matrizen
Symmetrische Matrizen besitzen gen¨
ugend Eigenvektoren, es gibt eine Basis des zugrunde liegenden
Vektorraums, die nur Eigenvektoren enth¨
alt und die zus¨
atzlich paarweise orthogonal zueinander
stehen. Dies wird im Weiteren hergeleitet. Zun¨
achst weisen wir die Existenz von Eigenwerten und
Eigenvektoren nach:
Satz 14.18 (Existenz von Eigenwerten symmetrischer Matrizen)
trisch und K = {v ∈ Rn | v = 1} die Einheitskugel in Rn . Dann gelten
A ∈ Rnn sei symme-
(a) Ist Aw , w ein Minimum oder Maximum in { Av , v |v ∈ K }, so ist Aw , w ein Eigenwert
zum Eigenvektor w .
(b) Ist Aw ein Minimum oder Maximum in { Av |v ∈ K }, so ist Aw oder − Aw ein
Eigenwert. Ist w nicht Eigenvektor zu diesem Eigenwert, so gibt es einen Vektor u ∈ K mit
folgenden Eigenschaften:
(b1) u ⊥ w ,
(b2) u und w spannen eine Ebene E auf, die invariant unter A ist (A(E ) ≤ E ),
(b3) A|E ist eine Drehung gefolgt von einer Spiegelung an der Winkelhalbierenden zwischen
w und u,
(b4) Die Ebene E enth¨
alt einen Eigenvektor zum Eigenwert Aw und einen Eigenvektor zum
Eigenwert − Aw .
Dieser Satz hat eine große Bedeutung f¨
ur in der Mechanik auftretende symmetrische Matrizen.
Ist A zum Beispiel eine Spannungsmatrix (Spannungstensor), so ist Av , v die in Richtung v auftretende Normalspannung und Av der Betrag der in dieser Richtung auftretenden Spannung. Die
betragsm¨
aßig gr¨
oßte Normalspannung und die gr¨
oßte Spannung liefern denselben Eigenwert und
sind damit gleich. Die Richtung maximaler/minimaler Normalspannung ist also auch die Richtung
maximaler/minimaler Spannung. In diesen Richtungen treten demnach keine Schubspannungen
auf. Diese Hauptrichtungen sind die Richtungen der Eigenvektoren des Spannungstensors, seine
Eigenwerte die Hauptspannungen. Richtungen maximaler/minimaler Spannung (Betrag des Spannungsvektors) k¨
onnen Richtungen maximaler Normalspannung sein. Sind sie es nicht, so gibt es
eine Spannungsebene mit einer Druck- und einer Zugspannung gleichen Betrags.
14 Ausgleichsrechnung, Links- und Pseudoinverse
123
Beweis:
(a) Wir suchen die Nullstellen des Gradienten der Funktion
Av , v
f (v ) :=
: Rn → R
v 2
und berechnen mit 14.15:
−−→
−−→
(grad Av , v ) v 2 − Av , v · grad v
−−→
0 T = grad f (v ) =
v 4
(v T A + (Av )T ) v 2 − Av , v · 2 · v T
=
v 4
2(Av − ( Av , v / v
v 2
=
⇐⇒
Av = ( Av , v / v
2
2
T
2 )v )
)·v .
w := v / v erf¨
ullt diese Gleichung ebenfalls, wegen w = 1 ist a) hiermit gezeigt.
(b) Wir suchen die Nullstellen des Gradienten der Funktion g(v ) := Av
: Rn → R und berechnen
v
mit 14.15 und
−−→
−−→
(grad Av ) v − Av · grad v
−−→
0T
=
grad g(v ) =
v 2
v
T A2
14.15(e)
− Av ·
Av
=
⇐⇒
v
2
v
T A2
=
2
Av
v
·v
Der normierte Vektor w :=
A2 w = Aw
T
v
2
v
A2 v =
v
v
v
−
Av
v
2
v
T
Av · v
(Transponieren der Gleichung, A symmetrisch)
erf¨
ullt diese Gleichung ebenfalls, wegen w = 1 gilt
·w .
(14.3)
Ist jetzt w nicht Eigenvektor zu A, so definieren wir die Ebene E als von w und Aw aufgespannten Unterraum und u als normiertes, orthogonales Komplement von w in E . Es gibt
reelle α und β, mit der Eigenschaft 14.19
Aw = αw + βu .
(14.4)
Mit µ := Aw liefert der Satz des Pythagoras
µ2 = α2 + β 2
(14.5)
Es folgt mit Gl. 14.3 und 14.4
µ2 · w = A2 w = A(αw + βu) = αAw + βAu
2
2
also
2
βAu = µ w − α(αw + βu) = (µ − α )w − αβu
und mit Gl. 14.5 f¨
ur das Bild von u schließlich
Au = β w − αu
(14.6)
Damit sind (b1) und (b2) nachgewiesen. Zum Beweis von (b3) schreiben wir A|E als Matrix
bezogen auf die Basis {w , u}:
A=
α β
β −α
=
0 1
1 0
·
β −α
α β
.
Zum Nachweis von (b4) zeigen wir mit den Gl. 14.4 - 14.6, dass
(b1) (α − µ)u − β w ein Eigenvektor zum Eigenwert µ und
(b2) (α − µ)w + βu ein Eigenvektor zum Eigenwert −µ ist:
(a): A((α − µ)u − β w ) = (α − µ)Au − βAw = (α − µ)(β w − αu) − β(αw + βu)
= ((α − µ)β − αβ)w − ((α − µ)α + β 2 )u
= −µβ w − (α2 − µα + β 2 )u = −µβ w − (µ2 − µα)u
= µ((α − µ)u − β w )
124
III Numerical Methods in Linear Algebra
(b): A((α − µ)w + βu) = (α − µ)Aw + βAu = (α − µ)(αw + βu) + β(β w − αu)
= ((α − µ)α + β 2 )w + ((α − µ)β − αβ)u
= (α2 − µα + β 2 )w − µβu = (µ2 − µα)w − µβu
= −µ((α − µ)w + βu)
⋄
Hilfssatz 14.19 A ∈ Rnn sei symmetrisch.
(a) Eigenvektoren zu verschiedenen Eigenwerten von A stehen senkrecht zueinander.
(b) Ist v ∈ Rn ein Eigenvektor von A, so ist das orthogonale Komplement
v ⊥ = {w ∈ Rn | v , w = 0}
ein A-invarianter Unterraum von Rn , d.h.: Av ⊥ ≤ v ⊥ .
Beweis:
(a) F¨
ur Eigenvektoren v1 und v2 zu verschiedenen Eigenwerten λ1 und λ2 gilt
λ1 v1 , v2
=
λ1 v1 , v2
= Av1 , v2 = v1 , Av2
= v1 , λ2 v2
= λ2 v1 , v2 .
Also folgt 0 = (λ1 − λ2 ) v1 , v2 und aus λ1 = λ2 folgt v1 , v2 = 0 .
(b) F¨
ur Av = αv und w ∈ v ⊥ gilt
Aw, v = w , Av = w , αv = α w , v = 0 .
Damit liegt Aw in v ⊥ .
Mit Hilfe dieser Aussagen wird ein wichtiger Satz f¨
ur symmetrische Matrizen bewiesen:
⋄
Satz 14.20 (Diagonalisierbarkeit symmetrischer Matrizen) A ∈ Rnn sei symmetrisch.
(a) Rn besitzt eine Orthonormalbasis {ˆ
e1 , . . . , eˆn } aus Eigenvektoren von A.
(b) Bez¨
uglich dieser Basis hat A Diagonalgestalt. Diese Diagonalmatrix wird berechnet durch
e1 , . . . , eˆn ) diejenige Orthogonalmatrix ist, die spaltenweise aus den EiO TAO , wobei O = (ˆ
genvektoren der Basis besteht.
n
(c) A besitzt die Singul¨
arwertzerlegung A =
i=1
λi eˆi · eˆiT . Hierbei ist eˆi · eˆiT das Matrizenprodukt
des Spaltenvektors ei mit dem Zeilenvektor eˆiT und stimmt mit dem dyadische Produkt eˆi ⊗ eˆi
der Tensorrechnung u
¨berein.
Beweis:
(a) Nach 14.18 besitzt A einen Eigenwert α mit zugeh¨
origem Eigenvektor v und das orthogonale
Komplement v ⊥ ist nach 14.19 A-invariant. F¨
uhren wir den Beweis als Induktionsbeweis
nach n aus, so besitzt v ⊥ eine Orthonormalbasis {ˆ
e2 , . . . , eˆn }, die um eˆ1 := v/ v zu einer
n
anzt wird.
Orthonormalbasis von R erg¨
(b) Wegen (O T O )ij = eˆi · eˆj = δij ist O T O = Id und O orthogonal. Mit den Eigenwerten
λi zu den Eigenvektoren eˆi gilt Aˆ
ei = λi eˆi . A hat also bezogen auf die Basis {ˆ
e1 , . . . , eˆn }
Diagonalgestalt:
kˆi (i = 1, . . . , n) bezeichne die kanonischen Basisvektoren, nur die i-te Komponente ist 1, die
anderen sind 0. Offensichtlich gilt O kˆi = ki und wegen O −1 = O T folgt
O T AO kˆi = O T Aei = OT λi ei = λi O T ei = λi kˆi .
(c) Die Diagonalmatrix D , deren Diagonale aus den Eigenwerten λ1 , . . . , λn besteht, kann in der
Form D = i λi kˆi · kˆiT geschrieben werden. Dies wird durch Nachrechnen von D kˆi = λi kˆi
verifiziert. Ferner gilt O = i eˆi · eˆiT und es folgt aus b)
n
A = ODO T
= O·
n
i=1
λi kˆi · kˆiT
· OT =
n
=
λi
i=1
O · kˆi · O · kˆi
T
λi O · kˆi · kˆiT · O T
i=1
n
=
i=1
λi eˆi · eˆiT
⋄
14 Ausgleichsrechnung, Links- und Pseudoinverse
14.E
125
Singul¨
arwertzerlegung einer Matrix
Symmetrische Matrizen k¨
onnen bez¨
uglich ihrer Eigenwerte zerlegt werden. Einen vergleichbaren
Satz f¨
ur eine beliebige Matrix erh¨
alt man u
arwertzerlegungender symmetrischen Ma¨ ber die Singul¨
trizen AT A und AAT .
Satz 14.21 F¨
ur eine Matrix A ∈ Rmn gelten:
(a) AT A ∈ Rnn und AAT ∈ Rmm sind semidefinit:
∀v ∈ Rn :
AT Av , v
≥ 0 ∧ ∀w ∈ Rm :
AAT w , w
≥0.
(b) Ist λ ein positiver Eigenwert von AT A zum Eigenvektor v , so ist Av ein Eigenvektor von
AAT zum selben Eigenwert λ. Ist µ ein positiver Eigenwert von AAT zum Eigenvektor w , so
ist AT w ein Eigenvektor von AT A zum selben Eigenwert µ.
AT A und AAT haben damit dieselben positiven und keine negativen Eigenwerte.
Beweis:
(a) Da AT A und AAT symmetrisch sind, gelten
AT Av , v
AAT w , w
=
=
(AAT )Av
(AT A)AT w
(b)
Av , Av
AT w , AT w
=
=
Av 2
AT w
= A(AT Av )
= Aλv
T
T
= A (AA w ) = AT µv
2
≥ 0
≥ 0.
und
= λAv
und
T
= µA v .
⋄
Satz 14.22 (Singul¨
arwertzerlegung einer Matrix und ihrer Pseudoinversen)
F¨
ur eine
mn
n
v1 , . . . , vˆn } eine Orthonormalbasis des Raumes R aus EigenvekMatrix A ∈ R des Ranges r sei {ˆ
toren von AT A zu den positiven Eigenwerten λ1 , . . . , λr und den Eigenwerten λr +1 = . . . = λn = 0.
Aˆ
vi
T
F¨
ur i ≤ r setzen wir w
ˆi := Aˆ
vi . Nach 14.21 sind dies Eigenvektoren von AA zu den Eigenwerten
λi und stehen paarweise senkrecht zueinander. Sie k¨
onnen zu einer Basis {w
ˆ1 , . . . , w
ˆm } von Rm
erg¨
anzt werden. Es gelten:
(a)
Aˆ
vi =
(b)
AT w
ˆi =
λi w
ˆi
f¨
ur
i ≤r .
λi vˆi
f¨
ur
i ≤r .
λi w
ˆi ·ˆ
viT
(Singul¨
arwertzerlegung von A)
r
(c)
A=
i=1
r
AT =
(d)
i=1
r
˜=
A
(e)
i=1
λi vˆi · w
ˆiT
(Singul¨
arwertzerlegung von AT )
1
√ vˆi · w
ˆiT
λi
(Singul¨
arwertzerlegung der Pseudoinversen)
Beweis:
(a) Wegen Aˆ
vi = Aˆ
vi w
ˆi gen¨
ugt es, Aˆ
vi zu berechnen:
Aˆ
vi 2 = Aˆ
vi , Aˆ
vi = AT Aˆ
vi , vˆi
√
(a)
(b) folgt aus λi AT w
ˆi = AT Aˆ
vi = λi vˆi .
r
(c)
j ≤r :
i=1
r
j >r :
i=1
= λi vˆi , vˆi = λi vˆi
2
.
r
λi w
ˆi ·
vˆiT
λi w
ˆi · vˆiT
vˆj =
i=1
λi w
ˆi · vˆiT · vˆj =
λj w
ˆj = Aˆ
vj
vˆj = 0 = Aˆ
vj
Also stimmen beide Seiten auf einer Basis des Rn u
¨ berein und sind damit gleich.
(d) wird analog zu (c) bewiesen.
126
III Numerical Methods in Linear Algebra
˜
(e) Die rechte Seite erf¨
ullt 14.12(a)-(d) und ist damit die Pseudoinverse A.
⋄
Zusatz 14.23 (Singul¨
arwertzerlegung in Matrixform) F¨
ur eine Matrix A ∈ Rmn des Ranges
nn
r sei V = (ˆ
v1 , . . . , vˆn ) ∈ R die Hauptachsentransformationsmatrix zu AT A und den positiven
Eigenwerten λ1 , . . . , λr und den Eigenwerten λr +1 = . . . = λn = 0 und W = (w
ˆ1 , . . . , w
ˆm ) ∈
mm
T
die Hauptachsentransformationsmatrix zu AA mit den positiven Eigenwerten λ1 , . . . , λr und
R
den Eigenwerten λr +1 = . . . = λm = 0. Ferner seien S , S ∗ ∈ Rmn die Diagonalmatrizen22 ,
deren Diagonalen aus den Wurzeln der positiven Eigenwerten λ1 , . . . , λr bzw. deren Kehrwerten
der positiven Eigenwerte und aus Nullen bestehen. Es gelten:
A = WSV T
˜ = VS ∗ W T
A
(a)
(b)
(Singul¨
arwertzerlegung einer Matrix)
(Singul¨
arwertzerlegung der Pseudoinversen)
⋄
Satz 14.24 (Polarzerlegung einer quadratischen Matrix) Eine quadratische Matrix A ∈ Rnn
kann in ein Produkt einer orthogonalen und einer symmetrischen Matrix zerlegt werden. Mit den
Bezeichnungen aus 14.22 und r = r(A) gilt:
n
n
A=
i=1
λi w
ˆi · vˆiT =
i=1
n
w
ˆi · vˆiT
·
λi vˆi · vˆiT
i=1
Beweis:
r
r
i=1
w
ˆi · vˆiT
·
i=1
r
vˆiT
λi vˆi ·
r
=
i=1 j =1
r
w
ˆi · vˆiT
·
λj vˆj ·
vˆjT
=
i=1
λi w
ˆi · vˆiT = A
Der erste Faktor ist orthogonal:
r
T
r
i=1
r
w
ˆi · vˆiT
·
i=1
w
ˆi ·
vˆiT
r
=
i=1 j =1
i=1
r
w
ˆi · vˆiT · vj · wj T =
r
=
r
w
ˆi · vˆiT
·
r
i=1 j =1
w
ˆi · δij · wj T =
i=1
r
i=1
vˆi · w
ˆiT
w
ˆi · w
ˆiT = Id
Die letzte Summe wirkt identisch auf jedem Basisvektor w1 , . . . , wn , sie ist damit gleich der Einheitsmatrix. Der zweite Faktor ist offensichtlich symmetrisch.
⋄
Ist A regul¨
ar, so ist der symmetrische Faktor die eindeutig existierende, symmetrische Wurzel
W von AT A. Direktes Rechnen zeigt, dass dann AW −1 orthogonal ist:
AW −1 AW −1
T
= AW −1 W −1T AT = AW −2 AT = A(AT A)−1 AT = AA−1 AT −1 AT = Id
Dieser Satz findet seine Anwendung in der Technischen Mechanik. F¨
ur isotropes Material ist die Deformationsmatrix (oder Deformationsgradient), also die Ableitung der Verschiebung eines Punktes
nach der Ausgangslage, das Produkt aus einer Drehmatrix, die die Starrk¨
orperrotation beschreibt,
und der symmetrischen Verzerrungsmatrix, die u
¨ ber das Materialgesetz mit der symmetrischen
Spannungsmatrix verbunden ist.
14.F
Ausgleichen von Messreihen
Die Ergebnisse der ersten Paragrafen werden zur L¨
osung der linearen Ausgleichsrechnung durch
Funktionen herangezogen.
Problemstellung 14.25 (Anpassen einer Funktion an eine Messreihe) Zu einer Messreihe {(xi , yi )|i = 1, . . . , m} und n linear unabh¨
angigen Funktionen f1 , . . . , fn sollen Koeffizienten
a1 , . . . , an gefunden werden, f¨
ur die die Funktion
f (x ) = a1 · f1 (x ) + . . . + an · fn (x )
22
nur auf den Diagonalen stehen von Null verschiedene Elemente
14 Ausgleichsrechnung, Links- und Pseudoinverse
127
die Messreihe am besten im Sinne der quadratischen Fehlerminimierung ann¨
ahert. Pr¨
aziser formuliert werden Koeffizienten a1 , . . . , an gesucht, f¨
ur die
m
m
2
n
2
i=1
|f (xi ) − yi | =
i=1 j =1
aj · fj (xi ) − yi
minimal wird.
Verfahren 14.26 (Ausgegliche L¨
osung) Jede Messung liefert eine Gleichung f¨
ur die gesuchten
Koeffizienten:
yi = a1 · f1 (xi ) + . . . + an · fn (xi ).
Mehr Messungen als unbekannte Koeffizienten (m > n) f¨
uhren auf ein u
¨berbestimmtes lineares
Gleichungssystem Aa = y mit
a1


 .. 
a =  . ;

A = (fj (xi )) i=1,...,m
j =1,...,n


an


y=



y1
..
.

ym




Nach 14.8 ist a = (AT A)−1 AT y die eindeutig bestimmte ausgeglichene L¨
osung dieses Gleichungssystems, die Aa − y 2 minimiert. Wegen Aa = (fj (xi )) · (a1 , . . . , an )T folgt
2
n
2
Aa − y
= (
j =1
aj · fj (xi ))i=1,...,m − y
m
2
n
=
i=1 j =1
aj · fj (xi ) − yi
.
Damit l¨
ost die ausgeglichene L¨
osung a des linearen Gleichungssystems (fj (xi )) i=1,...,m · a = y die
j =1,...,n
gestellte Aufgabe. Die Funktion
f (x ) = a1 · f1 (x ) + . . . + an · fn (x )
n¨
ahert die Messwerte innerhalb der gew¨
ahlten Funktionenklasse am besten an.
Im Falle m=n liefert dieses Verfahren die exakte L¨
osung.
⋄
Die wichtigsten Ans¨
atze der Ausgleichsrechnung werden vorgestellt.:
Beispiel 14.27 (Polynom-Ansatz) Als wichtigstes Beispiel betrachten wir das Angleichen der
Messwerte durch ein Polynom vorgegebenen Grades. Mit fj (x ) = x j −1 (j = 1, . . . , n) erhalten wir
als Koeffizientenmatrix


1 x1 x12 · · · x1n−1


 1 x
x22 · · · x2n−1 
2




A=. .
.
.

.
.
.
.
.
.
 .

. .
.
.

1 xm
2
xm
n−1
· · · xm

Behauptung: A hat bei n verschiedenen Messstellen vollen Rang:
Hierzu nehmen wir an, dass die ersten n Zeilen zu verschiedenen Messstellen geh¨
oren und zeigen, dass diese Zeilen linear unabh¨angig sind. Im ersten Schritt subtrahieren wir das x1 -fache der
Vorg¨
angerspalte von jeder Spalte, ziehen die Faktoren (xi − x1 ) vor die Determinate, wenden den
Kastensatz an und wiederholen diesen Prozess mehrfach:
1 0
0
··· 0
1 x1 x12 · · · x1n−1
n−1
2
2
1 x2 − x1 x2 − x1 x2 · · · x2n−1 − x1 x2n−2
1 x2 x2 · · · x2
= . .
..
.. ..
..
. . ..
. . ..
.. ..
. .
. .
.
. .
.
1 xn
=
x2 − x1
..
.
xn2 · · · xnn−1
x22 − x1 x2
..
.
xn − x1 xn2 − x1 xn
n
=
1
(xi − x1 ) · ...
i=2
x2
..
.
1 xn
···
..
.
···
1 xn − x1 xn2 − x1 xn
x2n−1 − x1 x2n−2
..
.
xnn−1 − x1 xnn−2
x22 · · ·
..
..
.
.
x2n−2
..
.
xn2 · · · xnn−2
· · · xnn−1 − x1 xnn−2
128
III Numerical Methods in Linear Algebra
n
=
n
(xi − x1 ) ·
i=2
n
(xi − x2 ) . . . =
i=3
i>j
(xi − xj ) = 0 .
⋄
Die eben berechnete Determinante heißt Vandermondesche Determinante.
Beispiel 14.28 (Ansatz mit beliebigen Exponenten)
Wir k¨
onnen auch
e
j
fj (x ) = (x − pj ) (j = 1, . . . , n) mit beliebigen verschiedenen Exponenten ej w¨
ahlen und erhalten
auf die gleiche Art und Weise eine ausgleichende Funktion.
Das Beispiel (s. Abb. 14.3) enth¨
alt Werte, die qualitativ Messwerten eines Spannungs-Dehnungsversuchs oberhalb des linearen Materialverhaltens ¨
ahneln.
Als ausgleichende Funktion w¨
ahlen wir
a1
+ a2 + a3 x + a4 x 2 + a5 x 3
f (x ) =
x + .1
und erhalten a1 = 2.2677; a2 = 297.9072; a3 = 71.4932; a4 = −33.7959; a5 = 5.5016.
Abb. 14.3 zeigt die Messergebnisse und die ausgleichende Funktion, Abb. 14.4 die Ausgleichsfehler, also die Differenzen zwischen Funktionswert und Mehrwert. Das Residuum ist die Wurzel
aus der Summe aller Fehlerquadrate, also gleich Aa − y .
Auffallend an den Fehlern ist ihr sinusf¨
ormiges Verhalten. Ursachen f¨
ur derartige systematische
¨
Fehler m¨
ussen ergr¨
undet werden. Sie weisen gegebenenfalls auf eine notwendige Anderung
des
Ansatzes hin.
Abb. 14.3: gebrochen-rationale Ausgleichsfunktion
Abb. 14.4: Fehler der Ausgleichsfunktion
14 Ausgleichsrechnung, Links- und Pseudoinverse
129
Beispiel 14.29 (Fourier-Ansatz: trigonometrisches Polynom) Hier wird das Ausgleichen mit
einem trigonometrischen Polynom angestrebt. Der Ansatz lautet
n
f (x ) = a0 +
j =1
a2j −1 · sin(j ωx ) + a2j · cos(j ωx ) .
uhrt zum
Beispiel 14.30 (Exponentialansatz) Logarithmieren des Ansatzes f (x ) = a1 · a2x f¨
Ausdruck
ln(f (x )) = ln(a1 ) + ln(a2 ) · x ,
der f¨
ur die transformierte Messreihe {(xi , ln(yi )) | i = 1, . . . , m} ein lineares Ausgleichsproblem in
den Koeffizienten ln(a1 ) und ln(a2 ) darstellt.23
Beispiel 14.31 (Potenzansatz) Logarithmieren des Ansatzes f (x ) = a1 ·x a2 f¨
uhrt zum Ausdruck
ln(f (x )) = ln(a1 ) + a2 · ln(x ) ,
der f¨
ur die transformierte Messreihe {(ln(xi ), ln(yi )) | i = 1, . . . , m} ein lineares Ausgleichsproblem
in den Koeffizienten ln(a1 ) und a2 darstellt.24
23
Neben der rechnerischen Methode der linearen Ausgleichsrechnung kann dieser Ansatz auch zeichnerisch durch
Auftragen der Messreihe auf logarithmischem Papier gel¨
ost werden. Man erh¨
alt eine Ausgleichsgerade durch den
Punkt (ln(a1 ); 0) mit der Steigung ln(a2 ).
24
Tr¨
agt man die Messreihe auf doppellogarithmischem Papier auf, so erh¨
alt man eine Ausgleichsgerade durch den
Punkt (ln(a1 ); 0) mit der Steigung a2 .
Kapitel IV
Statistik
§ 15 Grundlagen der Wahrscheinlichkeitsrechnung
15.A
Grundlagen
Beispiel 15.1 (Beispiele diskreter, gleichverteilter Zufallsexperimente)
(a) Werfen einer M¨
unze: Der Ereignisraum, die Menge aller Ereignis, ist Ω = {Z , W } . Bei
1
einer idealen M¨
unze ist die Wahrscheinlichkeit f¨
ur jedes Ereignis P (Z ) = P (W ) = |Ω|
= 12 .
(b) W¨
urfeln: Der Ereignisraum ist Ω = {1, 2, 3,4, 5, 6} . Die Wahrscheinlichkeitsverteilung
 Ω → [0, 1] 
eines idealen W¨
urfels ist P = 
.
1

ω →
6
(c) Lotto spielen: Wie große ist die Wahrscheinlichkeit sechs Richtige zu tippen?
Die Wahrscheinlichkeitsrechnung baut auf der Mengentheorie und der Integrationstheorie auf.
Bei reellen Zahlen sind offene und abgeschlossene Intervalle und ihre Wahrscheinlichkeiten wichtig,
sie bilden eine σ-Algebra.
Definition 15.2 (σ-Algebra) Ω sei eine Menge, z.B. ein Ereignisraum und A ⊆ P(Ω) eine Menge
von Teilmengen von Ω. A heißt σ-Algebra oder Ereignisalgebra, falls
(a) Ω ∈ A ,
(b) A ∈ A
=⇒
∁Ω A = A ∈ A ,
(c) Ai ∈ A (i = 1, . . . , ∞)
∞
=⇒
i=1
Ai ∈ A .
Satz 15.3 Ist A ein σ-Algebra mit A, B, Ai (i = 1, . . . , ∞) ∈ A, so gelten
(a) A ∩ B ∈ A ,
∞
(b)
i=1
Ai ∈ A .
130
15 Grundlagen der Wahrscheinlichkeitsrechnung
131
Beweis:
(a) A ∩ B = A ∪ B ∈ A
∞
(b)
∞
Ai =
i=1
i=1
Ai ∈ A
Beispiel 15.4
∞
(a)
i=2
1
1
, 1−
= (0, 1)
i
i
(b) A = {∅, {1}, {2, 3}, {1, 2, 3}} ist eine σ-Algebra auf {1, 2, 3}.
Definition 15.5 (Wahrscheinlichkeitsraum) (Ω, A, P ) heißt Wahrscheinlichkeitsraum mit der
Wahrscheinlichkeit(sverteilung) P , falls (Ein Axiom gel¨
oscht!)
(a) A ⊆ P(Ω) eine σ-Algebra (der Ereignisse). ist und
(b) die (Kolmogorow1 -Axiome) f¨
ur die Abbildung P : A → [0, 1] gelten:
(b1) P (Ω) = 1 ,
(b2) ∀A, B ∈ A : A ∩ B = ∅
=⇒
P (A ∪ B) = P (A) + P (B) .
Die Wahrscheinlichkeiten disjunkter, unvereinbarer Ereignisse werden addiert.
Definition und Satz 15.6 (Bedingte Wahrscheinlichkeit) (Ω, A, P ) sei ein Wahrscheinlichkeitsraum und A, B ∈ A. Dann ist die Wahrscheinlichkeit, dass das Ereignis A eintritt, wenn das
Ereignis B schon eingetreten ist
P (A ∩ B)
.
P (A|B) =
P (B)
Satz 15.7 F¨
ur A, B ∈ A gelten
(a)
P (A) = 1 − P (A)
(b)
A⊆B
(c)
=⇒
P (A) ≤ P (B)
P (A ∪ B) = P (A) + P (B) − P (A ∩ B)
Beweis:
(a) Dies folgt mit der disjunkten Zerlegung Ω = A ∪ A:
.
1 = P (Ω) = P (A ∪ A) = P (A) + P (A)
(b) Aus der disjunkten Zerlegung B = A ∪ (B\A) folgt
P (B) = P (A ∪ B\A) = P (A) + P (B\A) ≥ P (A) .
(c) Aus den disjunkten Zerlegungen
(c1) A = (A\B) ∪ (A ∩ B)
(c2) B = (B\A) ∪ (A ∩ B)
(c3) A ∪ B = (A\B) ∪ (B\A) ∪ (A ∩ B)
folgt
P (A ∪ B) = P (A\B) + P (B\A) + P (A ∩ B)
= P (A) − P (A ∩ B) + P (B) − P (A ∩ B) + P (A ∩ B) .
1
Andrej Nikolajewitsch Kolmogorow, russ. Mathematiker, 1903-1987
⋄
132
IV Statistik
Beispiel 15.8 (Diskrete Wahrscheinlichkeiten) Ein endlicher Ereignisraum Ω mit voller σAlgebra A = P(Ω) heißt diskreter Wahrscheinlichkeitsraum. H¨
aufig wird pω = P (ω) gesetzt. Es
gilt
pω = 1 .
ω∈Ω
Mit der zus¨
atzlichen Eigenschaft
1
∀ω ∈ Ω pω =
(=: p) ,
|Ω|
heißt der Wahrscheinlichkeitsraum gleichverteilt. In diesem Fall gilt f¨
ur A ⊆ Ω
1
|A|
=
P (A) =
p=
|Ω|
|Ω|
ω∈A
ω∈A
Diese Formel wird als Anzahl der g¨
unstigen F¨
alle geteilt durch die Anzahl der m¨
oglichen F¨
alle“
”
gelesen.
Beispiel 15.9 (Wu
¨ rfeln)
(a) Einmal W¨
urfeln:
Mit Ω = {1, 2, 3, 4, 5, 6} und A = P(Ω) ist P =



teilte Wahrscheinlichkeit f¨
ur einen idealen W¨
urfel.
A → [0, 1]
A → |A|
6


die diskrete, gleichver-

(b) Zweimal W¨
urfeln:
{1, 2, 3, 4, 5, 6}2 , P(Ω), P ist der diskrete, gleichverteilte Wahrscheinlichkeitsraum. Wegen
1
P ({(a, b)}) = P ({a}) · P ({b}) =
36


 P {1, 2, 3, 4, 5, 6}2
→ [0, 1] 
folgt P = 
.

A
→ |A|
36
Sei S das Ereignis Summe der Augen ist 6“. Mit S = {(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)}
”
5
|S |
=
.
folgt P (S ) =
36
36
15.B
Zufallsvariable
Als Beispiel einer Zufallsvariablen sei die Summe der Augen beim dreimaligen W¨
urfeln genannt.
Dieser Begriff wird jetzt genauer definiert:
Definition 15.10 (Zufallsvariable) Eine Zufallsvariable X ist eine Abbildung der Wahrscheinlichkeitsr¨
aume
X : (Ω, A, P ) → (R, B, PX )
mit folgenden Eigenschaften:
(a) ∀ω ∈ Ω : X (ω) ∈ R ,
(b) ∀B ∈ B : X −1 (B) ∈ A ,
(c) ∀B ∈ B : PX (B) = P (X −1 (B)) .
Zur Vereinfachung wird h¨
aufig nur der Wahrscheinlichkeitsraum (R, B, PX ) betrachtet.
Beispiel 15.11 (Stichprobe) Bei Stichproben sind die Zufallsgr¨
oßen Xi der Wiederholungen unabh¨
angig und identisch verteilt.
(a) Augenzahlen beim W¨
urfeln:
Xi sei die Augenzahl beim i -ten Wurf, also eine Zufallsvariable auf Ω = {1, 2, 3, 4, 5, 6}.
ur die Summe der Augenzahlen bei
Dann ist X = X1 + X2 + X3 eine Zufallsvariable auf Ω3 f¨
drei W¨
urfen und P (X ≤ 7) = P (X1 +X2 +X3 ≤ 7) die Wahrscheinlichkeit f¨
ur Die Augenzahl
”
bei drei W¨
urfen ist kleiner oder gleich sieben.“
15 Grundlagen der Wahrscheinlichkeitsrechnung
133
(b) Messfehler: Xi sei der Messfehler bei der i -ten Messung. Xi ist eine Zufallsvariable auf R.
(c) Stichprobe: Xi sei das Ergebnis der i -ten Probe, also eine Zufallsvariable auf der Menge
{0, 1} = { kein Ausschuss“, Ausschuss“} .
”
”
H¨
aufig wird die Wahrscheinlichkeit f¨
ur Ausschuss“ mit p bezeichnet, also P (Xi = 1) = p
”
und P (Xi = 0) = 1 − p .
Definition 15.12 (Verteilungsfunktion und Wahrscheinlichkeitsdichte)
X : (Ω, A, P ) ↔ (R, B, PX ) sei eine Zufallsvariable.
(a) Die Funktion
F (x ) = P (X ≤ x )
heißt Verteilungsfunktion der Zufallvariablen X .
(b) X heißt stetige Zufallsvariable, wenn es eine Wahrscheinlichkeitsdichte f : R → R≥0 gibt mit
PX (B) = P ({ω ∈ Ω | ; X (ω) ∈ B}) =
f (x ) dx .
B
Bemerkung 15.13 (Eigenschaften der Verteilungsfunktion)
(a) Die Verteilungsfunktion F ist monoton wachsend.
(b)
(c)
(d)
lim F (x ) = F (x0 ) : Die Verteilungsfunktion ist rechtsseitig stetig.
x →x0+
lim F (x ) = 0
x →−∞
lim F (x ) = 1
x →∞
Bemerkung 15.14 (Eigenschaften der Wahrscheinlichkeitsdichte)
lichkeitsdichte f einer stetigen Zufallsvariablen gelten:
F¨
ur die Wahrschein-
∞
(a)
f (x ) dx = 1 : Die Gesamtwahrscheinlichkeit ist eins.
−∞
(b)
lim f (x ) = lim f (x ) = 0
x →∞
x →−∞
(c) Nach [25, 27.2, Seite 159] ist F stetig.
(d) Ist f stetig, so gilt F ′ = f .
Beispiel 15.15 (Normalverteilung)
(a) Die Verteilungsfunktion
x
ξ2
1
F (x ) = P (X ≤ x ) = √
e− 2 dξ
2π −∞
heißt Standardnormalverteilung. Ihre Dichtefunktion ist die Gaußsche Glockenkurve.
(b) Die Verteilungsfunktion
x
(ξ−µ)2
1
e− 2σ2 dξ
2π · σ −∞
heißt Normalverteilung. Ihre Dichtefunktion ist eine verschobene und gestreckte Gaußsche
Glockenkurve.
F (x ) = P (X ≤ x ) = √
Beweis: Zu zeigen sind:
∞
(a)
ξ2
e− 2 dξ =
√
2π .
−∞
Dies wird mit Hilfe ebener Polarkoordinaten nachgewiesen:
∞
−∞
ξ2
e− 2 dξ
∞
e−
η2
2
dη
ξ2
e− 2 e−
=
R2
2π
−∞
∞
0
∞
= 2π
0
e−
dA =
ξ2 +η 2
2
dA
R2
=
0
η2
2
r2
e− 2 r dr dϕ
u=
r2
;
2
∞
e−u du = 2π − e−u
= 2π
0
du = r dr
134
IV Statistik
∞
(b)
e−
(ξ−µ)2
2σ 2
√
dξ =
−∞
2π · σ : Dies folgt mit der Substitution u =
Definition 15.16 (Erwartungswert, Varianz)
Wahrscheinlichkeitsdichte f : R → R≥0
ξ−µ
1
, du = dξ .
σ
σ
Ist X eine reelle Zufallsvariable, so ist mit der
∞
µ = E (X ) =
xf (x ) dx
−∞
der Erwartungswert (Mittelwert) der Zufallsvariablen X . Im diskreten Fall gilt
n
µ = E (X ) =
xi P (xi ) .
i=1
Die Varianz ist definiert durch
σ 2 (X ) = V (X ) = E ((X − E (X ))2 ) ,
die Streuung durch
σ(X ) =
E ((X − E (X ))2 ) .
V (X ) =
Zur Berechnung der Varianz kann der Verschiebungssatz eingesetzt werden:
E ((X − E (X ))2 ) = E (X 2 ) − E (X )2
Satz 15.17 (Verschiebungssatz)
Beweis:
E ((X − µ)2 ) = E (X 2 − 2µX + µ2 ) = E (X 2 ) − 2µE (X ) + µ2 = E (X 2 ) − 2µ2 + µ2
⋄
Beispiel 15.18 (Binomialverteilung) Bei einer Stichprobe tritt das Ereignis A (Ausschuss) mit
der Wahrscheinlichkeit p = P (A), das Ereignis A mit der Wahrscheinlichkeit q = 1 − p = p(A) auf.
Beim n-maligem Wiederholen dieses Experiments ist die Wahrscheinlichkeit, dass das Ereignis
A k mal aufgetreten ist, gleich
P (A, n, k ) =



n  k n−k
p q
.
k
Nach dem Binomialsatz gilt
n
P (A, n, k ) =
k =0
n 
k =0


n  k n−k
p q
= (p + q)n = 1 ,
k
wie es sein muss!
Mittelwert und Varianz werden berechnet:
n

µ =
k =0
n
k =1
n−1
k =0
k =1
n!
p k q n−k
(k − 1)!(n − k )!
(n − 1)!
p k −1 q n−k = np
(k − 1)!(n − k )!
= np
= np
n

n
k  p k q n−k =
k
σ
k =0
(n − 1)!
p k q n−1−k
k !(n − 1 − k )!
P (A, n − 1, k ) = np
n
2
n−1
2
2
2
= E ((X − µ) ) = E (X ) − µ =
n
= np
k
k =1
n−1
= np
(n − 1)!
p k −1 q n−k
(k − 1)!(n − k )!
(k + 1)
k =0
k =0
 
2  n  k n−k
k
p q
k
− n 2p2
(n − 1)!
p k q n−1−k
k !(n − 1 − k )!
− n 2p2
− n 2p2
15 Grundlagen der Wahrscheinlichkeitsrechnung
n−1
= np
k
k =1
(n − 1)!
p k q n−1−k +
k !(n − 1 − k )!
n−1
= np
= np
= np
(n − 1)p
(n − 1)p
(n − 1)p
k =1
n−2
k =0
n−2
k =0
n−1
k =0
135
(n − 1)!
p k q n−1−k
k !(n − 1 − k )!
(n − 2)!
p k −1 q n−1−k
(k − 1)!(n − 1 − k )!
(n − 2)!
p k q n−2−k
k !(n − 2 − k )!
P (A, n − 2, k )
+1
+1
− n 2p2
n−1
+
k =0
P (A, n − 1, k )
− n 2p2
− n 2p2
− n 2p2
= np ((n − 1)p + 1) − n 2 p 2 = np (np − p + 1) − n 2 p 2 = npq
Beispiel 15.19 (Standardnormalverteilung) Die Wahrscheinlichkeitsdichte ist eine gerade Funktion, daher ist der Erwartungswert 0. Dies folgt auch aus der Tatsache, dass der Integrand ungerade
x2
ist und mit der Substitution u =
; du = x dx
2
∞
x e−
x2
2
∞
dx =
0
0
∞
e−u du = − e−u
= 1
0
folgt, so dass
∞
0
∞
x2
x2
x2
1
1
x e− 2 dx = √
x e− 2 dx +
x e− 2 dx
µ = √
2π −∞
2π
−∞
0
gilt. Die Varianz wird mit Hilfe der partiellen Integration berechnet:
∞
∞
x2
x2
1
1
σ2 = √
x 2 e− 2 dx = √
x · x e− 2 dx
2π −∞
2π −∞
∞
∞
2
x
x2
x
1
15.15
= − √ · e− 2
+√
e− 2 dx = 0 + 1 = 1
2π
2π −∞
−∞
Beispiel 15.20 (Normalverteilung) Mit der Substitution u =
(a) E (X ) =
=
1
= √ (−1 + 1) = 0
2π
⋄
x −µ
1
; du = dx folgen
σ
σ
∞
∞
(x −µ)2
u2
1
σ
x e− 2σ2 dx = √
(uσ + µ) e− 2 du
2πσ −∞
2πσ −∞
∞
∞
u2
u2
σ
µ
√
u e− 2 du + √
e− 2 du = 0 + µ = µ
2π −∞
2π −∞
√
(b) E ((X − E (X ))2 )) =
=
∞
(x −µ)2
1
σ
(x − µ)2 e− 2σ2 dx = √
2πσ −∞
2πσ
∞
2
2
u
σ
√
u 2 e− 2 du = σ 2
2π −∞
√
∞
(uσ)2 e−
u2
2
du
−∞
Diese Ergebnisse rechtfertigen das Benutzen der Variablen µ und σ in der Definition der Normalverteilung.
Bemerkung 15.21 Die Bedeutung der Streuung l¨
asst sich durch die Angabe der Wahrscheinlichkeit f¨
ur das Auftreten der Ereignisses in den Intervallen [µ − k σ, µ + k σ] ; k = 1, 2, 3 gut
veranschaulichen:
k
1
2
3
P (X ∈ [µ − k σ, µ + k σ])
.683
.954
.997
136
IV Statistik
§ 16 Grundlagen der Statistik
16.A
Sch¨
atzfunktionen fu
¨ r statistische Gro
¨ßen
H¨
aufig wird f¨
ur ein Experiment“ eine Wahrscheinlichkeitsverteilung angenommen, die durch Stich”
proben belegt werden soll. Die statistischen Gr¨
oßen dieser Verteilung, z.B. µ und σ bei der Normalverteilung, sind unbekannt und m¨
ussen gesch¨
atzt“ werden. Diese Sch¨
atzfunktionen m¨
ussen
”
bestimmte Voraussetzungen erf¨
ullen:
¯ (oder F
¯ (n), bei
Definition 16.1 (Erwartungstreue, Konsistenz, Effizienz) Eine Sch¨
atzung F
einer Stichprobe aus n Experimenten) f¨
ur eine statistische Gr¨
oße F heißt
¯
(a) erwartungstreu, wenn E (F ) = E (F ),
¯ (n) = E (F ) gilt;
(b) konsistent, wenn lim E F
n→∞
(c) effizient, wenn es keine andere Sch¨
atzfunktion mit einer kleineren Varianz gibt.
Eine weitere Fragestellung ist nat¨
urlich die Genauigkeit dieser Sch¨
atzung. Dies wird mit Hilfe
von Konsistenz- oder Vertrauensintervallen angegeben.
Satz 16.2 (Sch¨
atzung bei Normalverteilung)
{xi | i = 1, . . . , n} einer Normalverteilung, so sind
1
x¯ :=
n
n
xi
S¯ 2 :=
und
i=1
1
n −1
Unterliegen die Messfehler einer Messreihe
n
i=1
(xi − x¯ )2
erwartungstreue und konsistente Sch¨
atzungen f¨
ur den Mittelwert und die Varianz der Zufallsvariablen X .
Vorausgesetzt wird hierbei nat¨
urlich, dass alle Messungen unabh¨
angig voneinander und gleichverteilt sind, die Zufallsvariablen X1 , . . . , Xn also stochastisch unabh¨
angig sind. Dies hat E (Xi Xj ) =
E (Xi )E (Xj ) zur Folge.
Beweis:
¯)
E (X
¯ (n)
lim E X
n→∞
E (S¯ 2 )
=
=
=
=
=
=
=
E
1
n
n
1
=
n
Xi
i=1
n
i=1
n
1
E (Xi ) =
n
µ = µ
i=1
lim µ = µ = E (X )
n→∞
E
1
n −1
1
n −1
1
n −1
n
i=1
¯ )2
(Xi − X
=
n
i=1
n
1
n −1
n
i=1
¯ )2
E (Xi − X
¯ ) + E (X
¯ 2)
E (Xi2 ) − 2E (Xi X



n

2 
n
1
E (Xi2 ) − 2E Xi 1
Xj  + E 
Xj  
n
n
i=1
j =1
j =1


n
n
n
1
1
E (Xi2 ) − 2
E (Xi Xj ) + 2
E (Xj Xl )
n −1
n
n
i=1
j =1
j ,l =1

1
n −1
n
i=1
2
2

2
2
E (Xi ) − E (Xi ) −
n
n
+
1
n2
n
j ,l=1
l=j


E (Xj )E (Xl )
n
E (Xi )E (Xj ) +
j =1
j =i
1
n2
n
E (Xj2 )
j =1
16 Grundlagen der Statistik
15.17
=
=
lim E S¯ 2 (n)
n→∞
=
1
n −1
137
n
i=1
n
n −1
2
1
+
n
n
(σ 2 + µ2 ) 1 −
(σ 2 + µ2 )
n −1
n
+ µ2 −
+ µ2 −
2(n − 1) n 2 − n
+
n
n2
n −1
n
= σ2
lim σ 2 = σ 2 = E ((E (X ) − µ)2 )
n→∞
⋄
F¨
ur die Varianz der Sch¨
atzung des Mittelwerts gilt

n
¯ − E (X
¯ ))2 ) = E X
¯ 2 − µ2 = E  1
E ((X
Xi
n
i=1


n
n
1 
=
E
X i X j  − µ2
n2
i=1 j =1

1
=  2
n
n
E Xi2 +
i=1
1
n2
n
2

 − µ2


E (Xi )E (Xj ) − µ2
i,j =1
j =i
1
n2 − n 2
n −1−n 2
σ2
2 15.17 1
2
2
µ
−
µ
=
+
µ
)
+
=
E X2 +
(σ
µ
.
n
n2
n
n
n
F¨
ur wachsendes n geht die Varianz der Sch¨
atzung gegen null. Auch dies ist ein Nachweis der
Konsistenz.
=
Satz 16.3 (Sch¨
atzung bei Binomialverteilung) F¨
ur die gesuchte Wahrscheinlichkeit p eines
Ereignisses A bei einer Stichprobe von n Experimenten (Bernoulli-Experiment) bezeichne X (n) die
Zufallsvariable f¨
ur die Anzahl der aufgetretenen Ereignisse A. Dann ist
¯ := X (n)
P
n
eine erwartungstreue und konsistente Sch¨
atzung f¨
ur die Wahrscheinlichkeit.
Beweis:
Wegen E (X ) = np und σ 2 (X ) = np(1 − p) folgen
¯ ) = np
E (P
16.B
und
¯ ) = 1 σ 2 (X ) = p(1 − p) .
σ 2 (P
n2
n
⋄
Vertrauensintervall fu
¨ r Mittelwert
Aufgabe 16.4 F¨
ur den Mittelwert µ einer normalverteilten Zufallsvariablen soll ein Vertrauensintervall angegeben werden, in dem µ mit der Wahrscheinlichkeit ε liegt. Bei vielen Anwendungen
wird ε = .95 oder ε = .99 gew¨
ahlt.
L¨
osung: Zur L¨osung setzen wir bei bekannter Varianz
√
¯ − µ)
n(X
σ
und bei unbekannter Varianz mit ihrem Sch¨
atzwert S¯
√ ¯
n(X − µ)
Z =
.
S¯
Z ist standardnormalverteilt. Gesucht ist das Vertrauensintervall [−v , v ] mit
Z =
1
ε = P (−v ≤ Z ≤ v ) = √
2π
v
−v
ξ2
e− 2 dξ =
2
π
v
0
ξ2
e− 2 dξ .
138
IV Statistik
Aus dieser Gleichung muss v numerisch berechnet werden oder aus Tabellen abgelesen werden. Aus
¨
den Aquivalenzen
√ ¯
n(X − µ)
−v ≤ Z =
≤v
σ
σv
σv
¯ −µ≤ √
⇐⇒ − √ ≤ X
n
n
σv
σv
¯ − √ ≤ −µ ≤ −X
¯ +√
⇐⇒ −X
n
n
σv
σv
¯ +√ ≥µ≥X
¯ −√
⇐⇒ X
n
n
σv
σv
¯ +√
¯ −√ ≤µ≤X
(16.1)
⇐⇒ X
n
n
folgt, dass das Konfidenzintervall mit wachsender Stichprobengr¨
oße kleiner wird, der wahre Mittelwert also enger festgelegt werden kann.
Beispiel 16.5 Gegeben sei eine Messreihe f¨
ur eine gegebene Gr¨
oße
{11, 12, 11, 10, 9, 13, 14, 11, 12, 12, 11, 13, 15, 11, 12, 10, 9, 10, 11, 13} .
Gesucht ist das 99%-Konfidenzintervall f¨
ur den wahren Mittelwert µ.
¯ = 11.5, f¨
Der Sch¨
atzwert f¨
ur den Mittelwert ist X
ur die Streuung S¯ = 1.57. Der in
2 v − ξ2
e 2 dξ
π 0
gesuchte Wert v wird numerisch ermittelt.
0.99 =
Der MatLab-Aufruf der Romberg-Integration
Romberg(f,[0,2],5,2) liefert einen N¨
aherungswert 0.9544997361 f¨
ur v = 2. Dieser Wert wird durch das Newton-Verfahren verfeinert. Gesucht ist die Nullstelle der Funktion
2 v − ξ2
g(v ) =
e 2 dξ − 0.99 ,
π 0
die durch den MatLab-Aufruf des Newton-Verfahrens mit dem Anfangswert v = 2 und der RombergIntegration mit 5 Spalten berechnet wird, s. Abb. 16.1. Das Ergebnis ist 2.575824555, die gefundene
N¨
aherung der Nullstelle. Damit ist das gesuchte Ergebnis v = 2.58 und aus Gl. 16.1 folgt 10.06 ≤
>> format compact
>> m=[11 12 11 10 9 13 14 11 12 12 11 13 15 11 12 10 9 10 11 13];
>> X=mean(m)
X =
11.5
>> S=std(m)
S =
1.5728
>> f=@(x)exp(-.5*x.^2)*sqrt(2/pi);
>> v=Newton(@(t)Romberg(f,[0,t],5,2)-.99,f,2)
v =
2.5758
>> konint=X+[-1,1]*S*v/sqrt(length(m))
konint =
10.594
12.406
Abb. 16.1: Berechnung mit MatLab
µ ≤ 12.41 mit einer Wahrscheinlichkeit von 99%.
17 Weibull-Verteilung
139
§ 17 Weibull-Verteilung
17.A
Definition
Die Weibull-Verteilung2 erlaubt, die Lebensdauer von Werkst¨
ucken statistisch zu modellieren. Die
Berechnung dieser Verteilung l¨
asst sich mit Hilfe der Gamma-Funktion einfacher darstellen. Daher
wird an deren Definition und einige Eigenschaften erinnert, s. [25, 30.7(a), Seite 178].
Definition und Satz 17.1 (Gamma-Funktion) F¨
ur x ∈ R>0 wird die Gamma-Funktion als uneigentliches Integral definiert durch
∞
Γ(x ) =
t x −1 e−t dt .
0
Es gelten
(a) Γ(1) = 1 ,
(b) Γ(x + 1) = x · Γ(x ) f¨
ur x ≥ 0 und
(c) Γ(m) = (m − 1)! f¨
ur m ∈ N.
Die Weibull-Verteilungen werden durch ihre Wahrscheinlichkeitsdichte definiert:
Definition 17.2 (Weibull-Wahrscheinlichkeitsdichte) Die Weibull-Wahrscheinlichkeitsdichte
zu den Parametern λ und k ist definiert durch



 0

x <0 
k
f (x , λ, k ) =
k −1 − x

 k x

e λ
x ≥0 
λ λ
λ wird charakteristische Lebensdauer und k Ausfallsteilheit genannt.
Satz 17.3 F¨
ur die Weibull-Dichtefunktionen gelten:
(a) Die Weibull-Wahrscheinlichkeitsverteilung ist
x
P (x , λ, k ) =
x
f (t, λ, k ) dt =
0
0
t
λ
k
λ
k −1
e
k
− t
λ
− x
λ
dt = 1 − e
k
.
k
¨
R(x , λ, k ) = e−( λ ) gibt die Uberlebungswahrscheinlichkeit“
an.
”
k
k
−1
∞
k t
− t
(b)
P (∞, λ, k ) =
e λ dt = 1
λ λ
0
Damit ist die Weibull-Dichte wirklich eine Wahrscheinlichkeitsdichte.
x
Beweis:
(a) Mit der Substitution
u=
t
λ
k
,
du =
k
λ
t
k
k −1
dt
(17.1)
folgt
k t k −1 − λt
e
dt =
λ
0 λ
(b) Diese Aussage folgt direkt aus (a).
x
( x/λ)k
k
−u
e
0
−u
du = − e
( x/λ)k
0
= 1−
Abb. 17.1 und 17.2 enthalten die Grafen einiger Weibull-Dichtefunktionen.
− x
e λ
k
⋄
1
e
Alle Verteilungskurven zu einem festen Wert λ verlaufen f¨
ur alle k durch den Punkt (λ, 1 − 1/e) ≈
(λ, 0.6321).
Zusatz 17.4
P (λ, λ, k ) = 1 −
140
IV Statistik
Abb. 17.1: Weibull-Dichte, k variiert
Abb. 17.3: Weibull-Dichte, k = λ
Abb. 17.2: Weibull-Dichte, λ variiert
Abb. 17.4: Weibull-Verteilung, λ konstant
F¨
ur λ = 1 sind einige Verteilungen in Abb. 17.4 dargestellt.
Abb. 17.5 enth¨
alt die Kodierung der Weibull-Dichte und -Verteilung in MatLab und den Kode
zur Generierung einer zu Abb. 17.3 analogen Grafik in MatLab.
>> format compact
>> weibulld=@(x,k,lambda) (k/lambda)*(x/lambda)^(k-1)*exp(-(x/lambda)^k)
weibulld =
@(x,k,lambda)(k/lambda)*(c/lambda)^(k-1)*exp(-(x/lambda)^k)
>> weibullv=@(x,k,lambda) 1-exp(-(x/lambda)^k)
weibullv =
@(x,k,lambda)1-exp(-(x/lambda)^k)
>>
>>
>>
>>
>>
>>
>>
>>
hold on
fplot(@x weibulld(x,1,1),[0,6])
fplot(@(x) weibulld(x,1,1),[0,6])
fplot(@(x) weibulld(x,2,2),[0,6])
fplot(@(x) weibulld(x,3,3),[0,6])
fplot(@(x) weibulld(x,4,4),[0,6])
fplot(@(x) weibulld(x,5,5),[0,6])
hold off
Abb. 17.5: Kodierung in MatLab
2
Ernst Hjalmar Waloddi Weibull, schwedischer Mathematiker und Ingenieur, 1887 - 1979 (Annecy)
17 Weibull-Verteilung
17.B
141
Momente
Satz 17.5 (Erwartungswert und Varianz) Erwartungswert und Varianz einer Zufallsvariablen
X , die Weibull-verteilt ist, werden berechnet:
k −1
∞
E (X )
k t
λ λ
0
λ Γ (1 + 1/k ) ,
t·
=
=
E ((X − E (X ))2 )
∞
(17.1)
=
λ2 u
0
2/k
dt
∞
(17.1)
=
λu
1/k
e−u du
0
E (X 2 ) − (E (X ))2
=
k
− t
λ
e
∞
(15.17)
=
0
t2 ·
k
λ
k −1
t
λ
e
− t
λ
k
dt − (E (X ))2
e−u du − (E (X ))2 = λ2 Γ (1 + 2/k ) − (Γ (1 + 1/k ))2
Der Erwartungswert ist streng monoton wachsend in λ. Da die Gamma-Funktion nach Abb. 17.6
im Bereich (0, 1.5] streng monoton f¨
allt, w¨
achst der Erwartungswert streng monoton in k f¨
ur k > 2.
Die Varianz ist streng monoton wachsend in λ. Da die Γ(1 + 2x ) − (Γ(1 + x )2 ) nach Abb. 17.7
im Bereich (0, 1] streng monoton w¨achst, f¨
allt sie wegen x = 1/k streng monoton in k .
3
1
0.9
2.5
0.8
2
0.7
Γ(x)
Γ(1+2x)−(Γ(1+x))
2
1.5
0.6
0.5
0.4
0.3
1
0.2
0.1
0.5
0.5
1
1.5
2
2.5
3
0
0
0.1
0.2
0.3
x
Abb. 17.6: Gamma-Funktion
0.4
0.5
x
0.6
0.7
0.8
0.9
1
Abb. 17.7: Γ(1 + 2x ) − (Γ(1 + x )2 )
17.C
Approximation einer Messreihe durch Weibull-Verteilungen
17.C.1
Approximation durch eine Weibull-Verteilung
Aufgabe 17.6 Liegt eine Messreihe {(xi , Pi )|i = 1, . . . , m} zu einer Weibull-verteilten Zufallsvariablen vor, so m¨
ussen die Parameter λ und k der besten Approximierenden Funktion P (x , λ, k ) =
x/λ)k
−(
1−e
gefunden werden.
Als Anwendungsbeispiel betrachte man den Anteil Pi von Werkst¨
ucken, die bis zum Zeitpunkt xi
ausgefallen oder zerst¨
ort sind. Umstellen und Logarithmieren der Funktion liefert einen L¨
osungsansatz:
P = 1 − e−(
x/λ)k
(17.2)
−( x/λ)k
⇐⇒ 1 − P = e
⇐⇒ ln(1 − P ) = − ( x/λ)k
x k
1
⇐⇒ − ln(1 − P ) =
= k · xk
λ
λ
k
⇐⇒ y(x ) = a · x
mit
y(x ) = − ln (1 − P (x , λ, k )) ,
(17.3)
1
a= k,
λ
yi = − ln(1 − Pi )
(17.4)
.
142
IV Statistik
L¨
osung 17.7 F¨
ur die Messreihe {(xi , yi )|i = 1, . . . , m} und den Ansatz y(x ) = a · x k k¨
onnen die
Parameter a und k z.b. auf folgende Arten gewonnen werden:
(a) Auftragen der Messreihe auf doppelt-logarithmischem Papier und Bestimmen der Parameter
nach [27, 7.F, Seite 38]
(b) Nach Logarithmieren des Potenzialansatzes y(x ) = a · x k zu
ln(y(x )) = ln(a) + k · ln(x )
(17.5)
k¨
onnen ln(a) und k durch eine lineare Ausgleichsrechnung mit den Monomen x 0 und x 1
gewonnen werden, s. 14.30, Seite 129 oder [24, 4.22, Seite 41].
Es sei darauf hingewiesen, dass dieses Vorgehen nicht die optimale L¨
osung f¨
ur den Potenzialansatz liefert, sondern die optimale L¨
osung f¨
ur das logarithmisierte Problem. Dieses ist aber eine
gute N¨
aherung an das Optimum.
Beispiel 17.8 Zur Messreihe
x
1
2
3
4
5
6
7
8
9
10
11
12
P 0.075 0.204 0.357 0.481 0.667 0.774 0.883 0.902 0.948 0.968 0.995 0.999
soll die zugrunde liegende Weibull-Verteilung gefunden werden. Nach 17.6 und 17.7 ist A = (1, ln(x ))
die Koeffizientenmatrix und b = ln − ln(1 − P ) der Konstantenvektor der zu l¨
osenden Ausgleichsaufgabe Az = b, deren L¨
osung durch
T
−1
z = (A A)
T
A b=



−2.6969 
1.7574
berechnet wird, s. L¨
osung mit MatLab Abb. 17.8. Hieraus ergeben sich
k
(17.5)
=
z (2) = 1.757 ,
λ
(17.4)
=
1
√
k
a
(17.5)
=
e−
z (1)/k
= 4.642 .
Abb. 17.8 beinhaltet die MatLab-L¨
osung mit Hilfe der Funktion WeibullOpt, s. Abb. 17.9.
Abb. 17.10 stellt die gefundene L¨
osung mit den Messungen dar.
>>
>>
>>
>>
kl
format compact
x=[1:12];
P=[0.075 0.204 0.357 0.481 0.667 0.774 0.883 0.902 0.948 0.968 0.995 0.999];
[kl,err,std]=WeibullOpt(x,P)
=
1.7574
4.6423
err =
0.0097185
std =
0.018478
Abb. 17.8: L¨osung in MatLab
17.C.2
¨
Approximation durch Uberlagerung
zweier Weibull-Verteilungen
Die Ausfallwahrscheinlichkeit eines Werkst¨
ucks hat h¨
aufig ein Maximum am Anfang und gegen
¨
Ende der erwarteten Lebenszeit. Dies kann durch die Uberlagerung
zweier Weibull-Dichtefunktionen
(oder mehrerer) modelliert werden.
17 Weibull-Verteilung
143
function [kl,e,s]=WeibullOpt(x,P)
% WeibullOpt berechnet die beste Weibull-Verteilung zu den Eingaben x, P
% V1.1 29.12.2013 D. Kilsch
% x
V
Zeitpunkte
% P
V
Anteil defekter Teile zum Zeitpunkt x
% kl
V[1] Exponent der Weibull-Verteilung (k)
%
[2] Quotient der Weibull-Verteilung (lambda)
% e
S
mittlerer Fehler
% s
S
Standardabweichung der Fehler
%
% Methode: Auf die Gleichung P(x) = 1-exp(-(x/lambda)^k) in logarithmi% scher Form -ln(1-P) = (1/lambda)^k * x^k wird das halblogarithmische
% Ausgleichsverfahren angewandt: ln(-ln(1-P)) = ln((1/lambda)^k) + k*ln(x).
% Die Koeffizienten ln((1/lambda)^k) und k werden durch die
% Ausgleichsrechnung, in MatLab durch die Linksmultiplikation / berechnet.
%==========================================================================
Weibullv=@(x,kl) 1-exp(-(x/kl(2)).^kl(1));
%
A=[repmat(1,length(P),1),log(x)’];
z=A\log(-log(1-P))’;
kl=[z(2),exp(-z(1)/z(2))];
%
z=Weibullv(x,kl)-P;
% Fehler
e=mean(z);
s=std(z);
%
fplot(@(x)Weibullv(x,kl),[0,max(x)]);
hold on;
plot(x,P,’+r’);
xlabel(’x’)
ylabel(sprintf([’P, Weibullv(%7.4f,%8.4f)’],kl))
title(’Approximation durch Weilbull-Verteilung’)
hold off;
Abb. 17.9: Die MatLab-Funktion WeibullOpt
Approximation durch Weilbull−Verteilung
1
0.9
P, Weibullv( 1.7574, 4.6423)
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
2
4
6
x
8
10
Abb. 17.10: Gefundene L¨osung: λ = 4.642, k = 1.757
12
144
IV Statistik
¨
Bei einer Uberlagerungen
zweier Weibull-Dichtefunktionen muss wieder eine Wahrscheinlichkeitsdichte entstehen, daher muss die Summe der beiden Faktoren eins ergeben:
s(x , λ1 , k1 , λ2 , k2 , a) = a · f (x , λ1 , k1 ) + (1 − a) · f (x , λ2 , k2 )


 0
=
k1 −1 − x k1
k2 −1 −

 a k1 x
+ (1 − a) k2 x
e λ1
e
λ1 λ1
λ2 λ2
x
λ2


x <0 
k2
¨
Abb. 17.11 zeigt Beispiele f¨
ur Uberlagerungen
bei variierendem Parameter a.

x ≥0 
(17.6)
¨
Abb. 17.11: Uberlagerungen
mit k1 = λ1 = 1 und k2 = λ2 = 5 (W-Dichte)
¨
Die analoge Formel f¨
ur die Uberlagerungen
der Weibull-Verteilungsfunktionen lautet



 0

x <0 
k
k
1
2
P (x , λ1 , k1 , λ2 , k2 , a) =
(17.7)
x
x
−
−

 a 1 − e λ1

+ (1 − a) 1 − e λ2
x ≥0 
¨
Die Bestimmung der Parameter der beiden Verteilungen und des Uberlagerungskoeffizienten
wird als Optimierung des Fehlers in den Messpunkten“ durch ein Gradientenabstiegsverfahren
”
ausgef¨
uhrt. Die Anfangswerte erhalten wird durch zwei Weibull-Approximation nach 17.C.1 f¨
ur die
Anfangswerte und die Endwerte der Messungen.
F¨
ur eine Messreihe {(xi , Pi )|i = 1, . . . , m} m¨
ussen die Koeffizienten λ1 , λ2 , k1 , k2 und a so
gefunden werden, dass sie den Fehler
E (λ1 , k1 , λ2 , k2 , a) =
1
2
m
i=1
|P (xi , λ1 , k1 , λ2 , k2 , a) − Pi |2
minimieren. Hierzu stehen das Newton-Raphson-Verfahren, die Gradientenabstiegsmethode und
das Levenbergh-Marquardt-Verfahren nach 12.B zur Verf¨
ugung.
Beispiel 17.9 Als Beispiel betrachten wir die folgende in der Datei SkrStWe5.dat enthaltene
Messreihe
x
P
1
2
3
4
5
6
7
8
9
10
11
0.101 0.159 0.192 0.212 0.231 0.254 0.275 0.287 0.289 0.289 0.289
12
0.3
13
0.318
...
...
... x 14
15
16
17
18
19
20
21
22
23
24
25
26
27
... P 0.337 0.352 0.368 0.396 0.444 0.511 0.588 0.666 0.74 0.811 0.878 0.937 0.979 0.995
Abb. 17.12 enth¨
alt die L¨
osung in MatLab mit der Funktion WeibullOpt2, die in Abb. 17.13
dargestellt ist.
Die wichtigen Schritte dieser L¨
osung sind:
(a) Bestimmen eines Anfangsvektors (k1 , λ1 , k2 , λ2 , a):
17 Weibull-Verteilung
145
>> format compact
>> [param,mse,err,std,ergan]=WeibullOpt2(’SkrStWe5.dat’,2,7,.5,3,.01,1,.01,4000,20)
param =
0.82986
3.1489
7.0846
22.064
0.31144
mse =
4.3183e-005
err =
-0.00027455
std =
0.0066907
ergan =
3
3386
13 9.8788e-006 4.1832e-006 -2.6455e-011
Abb. 17.12: L¨osung in MatLab
(a1) Mit den ersten beiden Punkten werden wie in 17.C.1 die Parameter k1 und λ1 einer ersten
Weibull-Verteilung bestimmt, s. Abb. 17.14. Die ersten drei Punkte, oder noch weiterer,
liefern schlechte Startwerte, die das Gradientenverfahren nicht zu guten Ergebnissen
konvertieren lassen.
(a2) Mit den letzten sieben Punkten werden analog die Parameter k2 und λ2 bestimmt einer
zweiten Weibull-Verteilung bestimmt, s. Abb. 17.15.
(a3) Ferner wird a = 1/2 gesetzt.
(b) Mit diesen Startwerten wird ein Gradientenabstiegsverfahren gestartet. Als Zielfunktion wird
die Summe der quadratischen Fehler benutzt. Mit der Geradensuche konvergiert das Verfahren
gut. Abb. 17.16 enth¨
alt die Fehlerkurve w¨
ahrend der Iteration.
Das Ergebnis lautet


 0
P (x ) =
0.8297
x

 0.3114 1 − e−( 3.149 )
x
+ 0.6886 1 − e−( 22.06 )
7.085


x <0 
x ≥0 

Es ist in Abb. 17.17 dargestellt. Nach Abb. 17.12 betr¨
agt der mittlere quadratische Fehler 4.3·10−5 ,
der mittlere Fehler −0.00275 und die Standardabweichung der Fehler 0.0067. Die Bedeutung der
Ausgabe ergan ergibt sich aus dem Kopf der Funktion WeibullOpt2 in Abb. 17.13.
function [param,mse,e,s,ergan]=...
WeibullOpt2(datei,aanf,aend,a,method,h,lrmax,lrmin,anzlauf,halbmax)
% WeibullOpt2 berechnet die beste ¨
Uberlagerung zweier Weibull-Verteilungen.
% V1.1 29.12.2013 D. Kilsch
% datei
TV Datei mit Messdaten, zeilenweise
% aanf
S
Anzahl Punkte (vom Anf.) f¨
ur Optierung der ersten Verteilung
% aend
S
Anzahl Punkte (vom Ende) f¨
ur Optierung der zweiten Verteilung
% a
S
Anteil der ersten Weibull-Verteilung
[DEF.: .5]
% method S
Methode des Gradientenverfahrens, s. GradientenVerf.[DEF.: 1]
% h
S
Schrittweite f¨
ur Gradientberechnungen
[DEF.: 1E-3]
% lrmax
S
maximale Lernrate
[DEF.: 1]
% lrmin
S
minimale Lernrate
[DEF.: .001]
% anzlauf S
maximale Iterationschritt
[DEF.: 200]
% halbmax S
maximale Anzahl der Schrittweitenhalbierungen
%
f¨
ur Gradientberechnungen
[DEF.: 30]
% param
V
gefunde optimale Werte der Optimierung, wie aparam
%
[1] Quotient der ersten Weibull-Verteilung
%
[2] Exponent der ersten Weibull-Verteilung
146
IV Statistik
%
[3] Quotient der zweiten Weibull-Verteilung
%
[4] Exponent der zweiten Weibull-Verteilung
%
[5] Anteil der ersten Weibull-Verteilung
% mse
S
Fehler laut Ziefunktion: mittlerer quadratischer Fehler
% e
S
mittlerer Fehler
% s
S
Standardabweichung der Fehler
% ergan
V
Ergebnisanalyse
%
(1): Abbruchgrund:
%
1: max. Anzahl der Epochen erreicht
%
2: max. Anzahl der Schrittweitenhalbierung erreicht
%
3: Minimale Betragsnorm des Gradienten unterschritten
%
4: Min. Betragsnorm der Diff. der ¨
Anderung unterschr.
¨
%
5: rel. Anderung in Fkt.-wert 50 Mal kleiner 10^-8
%
(2): Epochenzahl
%
(3): Schrittweitenhalbierung
%
(4): Norm des Gradienten
%
(5): Norm Betragsdifferenz
%
(6): Differenz der letzten Funktionswerte
%
% Beispiel:
% [param,err]=WeibullOpt2(’SkrStWe5.dat’,2,7,.5,3,.01,1,.01,4000,40)
%
% x
V
Messstellen (Zeitpunkte)
% P
V
Anteilo defekte Teile
% fkt
FH
Zielfunktion
%
fkt(NaN): M(1,:) Zeitpunkte x
%
M(2,:) Anteil der defekten Teile zur Zeit x
%
% Methode: Auf die Gleichung
% P(x) = a*(1-exp(-(x/lambda1)^k1))+(1-a)*(1-exp(-(x/lambda2)^k2))
% wird die Gradientenabstiegsmethode angewandt.
%==========================================================================
Weibullv2=@(x,k) k(5)*(1-exp(-(x/k(2)).^k(1)))+(1-k(5))*(1-exp(-(x/k(4)).^k(3)));
WeibullZiel2=@(k,t,P) sum((Weibullv2(t,k)-P).^2);
%
if nargin<10;
halbmax=30;
end;
if nargin<9;
anzlauf=200;
end;
if nargin<8;
lrmin=0.001;
end;
if nargin<7;
lrmax=1;
end;
if nargin<6;
h=1e-3;
end;
if nargin<5;
method=1;
end;
if nargin<4;
a=.5;
end;
%
P=textread(datei);x=P(:,1)’;P=P(:,2)’;
%
close all;figure(1);
param=WeibullOpt(x(1:aanf),P(1:aanf));
figure(2);
param=[param,WeibullOpt(x(end-aend:end),P(end-aend:end))];
[param,mse,ergan]=GradientenVerf(method,@(k)WeibullZiel2(k,x,P),...
[param,a],h,lrmax,lrmin,anzlauf,halbmax,’Weibull_2’,1E-5,1E-10);
mse=mse/length(x);
%
17 Weibull-Verteilung
147
z=Weibullv2(x,param)-P;
% Fehler
e=mean(z);s=std(z);
%
figure(4);
fplot(@(x)Weibullv2(x,param),[0,max(x)]);
hold on;
plot(x,P,’+r’);
xlabel(’x’)
ylabel(sprintf([’P, Weibullv2(%7.4f,%8.4f,%8.4f,%8.4f,%8.4f)’],param))
title(’Approximation durch zwei Weilbull-Verteilungen’)
hold off;
Abb. 17.13: Die MatLab-Funktion WeibullOpt2
Approximation durch Weilbull−Verteilung
Approximation durch Weilbull−Verteilung
0.16
1
0.9
0.14
P, Weibullv( 5.8625, 20.7731)
P, Weibullv( 0.7017, 24.3432)
0.8
0.12
0.1
0.08
0.06
0.04
0.7
0.6
0.5
0.4
0.3
0.2
0.02
0
0.1
0
0.5
1
x
1.5
0
2
0
20
25
Approximation durch zwei Weilbull−Verteilungen
2
P, Weibullv2( 0.8299, 3.1489, 7.0846, 22.0642, 0.3114)
0.18
0.16
Fehlerquadratsumme
15
Abb. 17.15: Approximation f¨
ur k2 und λ2
Gradientenverf. mit Geradensuche:Weibull 201401101344
0.2
0.14
0.12
0.1
0.08
0.06
0.04
0.02
0
10
x
Abb. 17.14: Approximation f¨
ur k1 und λ1
0
5
500
1000
1500
2000
2500
3000
(Verfahren 3, Schritt 3386: 0.001166) Epochen
3500
Abb. 17.16: Fehlerkurve w¨ahrend der Iteration
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
5
10
15
20
25
x
Abb. 17.17: Messpunkte und Approximation
Bemerkung 17.10 Ausf¨
alle von Bauteilen durch unabh¨
angige Sch¨
aden an zwei verschiedenen
¨
Bauteilen k¨
onnen ebenfalls durch eine Uberlagerung
zweier Weibull-Verteilungen dargestellt werden, deren Parameter auf analoge Weise zu bestimmen sind.
Literaturverzeichnis
´, M. und P. Meier: Analysis f¨
[1] Andrie
ur Ingenieure. VDI-Buch. Springer, Heidelberg, 3.
Aufl., 1996. ISBN 3-540-62296-9, FHBib: P940120 111620 (A2), e22.95.
´, M. und P. Meier: Lineare Algebra und Geometrie f¨
[2] Andrie
ur Ingenieure. VDI-Buch. Springer, Heidelberg, 3. Aufl., 1996. ISBN 3-540-62294-2, FHBib: P940120 111620(A2), e22.95.
[3] Bajpai, A. C., L. R. Mustoc, and D. Walker: Advanced Engineering Mathematics. John
Wiley, Chichester, 2. ed., 1990. ISBN 0-471-92595-0, FHBib: 940118 111340.
[4] Bajpai, A. C., L. R. Mustoc, and D. Walker: Engineering Mathematics. John Wiley,
Chichester, 2nd ed., 1990. ISBN 0-471-92283-8, FHBib: 940119 111340.
[5] Barthold, F.-J. und D. Materna: Einf¨
uhrung in die Informationsverarbeihttp://www.bauwesen.tu-dortmund.de/nmi/Medienpool/Skripte/
tung: MATLAB.
NMI-Grundlagen-Matlab-28-05-2013.pdf, 13.11.2014.
[6] Bartsch, H.-J.: Taschenbuch mathematischer Formeln. Fbv, Leipzig, 20. Aufl., 2004. ISBN
3-446-22891-8, FHBib: 060759 111001, e19.90.
[7] Brauch, W., H.-J. Dreyer und W. Haacke: Mathematik f¨
ur Ingenieure. Teubner, 11.
Aufl., 2006. ISBN 3-8351-0073-4, FHBib: P900325 111340(A8), http://gwv-mailing.wsberlin.
de/gwv/redirect.jsp?id=5002675&pnlid=5008152, e39.90.
[8] Bronstein, I. N. und K. A. Semendjajew: Taschenbuch der Mathematik . Harri Deutsch,
Thun, 25. Aufl., 1991. vergriffen, ISBN 3-87144-492-8, 3-8154-2000-8, FHBib: 941013 111001.
[9] Bronstein, I. N., K. A. Semendjajew, G. Musiol und H. M¨
uhlig: Taschenbuch der
Mathematik . Harri Deutsch, Frankfurt am Main, 6. Aufl., 2005. ISBN 3-8171-2006-0, FHBib:
041425 111001(A5), e39.95.
[10] Bugl, P.: Differential Equations: Matrices and Models. Prentice Hall, 1995. ISBN 0-02316540-5, FHBib: 950875 111622.
[11] Bungartz, H.-J., S. Zimmer, M. Buchholz und D. Pfl¨
uger: Modellbildung und Simulation: Eine anwendungsorientiert Einf¨
uhrung. eXamen.press. Springer, Berlin, 2009. ISBN
978-3-540-79809-5, 32.99.
[12] Bunse, W. und A. Bunse-Gerstner: Numerische lineare Algebra. Teubner Studienb¨
ucher
Mathematik. Teubner, Stuttgart, 1985. ISBN 3-519-02067-X, FHBib: 980684 111602, DM 38.-.
[13] Burg, K., H. Haf und F. Wille: H¨
ohere Mathematik f¨
ur Ingenieure, Bd. 3: Gew¨
ohnliche Differentialgleichungen, Distributionen, Integraltransformationen. Teubner, 2. Aufl., 1990.
ISBN 3-519-12957-4, FHBib: 900922 111310.
[14] Cevore, J. L. and K. N. Berk: Modern Mathematical Statistics with Applications. Springer
Texts in Statistics. Springer, New York, 2nd ed., 2012. ISBN 978-14614-0390-6.
[15] Engeln-M¨
ullges, G., K. Niederdrenk und R. Wodicka: Numerik-Algorithmen. Springer, Berlin, 9. Aufl., 2005. ISBN 3-540-62669-7, e9.95.
[16] Gramlich, G. M.: Anwendungen der Lineare Algebra mit MATLAB. Mathematik Studienhilfe. Fachbuchverlag Leipzig, M¨
unchen, 2004. ISBN 3-446-22655-9, FHBib: 060776/111602,
http://www.rz.fh-ulm.de/˜gramlich, e9.90.
148
LITERATURVERZEICHNIS
149
[17] Gramlich, G. M.: Eine Einf¨
uhrung in MATLAB. Hochschule Ulm, 2007.
hs-ulm.de/users/gramlich/EinfMATLAB.pdf, 5.8.2009.
http://www.
[18] Grcar, J. F.: Mathematicians of Gaussian Elimination. Notices of the AMS, 58(6):782–792,
2011. http://www.ams.org/notices/201106/rtx110600782p.pdf.
[19] Gustafson, G. B. and C. H. Wilcox: Advanced Engineering Mathematics. Springer, New
York, 1998. ISBN 0-387-98265-5.
[20] Hahn, W. und K. Mohr: APL/PCXA. Hanser, M¨
unchen, 1988. ISBN 3-446-15264-4, FHBib:
880302/273510.
[21] Haußer, F. und Y. Luchko: Mathematische Modellierung mit MATLAB. Spektrum Akademischer Verlag, Heidelberg, 2011. ISBN 78-3-8274-2398-6, e22.99.
[22] Hecht-Nielsen, R.: Neurocomputing. Addison Wesley, 1991. ISBN 0-201-09355-3, DM 90.50.
[23] Heuser, H.: Gew. Differentialgleichungen. Teubner, 1989. ISBN 3-519-02227-3, FHBib:
890765 111622.
[24] Kilsch, D.: Mathematik 2 . FH Bingen, SS 2006. http://www.fh-bingen.de/˜kilsch/lehrvera/
Math/Skd2.pdf.
[25] Kilsch, D.: Mathematik A. FH Bingen, WS 2007/08.
lehrvera/Math/Skr1.pdf.
http://www.fh-bingen.de/˜kilsch/
[26] Kilsch, D.: Mathematik B. FH Bingen, SS 2008. http://www.fh-bingen.de/˜kilsch/lehrvera/
Math/Skr2.pdf.
[27] Kilsch, D.: Mathematik Vorkurs. FH Bingen, WS 2009/10.
˜kilsch/lehrvera/Math/Skrv.pdf.
http://www.fh-bingen.de/
[28] Knorrenschild, M.: Numerische Mathematik. Eine beispielorientierte Einf¨
uhrung. Hanser,
M¨
unchen, 2. Aufl., 2005. ISBN 3-446-40440-6, e9.90.
[29] Ludewig, J.: Sprachen f¨
ur die Programmierung. BI Htb 622, 1985. ISBN 3-411-00622-6,
FHBib: B901054 273500, DM 22.80.
[30] The MathWorks: MatLab User’s Guide, 2007.
[31] Meyer, B.: Objektorientierte Softwareentwicklung. Hanser / Prentice Hall, 1990. ISBN 3446-15773-5, DM 78.
[32] Moore, E. H.: On the reciprocal of the general algebraic matrix .
26:394–395, 1920.
Bull.Amer.Math.Soc.,
[33] O’Neil, P. V.: Advanced Engineering Mathematics. CL-Engineering, Samutprakarn, Thailand, 6. ed., 2006. ISBN 978-0534552084, $ 176.05.
[34] Papula, L.: Mathematik f¨
ur Ingenieure und Naturwissenschaftler 1 . Vieweg, Wiesbaden, 10.
Aufl., 2001. ISBN 3-528-94236-3, FHBib: P890498 111340(A3).
[35] Papula, L.: Mathematik f¨
ur Ingenieure und Naturwissenschaftler 2 . Vieweg, Wiesbaden, 10
Aufl., 2001. ISBN 3-528-94237-1, FHBib: P890496 111340(A3).
[36] Papula, L.: Mathematik f¨
ur Ingenieure und Naturwissenschaftler 3 . Vieweg, Wiesbaden, 4
Aufl., 2001. ISBN 3-528-34937-9, FHBib: P950597 111340(A3).
[37] Papula, L.: Mathematische Formelsammlung. Vieweg, Wiesbaden, 9. Aufl., 2006. ISBN
3-834-80156-9, FHBib: P890106(A1) 050588 111001, e25.90.
[38] Penrose, R.: A generalized inverse for matrices.
51:406–413, 1955.
Proc. of the Cambridge Phil. Soc.,
[39] Penrose, R.: On best approximate solution of linear matrix equations. Proc. of the Cambridge Phil. Soc., 52:17–19, 1956.
[40] Pomberger, G.: Softwaretechnik und Modula-2 . Hanser, 1987. ISBN 3-446-15056-0, FHBib:
890730 273530, DM 48.
150
LITERATURVERZEICHNIS
¨
[41] Preuß, W. und G. Wenisch (Hrsg.): Lehr- und Ubungsbuch
Numerische Mathematik . Fbv
Leipzig, Hanser, Leipzig, 2001. ISBN 3-446-21375-9, e34.90.
[42] Quarteroni, A. und F. Saleri: Wissenschaftliches Rechnen mit MATLAB. Springer, 2008.
ISBN 3-540-25005-0, FHBib: 100585 111601, e29.95.
[43] Rembold, U. u.: Einf¨
uhrung in die Informatik . Hanser, 1987. ISBN 3-446-14982-1, FHBib:
870305, DM 48.
[44] Rießinger, T.: Mathematik f¨
ur Ingenieuere. Springer Lehrbuch. Springer, Berlin, 4. Aufl.,
2003. ISBN 3-540-40244-6, e29.95.
[45] Saad, Y.: Numerical methods for large eigenvalue problems. Classics in Applied Mathematics
66. SIAM, Philadelphia, 2nd ed., 2011. ISBN 978-1-611970-72-2, http://www.ec-securehost.
com/SIAM/CL66.html, $ 70.
[46] Schauer, H. und G. Barta: Konzepte der Programmiersprachen. Springer, 1986. ISBN
3-211-81865-0, FHBib: 890430 273500.
[47] Schwarz, H. R. und N. Kl¨
ockler: Numerische Mathematik . Vieweg+Teubner, Wiesbaden,
7. Aufl., 2009. ISBN 978-3-8348-0683-3.
[48] Schwetlick, H. und H. Kretzschmar: Numerische Verfahren f¨
ur Naturwissenschaftler
und Ingenieure. Mathematik f¨
ur Ingenieure. Hanser, M¨
unchen, 1991. (alt: Fbv Leipzig, 3-34300580-0), ISBN 3-446-00580-3, FHBib: 020592 111330, e24.90.
[49] Spindler, K.: H¨
ohere Mathematik - Ein Begleiter durch das Studium. Harri Deutsch, 2010.
Kommenar in Math. Semesterberichte 58/2, 2011, 240-242, ISBN 978-3-8171-1872-4.
[50] Stingl, P.: Mathematik f¨
ur Fachhochschulen (Technik und Informatik). Hanser, M¨
unchen, 6.
Aufl., 1999. ISBN 3-446-21077-6, FHBib: P921031 111340(A5), A3, DM 29,90.
[51] Stoer, J.: Numerische Mathematik I . HTB 105. Springer, Berlin, 3. Aufl., 1979. ISBN
3-540-09346-X, FHBib: 790797 111330.
[52] Stoer, J. und R. Bulirsch: Numerische Mathematik II . HTB 114. Springer, Berlin, 1978.
ISBN 3-540-08840-7, FHBib: 790798 111330.
[53] Swokowski, E. W., M. Olinick, and D. D. Pence: Calculus. PWS, Boston, 6. ed., 1994.
ISBN 0-534-93624-5, FHBib: 941483 111621.
[54] Walter, W.: Gew¨
ohnliche Differentialgleichungen. HTB 110. Springer, 1972. ISBN 3-54005867-2, FHBib: 790804 111622.
[55] Zeidler, E. (Hrsg.): Teubner-Taschenbuch der Mathematik - Band I . Teubner, Stuttgart, 2.
Aufl., 2003. ISBN 3-519-20012-0, e34.90.
[56] Zill, D. G.: A First Course in Differential Equations: The Classic Fifth Edition. PWS,
Boston, 5. ed., 2002. ISBN 0-534-37388-7, GBP 32.40.
Als Formelsammlung sind [6, 8, 9, 55, 37] geeignet. Erg¨
anzungen und tiefere Einblicke erm¨
oglichen [13, 23, 54, 51, 52]. Hier finden Sie auch fehlende Beweise, die nicht oder nur skizzenhaft
in der Vorlesung vorgetragen wurden. Weiterf¨
uhrende Themen zur Modellbildung und Simulation
finden Sie in [21] oder [11].
Eine Dokumentation zur MatLab -Umgebung ist in [30] enthalten.
F¨
ur die Preise u
urlich keine Gew¨
ahr.
¨bernehme ich nat¨
Abbildungsverzeichnis
1
Nicht-formales Problem – formales Programm
.
.
.
.
.
.
vi
2.1
2.2
2.3
Feinentwurf
Elemente eines Flussdiagramms
Elemente eines Struktogramms
3.1
Nummerierung der Bits
4.1
4.2
4.3
4.4
4.5
4.6
4.7
cat-Funktion .
.
.
.
Zugriff auf mehrachsige Felder
.
Eintr¨
age einer Adressdatenbank
MatLab-Protokoll: Abfrage Verbund
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
13
15
.
.
.
.
.
.
.
.
.
.
24
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
39
40
41
47
47
.
.
.
.
.
.
.
.
.
.
.
Darstellung des geschachtelten Felds mit cellplot
MatLab-Protokoll: Funktionsgriff
Graf der Funktion p(x ) = 1 + 2x + 3x
2
5.1
5.2
5.3
5.4
Die
Die
Die
Die
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
54
54
55
56
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Datenkapsel Admini
.
Admini.dat
.
.
BLOCK DATA Bdadmini
Adpush
.
.
.
Adlpop
.
.
.
Adlset
.
.
.
Adeset
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
69
70
70
70
71
7.1
7.2
7.3
7.4
7.5
7.6
Satellit auf seiner Erdumlaufbahn
Bereich, in dem die D¨
use brennt
sin(x ) = 0.8x
.
.
.
sin(x ) − 0.8x = 0
.
.
Bisektion .
.
.
.
Regula falsi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
72
73
73
74
74
8.1
8.2
Tangentenverfahren nach Newton
Zur Lage der Nullstellen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
80
9.1
9.2
9.3
Sukzessive Approximation, |φ′ | < 1
Sukzessive Approximation, |φ′ | > 1
Beispiel f (x ) = log10 (x ) − cos(2x )
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
83
83
87
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
88
88
88
11.1 Eulersches Streckenzugverfahren
11.2 Verfahren von Runge-Kutta
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
95
95
10.1
10.2
10.3
Datei
Datei
Datei
Datei
skrfeia1.dat
skrfeia2.dat
skrfeia1.csv
skrfeia3.dat
¨
Aquidistante
Partition
Trapezregel
.
∗
T -Regel .
.
.
.
.
151
152
14.1
14.2
14.3
14.4
ABBILDUNGSVERZEICHNIS
Lineare Abbildung ohne Rangdefekt .
Lineare Abbildung mit Rangdefekt
.
gebrochen-rationale Ausgleichsfunktion
Fehler der Ausgleichsfunktion
.
16.1 Berechnung mit MatLab
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
117
118
128
128
.
.
.
.
.
.
.
.
138
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
140
140
140
140
140
141
141
142
143
143
144
145
147
147
147
147
147
17.1 Weibull-Dichte, k variiert
.
.
.
17.2 Weibull-Dichte, λ variiert
.
.
.
17.3 Weibull-Dichte, k = λ .
.
.
.
17.4 Weibull-Verteilung, λ konstant
.
.
17.5 Kodierung in MatLab
.
.
.
.
17.6 Gamma-Funktion
.
.
.
.
17.7 Γ(1 + 2x ) − (Γ(1 + x )2 )
.
.
.
17.8 L¨osung in MatLab
.
.
.
.
17.9 Die MatLab-Funktion WeibullOpt
.
.
17.10 Gefundene L¨osung: λ = 4.642, k = 1.757
.
¨
17.11 Uberlagerungen mit k1 = λ1 = 1 und k2 = λ2 = 5
17.12 L¨osung in MatLab
.
.
.
.
17.13Die MatLab-Funktion WeibullOpt2
.
17.14 Approximation f¨ur k1 und λ1 .
.
.
17.15 Approximation f¨ur k2 und λ2 .
.
.
17.16 Fehlerkurve w¨ahrend der Iteration
.
.
17.17 Messpunkte und Approximation
.
.
(W-Dichte)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tabellenverzeichnis
3.1
3.2
3.3
3.4
3.5
3.6
Wortgr¨oßen der Prozessoren
.
.
.
.
.
Darstellungsbereich der Festkommazahlen
.
.
.
Gleitkommaformate des math. Koprozessors
.
.
Einfache Datentypen
.
.
.
.
.
.
.
.
.
.
Variable“ Konstanten in MatLab
”
Einfache Datentypen in MatLab und erlaubte Operationen
4.1
4.2
Numerische Verkn¨
upfungen von Matrizen
Funktionen zur Bearbeitung von Mengen
.
.
.
.
5.1
5.2
5.3
5.4
5.5
5.6
5.7
Konvertierungsroutinen (Kodierung)
Formatierungszeichen
.
.
.
Spezielle Formatierungszeichen
.
Spezielle Formatierungszeichen
.
Konvertierungsfunktionen (Dekodierung)
Bearbeiten von Textvariablen .
.
Formatierungszeichen
.
.
.
.
.
.
.
.
.
.
9.1
Nullstellenverfahren als Iterationen
.
.
153
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
24
29
30
32
32
.
.
.
.
.
.
.
.
.
.
.
.
35
39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
49
50
50
51
53
55
.
.
.
.
.
.
.
83
Algorithmenverzeichnis
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
4.1
4.2
4.3
4.4
4.5
6.1
Die wohlstrukturierte Prozedur Pruefprim (Pascal)
Die wohlstrukturierte Prozedur Pruefprim (Fortran 77)
Die Prozedur Pruefpr0 (Fortran)
.
.
.
Flussdiagramm der Routine Pruefpr0 .
.
.
Struktogramm der Routine Pruefprim
.
.
Kein Struktogramm der Routine Pruefpr0
.
.
Struktogramm der verbesserten Routine Pruefprim
Addition von Zahlen aus einer Datei
.
.
.
Meldung auf alle angemeldeten Bildschirme .
.
Die verbesserten Routine Pruefprim in der Metasprache
Die Funktion Cel2Num
.
.
.
.
.
Die Funktion Mat2Cel
.
.
.
.
.
Die Funktion Cel2Mat
.
.
.
.
.
Die Funktion TakeInCel
.
.
.
.
Die Funktion DropInCel
.
.
.
.
BLOCK DATA-Anweisung
.
.
.
.
154
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
14
16
16
17
20
20
21
42
42
43
45
45
61
Stichwortverzeichnis
A
Ablaufpl¨
ane, 5
abweisende Schleife, 11
Adaptierbarkeit, 2
Adressdatenbank, 39
Adress¨
ubergabe, 63
aquidistante Partition, 88
¨
σ-Algebra, 130
Algorithmus, 7
allgemeine Schleife, 11
alternative
Anweisung, 19
einfache, 19
Wertzuweisung, 18
Alternative, 11
einfache, 11
mehrfache, 11
Alternativen, 3
alternativer
Ausdruck, 18
einfacher, 18
Anforderungsanalyse, 3
Angebot, 3
Anweisung, 11
alternative, 19
einfache, 19
bedingte, 19
Anweisungen
parallele, 11
Anweisungsteil, 10, 11
APL, 63
Approximation
sukzessive , 73
Assembler, 59
Assemblersprache, 59
Aufruf
hierarchischer, 3
Aufrufparametern, 61
Aufrufzeile, 10
Aufstellpl¨
ane, 5
Ausdruck, 18
alternativer, 18
einfacher, 18
bedingter, 18
Ausf¨
uhren, 60
Ausf¨
uhrungsaspekt, vii
Ausgangsparameter, 62
ausgeglichene L¨
osung, 116, 117, 127
B
Basiskomplement¨
ardarstellung, 25
Bedienungskomfort, 2
Bedienungsvorschriften, 4
bedingte
Anweisung, 19
Wertzuweisung, 18
bedingte Verarbeitung, 11
Bedingte Wahrscheinlichkeit, 131
bedingte Wertzuweisung, 11
bedingter
Ausdruck, 18
benutzbar, vii
Benutzerfreundlichkeit, 2
Betrieb
irregul¨
arer, 2, 4
regul¨
arer, 2, 4
Bild, 116
Binder, 59
Bisektion, 73, 99
Bisektionsverfahren, 74
Bit, 23
Block, 11
BLOCK DATA, 61
Byte, 23
C
Call by Name, 63
Call by Reference, 63
Call by Value, 62
cellplot, 41
charakteristische Lebensdauer, 139
Cholesky factorization, 106
COMMON, 61
Compiler, 59
Cramersche Regel, 92
D
Darstellung
doppeltgenaue, 27
155
156
normalisierte, 28
Dateigriff, 55
Dateiidentifikator, 55
Daten
globale, 69
lokale, 69
Datenbit, 23
Datenkapsel, 61, 65, 68
Definitionsphase, 2, 3
Deflation, 114
Deformationsmatrix, 126
Deklarationsteil, 10
Determinante
Vandermondesche, 128
diagonaldominant, 99
Diagonalgestalt, 124
Differenzenverfahren, 99
direkte Summe
orthogonale, 116
Division
Links-, 35
Matrix-, 35
Rechts-, 35
Dokumentationsaspekt, vii
doppeltgenaue Darstellung, 27
Dualdarstellung, 27
duale Komplement¨
ardarstellung, 25
duales Stellenkomplement, 26
Dualpunktdarstellung, 29
Durchgangsparameter, 62
E
effizient, vii, siehe Sch¨
atzfunktion
Effizienz, 2
Eigenvektoren, 122
Eigenwert, 107
Eigenwerten, 122
Ein/Ausgabe-Einheit, 59
einfache Alternative, 11
Eingangsparameter, 62
Einschrittverfahren, 95
einzeilige Matrizen, 34
Entwicklungsphase, 4
Entwurf
hierarchischer, 3
Ereignisalgebra, 130
Ereignisraum, 130
Ergebnisparametern, 61
erwartungstreu, siehe Sch¨
atzfunktion
Erwartungswert, 134
Erweiterbarkeit, 2
Euler-Verfahren
modifiziertes, 97
Eulersches Streckenzugverfahren, 95
STICHWORTVERZEICHNIS
exakte L¨
osung, 116
Exakte Polynom-Integration, 90
Exponentialansatz, 129
F
factorization
Cholesky, 106
LU-, 105
Fakult¨
atsfunktion, vii
Falk
-Schema, 106
Fassformel
Keplersche, 90
Fehlerabsch¨
atzung
A posteriori -, 74
A priori -, 74
Fehlerquadrate, 116
Fehlerschranke, 74
Feinentwurf, 7
Felder
geschachtelte, 40
numerische, 34
Festkommazahlen, 23
Fixpunkt, 83
Flussdiagramm, 12
FOR, 11
formaler Parameter, 62
Formatieren, 48
Fortran, 63
Fourier-Ansatz, 129
fplot, 46
Fundamentalmatrizen, 120
Funktionen, 61
Funktionsgriff, 46
G
Gamma-Funktion, 139
geschachtelte Felder, 40
Gew¨
ahrleistung, 5
Gleitkommazahl, 27
globale Daten, 69
GOTO-freie Programmierung, 3
Gradient, 120, 123
Grobentwurf, 4
Gr¨
oßen
skalare, 34
H
Heun, 98
Hexadezimaldarstellung, 27
hierarchischer Aufruf, 3
hierarchischer Entwurf, 3
I
INCLUDE Admini.dat, 69
STICHWORTVERZEICHNIS
Installieren, 60
Integration, 5
Romberg-, 93
Integrationstest, 5
Integrit¨
at, 3
Interpolationsformel
Lagrangesche, 92
Interpreter, 60
Inverse
Links-, 118
Rechts-, 118
irregul¨
arer Betrieb, 2, 4
Ist-Zustand, 3
Iteration, 11
Iterationsverfahren, 73
K
Kabelpl¨ane, 5
Keller, 66
Keplersche Fassformel, 90
Kern, 116
Kodieren, 48
Kodierungsphase, 7
Kompatibilit¨
at, 2
Komplement¨
ardarstellung
duale, 25
Konfigurationskontrolle, 5
konsistent, siehe Sch¨
atzfunktion
konstante Schrittweite, 88
kontrahierend, 84
Konvergenzgeschwindigkeit, 73
korrekt, vii
Korrektheit, 2
L
Lader, 59, 60
Lagrangesche Interpolationsformel, 92
Lastenheft, 3
Laufzeit, vii
Laufzeitstapel, 66
Lebensdauer
charakteristische, 139
lifo, 66
Linksdivision, 35
Linksinverse, 117
lokale Daten, 69
LR-Zerlegung, 105
LU-factorization, 105
L¨
osung
ausgeglichene, 116, 117, 127
exakte, 116
M
Mantisse, 28
Maschinengenauigkeit, 29
157
Maschinenkode, 59
Maschinensprache, 59
Matrix
-division, 35
-multiplikation, 35
Matrizen, 34
einzeilige, 34
mehrfache Alternative, 11
Mengenschleife, 11
Messreihe, 126
Metasprache, 12
Mittelwert, 134
Mittelwertsatz
der Differenzialrechnung, 74, 76, 89
Modul, 3
Modula-2, 63
Modularisierung, 3
Modulkopf, 10
N
nachfolgende Pr¨
ufung, 11
Namensvereinbarung, 18
Namens¨
ubergabe, 63
Nebeneffekt, 62, 63
Nebenwirkung, 65
Negative, 26
von-Neumann-Architektur, 59
Newton-Verfahren, 73, 99
normalisierte Darstellung, 28
Normalspannung, 122
Normalverteilung, 133
Nullstelle, 100
Nullstellenproblem, 73
Nullstellenverfahren, 73
numerische Felder, 34
O
Objekte, 59
Oktaldarstellung, 27
orthogonale
direkte Summe, 116
orthogonale Projektion, 117
Orthonormalbasis, 124
P
parallele Anweisungen, 11
Parameter
formaler, 62
Partition, 88
aquidistante, 88
¨
Pascal, 63
Pflichtenheft, 3
Phasenmodell, 1
plot, siehe fplot
Polarzerlegung, 126
158
Polynom-Ansatz, 127
Polynom-Integration
Exakte, 90
portabel, vii
Portabilit¨
at, 2
Potenzansatz, 129
Pr¨
ufung
nachfolgende, 11
vorausgehende, 11
Programm, 62
Programmierung
GOTO-freie, 3
Projektion
orthogonale, 117
Prozedur, 61
Prozeduraufruf, 11
Pseudoinverse, 119, 125
Pseudokode, 12
R
Radius
Spektral-, 110
Rang, 116
voller, 117
Rangdefekt, 116, 118
Rechenwerk, 59
Rechnerkern, 59
Rechtsinverse, 117
Regel
Cramersche, 92
SimpsonIntervallhalbierung, 92
Trapez-, 88
Register, 59
Regula falsi, 73, 75
regul¨
arer Betrieb, 2, 4
Rekursion, 66
rekursiv, vii
robust, vii
Robustheit, 2
Romberg-Integration, 93
Runge-Kutta, 96
S
Schießverfahren, 98
Schleife, 11, 19
abweisende, 11
allgemeine, 11
nachfolgende Pr¨
ufung:, 19, 22
nicht abweisend, 11
vorausgehende Pr¨
ufung:, 19, 22
Schleifen, 3
Schnittstelle, 61
Schnittstellenbeschreibungen, 5
STICHWORTVERZEICHNIS
Schrittweite
konstante, 88
Schubspannungen, 122
Sch¨
atzfunktion, 136
effizient, 136
erwartungstreu, 136
konsistent, 136
semidefinit, 125
Sequenz, 11
Simpson
-Regel, 90, 91
Intervallhalbierung, 92
Singul¨
arwertzerlegung, 125, 126
Singul¨
arwertzerlegungen, 125
skalare Gr¨
oßen, 34
Software-Lebenszyklus, 1
Softwarepflege, 6
Soll-Zustand, 3
Sortieralgorithmus, 66
Spannung
Normal-, 122
Schub-, 122
Spannungsmatrix, 122, 126
Spannungstensor, 122
Speichereinheit, 23, 59
Speichergr¨
oße, 23
Speicherplatz, vii
Spektralradius, 110
Spektralverschiebung, 114
Spiegelung, 111
Sprunganweisung, 11
stack, 66
Standardnormalverteilung, 133
Stapel, 66
Steffensen-Verfahren, 73
Stellenkomplement, 26
duales, 26
stetige Zufallsvariable, 133
Steuerwerk, 59
Stichprobe, 132
Streckenzug, 95
Streckenzugverfahren
Eulersches, 95
Streuung, 134
struct, 39
Struktogramm, 12
Strukturierung, 3
Studie, 3
St¨
utzstellen, 88
Summe
direkte
orthogonale, 116
STICHWORTVERZEICHNIS
T
Testplan, 4
Textzeichens, 23
Top Down Methode, 1
Trapezregel, 88
bei ¨aquidistanter Partition, 89
einfache, 88
Tridiagonalgestalt, 99
U
¨
Uberlauf,
24
¨
Ubersetzer,
59
unitriangular, 105
Unterprogramme, 61
UNTIL, 11
V
Vandermondesche Determinante, 128
Varianz, 134
Vektor, 34
Verarbeitung
bedingte, 11
Verbund, 39
Verfahren
Differenzen-, 99
modifiziertes Euler-, 97
Schieß-, 98
Verifizierbarkeit, 3
Verschiebungssatz, 134
Verschl¨
usseln, 48
Verteilungsfunktion, 133
Vertr¨
aglichkeit, 2
Verzerrungsmatrix, 126
voller Rang, 117
Vollst¨
andigkeit, 4
vorausgehende Pr¨
ufung, 11
Vorzeichen, 23, 28
vorzeichenlose Zahl, 23
W
Wahrscheinlichkeit
-sraum, 131
-sverteilung, 131
bedingte, 131
Bedingte, 131
diskret, 132
gleichverteilt, 132
Wahrscheinlichkeitsdichte, 133
Weibull-, 139
Wahrscheinlichkeitsverteilung, 130
Weibull-, 139
Wartbarkeit, 2
Wartbarkeitsaspekt, 2
Wartungskosten, vi
159
Weibull
-Wahrscheinlichkeitsdichte, 139
-Wahrscheinlichkeitsverteilung, 139
Wertzuweisung, 11, 18
alternative, 18
bedingte, 11, 18
Wert¨
ubergabe, 62
WHILE, 11
Widerspruchsfreiheit, 4
Wiederverwendbarkeit, 2
Wirtschaftlichkeitsaspekt, 2
Wort, 23
Z
Zahl
ganze
vorzeichenlose, 23
Zerlegung
LR-, 105, 120
Polar-, 126
QR-, 120
Vollrang-, 120
Zufallsvariable, 132
stetige, 133
Zugriffsfunktion, 68
Z¨
ahlschleife, 11
Document
Kategorie
Technik
Seitenansichten
34
Dateigröße
1 266 KB
Tags
1/--Seiten
melden