Numerische Mathematik mit MATLAB

Größe: px
Ab Seite anzeigen:

Download "Numerische Mathematik mit MATLAB"

Transkript

1 GÜNTER GRAMLICH UND WILHELM WERNER Numerische Mathematik mit MATLAB Erschienen 2000 im dpunkt.verlag Eine Einführung Kaiserslautern, Künzelsau im Januar 2000

2 2

3 Vorwort MATLAB 1 ist inzwischen in vielen Hochschulen, Universitäten und Fachhochschulen gleichermaßen ein etabliertes Programmsystem, das sowohl im Fach Mathematik selbst als auch in noch stärkerem Maße in Anwendungsdisziplinen, etwa der Regelungstechnik, eingesetzt wird. Das vorliegende Buch soll einem Studierenden oder Anwender dazu dienen, die Einsatzmöglichkeiten von MATLAB rasch zu lernen. Die wichtigsten Syntaxelemente von MATLAB werden dargestellt, und zahlreiche Beispiele erläutern, wie man ein mathematisches Problem mit Hilfe von MATLAB löst. Das Ziel dieses Buches ist es, dem Leser ein neues, überaus mächtiges und nützliches Werkzeug für den Naturwissenschaftler, Ingenieur und Mathematiker nahezubringen; wenn dies gelingt, so hat es sein Ziel erreicht. Studenten können MATLAB-Lizenzen günstig erwerben. Was ist also naheliegender, als den eigenen Personal Computer auch für das Erlernen von numerischer Mathematik zu nutzen? Sie können sich somit von Anfang an mit den neuen Möglichkeiten vertraut machen, (numerische) Mathematik zu lernen: learning by doing! Nicht zuletzt soll der neue, experimentelle Charakter der Mathematik die Freude an der Beschäftigung mit Mathematik wieder beleben. Der Leser hat die Möglichkeit, numerische Fragestellungen am Computer nachzuvollziehen. Dadurch wird die behandelte Mathematik sofort greifbar und bekommt zusätzlich noch eine spielerische Komponente. Am Schluß solcher Aktivitäten aber soll der Versuch stehen, die Hintergründe zu durchdringen und zu verstehen. Nur dann kann man dieses neue Werkzeug wirklich nutzbringend einsetzen. Die Voraussetzungen des Lesers zum Verständnis dieses Buches sind gering. Im Kapitel 3 wiederholen wir wichtige Begriffe aus der linearen Algebra und Analysis. Diese Wiederholung ersetzt jedoch keinesfalls ein gründliches Studium der linearen Algebra und Analysis, das für das numerische Rechnen grundlegend ist. Hierzu gibt es viele schöne Darstellungen, die wir im Literaturverzeichnis aufgenommen haben. Am Ende eines Kapitels haben wir viele Übungsaufgaben mit unterschiedlichem Schwierigkeitsgrad angegeben. Es ist zwar hilfreich, wenn der Leser bereits Programmierkenntnisse in einer höheren Programmiersprache wie C oder FORTRAN besitzt, jedoch keineswegs Voraussetzung. Jeder, der die hier ausgeführten Beispiele nachvollzieht und analysiert, wird bald in der Lage sein, immer schwierigere Aufgaben selbständig mit MATLAB anzugehen. Am Anfang mag sich ein in der Programmierung unerfahrener Leser damit begnügen, die verwendeten MATLAB-Zeilen oder -Programme einfach zu reproduzieren. Im Laufe der Zeit sollte das Verständnis für die MATLAB-Programmierung durch Hinterfragen der dargestellten MATLAB-Programme wachsen. Der Leser sollte sich nicht scheuen, Änderungen an den 1 MATLAB R ist eingetragenes Warenzeichen von The MathWork Inc. 3

4 4 Programmen durchzuführen und damit herumzuexperimentieren; am Ende des Buches angelangt, sollte ein bemühter Leser selbst in der Lage sein, einfache MATLAB-Programme zu schreiben. Das vorliegende Buch wurde vollständig in LATEX mit dem Dokumentstil book erstellt. Die Literaturhinweise wurden mit BIBTEX und der Index mit MakeIndex erzeugt. Bilder aus MATLAB wurden als ENCAPSULATED POSTSCRIPT (EPS-Files) abgespeichert und in das LATEX-Dokument eingebunden. Manche Abbildungen wurden mit Hilfe von PSTricks erstellt. Ohne diese schönen Tools wäre dies alles schwieriger gewesen. Die im Zusammenhang mit diesem Buch entstandenen MATLAB-Files (sogenannte m- Files) sind alle auf der beiliegenden CD enthalten. Auf dieser CD befindet sich ein readme- File, der weitere Einzelheiten über den Inhalt der CD beschreibt. Updates und Erweiterungen findet der Leser auf der Homepage gramlich Dort ist auch eine Datei zugänglich, die die im Buch entstandenen Fehler dokumentiert. Für jede Anregung, nützlichen Hinweis oder Verbesserungsvorschlag sind die Autoren dankbar und können über Post oder bzw. zugesendet werden. Die Autoren hoffen, daß sich die Arbeit gelohnt hat und der Leser Erfolg und Freude beim numerischen Rechnen mit MATLAB hat, so wie wir es haben. Vor allem möge er in die Lage versetzt werden, Grenzen und Möglichkeiten der verschiedenen Algorithmen richtig einzuschätzen, MATLAB effektiv einzusetzen und Programme gegebenenfalls anzupassen, zu modifizieren oder zu ergänzen, wenn abweichende Aufgabenstellungen dies erfordern. Bei der Abfassung eines so umfangreichen Textes sind die Autoren auf vielfältige Unterstützung angewiesen. Die Autoren danken dem dpunkt.verlag und vor allem der Lektorin, Frau CHRISTA PREISENDANZ, für die vielfältige Unterstützung und die Geduld während des Entstehens dieses Buches sowie Frau URSULA ZIMPFER, die so manchen Fehler und etliche stilistische Mängel des Manuskripts ausgeräumt hat. Ganz besonders möchten wir uns bei unseren Familien bedanken: SABINE, ANNA, CHRISTOPH(1), ANITA, CHRISTOPH(2) und MATTHIAS haben viel Verständnis für diese Arbeit aufgebracht. Kaiserslautern, Künzelsau Januar 2000 Günter Gramlich Wilhelm Werner

5 Inhaltsverzeichnis 1 Einleitung 15 2 MATLAB-Grundlagen Was ist MATLAB? Starten und beenden Arbeiten im interaktiven Modus Grundlegende mathematische Funktionen Grundlegende Eigenschaften Matrizen Matrixoperationen Programmieren mit m-files: Scripts und Funktionen Datentypen (Klassen) in MATLAB Vergleichsoperatoren und Vergleichsfunktionen Logische Operatoren und logische Funktionen Steuerstrukturen Wie man effizientere Programme schreiben kann Wie man die Effizienz von Programmen vergleichen kann Dateien lesen und schreiben Visualisieren in MATLAB Dünn besetzte Matrizen MATLAB-Hilfesysteme und weitere Informationen Polynome in MATLAB Einfache Datenanalyse mit MATLAB Weitere Bemerkungen und Hinweise Übungsaufgaben Grundbegriffe und Notationen aus der linearen Algebra und Analysis Vektoren und Matrizen Die vier Fundamentalräume einer Matrix Lineare Gleichungssysteme Vektornormen Matrixnormen Singuläre Werte und die Singulärwertzerlegung Gradient, HESSE- und JACOBI-Matrix

6 6 Inhaltsverzeichnis 3.8 Der Satz von TAYLOR Zur Komplexität numerischer Algorithmen Weitere Bemerkungen und Notationen Übungsaufgaben Grundlegende Konzepte numerischen Rechnens Allgemeine Lösungsstrategien Approximationen und Fehlerquellen Computerarithmetik Zur Komplexität numerischer Algorithmen Elementare Matrixrechnungen Weitere Bemerkungen und Hinweise Übungsaufgaben Lineare Gleichungssysteme Zur Lösbarkeit linearer Gleichungssysteme Wie löst man lineare Systeme? Lineare Systeme mit Dreiecksmatrizen Eliminationsmatrizen GAUSS-Elimination und LU-Zerlegung GAUSS Elimination ohne Zeilenvertauschungen GAUSS Elimination mit Zeilenvertauschungen LU-Zerlegung in MATLAB Zur Realisierung des GAUSS-Verfahrens Wie komplex ist das Lösen linearer Gleichungssysteme? Wie berechnet man die Inverse einer Matrix? Normen, Fehler und Konditionszahlen Zur Genauigkeit der Lösung Spezielle lineare Gleichungssysteme Iterative Lösungsmethoden für lineare Gleichungssysteme Weitere Bemerkungen und Hinweise Übungsaufgaben Lineare Ausgleichsrechnung Die allgemeine Problemstellung Überbestimmte lineare Gleichungssysteme Zur Lösbarkeit linearer Ausgleichsaufgaben Normalgleichungsmethoden Orthogonalisierungsmethoden Unterbestimmte lineare Gleichungssysteme Rangdefekte Probleme Nocheinmal: Der MATLAB-Operator \ Weitere Bemerkungen und Hinweise Übungsaufgaben

7 Inhaltsverzeichnis 7 7 Eigenwertprobleme Eigenwerte und Eigenvektoren Methoden, um alle Eigenwerte zu berechnen Methoden, um ausgewählte Eigenwerte zu berechnen Verallgemeinerte Eigenwertprobleme Eigenwertaufgaben mit MATLAB Weitere Bemerkungen und Hinweise Übungsaufgaben Interpolation Interpolation durch Polynome LAGRANGE-Interpolation HERMITE-Interpolation Interpolation durch Spline-Funktionen Weitere Bemerkungen und Hinweise Übungsaufgaben Nichtlineare Gleichungen Nichtlineare Gleichungen in einer Variablen Nichtlineare Gleichungen in mehreren Variablen Weitere Bemerkungen und Hinweise Übungsaufgaben Nichtlineare Ausgleichsrechnung Die GAUSS-NEWTON-Methode Nichtlineare Ausgleichsrechnung in MATLAB Weitere Bemerkungen und Hinweise Übungsaufgaben A Symbolisches Rechnen mit MATLAB 401 A.1 Analysis A.2 Die Funktionen funtool und taylortool A.3 Variable Rechengenauigkeit A.4 Vereinfachungen A.5 Substituieren A.6 Lineare Algebra A.7 Algebraische Gleichungen A.8 Gewöhnliche Differentialgleichungen A.9 Funktionen der Symbolic Math Toolbox A.10 Wie man MAPLE-Funktionen verwendet A.11 Weitere Bemerkungen und Hinweise

8 8 Inhaltsverzeichnis B Matrixfaktorisierungen 429 B.1 Die LU-Faktorisierung B.2 Die CHOLESKY-Faktorisierung B.3 Die QR-Faktorisierung B.4 Die Singulärwertzerlegung B.5 Die Spektralzerlegung B.6 Die (reelle) SCHUR-Faktorisierung B.7 Die SCHUR-Faktorisierung B.8 Die HESSENBERG-Faktorisierung B.9 Die JORDAN-Normalform C Mathematische Software 441 C.1 Suchsysteme C.2 Allgemeine Informationen, Vereinigungen, Verbände und Gesellschaften C.3 Homepages C.4 Newsgroups C.5 Newsletters C.6 Fachzeitschriften C.7 Interaktive Systeme C.8 Numerische Programmbibliotheken C.9 Public Domain Software D Weitere MATLAB-Funktionen 449 E Das GRIECHISCHE Alphabet 451 F Tabelle mathematischer Symbole 453 Index 460

9 Abbildungsverzeichnis 2.1 Das Kommandofenster unter Windows Der Path Browser unter Windows Der Workspace Browser unter Windows Stückweise zusammengesetzte Funktion Abkühlung einer Flüssigkeit Drei Sinusfunktionen in einer Figur Zykloide Kreisdiagramm Graph der Funktion mit mesh x 2 +y Fotografie dreier Pioniere der numerischen Mathematik Das helpwin-hilfefenster Das helpdesk-hilfesystem Zeichnen eines Polynoms als Anwendung der Polynomauswertung Unterschiedliche Varianzen Zufallszahlen Punktwolken Die vier Fundamentalräume einer m n-matrix A Die Dreiecksungleichung Vektoren der Länge 1 für verschiedene Normen Zum Satz von TAYLOR Blackbox-Situation Zur Kondition eines Problems Schematisches Diagramm zur Rückwärtsanalyse Stabiler Algorithmus Beispiel eines normalisierten Gleitpunktsystems Grafische Darstellung der Komplexitäten Quadratisches lineares Gleichungssystem Unterbestimmtes lineares Gleichungssystem Überbestimmtes lineares Gleichungssystem Zeilenbild im Fall n = Spaltenbild im Fall n =

10 10 Abbildungsverzeichnis 5.6 Die zehn singulären Werte der HILBERT-Matrix H Zur Kondition eines linearen Gleichungssystems Beispiel einer Datenapproximation Falsche mathematische Modelle Überbestimmtes System: Keine Lösung von Ax = b Überbestimmtes System: Genau eine Lösung von Ax = b Überbestimmtes System: Unendlich viele Lösungen von Ax = b Zur Lösbarkeit überbestimmter Systeme Kleinste Quadratelösung für ein überbestimmtes System Ausgleichslösung im R Ausgleichslösung im R HOUSEHOLDER-Matrix H mal Vektor x Zeilenraumdarstellung für m = 2 und n = 3; Lösung kleinster Länge Unterbestimmtes System mit unendlich vielen Lösungen Lösung kleinster Länge Nullstellen von p(λ) und p(λ) λ 19 nach WILKINSON Zur Geometrie der Eigenwertaufgabe Verschiedene interpolierende kubische Splines Interpolation einer geschlossenen Kurve durch Splines Nichtlineare Gleichungen Lösungen nichtlinearer Gleichungen Mehrfache Nullstellen Die Bisektionsmethode Nach 6 Iterationen NEWTON-Methode zur Lösung nichtlinearer Gleichungen Lösungen nichtlinearer Gleichungssysteme Datenapproximation A.1 Graph der Funktion f(x) = 1 5+4cos(x) A.2 Die Funktion funtool A.3 Die Funktion taylortool A.4 Lösung u = e (t+x)2 + e (t x)2 der eindimensionalen Wellengleichung A.5 MATLAB-Demos B.1 QR-Zerlegung für m > n im Fall Rang(A) = n B.2 Reduzierte QR-Zerlegung für m > n im Fall Rang(A) = n B.3 QR-Zerlegung für m > n im Fall Rang(A) = k B.4 QR-Zerlegung für m < n im Fall Rang(A) = m B.5 Singulärwertzerlegung für m > n B.6 Reduzierte Singulärwertzerlegung für m > n

11 Tabellenverzeichnis 2.1 Arithmetische Operationen zwischen Skalaren in MATLAB Kommandozeilen editieren Workspace verwalten Den Datenträger verwalten Systeminformationen Trigonometrische Funktionen in MATLAB Exponential- und Logarithmusfunktionen in MATLAB Potenzfunktionen in MATLAB Spezielle Variablen und Konstanten Zahlenausgabe in MATLAB Zahlendarstellung bezüglich anderer Basen Rechnen mit komplexen Zahlen in MATLAB Spezielle Matrizen in MATLAB MATLAB-Funktionen und Operatoren zur Matrizenmanipulation Grundlegende Informationen über Matrizen Matrixoperationen in MATLAB Elementweise Operationen Funktionen für Script-Files Datentypen Vergleichsoperatoren Vergleichsfunktionen Logische Operatoren Logische Funktionen Steuerstrukturen und weitere Anweisungen Dateien lesen und schreiben Abkühlung einer Flüssigkeit Markierungen von Punkten Gestaltungsvarianten für Linien Farben Bezeichnungen und Gitter Weitere Grafikfunktionen Das help-kommando Das helpwin-kommando Das helpdesk-system

12 12 Tabellenverzeichnis 2.35 Polynome in MATLAB Datenanalyse in MATLAB Vektorprodukte Vektornormen Matrixnormen Singulärwertzerlegungen Signifikante Stellen Charakteristische Größen für ein Gleitpunktsystem Gleitpunktdarstellung verschiedener Dezimalzahlen Verschiedene Gleitpunktsysteme Kennzeichnende Größen für das MATLAB-Gleitpunktsystem Rechenzeit in Abhängigkeit der Ordnung Anzahl der flops von Vektor- und Matrixverknüpfungen Anzahl der Gleitpunktoperationen Zeilenweise speichern Spaltenweise speichern Zur Lösbarkeit linearer Systeme Zur Lösbarkeit Kondition einer Matrix Zur Lösbarkeit überbestimmter linearer Systeme Zur Lösbarkeit unterbestimmter linearer Systeme Zusammenfassung: Überbestimmte Systeme Zusammenfassung: Unterbestimmte Systeme Relevante Funktionen für dieses Kapitel Eigenschaften von Matrizen Ähnlichkeitstransformationen Nullstellen von p(λ) λ 19 nach WILKINSON Matrizen und dazugehörige Eigenwerte Potenzmethoden Eigenwerte und Eigenvektoren Charakteristisches Polynom und Nullstellen Lineare Konvergenz Superlineare Konvergenz Quadratische Konvergenz Vergleich von Konvergenzgeschwindigkeiten Intervallhalbierungsmethode für x 2 4sin(x) = NEWTON-Methode für x 2 4sin(x) = Änderung der Konvergenzgeschwindigkeit Sekantenmethode für x 2 4sin(x) =

13 Tabellenverzeichnis MATLAB-Funktionen zum Lösen nichtlinearer Gleichungen A.1 Differenzieren A.2 Integrieren A.3 Grenzwerte berechnen A.4 Symbolische Matrixoperationen A.5 Symbolische Matrixfunktionen A.6 Differentialgleichungen symbolisch lösen A.7 Analysis A.8 Lineare Algebra A.9 Vereinfachungen A.10 Lösen von Gleichungen A.11 Variable Genauigkeitsarithmetik A.12 Arithmetische Operationen A.13 Spezielle Funktionen A.14 MAPLE-Zugriffe A.15 Pädagogische und grafische Anwendungen A.16 Konvertierungen A.17 Grundlegende Operationen A.18 Integraltransformationen B.1 Matrixfaktorisierungen in MATLAB

14 14 Tabellenverzeichnis

15 1 Einleitung Etwa zur Mitte diese Jahrhunderts, zirka 1950, hat sich aus der Mathematik heraus eine neue Disziplin entwickelt, die Informatik. Keine andere wissenschaftliche Disziplin hat in so kurzer Zeit einen so starken Einfluß auf alle Bereiche menschlichen Lebens genommen. Das Nichtfunktionieren von Computersystemen ist für manche Bereiche zum Horrorszenario Nummer Eins geworden; Handel, Banken, Produktionsanlagen wären binnen kürzester Zeit handlungsunfähig, würden die Computersysteme bzw. die Programme, die sie benutzen, versagen. Ungefähr ein halbes Jahrhundert später hat Computer Science auch die Mathematik erreicht; war diese früher eher eine Wissenschaft, die mit Büchern, Papier und Bleistift auskam, so haben die letzten Jahre ein weiteres, unersetzbares Hilfsmittel hervorgebracht: den Computer zusammen mit Programmen, die speziell auf mathematische Problemstellungen zugeschnitten sind und aktuelles mathematisches Wissen für jeden Anwender verfügbar machen. Dieser Bereich, Scientific Computing genannt, ist eine Teildisziplin von Mathematik und Computer Science gleichermaßen, die Arbeiten und Lehren im Bereich Mathematik verändert hat und verändern wird. Computeralgebra- und Numerikprogramme sind heute ein unentbehrliches Werkzeug für jeden Wissenschaftler und Praktiker, der mathematische Resultate berechnen muß. Früher mußte der Anwender eigene Programme in universellen Programmiersprachen, zum Beispiel FORTRAN, schreiben, die im günstigsten Fall Routinen aus einer vorhandenen mathematischen Programmsammlung einbinden konnten; im ungünstigsten Fall mußte er Algorithmen aufgrund ihrer Beschreibung in der Literatur selbst programmieren und testen. Heute steht ihm mit MATLAB ein mächtiges Werkzeug zur Verfügung, das Programmiersprache, grafische Fähigkeiten und mathematische Programmsammlung unter einer einheitlichen Benutzeroberfläche vereint. Numerische Programme sind im Detail häufig ausgesprochen knifflig, selbst wenn die dem Algorithmus zugrundeliegende Idee einfach ist; der Grund liegt in den ausgefeilten Techniken, die man anwenden muß, um Effekte wie Rundungsfehler, Auslöschung, Underflow etc. zu vermeiden oder zu kontrollieren. Viele effiziente Programme schalten daher bei einem Problem je nach Erfordernissen zwischen unterschiedlichen numerischen Verfahren um. All dies macht es für einen Anwender zeitaufwendig, selbst ein gutes Numerikprogramm zu schreiben; darüber hinaus erfordert das Testen numerischer Programme sehr gute Kenntnisse über die möglichen auftretenden Phänomene. Mit einem Werkzeug wie MATLAB entfällt ein Großteil dieser Arbeit; dem Anwender stehen ausgetestete zuverlässige State-of-the-Art-Verfahren zur unmittelbaren Anwendung zur Verfügung. In eingeschränktem Umfang stellt MATLAB auch die Fähigkeiten des Computeralgebraprogramms MAPLE bereit, das ihm symbolisches 15

16 16 1 Einleitung Rechnen ermöglicht, wo dies erforderlich erscheint. Umgekehrt kann die aktuelle Version von MAPLE in ebenfalls eingeschränktem Umfang auf MATLAB zugreifen. Man benötigt keine hellseherischen Fähigkeiten, um vorherzusagen, daß die Zukunft in einem einzigen Programmsystem münden wird, das gleichermaßen numerische wie symbolische Fähigkeiten vereint. Im vorliegenden Buch geben wir eine Einführung in MATLAB und mit dessen Unterstützung in einige Bereiche der numerischen Mathematik. Die Stoffauswahl ist subjektiv und auch vom anvisierten Umfang des Buches diktiert; der Schwerpunkt liegt der Herkunft von MATLAB entsprechend im Bereich der numerischen linearen Algebra. Wesentliche Bereiche, wie etwa Differentialgleichungen oder Optimierung, werden nicht behandelt. Es war den Verfassern ein wichtiges Anliegen, den Leser in die Lage zu versetzen, Algorithmen in ein MATLAB-Programm zu übersetzen. Daher findet man an vielen Stellen parallel zu den numerischen Verfahren deren Realisierung als m-file in MATLAB, bisweilen selbst dann, wenn die Aufgabe mit einem einzigen MATLAB-Befehl gelöst werden könnte. Anhand zahlreicher Aufgaben kann der Leser testen, ob er den vermittelten Inhalt wirklich verstanden hat; auch als einführender Text über numerische Mathematik ist dieses Buch geeignet. Allerdings: Vielfach können wir spezielle Problematiken nur andeuten und müssen den interessierten Leser auf die Spezialliteratur verweisen. Wissenschaftliches Rechnen umfaßt verschiedene Lösungsphasen: 1. Die Entwicklung eines mathematischen Modells eines physikalischen oder technischen Systems. Das Ergebnis ist meist eine Gleichung. 2. Den Entwurf eines Verfahrens zur numerischen Lösung dieser Gleichung. 3. Die Implementierung des Algorithmus in einer Programmiersprache. 4. Die Simulation des Systems. 5. Die Darstellung der berechneten Ergebnisse, oft in Form einer grafischen Visualisierung. 6. Die Interpretation und Validierung der berechneten Resultate. Meistens führt dies dann zu Korrekturen oder Verfeinerungen des ursprünglichen mathematischen Modells und obiger Zyklus muß wiederholt werden. Alle diese Phasen werden oder können von MATLAB sinnvoll unterstützt werden. Das erste Kapitel gibt eine Einführung in MATLAB. Das zweite und dritte Kapitel bereitet Grundlagen aus der linearen Algebra, Analysis und numerischen Mathematik auf. Die restlichen behandeln typische Bereiche der numerischen Mathematik, wobei stets Bezug auf MATLAB genommen wird.

17 1 Einleitung 17 Bezeichnungen Im allgemeinen verwenden wir folgende Bezeichnungen: x (k) i Großbuchstaben A, B, C,, Λ für Matrizen indizierte Kleinbuchstaben a ij,b ij,c ij,δ ij,λ ij für Matrixelemente fettgedruckte Kleinbuchstaben a, b, c, x, y für Vektoren indizierte Kleinbuchstaben a i,b i,c i,x i,y i für Vektorkomponenten Kleinbuchstaben a, b, c, δ, λ für Skalare ist die k-te Iteration der i-ten Komponente des Vektors x. x k ist die k-te Iteration des Vektors x. Ist x ein Skalar, so erkennt der Leser aus dem Zusammenhang, ob x k die k-te Komponente oder die k-te Iteration von x ist. Alle Logarithmen sind, wenn nichts anderes gesagt ist, natürliche Logarithmen, das heißt zur Basis e Wir verwenden in diesem Buch den Dezimalpunkt anstelle des Dezimalkommas. Die Notation 0 ist eine bequeme Art die Struktur einer Matrix mit Null- und Nichtnullelementen zu beschreiben. Jedes Kreuz bedeutet dabei eine Zahl, die von Null verschieden sein kann; Nullen werden bei dieser Darstellung manchmal weggelassen. Eine obere Dreiecksmatrix sieht zum Beispiel wie folgt aus: A = oder A = Die Ausgabe, daß der Index i von 1 bis n mit einer Schrittweite von 1 läuft, wird standardmäßig wie folgt geschrieben: Eine Alternative hierfür ist i = 1,...,n oder i = 1,2,... n i = 1 : n In MATLAB und FORTRAN 90 wird diese Notation ebenfalls verwendet. Zählt man von oben nach unten, so gilt i = n,n 1,...,1 oder i = n : 1 : 1, wobei die mittlere Zahl die Schrittweite bestimmt. Alle MATLAB-Kommandos, Funktionen und Programmcodes sind im Textstil typewriter (Schreibmaschinenschrift) ausgeführt. MATLAB-Eingaben erkennt der Leser auch an der Eingabeaufforderung >> zu Beginn einer Zeile. Neu eingeführte Begriffe sind kursiv (italic) geschrieben und Namen durch KAPITÄLCHEN (SMALL CAPS) dargestellt. Weitere Bezeichnungen und mathematische Symbole, die wir in diesem Buch verwenden, findet der Leser in Anhang F.

18 18 1 Einleitung

19 2 MATLAB-Grundlagen It is probably fair to say that one of the three or four most important developments in numerical computation in the past decade has been the emergence of MATLAB as the preferred language of tens of thousands of leading scientists and engineers. LLOYD N. TREFETHEN, Was ist MATLAB? MATLAB ist ein sehr leistungsfähiges Softwaresystem für technische Berechnungen. Der Name MATLAB kommt von MATrix-LABoratory und verweist auf die zwei Überlegungen, die bei der Entwicklung eine Rolle gespielt haben. Grundelemente sind Matrizen und ihre Manipulation, die in numerischen Verfahren optimal eingesetzt werden können, gleichzeitig verfolgt man über Laboratory den Gedanken der Entwicklung und Erweiterung. MATLAB ist ein interaktives Matrix-orientiertes Softwaresystem, in dem sich Probleme und Lösungen in vertrauter mathematischer Schreibweise darstellen lassen. Typische Anwendungen sind: Numerische Berechnungen aller Art. Entwicklung von Algorithmen. Modellierung, Simulation und Entwicklung von Prototypen technischer Probleme. Analyse, Auswertung und grafische Darstellung von Datenmengen; Visualisierungen. Wissenschaftliche und technische Darstellungen. Applikationsentwicklung mit Aufbau einer grafischen Benutzerschnittstelle. In den siebziger Jahren wurde in den USA eine intensive Aktivität zur Entwicklung hochqualitativer Software gestartet, das NATS-Projekt lag als Ergebnis dieser Bemühungen das Softwarepaket EISPACK zur Lösung algebraischer Eigenwertprobleme vor [88]. Im Jahr 1975 begannen die Arbeiten an einem effizienten und portablen Softwarepaket zur Lösung linearer Gleichungssysteme. Das Ergebnis war das Softwarepaket LINPACK [17]. LINPACK und EISPACK gewährleisteten lange Zeit die zuverlässige und portable Lösung von Problemen der linearen Algebra. Um diese beiden Pakete leichter handhabbar zu machen, wurde MATLAB geschrieben. Damit bestand auch die Möglichkeit, ausgereifte Software effizient in der Lehre zunächst in der (numerischen) linearen Algebra, später und jetzt in vielen anderen Bereichen einzusetzen. 19

20 20 2 MATLAB-Grundlagen Die drei Hauptkomponenten von MATLAB sind: Berechnung Visualisierung Programmierung Berechnung. MATLAB verfügt über eine numerische qualitativ hochwertige Programmsammlung. Dem Benutzer bleibt es dadurch erspart, Standardalgorithmen neu programmieren zu müssen. Er kann auf grundlegende gut ausgetestete Programme zurückgreifen und darauf aufbauend eigene Algorithmen realisieren. Visualisierung. MATLAB verfügt über moderne Visualisierungsmöglichkeiten. Dadurch ist der Benutzer in der Lage, Daten auf die verschiedenste Weise zu visualisieren. Programmierung. MATLAB verfügt über eine eigene höhere Programmiersprache. Dadurch stellt MATLAB ein offenes System dar. Der Benutzer hat somit die Möglichkeit, die Funktionalität von MATLAB durch eigene Programme beliebig zu erweitern. Dies kann dadurch geschehen, daß er MATLAB-Programme schreibt sogenannte m-files oder C bzw. FORTRAN-Codes einbindet. Die grundlegenden Datenelemente von MATLAB sind Matrizen bzw. allgemeiner mehrdimensionale Felder (Arrays), die nicht dimensioniert werden müssen. Dadurch lassen sich viele technische Aufgabenstellungen, vor allem wenn sie mit Matrizen oder Vektoren dargestellt werden können, mit einem Bruchteil des Zeitaufwandes lösen, der für die Programmierung in einer skalaren, nicht interaktiven Sprache wie FORTRAN oder C erforderlich wäre. Im Verlauf mehrerer Jahre und durch Beiträge vieler Benutzer hat sich MATLAB zu seinem heutigen Umfang entwickelt. In Hochschulen ist MATLAB das bevorzugte Lehrmittel für Grund- und Aufbaukurse in Mathematik, Ingenieurtechnik und Wissenschaft. In der Industrie findet MATLAB immer mehr Zuwachs in Forschung, Entwicklung, Datenauswertung und Visualisierungen aller Art. Folgende Punkte tragen außerdem zum Erfolg von MATLAB bei: Syntax. MATLAB besitzt eine benutzerfreundliche, intuitive Syntax, die kurz und einfach ist. Sie lehnt sich stark an die mathematischen Schreibweisen an 1. Toolboxen. In Form von sogenannten Toolboxen läßt sich der Funktionsumfang von MAT- LAB auf vielen Gebieten erweitern. Unter anderem stehen folgende Toolboxen zur Verfügung: (Extended) Symbolic Math Toolbox, Financial Toolbox, Image Processing Toolbox, Neural Network Toolbox, Optimization Toolbox, Partial Differential Equation Toolbox, Signal Processing Toolbox, Spline Toolbox, Statistics Toolbox und Wavelet Toolbox. Darüber hinaus stellt MATLAB eine Schnittstelle zur numerischen Programmbibliothek NAG 2 bereit. Weitere Hinweise finden Sie auf der Homepage der Firma MathWorks 3. Matrizen. Grundlage von MATLAB sind reelle und komplexe (einschließlich dünn besetzter) Matrizen. Die Einführung einer Matrix als grundlegendes Datenelement hat sich nicht 1 Auch einen umgekehrten Prozeß kann man beobachten. MATLAB nimmt Einfluß auf mathematische Beschreibungen, siehe zum Beispiel [34]. 2 Numerical Algorithms Group. Siehe 3 Siehe nach im Abschnitt 2.18.

21 2.2 Starten und beenden 21 nur in der (numerischen) Mathematik, sondern auch in vielen anderen rechnerorientierten Bereichen als sehr vorteilhaft herausgestellt. Symbolisches Rechnen. Durch die (Extended) Symbolic Math Toolbox ist es innerhalb der MATLAB-Umgebung möglich, symbolisch zu rechnen. Dadurch kann der Benutzer symbolische und numerische Berechnungen miteinander verknüpfen. Im Anhang A wird diese Toolbox genauer beschrieben. Prototyprealisierung. In der Praxis kommt es vor, daß man aus den verschiedensten Gründen heraus darauf angewiesen ist, Algorithmen in anderen Programmiersprachen, wie zum Beispiel C/C++, FORTRAN, PASCAL oder JAVA, zu implementieren. Aber auch dann ist es vorteilhaft, einen Prototyp des Verfahrens in MATLAB zu realisieren, da dies meist sehr schnell möglich ist, bevor man den Algorithmus überträgt bzw. automatisch übertragen läßt 4. Handle Graphics (Grafiken bearbeiten). Das MATLAB-Grafiksystem umfaßt Hochsprachenbefehle für die Darstellung von zwei- und dreidimensionalen Datenstrukturen, für die Bildverarbeitung, für Trickbewegungen und Präsentationsgrafiken. Hierzu gehören auch einfache Befehle, mit denen sich Grafiken kundenspezifisch gestalten oder auch vollständig grafische Benutzerschnittstellen für eigene Applikationen aufbauen lassen. Bibliothek von mathematischen Funktionen. MATLAB verfügt über eine umfangreiche Sammlung von mathematischen Algorithmen und Funktionen. Diese Funktionalität reicht von elementaren Funktionen über Eigenwertberechnungen bis hin zur schnellen FOURIER- Transformation. Application Program Interface (API). Diese Anwenderschnittstelle ermöglicht die Erstellung von Programmen in C und FORTRAN, die in MATLAB eingebunden werden können. SIMULINK. SIMULINK ein Partnerprogramm zu MATLAB ist ein blockorientiertes, interaktives System zur Simulation linearer und nichtlinearer dynamischer Systeme. Es handelt sich um ein mausgesteuertes Grafikprogramm, das ein Modell eines technischen oder physikalischen Systems, das als Blockdiagramm auf dem Bildschirm darzustellen ist, unter dynamischen Einwirkungen nachbildet. Es kann für lineare, nichtlineare, zeitkontinuierliche oder zeitdiskrete Prozesse eingesetzt werden. Grundlage sind MATLAB-Funktionen zur Lösung gewöhnlicher Differentialgleichungen (ODE-Löser). Blocksets sind Ergänzungen zu SIMULINK, die weitere Bausteinbibliotheken für Spezialanwendungen bereitstellen. Real-time Workshop ist ein Programm, mit dem sich aus den Blockdiagrammen ein C-Code bilden läßt, der von einer Vielzahl von Echtzeitsystemen abgearbeitet werden kann. 2.2 Starten und beenden Bei vielen kommandoorientierten Rechnersystemen wird MATLAB durch das Kommando matlab gestartet. Oder bei grafischen Oberflächen klickt man nach dem Start auf ein entsprechendes MATLAB-Icon. Bei manchen Installationen ist es auch möglich, daß Sie MATLAB aus einem Menü heraus aufrufen können. In jedem Fall sollten Sie den MAT- 4 Zum Beispiel mit Hilfe des MATLAB C/C++ Compilers.

22 22 2 MATLAB-Grundlagen LAB-Prompt» sehen (bzw. EDU» 5 bei der Studentenversion), der auf Ihre erste Eingabe wartet. Mit dem Kommando quit verlassen Sie MATLAB. Weitere Hinweise finden Sie in den MATLAB-Handbüchern. Gegebenenfalls müssen Sie Ihren Systemmanager nach lokalen Installationseigenschaften befragen. Haben Sie MATLAB gestartet, so wird das Kommmandofenster geöffnet: < M A T L A B > Copyright The MathWorks, Inc. Version (R11) Jan >> To get started, type one of these: helpwin, helpdesk, or demo. For product information, type tour or visit Nach dem MATLAB-Prompt» erwartet MATLAB nun Ihre Eingabe. Unter einem Windows- Betriebssystem 6 wird ein Kommandofenster geöffnet, wie in Abbildung 2.1 zu sehen. Abbildung 2.1: Das Kommandofenster unter Windows 5 EDU = Education. 6 Zum Beispiel Windows 95/98 oder Windows NT

23 2.3 Arbeiten im interaktiven Modus Arbeiten im interaktiven Modus Nachdem Sie MATLAB gestartet haben und das Kommandofenster mit dem Prompt» geöffnet wurde, können Sie nun mit dem MATLAB-Interpreter kommunizieren. Man kann jetzt zum Beispiel einfache Rechnungen durchführen. Geben Sie >> ein und drücken Sie die Return-Taste. ans = Die beiden Zahlen 3.2 und 5.1 werden addiert und das Ergebnis 8.3 am Bildschirm angezeigt. Hierbei wird eine Variable mit dem Namen ans erzeugt, und diese enthält das Resultat als Wert. Gibt man >> x = 1; ein, so hat man im Workspace von MATLAB eine Variable x mit dem Wert 1 erzeugt 7. Das Gleichheitszeichen wird benutzt, um Variablen Werte zuzuweisen. Das Semikolon unterdrückt die Bildschirmausgabe. Mit dem Kommando who können Sie stets herausfinden, welche Variablen im Workspace angelegt sind: >> who Your variables are: x Mit den üblichen arithmetischen Operatoren kann man nun beliebige Ausdrücke bilden und Berechnungen durchführen. Die Tabelle 2.1 gibt die arithmetischen Operatoren an. Symbol Operation MATLAB-Syntax Mathematische Syntax + Addition a+b a + b - Subtraktion a-b a b * Multiplikation a*b ab / rechte Division a/b a : b = a \ linke Division a\b b : a = b a ˆ Potenzieren aˆb a b Tabelle 2.1: Arithmetische Operationen zwischen Skalaren in MATLAB Die rechte Division 1/4 ergibt das gleiche Ergebnis wie die linke Division 4\1, nämlich Es ist zunächst irritierend, daß es eine rechte und linke Division gibt. Wir werden später den Sinn dieser Definitionen erkennen. Mit der Cursor-Taste kann man alte Eingaben zurückholen. Dies ist zum Beispiel dann nötig, wenn man Eingaben verbessern möchte. Die Tabelle 2.2 zeigt Möglichkeiten, einzelne Kommandozeilen zu editieren und somit Tipparbeit zu sparen. 7 Der Workspace ist der Arbeitsspeicher, der über die MATLAB-Befehlszeilen erreichbar ist.

24 24 2 MATLAB-Grundlagen Tastenbefehl Beschreibung oder ctrl-p Letzte Zeile herholen oder ctrl-n Nächste Zeile oder ctrl-b Ein Zeichen zurückgehen oder ctrl-f Ein Zeichen vorwärts ctrl- oder ctrl-r Ein Wort nach rechts ctrl- oder ctrl-l Ein Wort nach links home oder ctrl-a An den Anfang einer Zeile gehen end oder ctrl-e An das Ende einer Zeile gehen esc oder ctrl-u Zeile löschen del oder ctrl-d Zeichen unter dem Cursor löschen backspace oder ctrl-h Zeichen vor dem Cursor löschen ctrl-k Bis zum Ende der Zeile löschen Tabelle 2.2: Kommandozeilen editieren Lange Befehlszeilen Falls eine Anweisung nicht in eine Zeile paßt, schließen Sie die betreffende Zeile mit drei Punkten und dann der Taste Enter bzw. Return ab. Beispiel: >> s = 1-1/2+1/3-1/4+1/5-1/6+1/ /8+1/9; Der Path Browser MATLAB ermittelt die Art, in der die aufgerufenen Funktionen auszuführen sind, über einen Suchpfad, das ist eine geordnete Liste von Verzeichnissen. Mit dem Kommando path erhält man die aktuelle Liste von Verzeichnissen, in denen MATLAB sucht. Dieser Befehl kann auch dazu verwendet werden, um Verzeichnisse aus dem Suchpfad zu löschen oder anzuhängen. Mit dem Path Browser kann der Pfad bequem geändert oder ausgegeben werden. Falls Sie ein Windows Betriebssystem verwenden, so können Sie den Path Browser über die Schaltfläche des Kommandofensters, über Set Path im Menü File oder über das Kommando pathtool öffnen. Die Abbildung 2.2 zeigt den Path Browser. Der Workspace Browser Sie können den Workspace Browser verwenden, um sich den aktuellen Inhalt des Workspace anzuschauen. Dieser stellt eine grafische Darstellung des whos Kommandos dar. Falls Sie ein Windows Betriebssystem verwenden, so können Sie den Workspace Browser über die Schaltfläche des Kommandofensters, über Show Workspace im Menü File oder über das Kommando workspace öffnen. Die Abbildung 2.3 zeigt den Workspace Browser.

25 2.3 Arbeiten im interaktiven Modus 25 Abbildung 2.2: Der Path Browser unter Windows Den Workspace verwalten Es gibt mehrere Funktionen, mit denen man den Workspace verwalten kann; die Tabelle 2.3 zeigt einige. Funktion clear clear all load save who whos Beschreibung Löscht alle Variablen im Workspace Löscht den gesamten Workspace Daten laden Daten speichern Zeigt Variablen im Workspace Zeigt mehr Informationen als who Tabelle 2.3: Workspace verwalten Den Datenträger verwalten Die Funktionen aus der Tabelle 2.4 zeigen Möglichkeiten, wie man den Datenträger verwalten kann.

26 26 2 MATLAB-Grundlagen Abbildung 2.3: Der Workspace Browser unter Windows MATLAB-Kommando cd oder pwd delete dir oder ls exist matlabroot type what which Beschreibung Zeigt Verzeichnisinhalt Löscht <Filename> Zeigt Files Überprüft Existenz Zeigt MATLAB-Wurzel Type Listet M, mat und mex Files auf Lokalisiert Funktionen und Files Tabelle 2.4: Den Datenträger verwalten

27 2.3 Arbeiten im interaktiven Modus 27 Wie man sich eine MATLAB-Sitzung aufzeichnet Oftmals ist es von großem Vorteil, eine Kopie einer MATLAB-Sitzung anzufertigen, um sich nachträglich anschauen zu können, was man eigentlich gemacht und wie MATLAB darauf reagiert hat. Hierzu gibt es das Kommando diary <Dateiname> welches jede auf dem Bildschirm erscheinende Aktion nicht aber eine Grafik in die Datei mit dem gewählten Dateinamen in Ihr aktuelles Verzeichnis schreibt. Diese können Sie dann mit einem Editor anschauen oder editieren. Dabei wird so lange aufgezeichnet, bis Sie >> diary off eingeben. Eine Grafik kann zum Beispiel mit print festgehalten werden. Wie man mit MATLAB Systeminformationen erhält Die Tabelle 2.5 zeigt MATLAB-Funktionen, die man verwenden kann, um Informationen über den eigenen Computer zu erhalten. Funktion computer isieee version ver hostid license Beschreibung Typ des Rechners Überprüft, ob IEEE-Arithmetik verfügbar Versionsnummer Detaillierte Informationen über Version, Lizenz und Toolboxen Identifikationsnummer Lizenznummer Tabelle 2.5: Systeminformationen Aufruf von externen Programmen Das Ausführungszeichen! ist ein Shell-Escape und bedeutet, daß der Rest der Eingabezeile einen Befehl an das Betriebssystem bezeichnet. Damit lassen sich andere Programme aufrufen, ohne MATLAB verlassen zu müssen. Weitere Informationen im helpdesk-hilfesystem unter: MATLAB verfügt über umfangreiche Online-Hilfen. Mit diesen erhalten Sie detaillierte Informationen zur Funktionalität von MATLAB. Die Hilfesysteme können mit den Kommandos help, helpwin und helpdesk aufgerufen werden. Wir besprechen diese im Abschnitt Allgemeine Kommandos (General Purpose Commands) Operatoren und spezielle Zeichen (Operators and Special Characters) 8 Das Hinweissymbol weist auf weitere Informationen hin, die man mit dem MATLAB-Onlinesystem erhält.

28 28 2 MATLAB-Grundlagen 2.4 Grundlegende mathematische Funktionen Wie ein Taschenrechner, so verfügt auch MATLAB über grundlegende mathematische Funktionen. Die Eingabe >> cos(0) berechnet den Kosinuswert an der Stelle 0, und das Ergebnis ans = 1 wird zurückgegeben. Die Tabellen 2.6, 2.7 und 2.8 zeigen weitere mathematische Funktionen. Ein komplette Übersicht findet man mit help elfun. Trigonometrische Funktion acos acosh acot acoth acsc acsch asec asech asin asinh atan atan2 atanh cos cosh cot coth csc csch sec sech sin sinh tan tanh Beschreibung Inverser Kosinus Inverser hyperbolischer Kosinus Inverser Kotangens Inverser hyperbolischer Kotangens Inverser Kosekans Inverser hyperbolischer Kosekans Inverser Sekans Inverser hyperbolischer Sekans Inverser Sinus Inverser hyperbolischer Sinus Inverser Tangens Vier Quadranten inverser Tangens Inverser hyperbolischer Tangens Kosinus Hyberbolischer Kosinus Kotangens Hyberbolischer Kotangens Kosekans Hyberbolischer Kosekans Sekans Hyberbolischer Sekans Sinus Hyberbolischer Sinus Tangens Hyperbolischer Tangens Tabelle 2.6: Trigonometrische Funktionen in MATLAB

29 2.5 Grundlegende Eigenschaften 29 Funktion Beschreibung Mathematische Syntax exp Exponentialfunktion exp x log Natürlicher Logarithmus log e x = ln x log10 Logarithmus zur Basis 10 log 10 x = lg x log2 Logarithmus zur Basis 2 log 2 x pow2 Exponentialfunktion mit Basis 2 2 x Tabelle 2.7: Exponential- und Logarithmusfunktionen in MATLAB Funktion Beschreibung Mathematische Syntax sqrt Quadratwurzelfunktion x Tabelle 2.8: Potenzfunktionen in MATLAB Weitere Informationen im helpdesk-hilfesystem unter: Grundlegende mathematische Funktionen (Elementary Math Functions) Spezielle mathematische Funktionen (Specialized Math Functions) 2.5 Grundlegende Eigenschaften Zuweisungen, Ausdrücke und Variablen MATLAB ist ein interaktives Programmsystem; die Ausdrücke, die Sie eingeben, werden sofort interpretiert und ausgeführt. Die allgemeine Form ist >> Variable = Ausdruck oder >> Ausdruck Ausdrücke setzen sich aus Operatoren, Funktionen und Variablennamen zusammen. Das Auswerten eines Ausdrucks erzeugt eine Matrix, die auf dem Bildschirm ausgegeben oder in eine Variable gespeichert wird. Falls keine Variable angegeben ist, wird automatisch die Variable ans (=answer) erzeugt und das Resultat in diese gespeichert. Zur Definition einer Variablen sind keine Typerklärungen oder Dimensionsanweisungen erforderlich. Beim Auftreten eines neuen Variablennamens richtet MATLAB automatisch die entsprechende Variable ein und weist ihr den erforderlichen Speicherplatz zu. Wenn die betreffende Variable bereits existiert, ändert MATLAB ihren Wert und weist ihr bei Bedarf einen neuen Speicherplatz zu. Variablennamen bestehen aus einem Buchstaben mit nachfolgend beliebig vielen weiteren Buchstaben, Ziffern oder Unterstrichen. MATLAB wertet aber nur die ersten 31 Zeichen eines Namens aus. MATLAB unterscheidet zwischen Klein- und Großbuchstaben. Dies gilt sowohl für Kommandos und Funktionen als auch für Variablen.

30 30 2 MATLAB-Grundlagen Eine Zuweisung wird gewöhnlich mit der Return-Taste abgeschlossen. Ist das letzte Zeichen einer Zuweisung ein Semikolon, dann wird die Bildschirmausgabe unterdrückt, die Zuweisung aber durchgeführt. Wollen Sie also keine Bildschirmausgabe, so setzen Sie ; ans Ende einer Zeile. Das Kommando who bzw. whos listet alle Variablen auf, die gegenwärtig im Workspace definiert sind. Dieses Kommando kennt mehrere Optionen, siehe help who. Definierte Variablen sind so lange vorhanden, bis Sie von Ihnen explizit gelöscht werden oder Sie MATLAB beenden. Eine Variable können Sie jederzeit aus dem Workspace mit dem Befehl clear löschen. Siehe zum Beispiel doc clear. Ein laufendes Programm oder eine laufende Berechnung können Sie jederzeit mit Ctrl-C stoppen, ohne MATLAB zu verlassen. Variablen und Konstanten Wie andere Computersprachen so hat auch MATLAB Regeln für Variablennamen. Ein Variablenname muß ein einfacher Name ohne Leerzeichen sein. Darüber hinaus gibt es in MATLAB vordefinierte Variablen. Diese sind in der Tabelle 2.9 zusammengestellt. Spezielle Variable Bedeutung ans Variablenname für Resultat (Default) computer Identifiziert den Computer eps Maschinengenauigkeit flops Zählt Gleitpunktoperationen i Imaginäre Einheit Inf Infinity inputname Eingabeargumentname j Imaginäre Einheit NaN Not-a-Number nargin, nargout Anzahl von Argumenten pi Kreiszahl π 3.14 realmax größte positive Maschinenzahl realmin kleinste positive Maschinenzahl varargin, varargout Variable Anzahl von Argumenten Tabelle 2.9: Spezielle Variablen und Konstanten Weitere Informationen im helpdesk-hilfesystem unter: Grundlegende Matrizen und Matrixmanipulationen (Elementary Matrices and Matrix Manipulation)

31 2.5 Grundlegende Eigenschaften 31 Zahlen MATLAB verarbeitet Zahlen in der üblichen Dezimalschreibweise, wobei wahlweise ein Dezimalpunkt und ein positives oder negatives Vorzeichen verwendet werden können. In der wissenschaftlichen Notation bezeichnet der Buchstabe e eine Skalierung um Zehnerpotenzen. Zulässige Zahlen sind zum Beispiel: e i -3.4j 4e3i Alle Zahlen werden intern im double-format (Langformat) gemäß der Spezifikation durch die Gleitpunktnorm der IEEE abgespeichert. MATLABs Zahlenausgabe folgt mehreren Regeln. Ist das Ergebnis ganzzahlig, so wird eine ganze Zahl ausgegeben. Wenn das Ergebnis eine reelle Zahl ist, dann gibt MATLAB das Resultat standardmäßig auf 4 Dezimalen gerundet aus. Ist das Matrixelement größer als 10 3 oder kleiner als 10 3, so wird es in exponentieller Form auf dem Bildschirm dargestellt. Sollen Zahlen in einem anderen Format ausgegeben werden, so hilft das MATLAB-Kommando format. Die nachfolgende Tabelle 2.10 gibt mögliche numerische Zahlenformate an. Kommando Ausgabe Beispiel: pi format short 4 Dezimale (Default) format long 14 Dezimale format short e Exponentialdarstellung mit 4 Dezimalen e+00 format long e Exponentialdarstellung mit 15 Dezimalen e+00 format short g short oder short e format long g long oder long e format hex Hexadezimale Gleitpunktdarstellung fb54442d18 format bank 2 Dezimale 3.14 format + Vorzeichen (+ oder -), Leerzeichen + format rat Rationale Approximation 355/113 Tabelle 2.10: Zahlenausgabe in MATLAB MATLAB ändert beim Umschalten in ein anderes Format lediglich die Zahlenausgabe, keinesfalls aber die Berechnungen oder die interne Zahlendarstellungen. Intern benutzt MATLAB das IEEE-Format 9 double precision, wenn immer dies von seiten der Hardware aus möglich ist. Sie können in MATLAB auch andere Zahlendarstellungen für die Ein- und Ausgabe verwenden. Die Tabelle 2.11 zeigt Funktionen, mit denen man zwischen verschiedenen Zahlenausgaben wählen kann. 9 IEEE=The Institute of Electrical and Electronics Engineers; sprich: ei triple i

32 32 2 MATLAB-Grundlagen Funktion Bedeutung dec2bin Von dezimaler nach binärer Darstellung dec2hex Von dezimaler nach hexadezimaler Darstellung dec2base Von dezimaler nach irgendeiner Basis zwischen 2 und 36 bin2dec Von binärer nach dezimaler Darstellung hex2dec Von hexadezimaler nach dezimaler Darstellung base2dec Von beliebiger Basis (2 bis 36) nach dezimaler Darstellung Tabelle 2.11: Zahlendarstellung bezüglich anderer Basen Rechnen mit komplexen Zahlen Mit komplexen Zahlen kann man in MATLAB ebenso rechnen wie mit reellen. Die Bezeichnungen der arithmetischen Operationen sind die gleichen. Die komplexe Zahl z = 3 + 2i kann in MATLAB entweder in dieser Form >> z=3+2i z = i oder folgendermaßen >> z=3+2j z = i eingegeben werden. Für die imaginäre Einheit sind i und j vorgesehen, also ist: i = j = 1. MATLAB verfügt über eingebaute Funktionen, die das Rechnen mit komplexen Zahlen erleichtern. Die Tabelle 2.12 zeigt einige. Funktion Beschreibung Mathematische Syntax abs Absolutwert z angle Winkel arg(z) conj konjugiert komplex z imag Imaginärteil Im(z) real Realteil Re(z) Tabelle 2.12: Rechnen mit komplexen Zahlen in MATLAB 2.6 Matrizen Es gibt in MATLAB mehrere Datentypen (Klassen), die alle durch ein mehrdimensionales Feld 10 dargestellt werden. Unter anderem sind dies: double, char, sparse, unint8, 10 Unter einem Feld (Array) versteht man eine Reihe von Daten eines bestimmten Typs. Mit einem Feld verbunden ist die Vorstellung, dieses zusammenhängend zu speichern und zu verarbeiten. Vektoren und Matrizen sind die bekanntesten Beispiele für Felder.

33 2.6 Matrizen 33 cell und struct. In diesem Buch arbeiten wir meistens mit rechteckigen numerischen Feldern, die reelle oder komplexe Elemente (Datentyp double) enthalten. Diese zweidimensionalen Felder nennt man Matrizen. Eine Matrix mit einer Zeile ist ein Zeilenvektor, eine Matrix mit einer Spalte ist ein Spaltenvektor 11 und eine 1 1-Matrix ist ein Skalar. In diesem Buch arbeiten wir meistens mit reellen oder komplexen Matrizen, die den Datentyp double besitzen. Bevor man nun mit Matrizen rechnen kann, muß man diese in die MATLAB-Umgebung einbringen. Dazu hat man folgende drei Möglichkeiten: 1. Wir geben die Zahlen der Matrizen explizit ein. 2. Wir verwenden eingebaute MATLAB-Funktionen, die Matrizen erzeugen können. 3. Wir lesen einen entsprechenden Datenfile ein. Wie man Zeilen- oder Spaltenvektoren eingibt Wir konstruieren nun Vektoren auf zwei Arten. Wir geben die Vektoren explizit ein. Wir verwenden eingebaute MATLAB-Funktionen. Zeilenvektoren (oder 1 n-matrizen) können sehr einfach eingegeben werden. Die Komponenten werden durch ein Leerzeichen oder durch ein Komma getrennt. >> x=[1 2 3] x = >> x=[1.3, pi] x = Spaltenvektoren (oder n 1-Matrizen) werden durch ein Semikolon getrennt oder als Zeilenvektor mit dem Transponiertzeichen eingegeben. >> x=[0.4;sqrt(2)] x = >> x=[1 2 3] 11 Das Wort Vektor ist einer der meisten überbenutzten Begriffe in der Mathematik und ihren Anwendungen. Ein Physiker oder Geometer versteht darunter einen gerichteten Pfeil, ein Algebraiker ein Element eines Vektorraums und Ingenieure und andere eine Liste von Zahlen. Wenn wir MATLAB benutzen, ist ein Vektor eine Liste von Zahlen.

34 34 2 MATLAB-Grundlagen x = Zeilenvektoren mit Schrittweite 1 oder allgemein mit Schrittweite x können ebenfalls einfach erzeugt werden. >> x=2:5 x = >> x=3:0.1:3.28 x = Mit der Funktion linspace können Vektoren erzeugt werden, indem man den Wert der ersten, letzten, sowie die Anzahl der Komponenten (drittes Argument im Aufruf) vorgibt. Mit dem Doppelpunktoperator : ist es dagegen möglich, die Schrittweite direkt anzugeben, nicht aber die Anzahl der Komponenten. Sind a und b reelle Zahlen, dann erzeugt x=linspace(a,b,n) einen Zeilenvektor x der Länge n mit den Komponenten x k = a + (b a) k 1 n 1, wobei k = 1,...,n ist. >> x=linspace(1,2,3) x = >> x=linspace(10,40,4) x = >> x=linspace(1,1.2,3) x = >> x=linspace(0,1,3) x = Mit der Funktion logspace ist es möglich, einen Vektor zu erzeugen, dessen Komponenten logarithmischen Abstand haben. Allgemein ist x=logspace(a,b,n) äquivalent zu x k = 10 a+(b a) k 1 n 1, wobei k = 1,...,n und a,b reelle Zahlen sind. >> x=logspace(-2,2,5) x = >> x=logspace(1,3,3)

35 2.6 Matrizen 35 x = Zusammenfassung x=[1 2 3] Erzeugt einen Zeilenvektor x mit den angegebenen Elementen, das heißt x = (1, 2, 3) x=komponente1:komponenten Erzeugt einen Zeilenvektor x, der mit Komponente1 beginnt, um 1 erhöht wird und mit oder vor KomponenteN endet x=komponente1:schrittweite:komponenten Erzeugt einen Zeilenvektor x, der mit Komponente1 beginnt um Schrittweite erhöht wird und mit oder vor KomponenteN endet x=linspace(komponente1,komponenten,n) Erzeugt einen Zeilenvektor x, der mit Komponente1 beginnt und mit der KomponenteN endet, wobei der Vektor n Komponenten hat x=logspace(erstes,letztes,n) Erzeugt einen Zeilenvektor x, der mit der Komponente 10 Erstes beginnt und mit der Komponente 10 Letztes endet, wobei der Vektor n Komponenten hat Wie man Matrizen eingibt Wie bekommt man nun Matrizen (zweidimensionale Felder) in die MATLAB-Umgebung? Matrizen werden zeilenweise in eckiger Klammer eingegeben; dabei werden Zeilen durch ein Semikolon voneinander getrennt. Leerzeichen (oder Kommata) trennen die Elemente in einer Zeile. Wird die Eingabe mit einem Semikolon ; abgeschlossen, so wird die Matrix nicht am Bildschirm ausgegeben. Ohne diesen Strichpunkt wird die Eingabe wiederholt. Im nachstehenden Beispiel wird eine 2 3-Matrix A bzw. eine 2 2-Matrix B erzeugt. >> A=[1 2 3;4 5 6] A = >> B=[pi sqrt(2); ]; Spezielle Matrizen MATLAB bietet mehrere eingebaute Funktionen an, mit denen man spezielle Matrizen erzeugen kann. eye(n) erstellt die n n-einheitsmatrix I n :

36 36 2 MATLAB-Grundlagen >> eye(3) ans = ones(m,n) erzeugt die m n-matrix mit Elementen 1: >> ones(2,3) ans = Mit zeros(m,n) wird die m n-nullmatrix gebildet: >> zeros(3,2) ans = Der MATLAB-Aufruf hilb(n) erzeugt die n n HILBERT-Matrix, für größere Werte von n ein Paradebeispiel einer sogenannten schlecht konditionierten Matrix: >> hilb(3) ans = Die Tabelle 2.13 gibt eine Übersicht über spezielle Matrizen, die in MATLAB einfach erzeugt werden können. Mit der Online-Hilfe bekommt man weitere Informationen zu diesen Matrizen. Wie man Einträge in einer Matrix ändert In den folgenden Beispielen bezeichne A stets die Matrix Ist eine Matrix definiert, so verändert eine direkte Zuweisung den Wert des entsprechenden Elements. Die nachfolgende Zuweisung setzt das Element in der dritten Zeile und ersten Spalte auf 0.

37 2.6 Matrizen 37 Matrix Beschreibung [] Leere Matrix eye Einheitsmatrix gallery HIGHAMS-Testmatrizen hadamard HADAMARD-Matrix hankel HANKEL-Matrix hilb HILBERT-Matrix invhilb Inverse HILBERT-Matrix magic Magische Matrix ones Matrix mit allen Elementen 1 pascal PASCAL-Matrix rand Gleichmäßigverteilte Zufallsmatrix randn Normalverteilte Zufallsmatrix rosser Symmetrische Testmatrix toeplitz TÖPLITZ-Matrix vander VANDERMONDE-Matrix wilkinson WILKINSON-Matrix zeros Nullmatrix Tabelle 2.13: Spezielle Matrizen in MATLAB >> A(3,1)=0 A = Das folgende Kommando ersetzt die erste Zeile der Matrix A durch den Zeilenvektor (0, 0). Der Doppelpunkt im zweiten Argument bedeutet, daß alle Spalten angesprochen werden sollen. >> A(1,:)=[0 0] A = Entsprechend ersetzt man die zweite Spalte der Matrix A durch den Spaltenvektor (7,7,7) T. Der Doppelpunkt : im ersten Argument bedeutet, alle Zeilen sollen angesprochen werden. >> A(:,2)=[7 7 7] A = 1 7

38 38 2 MATLAB-Grundlagen Vertauschung von zweiter und dritter Zeile der Matrix A. >> A([2 3],:)=A([3,2],:) A = Wie man (Unter-) Matrizen einer Matrix erzeugt Die folgenden Beispiele zeigen, wie man aus einer gegebenen Matrix, einzelne Elemente, ganze Zeilen oder Spalten sowie Untermatrizen anspricht. Zunächst wird von der Matrix A das Element a 31 in der dritten Zeile und ersten Spalte zurückgegeben, dann die zweite Zeile, danach die erste Spalte und schließlich eine 2 2-Untermatrix. >> A(3,1) ans = 5 >> A(2,:) ans = 3 4 >> A(:,1) ans = >> A([1 2],:) ans = Mit dem :-Zeichen kann man eine Matrix in einen langen Vektor umwandeln. Die Elemente werden spaltenweise aneinandergefügt. >> A(:) ans = Aus einem Vektor läßt sich ebenfalls eine Matrix mit spezieller Struktur konstruieren.

39 2.6 Matrizen 39 >> x=[1 2 3] x = >> B=x([ ],:) B = Die folgenden Anweisungen zeigen, wie man aus einer Matrix die zweite Spalte streicht. Hierzu benutzt man die leere Matrix []. Vollkommen analog kann man Zeilen streichen. >> C=[1 2 3;4 5 6] C = >> C(:,2)=[] C = Zusammenfassung A(z,s) Adressiert eine (Unter-) Matrix von A, die durch den Indexvektor z für die Zeilen und durch den Indexvektor s für die Spalten bestimmt ist. A(z,:) Adressiert eine (Unter-) Matrix von A, die durch den Indexvektor z für die Zeilen und durch alle Spalten bestimmt ist. A(:,s) Adressiert eine (Unter-) Matrix von A, die durch alle Zeilen und durch den Indexvektor s für die Spalten bestimmt ist. A(:) Adressiert alle Matrixelemente von A als einen (langen) Spaltenvektor, indem alle Spalten aneinandergefügt werden. A(i) Adressiert eine (Unter-) Matrix von A, die durch den einzigen Indexvektor i bestimmt ist, indem A als (langer) Spaltenvektor interpretiert wird.

40 40 2 MATLAB-Grundlagen Mit den folgenden MATLAB-Funktionen kann man aus einer gegebenen Matrix andere Matrizen bzw. Untermatrizen konstruieren. Die Funktion diag extrahiert die Diagonalelemente einer Matrix. Andererseits kann man mit diag eine Diagonalmatrix konstruieren. Damit hat diese Funktion eine doppelte Bedeutung. >> A=[1 2;3 4] A = >> diag(a) ans = 1 4 >> diag(ans) ans = Aus einer gegebenen Matrix kann mit den Funktionen triu und tril die obere und untere Dreiecksmatrix extrahiert werden. >> A=[1 2 3; 4 5 6;7 8 9] A = >> triu(a) ans = >> tril(a) ans = MATLAB-Funktionen, mit denen man Matrizen manipulieren kann In MATLAB stehen viele Funktionen zur Manipulation von Matrizen zur Verfügung. Die Funktion flipud vertauscht die Zeilen einer Matrix von oben nach unten. >> A=[1 2; 3 4;5 6;7 8]

41 2.6 Matrizen 41 A = >> flipud(a) ans = Die Funktion fliplr vertauscht die Spalten einer Matrix von links nach rechts. >> A=[1 2 3;4 5 6] A = >> fliplr(a) ans = Eine Drehung einer Matrix A um 90 oder k 90 (k Z) gegen den Uhrzeigersinn erreicht man mit der Funktion rot90(a) bzw. rot90(a,k). >> A A = >> rot90(a) ans = >> rot90(a,-1) ans = Mit der MATLAB-Funktion reshape kann man die Struktur einer gegebenen Matrix ändern. Das Beispiel zeigt, wie aus einer 2 3-Matrix eine 3 2-Matrix durch spaltenweises Auffüllen entsteht. Die Anzahl der Elemente darf sich dabei nicht ändern.

42 42 2 MATLAB-Grundlagen >> A=[1 2 3;4 5 6] A = >> reshape(a,3,2) ans = Nachstehend wird gezeigt, wie man mit der MATLAB-Funktion repmat aus einer Matrix eine Blockmatrix mit gleichen Blöcken konstruiert. >> A=[1 2;3 4] A = >> repmat(a,2,3) ans = Funktion Beschreibung diag Extrahiert Diagonale oder erzeugt Diagonalmatrix rot90 Drehung um 90 fliplr Vertauscht Spalten von links nach rechts flipud Vertauscht Zeilen von oben nach unten repmat Erzeugt Blockmatrix reshape Ändert die Struktur tril Untere Dreiecksmatrix triu Obere Dreiecksmatrix. Transponiert eine Matrix Transponiert und konjugiert eine komplexe Matrix : Formt Matrix zu Spaltenvektor um Tabelle 2.14: MATLAB-Funktionen und Operatoren zur Matrizenmanipulation Logische Matrizen In MATLAB gibt es anders als etwa in PASCAL oder FORTRAN keinen (expliziten) Datentyp, der Wahrheitswerte speichern kann. Statt dessen wird ein Wert ungleich 0 als WAHR

43 2.6 Matrizen 43 und gleich 0 als FALSCH betrachtet 12. Dies gilt sowohl für die Verwendung von Ausdrücken in Bedingungen als auch für das Erzeugen von Wahrheitswerten mittels Vergleichsoperatoren oder logischer Operatoren. Im nachfolgenden Beispiel ist der Rückgabewert 1, weil die Aussage 2 < 3 WAHR ist. Die Variable ans erhält den Wert 1. >> 2 < 3 ans = 1 Ruft man whos auf, so teilt MATLAB mit, daß die Variable ans eine logische 1 1-Matrix ist. >> whos Name Size Bytes Class ans 1x1 8 double array (logical) Grand total is 1 elements using 8 bytes Der Vorteil einer logischen Variablen wie hier ans liegt darin, daß sie als Index für Matrizen verwendet werden kann. Bemerkungen zur Adressierung von Matrizen Das folgende Beispiel zeigt, daß gerundet wird, falls der Index keine natürliche Zahl ist. Eine entsprechende Warnung wird ausgegeben. >> A = [1 2 ; 3 4]; >> A( 1.1, 1.9 ) Warning: Subscript indices must be integer values. ans = 2 Ein nach Rundung auf eine ganze Zahl nichtpositiver Index ist nicht sinnvoll interpretierbar. Eine Fehlermeldung ist die Konsequenz. >> A( 1.1, 0.1 ) Warning: Subscript indices must be integer values.??? Index exceeds matrix dimensions. 12 Analog wie in C/C++

44 44 2 MATLAB-Grundlagen Logische Matrizen, das heißt Matrizen, deren Komponenten nur aus Nullen oder Einsen bestehen, können zur Adressierung von Matrizen verwendet werden. Zunächst wird ein logischer Zeilenvektor ans aus x erzeugt, dann wird dieser dazu benutzt, um y aus x zu bilden. >> x = -2:2 x = >> abs(x) > 1 ans = >> y = x(ans) y = -2 2 Beachte, daß hier 0 als Element einer logischen Matrix als Index erlaubt ist. Wird eine numerische Matrix als Index benutzt, ist 0 als Element dagegen nicht erlaubt, wie obiges und auch das nachfolgende Beispiel zeigt. Der Indexvektor [ ] ist hier ein numerischer Vektor und kein logischer Vektor, daher die Fehlermeldung. >> y = x([ ])??? Index into matrix is negative or zero. See release notes on changes to logical indices. Mit der Funktion logical kann man jedoch eine numerische Matrix in eine logische umwandeln. >> y = x( logical([ ]) ) y = -2 2 In folgendem Beispiel wird aus einer Matrix A zunächst eine logische Matrix X erzeugt und mit deren Hilfe dann eine Matrix Y, die nur die Elemente beinhaltet, die der angegebenen logischen Bedingung genügen. Das Ergebnis ist ein Spaltenvektor. >> A = [5-3; 2-7] A = >> X = ( abs(a) > 2 ) X = >> Y = A(X)

45 2.6 Matrizen 45 Y = Zusammenfassung A(X) Adressiert eine (Unter-) Matrix von A durch die logische Matrix X, dabei muß X die gleiche Größe wie A haben. logical Mit Hilfe der logical-funktion kann man eine numerische Matrix in eine logische umwandeln. Wie man Matrizen in eine Datei schreibt Eine Matrix kann mit dem Kommando save in eine Datei gespeichert werden. Hierbei können Sie zwischen binärem MATLAB- und lesbarem ASCII-Format wählen. Darüber hinaus besteht mit der Funktion fprintf eine an C/C++ angelehnte Funktion die Möglichkeit, Daten formatiert in eine Datei zu schreiben. Für weiter Hinweise und Beispiele verweisen wir auf die Online-Hilfen. Wie man Matrizen aus einer Datei liest Eine Matrix kann mit dem Kommando load aus einer Datei in den Workspace geladen werden. Darüber hinaus erlaubt die Funktion fscanf ein an C/C++ angelehnter Befehl Daten formatiert aus einer Datei zu lesen. Für weitere Hinweise und Beispiele verweisen wir auf die Online-Hilfen. Komplexe Matrizen Viele MATLAB-Operationen lassen sich mit komplexen Matrizen durchführen und viele MATLAB-Funktionen sind auch für komplexe Matrizen erlaubt. Das folgende Beispiel zeigt, wie man eine komplexe Matrix erzeugt: >> A = [1 2; 3 4]+i*[5 6;7 8] A = i i i i Eine zweite, gleichwertige Möglichkeit ist >> A = [1+5i 2+6i;3+7i 4+8i] A = i i i i

46 46 2 MATLAB-Grundlagen Hierzu wird die MATLAB-Konstante i für die imaginäre Einheit i = 1 verwendet. Achtung! Oft wird i als Laufindex in einer Schleife benutzt. In diesem Fall ist i überschrieben 13 und hat dann nicht mehr die Bedeutung der imaginären Einheit. Erst nach einem Neustart, Löschen der Variablen i oder einer expliziten Neudefinition können Sie i wieder in der ursprünglichen Bedeutung als imaginäre Einheit verwenden. Große Matrizen Große Matrizen erzeugt man am besten als ASCII-Datei mit einem Editor. Dieser File sollte die Form eines rechteckigen Feldes haben, wo jede Zeile gleich viele Zahlen enthält. Die Zahlen einer Zeile sind durch ein Leerzeichen oder Komma zu trennen. Heißt dieser File zum Beispiel data.txt, so kann man mit >> load data.txt die Daten in den MATLAB-Workspace laden. Hierbei wird der Matrixvariablenname data erzeugt. Alternativ dazu kann man Daten aus einem Script-File einlesen. Vergleiche hierzu auch Abschnitt 2.8. Dabei geht man wie folgt vor: 1. Man erzeugt einen Script-File, zum Beispiel den File data.m. Dieser kann wie folgt aussehen: A = [ usw. ]; 2. Man ruft data nach dem MATLAB-Prompt auf. Dadurch wird die Matrix hier A im MATLAB-Workspace erzeugt und man kann mit ihr arbeiten. Mehrdimensionale Felder In MATLAB können Felder beliebiger Dimension erstellt werden. Zum Beispiel erzeugt die Anweisung >> ones(3,5,4) ein Feld der Größe ans(:,:,1) = Beachten Sie, daß vordefinierte Variablen in MATLAB überschrieben werden dürfen.

47 2.6 Matrizen 47 ans(:,:,2) = ans(:,:,3) = ans(:,:,4) = Es werden vier Matrizen der Größe 3 5 erzeugt. Alle Matrixelemente sind wegen des ones-befehls konstant 1. Da wir solche mehrdimensionalen Felder im folgenden nicht benötigen, gehen wir nicht weiter darauf ein. Wie man weitere Informationen über Matrizen erhält Mit Hilfe der Funktion size erhält man die Größe einer Matrix. Die Tabelle 2.15 zeigt weitere nützliche Funktionen und deren Bedeutung. Funktion size length disp isempty isequal isnumeric islogical Beschreibung Matrixgröße Länge eines Vektors Zeigt Inhalt der Matrix Wahr, wenn Matrix leer ist Wahr, falls Matrizen gleich sind Wahr, falls Matrix numerisch ist Wahr, falls Matrix logisch ist Tabelle 2.15: Grundlegende Informationen über Matrizen Weitere Informationen im help/helpwin-hilfesystem unter: Allgemeine Kommandos (General purpose commands) Aufruf: help general Weitere Informationen im helpdesk-hilfesystem unter: Sprachkonstrukte und Debugging (Language Constructs and Debugging) Grundlegende Matrizen und Matrixmanipulationen (Elementary Matrices and Matrix Manipulation)

48 48 2 MATLAB-Grundlagen Spezielle Matrizen (Specialized Matrices) Funktionen der Klasse struct (Structure Functions) Feldfunktionen der Klasse cell (Cell Array Functions) 2.7 Matrixoperationen Die Tabelle 2.16 zeigt Matrixoperationen in MATLAB. Diese Matrixoperationen sind auch Symbol Operation MATLAB Syntax Mathematische Syntax + Addition A+B A + B - Subtraktion A-B A B * Multiplikation A*B AB / rechte Division A/B Löst XA = B nach X \ linke Division A\B Löst AX = B nach X ˆ Potenzieren Aˆp A p Konjugiert Transponieren A (Ā)T. Transponiert A. A T kron Kronecker Tensorprodukt kron(a,b) A B Tabelle 2.16: Matrixoperationen in MATLAB für 1 1-Matrizen, also Skalare, definiert. Sind die Größen der beteiligten Matrizen nicht kompatibel, dann gibt MATLAB eine Fehlermeldung zurück. Ein besonderer Fall liegt vor, wenn ein Operand ein Skalar ist. Dann operiert dieser Skalar auf jedem Matrixelement. Die Matrixdivision A\b muß näher erläutert werden, denn sie stellt keine Matrixoperation im eigentlichen Sinn der linearen Algebra dar. A\b löst vielmehr ein lineares Gleichungssystem. Ist A eine n n-matrix und b eine n-spaltenvektor, dann ist x = A\b; die Lösung des linearen Gleichungssystems Ax = b. Diese Linksdivision löst Ax = b mit Hilfe des GAUSS-Verfahrens. Nähere Einzelheiten hierzu findet man in Kapitel 5. Im allgemeinen ist es sogar erlaubt, daß das lineare System mehrere rechte Seiten besitzt. Deshalb steht in der Tabelle 2.16 ein großes B, wobei die Spalten von B die verschiedenen rechten Seiten bezeichnen. Ist A eine m n-matrix und b ein m-spaltenvektor, so löst die Linksdivision x = A\b; das entsprechende lineare unter- bzw. überbestimmte Gleichungssystem im Sinne der kleinsten Quadrate. Wir gehen später ausführlich darauf ein. Die Rechtsdivision x=b/a löst das lineare System xa = b bzw. xa = B, wenn mehrere rechte Seiten vorhanden sind. Weitere Hinweise findet man unter help slash. Matrixaddition und -subtraktion sind elementweise definiert. Die Multiplikation und andere Operationen dagegen nicht. Dies sind echte Matrixoperationen. Es ist möglich, die

49 2.8 Programmieren mit m-files: Scripts und Funktionen 49 Operationen *, ˆ, \ und / elementweise durchzuführen. Dies ist insbesondere bei der Bearbeitung von Grafiken, deren Farb- und Helligkeitswerte als Matrizen dargestellt sind, nützlich. Die elementweise Multiplikation zweier Matrizen gleicher Größe ist in der Mathematik unter dem Namen HADAMARD-Produkt bekannt, siehe [50]. Damit eine Operation elementweise durchgeführt werden kann, muß ein Punkt davorgesetzt werden, also.*,.ˆ,.\ und./. Das folgende Beispiel zeigt eine punktweise Multiplikation (HADAMARD-Produkt): >> A = [1 2;3 4]; >> B = [5 6;7 8]; >> A.*B ans = Die Tabelle 2.17 faßt die Operatoren zusammen, mit denen man elementweise operieren kann. Symbol Operation + Addition - Subtraktion.* Multiplikation./ rechte Division.\ linke Division.ˆ Potenzieren Tabelle 2.17: Elementweise Operationen Weitere Informationen im helpdesk-hilfesystem unter: Operatoren und spezielle Zeichen (Operators and Special Characters) 2.8 Programmieren mit m-files: Scripts und Funktionen Bisher wurden Anweisungen zeilenweise eingegeben und von MATLAB verarbeitet. Diese interaktive Arbeitsweise ist unzweckmäßig für Algorithmen, die mehrere Programmzeilen benötigen und wieder verwendet werden sollen. Hierfür eignen sich sogenannte m-files, die mit einem Editor erzeugt werden und unter einem Filenamen mit dem Kürzel.m abgespeichert werden. Die meiste Zeit beim Arbeiten mit MATLAB werden Sie damit verbringen, solche m-files zu erzeugen und zu verfeinern. Es gibt zwei Arten von m-files: die Script- Files und die Function-Files. Script-Files Ein Script-File ist eine Folge von gewöhnlichen MATLAB-Anweisungen. Die Anweisungen in einem Script-File werden ausgeführt, wenn man den File-Namen ohne das Kürzel angibt.

50 50 2 MATLAB-Grundlagen Ist zum Beispiel der File-Name versuch.m, so gibt man einfach versuch ein. Variablen in einem Script-File sind global. Auch kann ein Script-File einen anderen m-file aufrufen. Die Tabelle 2.18 verwendet man beim Arbeiten mit Script-Files. MATLAB-Funktion disp echo input keyboard pause pause(n) waitforbuttonpress Beschreibung Zeigt Resultate am Bildschirm Kontrolle der Bildschirmausgabe Wartet auf Eingabe Kontrolle auf Tastatur Pause bis Tastendruck Pause für n Sekunden Pause bis Mausklick oder Tastendruck Tabelle 2.18: Funktionen für Script-Files Function-Files Wenn Sie intensiver mit MATLAB arbeiten, dann werden Sie bald feststellen, daß es nicht für alle ihre Wünsche eingebaute Funktionen oder Kommandos gibt. In diesem Fall können Sie sich aber Ihre eigene Funktion schreiben und damit die Funktionalität von MATLAB erweitern 14. Mit Hilfe von Function-Files können Sie den MATLAB-Funktionsvorrat erweitern. Variablen in Function-Files sind lokale Variablen. Die Übergabe einzelner Variablen erfolgt über eine Parameterliste im Funktionsaufruf. Ein Function-File entspricht der SUB- ROUTINE bzw. FUNCTION in der Programmiersprache FORTRAN, FUNCTION in C/C++ und PROCEDURE bzw. FUNCTION in PASCAL. Im Laufe des Buches werden wir viele Beispiele von Script- und Function-Files kennenlernen. Haben Sie eine Funktion in Form eines Function-Files geschrieben, so können Sie diesen genauso aufrufen, wie die eingebauten MATLAB-Funktionen. Für das Erzeugen eines Function-Files sind verschiedene Dinge zu beachten. Diese wollen wir nun beschreiben. Damit ein File ein Function-File ist, muß er mit dem Schlüsselwort function beginnen, dann folgen die Ausgabeargumente, der Funktionsname und schließlich die Eingabeargumente. Die Form aller Function-Files ist function [Out_1,...,Out_n] = Name(In_1,...,In_m) Irgendwelche Anweisungen end wobei Name der vom Anwender anzugebende Funktionsname ist. Es ist möglich, daß keine Ausgabe- oder Eingabeargumente vorhanden sind. Die folgende Funktion ist ein Beispiel für einen Function-File. function [V,D,r] = MatrixEig(A) % Diese Funktion berechnet den Rang, die Eigenwerte und die % Eigenvektoren der quadratischen Matrix A. 14 Aus diesem Grund spricht man davon, daß MATLAB ein offenes System ist.

51 2.8 Programmieren mit m-files: Scripts und Funktionen 51 [m,n] = size(a); if m==n [V,D,r] = eig(a); r = rank(a); else disp( Fehler: Die Matrix muss quadratisch sein! ) end Schreiben Sie sich die obigen Anweisungen in eine Datei mit dem Namen MatrixEig.m und definieren Sie eine Matrix A im MATLAB-Workspace. Führen Sie >> [V,D,r] = MatrixEig(A) aus, dann erhalten Sie in der Matrix V die Eigenvektoren, in D die Eigenwerte und in r den Rang der Matrix A. V,D,r sind die Ausgabe- und A die Eingabeargumente der Funktion MatrixEig. Um einen Function-File zu schreiben, muß man ein paar Regeln beachten. Außerdem ist es hilfreich, wenn der File gewisse Eigenschaften besitzt. Wir wollen diese im folgenden kurz diskutieren: Der File-Name und der Funktionsname müssen übereinstimmen. Der Name darf bis zu 31 Zeichen haben. Das erste Zeichen muß ein Buchstabe sein. Ziffern und der Unterstrich dürfen verwendet werden. Das Schlüsselwort function muß in der ersten Zeile stehen. Dort sind auch die Einund Ausgabeargumente zu bestimmen. Die Kommentarzeilen nach der ersten Zeile dienen als Hilfetext. Man bekommt sie mit help <functionname> am Bildschirm angezeigt. Die erste Kommentarzeile nennt man H1-Zeile. In dieser Zeile schaut das lookfor- Kommando nach. Ein Function-File kann einen Script-File aufrufen. Dieser Script-File wird dann im Function- Workspace ausgewertet und nicht im MATLAB-Workspace. In einem Function-File können mehrere Funktionen stehen. Dabei gibt es eine Erstfunktion und weitere Unterfunktionen. Diese Unterfunktionen können von der Erstfunktion aufgerufen werden und sich gegenseitig aufrufen. Wie alle Funktionen so haben auch Unterfunktionen ihren eigenen Workspace. Ein Function-File muß kein Eingabe- oder Ausgabeargument haben. Funktionen können untereinander und mit dem MATLAB-Workspace über globale Variable kommunizieren.

52 52 2 MATLAB-Grundlagen 1 function y = fstueckweise(x) 2 % % Berechnet die Funktionswerte einer stueckweisen 4 % zusammengesetzten Funktion. 5 % 6 % Eingabe: x 7 % Ausgabe: y 8 % y1 = x.*(x<0); 10 y2 = x.^2.*( (x<2)-(x<0) ); 11 y3 = 4*(1-(x<2)); 12 y = y1+y2+y3; Function-File 2.1: Stückweise zusammengesetzte Funktion Das folgende Beispiel definiert in dem Function-File 2.1 die stückweise zusammengesetzte Funktion x x 0 f(x) = x 2 0 < x 2 4 x 2 und zeichnet mit folgenden Anweisungen ihren Graphen im Intervall [ 1, 3]: x = -1:0.1:3; y = fstueckweise(x); plot(x,y); axis([-1,3,-1,5]); grid; Der Graph der Funktion f ist in Abbildung 2.4 zu sehen. Wie man Dateien (m-files), den Workspace und Betriebssystemkommandos verwaltet, findet man in den Online-Hilfen. Globale Variablen Sollen mehrere Funktionen mit der gleichen Variablen arbeiten, dann genügt es, die betreffende Variable als global für alle Funktionen zu erklären. Analog gilt dies auch mit der Kommunikation mit dem Workspace. Die Variable muß als global erklärt werden, bevor sie in einer Funktion tatsächlich aufgerufen wird. Globale Variablen werden oft mit Großbuchstaben bezeichnet. Notwendig ist dies allerdings nicht. Dualität Befehl/Funktion MATLAB-Befehle sind Anweisungen wie zum Beispiel load

53 2.8 Programmieren mit m-files: Scripts und Funktionen Abbildung 2.4: Stückweise zusammengesetzte Funktion Viele Befehle lassen auch Modifikationen zu, die bestimmte Operanden spezifizieren. load 31August.dat Modifikationen zu Befehlen können auch als Stringargumente von Funktionen eingegeben werden. load( 31August.dat ) Dies ist die sogenannte Dualität von Befehl und Funktion in MATLAB. Jeder Befehl der Form Befehl Argument kann auch in der Funktionsform Befehl( Argument ) eingegeben werden. Der Vorteil der Funktionsform zeigt sich, wenn das Stringargument aus anderen Größen abgeleitet werden kann. Das folgende Beispiel verarbeitet die Dateien 1August.dat, 2August.dat usw. Hier wird der jeweilige Dateiname mit Hilfe der Funktion int2str gebildet, die eine ganze Zahl in eine Zeichenkette umwandelt: for i = 1:31 s = [int2str August.dat ]; load(s); end

54 54 2 MATLAB-Grundlagen Die Funktion eval Die Funktion eval stellt in Verbindung mit Textvariablen (Zeichenketten) ein leistungsfähiges Makro zur Textverarbeitung dar. Der Ausdruck bzw. die Anweisung eval(s) läßt mit Hilfe des MATLAB-Interpreters den Ausdruck auswerten oder die Anweisung ausführen, die in der Textfolge s enthalten sind. Die Funktion feval Die Funktion feval evaluiert eine Funktion, die mit einer Zeichenkette (String) spezifiziert ist. Zum Beispiel ist a = feval( MeineFunktion,x) zu a = MeineFunktion(x) gleichwertig. feval erlaubt auch mehrere Ein- und Ausgabeargumente. Zum Beispiel sind [a,b] = feval( MeineFunktion,x,y,z) und [a,b] = MeineFunktion(x,y,z) äquivalent. Viele eingebaute MATLAB-Funktionen wie zum Beispiel fzero verwenden diese Programmiertechnik. Inline-Funktionen Benötigt man während einer MATLAB-Sitzung eine Funktion, so kann man die inline Funktion verwenden. Ist zum Beispiel» f = inline( sqrt(x.^2+y.^2), x, y ) f = Inline function: f(x,y) = sqrt(x.^2+y.^2) dann kann man diese Funktion in gewohnter Weise auswerten» f(4,5) ans = Diese Funktion können Sie auch auswerten, wenn die Argumente Felder sind» A = [1 2;3 4];» B = ones(2);» f(a,b) ans =

55 2.9 Datentypen (Klassen) in MATLAB 55 Weitere Informationen im helpdesk-hilfesystem unter: Allgemeine Kommandos (General Purpose Commands) Sprachkonstrukte und Debugging (Language Constructs and Debugging) 2.9 Datentypen (Klassen) in MATLAB Außer double kennt MATLAB weitere Datentypen, die als mehrdimensionales Feld repräsentiert werden. Zeichen(ketten) werden durch Hochkommata begrenzt: >> s = Ich bin eine Zeichenkette ; Dünn besetzte Matrizen (Sparsematrizen) sind solche, die viele Nullen haben. In MAT- LAB gibt es effiziente Methoden, mit solchen Matrizen umzugehen. Die folgende Anweisung erzeugt ein Feld c des Typs cell: >> c = {1:5, Ich liebe MATLAB, ones(3)} c = [1x5 double] Ich liebe MATLAB [3x3 double] Eine Zelle erlaubt es somit, Felder verschiedener Datentypen zu einem Objekt zusammenzufassen. Im obigen Beispiel besteht die Zelle c aus Feldern des Typs double und char. Dreidimensionale Felder vom Datentyp double können Matrizen jeweils gleicher Größe speichern. Zellenfelder dagegen können Matrizen unterschiedlicher Größen aufnehmen. Der Script-File 2.1 erzeugt die ersten sechs HILBERT-Matrizen und speichert diese in der Zelle H. 1 % % Script-File: Zelle. 3 % 4 % Zeigt wie man ein Zellenfeld erzeugt. Die Elemente der 5 % Zelle sind die Hilbert-Matrizen der Ordnung 1 bis 6. 6 % H = cell(6,1); 8 for n = 1:6 9 H{n} = hilb(n); 10 end Führen Sie den Script-File aus. Mit >> H{5} Script-File 2.1: Beispiel einer Zelle

56 56 2 MATLAB-Grundlagen sehen die HILBERT-Matrix der Ordnung fünf. Eine Struktur ist ein Datentyp, welcher verschiedene Werte von möglicherweise verschiedenen Typen beinhaltet. Eine MATLAB-Struktur ist mit dem Datentyp RECORD in der Sprache PASCAL vergleichbar. Im einfachsten Fall läßt sich eine Struktur durch einfache Anweisungen erzeugen. Als Beispiel betrachten wir die Funktion f(x) = (x 1 1) 2 + x 1 x 2 Der Function-File 2.2 berechnet den Funktionswert, den Gradient und die HESSE-Matrix von f im Punkt x und gibt diese als Struktur zurück. 1 function fx = fstruktur(x) 2 % % Beispiel fuer eine Struktur. 4 % 5 % Eingabe: x. 6 % Ausgabe: fx. 7 % fx.wert = (x(1)-1)^2+x(1)*x(2); 9 fx.gradient = [2*(x(1)-1)+x(2);x(1)]; 10 fx.hesse = [2 1;1 0]; Function-File 2.2: Beispiel einer Struktur Diesen Function-File können wir nun wie folgt verwenden: >> x=[2;1]; >> fx = fstruktur(x) fx = Wert: 3 Gradient: [2x1 double] Hesse: [2x2 double] >> whos Name Size Bytes Class fx 1x1 428 struct array x 2x1 16 double array Grand total is 12 elements using 444 bytes fx ist also ein 1 1-Feld vom Datentyp struct. Den Gradientenvektor bzw. die HES- SE-Matrix erhalten Sie mit fx.gradient und fx.hesse. Es können auch mehrdimensionale Felder generiert werden. Das Kommando struct kann verwendet werden, um Strukturen zu erzeugen.

57 2.10 Vergleichsoperatoren und Vergleichsfunktionen 57 Die Datentypen cell und struct erlauben es, unterschiedliche aber logisch zusammengehörige Daten (Felder) zu einer Variablen zusammenzufassen. Zum Beispiel können Zeichenketten und numerische Felder unterschiedlicher Größe in einer Zelle gespeichert werden. Mathematische Operationen sind darauf aber nicht definiert. Hierzu muß man gegebenenfalls auf den Inhalt zugreifen. Strukturen und Zellen sind ähnlich. Ein Unterschied besteht jedoch darin, daß Strukturen durch Namen und nicht durch Zahlen identifiziert werden. Weitere MATLAB-Datentypen werden von Toolboxen erzeugt. Zum Beispiel gibt es den Datentyp sym der Symbolic Math Toolbox oder den Datentyp lti der Control System Toolbox. Weitere Hinweise finden Sie durch die Online-Hilfen. Bei der Realisierung numerischer und hauptsächlich nichtnumerischer Algorithmen sind Datentypen von besonderer Bedeutung. Hierzu verweisen wir auf die entsprechende Informatikliteratur. In diesem Buch jedoch arbeiten wir fast ausschließlich mit Matrizen vom Datentyp double 15. Matrizen vom Datentyp double werden in diesem Buch am häufigsten verwendet. Die Tabelle 2.19 faßt die angesprochenen Datentypen zusammen. double char sparse cell struct Datentypen Typ für Gleitpunktzahlen Zeichen (character) Sparsematrizen (sparse) Zelle (cell) Struktur (structure) Tabelle 2.19: Datentypen 2.10 Vergleichsoperatoren und Vergleichsfunktionen Vergleichsoperatoren und Vergleichsfunktionen 16 dienen dazu, zwei Matrizen elementweise hinsichtlich einer bestimmten Eigenschaft zu vergleichen. In Abhängigkeit davon, ob diese Eigenschaft besteht oder nicht, geben sie dann einen entsprechenden Wahrheitswert zurück, der in Bedingungen für Schleifen oder Verzweigungen weiterverwendet werden kann. In MATLAB gibt es wie auch in C/C++, aber anders als etwa in PASCAL keinen expliziten Datentyp, der die Wahrheitswerte WAHR und FALSCH speichern kann. Statt dessen wird ein numerischer Wert ungleich 0 als WAHR und der Wert 0 als FALSCH betrachtet. Vergleichsoperatoren haben, hinter den arithmetischen, vor den logischen Operatoren, die zweithöchste Priorität bei der Abarbeitung von Ausdrücken. 15 In früheren Versionen war double sogar der einzige Datentyp. 16 Auch relationale Operatoren bzw. relationale Funktionen genannt.

58 58 2 MATLAB-Grundlagen Vergleichsoperatoren In MATLAB stehen die Vergleichsoperatoren aus der Tabelle 2.20 zu Verfügung. Vergleichsoperatoren Beschreibung Mathematisches Symbol < kleiner < <= kleiner gleich > größer > >= größer gleich == gleich = = ungleich Tabelle 2.20: Vergleichsoperatoren Die Vergleichsoperatoren in MATLAB werden eingesetzt, um zwei Matrizen der gleichen Größe oder eine Matrix mit einem Skalar miteinander zu vergleichen. Im letzteren Fall wird jedes Matrixelement mit dem Skalar verglichen. Im nachfolgenden Beispiel wird der Zeilenvektor x elementweise mit dem Skalar 2 verglichen. Zurückgegeben wird ein logischer Zeilenvektor mit der gleichen Länge wie x, der angibt, welche Elemente von x größer als 2 sind. >> x=1:5 x = >> x > 2 ans = Da der Zeilenvektor ans ein logischer Vektor ist, kann man damit Vektoren gleicher Länge also zum Beispiel x indizieren. Andererseits kann man mit ihm auch rechnen, zum Beispiel 0.5 hinzuaddieren. >> x(ans) ans = >> ans+0.5 ans = Die Rückgabe eines Vergleichs ist immer eine logische Matrix mit den numerischen Werten 0 und 1.

59 2.10 Vergleichsoperatoren und Vergleichsfunktionen 59 Vergleichsfunktionen any all find Beschreibung Wahr, wenn irgendein Element ungleich 0 ist Wahr, wenn alle Elemente ungleich 0 sind Gibt Indizes und Werte zurück Tabelle 2.21: Vergleichsfunktionen Vergleichsfunktionen In MATLAB stehen folgende Vergleichsfunktionen zur Verfügung: Die Vergleichsfunktion any prüft nach, ob es in einer Matrix irgendein Element ungleich 0 gibt. Liegt ein Vektor zugrunde, so wird 1 (WAHR) zurückgegeben, wenn eine Komponente von 0 verschieden ist. Liegt eine Matrix vor, so wird spaltenweise vorgegangen, das heißt, für jede Spalte wird 1 (WAHR) zurückgegeben, wenn darin wenigstens ein Element ungleich 0 enthalten ist, sonst 0 (FALSCH). >> a = [1 2 0]; >> any(a) ans = 1 >> A = [1 0 ; 0 0]; >> any(a) ans = 1 0 Liegt ein Vektor vor, so gibt die Funktion all 1 (WAHR) zurück, wenn alle Komponenten von 0 verschieden sind. Liegt eine Matrix vor, so wird spaltenweise vorgegangen, das heißt, für jede Spalte wird 1 (WAHR) zurückgegeben, wenn alle darin vorkommenden Elemente ungleich 0 sind, sonst erhält man 0 (FALSCH) zurück. >> a = [1 2 0]; >> all(a) ans = 0 >> A = [1 0 ; 0 0]; >> all(a) ans = 0 0 find ist eine MATLAB-Funktion. Im Gegensatz zu den Funktionen any und all wird keine logische Matrix zurückgegeben. find berechnet den Indexvektor der von Null verschiedenen Matrixelemente. >> a = [ ];

60 60 2 MATLAB-Grundlagen >> find(a) ans = Ein Aufruf mit zwei Ausgabeargumenten liefert die jeweiligen Zeilen- und Spaltenindizes. >> [z,s] = find(a) z = s = Bei Matrizen wird spaltenweise durchnumeriert, um den Indexvektor bei einem Ausgabeargument zu bestimmen. >> A = [1 0 2 ; 0 0 3] A = >> find(a) ans = >> [z,s] = find(a) z = s = Ein drittes Rückgabeargument liefert die entsprechenden Werte. >> [z,s,werte] = find(a) z = s = 1

61 2.11 Logische Operatoren und logische Funktionen Werte = Weitere Informationen im helpdesk-hilfesystem unter: Operatoren und spezielle Zeichen (Operators and Special Characters) 2.11 Logische Operatoren und logische Funktionen Logische Operatoren existieren im Prinzip in allen allgemein verwendbaren Programmiersprachen. Sie dienen dazu, Wahrheitswerte miteinander zu verknüpfen. In den meisten Sprachen haben sie Namen wie AND, OR und NOT und sind damit Schlüsselwörter für den Compiler. In MATLAB wie auch in C/C++ ist dies nicht der Fall; die logischen Operatoren sind hier aus Sonderzeichen aufgebaut. Logische Operatoren Werden Matrizen mit logischen Operatoren verknüpft, so geschieht dies komponentenweise. Die Tabelle 2.22 zeigt die logischen Operatoren. Verknüpft man zwei Matrizen mit einem logischen UND, so ist die entsprechende Ergebniskomponente 1, wenn die beiden Komponenten von Null verschieden sind. >> x = [ ]; >> y = [ ]; >> x & y ans = Beim logischen ODER ist das Ergebnis 1 (WAHR), wenn eine Komponente von Null verschieden ist. >> x = [ ]; >> y = [ ]; >> x y ans = Beim logischen NICHT wird 1 (WAHR) zurückgegeben, wenn die Komponente 0 war und 0 (FALSCH), wenn die Komponente von Null verschieden war.

62 62 2 MATLAB-Grundlagen >> x = [ ]; >> ~x ans = Logische Operatoren Beschreibung & logisches UND logisches ODER logisches NICHT Tabelle 2.22: Logische Operatoren Logische Funktionen Verknüpft man zwei Matrizen mit einem exklusiven ODER, so ist die entsprechende Ergebniskomponente 1 (WAHR), wenn eine der beiden Komponenten von Null verschieden ist. Andererseits ist die Ergebniskomponente 0 (FALSCH), wenn beide Komponenten 0 oder beide ungleich 0 sind. >> x = [ ]; >> y = [ ]; >> xor(x,y) ans = Darüber hinaus gibt es zusätzliche Funktionen, die die Existenz spezieller Werte oder Bedingungen testen und ein logisches Resultat zurückgeben. Die logische Funktion isieee testet Ihren Computer, ob er den IEEE-Standard erfüllt. >> isieee ans = 1 Mein Rechner unterstützt diesen Standard und deswegen wird 1 (WAHR) zurückgegeben. Andere Funktionen finden Sie in der Tabelle 2.23 und natürlich in den Online-Hilfen, siehe zum Beispiel doc isieee Bemerkungen zum Wort ODER: Der Leser beachte, daß ODER umgangssprachlich in zwei verschiedenen Bedeutungen auftritt: 1. Als ausschließendes, exklusives ENTWEDER ODER. Beispiel: In einer zweiwertigen Logik ist jede Aussage ENTWEDER wahr ODER falsch. 2. Als einschließendes, inklusives UND ODER. Beispiel: In der Bibliothek kann man Zeitschriften ODER Bücher ausleihen.

63 2.12 Steuerstrukturen 63 Logische Funktionen iscell ischar isempty isieee xor Beschreibung WAHR, falls Argument cell-feld WAHR, falls Argument char-feld WAHR, falls Argument leeres Feld WAHR bei Rechnern mit IEEE-Standard Exklusives ODER Tabelle 2.23: Logische Funktionen Weitere Informationen im helpdesk-hilfesystem unter: Logische Funktionen (Logical Functions) 2.12 Steuerstrukturen Programmiersprachen und programmierbare Taschenrechner erlauben es, den Ablauf eines Programms zu steuern. Man spricht von Steuerstruktur 18. MATLAB bietet vier Möglichkeiten, den sequentiellen Ablauf durch Verzweigungen (konditionale Ablaufstrukturen, bedingte Anweisungen, Auswahlanweisungen) und Schleifen (iterative Ablaufstrukturen, iterative Anweisungen, Wiederholungsanweisungen) zu ändern. Dies sind: In der Logik und Mathematik wird das Wort ODER immer als einschließendes ODER gebraucht. Zur Vermeidung von Mißverständnissen ist es zweckmäßig, sowohl in der Umgangssprache als auch in der wissenschaftlichen Sprache das bloße Wort ODER im einschließenden Sinne zu verwenden und es für den ausschließenden Fall durch ENTWEDER ODER zu ersetzen. 18 Auch Kontrollstruktur oder Ablaufsteuerung genannt.

64 64 2 MATLAB-Grundlagen for-schleifen while-schleifen Verzweigungen mit if Verzweigungen mit switch Haben Sie bereits mit anderen Programmiersprachen gearbeitet, so werden Sie die Ähnlichkeiten erkennen. Schleifen werden gebildet, um eine Gruppe von Anweisungen mehrfach auszuführen. Verzweigungen werden geschrieben, um Fallunterscheidungen durchzuführen, das heißt, eine Gruppe von Anweisungen soll nur unter gewissen Bedingungen ausgeführt werden. In aller Regel programmiert man diese Steuerstrukturen in m-files und weniger im interaktiven Promptmodus. For-Schleife oder Wiederholung mit Zähler For-Schleifen werden benutzt, wenn eine Gruppe von Anweisungen so oft ausgeführt werden soll, wie eine vorgegebene Anzahl festlegt. Die Syntax einer for-schleife lautet: for <x> = <Matrix> <Anweisung(en)> end x muß eine Variable sein. x ist in jedem Schleifendurchlauf ein Skalar oder ein Spaltenvektor. Die Anweisung(en) zwischen for und end werden so oft ausgeführt, wie die Matrix <Matrix> Spalten hat. Nach jeder Iteration wird x gleich der nächsten Spalte der Matrix gesetzt. Mit anderen Worten: Es ist x = Matrix(:,n) im n-ten Durchlauf. x ist in jedem Schleifendurchlauf entweder ein Spaltenvektor oder ein Skalar. Die folgende for-schleife erzeugt einen Zeilenvektor x, dessen Komponenten die 11 Zahlen 0,0.1, im Intervall [0,1] sind. Zunächst wird der Variablen k der Wert 1 zugewiesen. Danach wird die Anweisung zwischen for und end einmal ausgeführt. Dann wird der Variablen k der Wert 2 zugewiesen und die Anweisung wird so lange durchlaufen, bis k den Wert 11 erreicht hat. Dann endet die for-schleife und mögliche Anweisungen nach end werden ausgeführt Das Schlüsselwort end hat in MATLAB zwei Bedeutungen. Zum einen beendet es Kontrollstrukuren und zum anderen gibt es den letzten Index einer Matrix (Vektor) an. A(1:end,2) stellt die zweite Spalte der Matrix A dar.

65 2.12 Steuerstrukturen 65 >> for k = 1:11 x(k) = (k-1)*(1/10); end Anstelle des Vektors 1:11 kann auch eine Matrix stehen. Im folgenden Beispiel wird der Variablen k der erste Spaltenvektor (1,5) T der Matrix A zugewiesen und dann die Schleife einmal durchlaufen. Danach erhält die Variable k die Werte des zweiten Spaltenvektors von A, nämlich (3,7) T. Beachten Sie, daß der Feldoperator.ˆ hier unbedingt nötig ist, weil k ein Spaltenvektor ist. >> A = [1 3;5 7]; >> for k=a x = k.^2; end >> x x = 9 49 For-Schleifen können geschachtelt werden. Die folgenden Anweisungen erzeugen die HIL- BERT-Matrix H der Ordnung n = 4. >> n = 4; >> for k=1:n for l=1:n H(k,l) = 1/(k+l-1); end end Eine for-schleife kann nicht dadurch früher terminiert werden, indem man die Schleifenvariable, hier k, neu setzt. Im folgenden Beispiel wird die Schleife 10 mal durchlaufen. Nach Beendigung der Laufanweisung hat k den Wert 2. >> for k = 1:10 k = 2; end MATLAB und Schleifen Will man innerhalb einer Schleife eine Matrix (Vektor) erzeugen, wie wir dies in obigem Beispiel getan haben, so gibt es zwei Gründe dafür, die Matrizen (Vektoren) zuvor mit zeros zu initialisieren.

66 66 2 MATLAB-Grundlagen 1. Durch zeros kann man festlegen, ob man einen Zeilen- oder Spaltenvektor erzeugen möchte bzw. welche Größe die Matrix haben soll. Dadurch wird man gezwungen, explizit über die Orientierung und Größe des Vektors bzw. der Matrix nachzudenken, und vermeidet so Fehler beim Operieren mit diesen. 2. Der Speichermanager hat durch diese Initialisierung weniger Arbeit. Betrachten wir hierzu obige erste for-schleife und wie die Variable x zu einem 11-komponentigen Zeilenvektor wird. Im ersten Schleifendurchlauf ist x ein Vektor der Länge 1 (ein Skalar). Im zweiten Durchlauf weist x(2) den Speichermanager an, x zu einem 2- komponentigen Vektor zu machen. Im dritten Durchlauf wird der Speichermanager durch x(3) angewiesen, x in einen Vektor der Länge 3 umzuformen. Dies setzt sich fort, bis das Ende der for-schleife erreicht ist und x 11 Komponenten hat. Es ist eine Konvention in MATLAB, daß durch diese Konstruktionsweise ein Zeilenvektor entsteht. Es ist daher effizienter, obige erste for-schleife wie folgt zu programmieren: >> x = zeros(1,11); >> for k = 1:11 x(k) = (k-1)*(1/10); end Will man einen Vektor (Matrix) in einer Schleife erzeugen, dann sollte man ihn zuvor initialisieren. Man beachte, daß man mit Hilfe der linspace-funktion ohne for-schleife den Vektor x einfacher erzeugen kann: >> n = 11; >> linspace(0,1,n) ans = Columns 1 through Columns 8 through Die nachfolgenden Anweisungen erzeugen einen Zeilenvektor x mit 11 Komponenten und die dazugehörigen Funktionswerte der Sinusfunktion sin(x) im Zeilenvektor y. >> n = 11; >> x = linspace(0,1,n); >> y = zeros(1,n); >> for i=1:n y(i) = sin(x(i)); end Viele eingebaute MATLAB-Funktionen, so auch die sin-funktion erlauben vektorwertige Argumente, um die Funktionswerte zu berechnen. Deshalb läßt sich obiges Script folgendermaßen vereinfachen:

67 2.12 Steuerstrukturen 67 >> n = 11; >> x = linspace(0,1,n); >> y = sin(x); Das Ersetzen einer Schleife in MATLAB durch eine Vektoroperation nennt man Vektorisierung und hat drei Vorteile: Geschwindigkeit. Viele eingebaute MATLAB-Funktionen werden schneller ausgeführt, wenn man anstelle eines mehrfachen Aufrufs als Argument einen Vektor übergibt. Übersichtlichkeit. Es ist übersichtlicher, ein vektorisiertes MATLAB-Script zu lesen, als das skalare Gegenstück. Ausbildung. Im wissenschaftlichen Rechnen ist man bei verschiedenen Rechnern interessiert, vektorisierte Algorithmen zu entwickeln und zu implementieren. MATLAB unterstützt dies. Schleifen sollten immer dann vermieden werden, wenn das Problem auch vektorisiert gelöst werden kann. While-Schleife oder Wiederholung mit Ausführungsprüfung while <Testausdruck> <Anweisung(en)> end Bei der while-schleife handelt es sich um eine abweisende Schleife, das heißt, der <Testausdruck> wird vor der Ausführung der <Anweisungen> ausgewertet. Ist der <Testausdruck> (für alle Elemente) ungleich 0 (WAHR), so werden alle Anweisungen zwischen while und end ausgeführt. Ist der <Testausdruck> hingegen 0 (FALSCH), so werden die Anweisungen nicht abgearbeitet, sondern es wird im Programm mit dem ersten Befehl nach dem Ende der Schleife fortgefahren. Gewöhnlich ergibt die Ausführung des Testausdrucks ein Skalar, aber auch Matrizen sind zulässig. Im Fall einer Matrix müssen alle Elemente der resultierenden Matrix ungleich 0 sein. Das folgende Script berechnet in der Variablen sum die Summe der ersten 100 natürlichen Zahlen. >> sum = 0; >> i = 0; >> while i<=100 sum = sum + i; i = i + 1; end

68 68 2 MATLAB-Grundlagen Das folgende Beispiel berechnet die Maschinengenauigkeit und die Anzahl der Mantissenstellen bezüglich des Dualsystems. >> p = 0; >> x = 1; >> while (1+x>1) x = x/2; p = p + 1; end >> EPS = 2*x EPS = e-16 >> p = p-1 p = 52 Im folgenden wird die Schleife nicht ausgeführt, weil A eine leere Matrix ist. >> A = []; >> while A end Eine Endlosschleife. >> while 0.1 end Eine while-schleife kann jederzeit mit der break-anweisung abgebrochen werden. If-Anweisung Die Anweisung if wertet einen logischen Ausdruck aus und läßt eine Gruppe von Anweisungen ausführen, wenn der Ausdruck WAHR ist. Einseitige Auswahl if <Testausdruck> <Anweisung(en)> end Ist der <Testausdruck> (für alle Elemente) ungleich 0 (WAHR), so werden alle Anweisungen zwischen if und end ausgeführt. Ist der <Testausdruck> hingegen 0 (FALSCH), so werden die Anweisungen nicht abgearbeitet, sondern es wird im Programm mit dem ersten Befehl nach der end-anweisung fortgefahren. Im folgenden Beispiel wird die Anweisung disp( a ist gerade ) nur dann ausgeführt, wenn a durch 2 teilbar ist.

69 2.12 Steuerstrukturen 69 >> if ( rem(a,2) == 0 ) disp( a ist gerade ) end Ist der <Testausdruck> eine leere Matrix [], so gilt der Test als FALSCH. Zweiseitige Auswahl if <Testausdruck> <Anweisung(en)> else <Anweisung(en)> end Mehrseitige Auswahl if <Testausdruck_1> <Anweisung(en)> elseif <Testausdruck_2> <Anweisung(en)>... else <Anweisung(en)> end Bei der elseif-anweisung werden die Testausdrücke nacheinander ausgewertet. Nur die Anweisungen nach dem ersten wahren Ausdruck werden ausgeführt, danach ist die komplette Kette beendet. Ist keiner der Testausdrücke wahr, so werden die Anweisungen nach dem else-teil abgearbeitet, falls er vorhanden ist. Switch-Anweisung Die Anweisung switch läßt Gruppen von Anweisungen entsprechend dem Wert einer Variablen oder eines Ausdrucks ausführen. Die Schlüsselworte case und otherwise begrenzen diese Gruppen. Es wird nur die erste Übereinstimmung ausgeführt. Es muß immer ein end zu jedem switch vorhanden sein. switch <Ausdruck> <Anweisung(en)> case <Konstante_1> <Anweisung(en)> case <Konstante_2> <Anweisung(en)>

70 70 2 MATLAB-Grundlagen... otherwise <Anweisung(en)> end Hat im folgenden Beispiel die Variable x den Wert -1, so wird x ist -1 auf dem Bildschirm ausgegeben. Entsprechendes geschieht bei den anderen Fällen. >> switch x >> case -1 >> disp( x ist -1 ); >> case 0 >> disp( x ist 0 ); >> case 1 >> disp( x ist 1 ); >> otherwise >> disp( x ist ein anderer Wert ); >> end Es wird nur derjenige Anweisungsblock ausgeführt, in dem der Ausdruck gleich der Konstanten ist. Bei einer numerischen Konstanten wird mittels == verglichen, bei einer Zeichenkette mit strcomp(zeichen,ausdruck). Ist zum Beispiel der erste Fall WAHR, so werden die anderen Fälle nicht überprüft und damit auch nicht ausgeführt. Weitere Informationen im helpdesk-hilfesystem unter: Sprachkonstrukte und Debugging (Language Constructs and Debugging) Die break-anweisung Die break-anweisung ist eine Sprunganweisung und dient dazu, aus einer Schleife 20 herauszuspringen. Liegt eine geschachtelte Schleife vor, so springt MATLAB aus dieser in die nächstübergeordnete. Die error-anweisung Die error-anweisung ist ebenfalls eine Sprunganweisung. Sie gibt eine Fehlermeldung, beendet den Programmlauf und gibt die Kontrolle an das Kommandofenster zurück. >> error( Fehler... ) 20 for- oder while-schleife

71 2.13 Wie man effizientere Programme schreiben kann 71 Die warning-anweisung Die warning-anweisung gibt die Warnung Achtung... auf dem Bildschirm aus, setzt das Programm im Gegensatz zur error-anweisung aber fort. >> warning( Achtung... ) Die return-anweisung Die return-anweisung beendet eine Funktion und ist somit ebenfalls eine Sprunganweisung. Schlüsselwörter Beschreibung for end Schleife while end Schleife if else, elseif, end Verzweigung switch case, otherwise, end Verzweigung warning Warnung error Fehler break Abbruch Tabelle 2.24: Steuerstrukturen und weitere Anweisungen Weitere Informationen im helpdesk-hilfesystem unter: Sprachkonstrukte und Debugging (Language Constructs and Debugging) 2.13 Wie man effizientere Programme schreiben kann Wir fassen noch einmal zusammen: Das Ersetzen einer Schleife durch eine Vektoroperation nennt man Vektorisierung und hat drei Vorteile: Geschwindigkeit. Viele eingebaute MATLAB-Funktionen werden schneller ausgeführt, wenn man anstelle eines mehrfachen Aufrufs als Argument einen Vektor übergibt. Übersichtlichkeit. Es ist übersichtlicher, ein vektorisiertes MATLAB-Script zu lesen, als das skalare Gegenstück. Ausbildung. Im wissenschaftlichen Rechnen ist man bei verschiedenen Rechnern interessiert, vektorisierte Algorithmen zu entwickeln und zu implementieren. MATLAB unterstützt dies. MATLAB kann Vektoren und Matrizen schnell verarbeiten und Vektor- und Matrixoperationen schnell ausführen. Dagegen ist MATLAB bei Schleifen nicht effizient. Deshalb gilt: Vermeiden Sie Schleifen in MATLAB, wann immer dies möglich ist.

72 72 2 MATLAB-Grundlagen Tatsächlich kann man in MATLAB häufig auf Schleifen verzichten. Ist x ein Vektor und möchte man von allen Komponenten von x den Sinuswert wissen, so geht das in MATLAB einfach durch sin(x). Man benötigt keinerlei Schleifen. Ist A eine quadratische Matrix und möchte man das HADAMARD-Produkt von A mit sich selbst berechnen, so erfolgt das einfach mit A.ˆ2. Angenommen wir wollen die ersten 100 natürlichen Zahlen aufsummieren (wir verwenden dazu aber nicht die Formel n(n + 1)/2). In C/C++ würde man wie folgt vorgehen: int s = 0; int n; for (n=1;n<101;++n) { s = s+n; } print( %d\n,s); Die analoge Version dieses kleinen Programms in MATLAB wäre: s = 0; for n=1:100 s = s+n; end s Dieser skalare MATLAB-Code kann effizienter und übersichtlicher geschrieben werden: N = 1:100; s = sum(n) Der erste Befehl erzeugt einen Zeilenvektor N = (1,2,...100). Die zweite Anweisung summiert die Komponenten des Vektors N auf. sum ist eine eingebaute MATLAB- Funktion und verträgt Vektoren als Argumente. Viele MATLAB-Funktionen können Vektoren oder Matrizen als Argumente verarbeiten. Dies läßt eine vektorielle Verarbeitung zu. Vektorisieren Sie ihre Rechnungen, wann immer dies möglich ist. Nicht alle Berechnungen sind jedoch vektorisierbar. In diesen Fällen muß man auf Schleifen zurückgreifen. Um diese Berechnungen jedoch schneller auszuführen, sollte man die Ausgabematrizen mit Nullen vorbesetzen 21. Wir erläutern an einem Beispiel, was damit gemeint ist. Angenommen es sei die Matrix ( ) A = gegeben und wir wollen die Eigenwerte der Matrizen A k für k = 1,2,...,10 berechnen. Die Eigenwerte sollen spaltenweise in der Ausgabematrix E gespeichert werden. Das folgende Script realisiert dies: 21 Preallokieren

73 2.14 Wie man die Effizienz von Programmen vergleichen kann 73 E = zeros(2,10); for k=1:10 E(:,k) = eig(a^k); end Mit der Anweisung E = zeros(2,10); haben wir die Ausgabematrix E mit Nullen vorbesetzt. Hätten wir dies nicht getan, so müßte MATLAB in jedem Schleifendurchlauf die Größe der Matrix E durch Hinzunahme einer weiteren Spalte verändern, was sich durch eine längere Ausführungszeit bemerkbar machen würde. Darüber hinaus hat das Vorbesetzen der Ausgabematrizen den Vorteil, daß man sich bereits vorher über die Größe und Orientierung Gedanken machen muß Wie man die Effizienz von Programmen vergleichen kann Um die Effizienz eines Computerprogramms zur Lösung numerischer Probleme zu messen, gibt es zwei Maße: die Anzahl der Gleitpunktoperationen (floating point operations, kurz: flops) und die benötigte Zeit für die Ausführung des Programms. Die MATLAB-Funktion flops zählt die Anzahl der Gleitpunktoperationen. Mit der Anweisung flops(0) wird der Zähler auf Null gesetzt und ein zweiter Aufruf von flops gibt die Anzahl an. Das folgende Beispiel zählt die Anzahl der Gleitpunktoperationen für das Lösen eines linearen Gleichungssystems: flops(0) x = A\b; flops Die Ausführungszeit eines Algorithmus kann mit den Befehlen tic und toc ermittelt werden. tic startet die Uhr und toc gibt die verstrichene Zeit in Sekunden zurück. Das folgende Beispiel ermittelt die Zeit für das Lösen eines linearen Gleichungssystems: tic; x = A\b; toc Weitere Informationen im helpdesk-hilfesystem unter: Grundlegende Matrizen und Matrixmanipulationen (Elementary Matrices and Matrix Manipulation) 2.15 Dateien lesen und schreiben In MATLAB kann man Daten- bzw. Textdateien lesen und schreiben. Hierbei können Sie zwischen binärem MATLAB- und lesbarem ASCII-Format wählen. Binärdateien haben gegenüber ASCII-Dateien die Vorteile, daß sie weniger Speicherplatz benötigen und schneller

74 74 2 MATLAB-Grundlagen gelesen und beschrieben werden können. Ihr Nachteil ist, daß sie nicht leicht mit einem Editor gelesen werden können. Für das Lesen und Schreiben in ASCII-Format gibt es die high-level Befehle load und save und die low-level Funktionen fscanf und fprintf. Für das Lesen und Schreiben im Binärformat stehen wieder die high-level Befehle load und save und die low-level Funktionen fread und fwrite zur Verfügung. Binärdateien werden im sogenannten mat-format abgespeichert. Die low-level Funktionen können flexibler eingesetzt werden. Sie sind an die Programmiersprache C angelehnt. Die Tabelle 2.25 faßt die Funktionen zum Lesen und Schreiben von Dateien zusammen. Funktion ASCII binär load save fscanf fprintf fread fwrite Tabelle 2.25: Dateien lesen und schreiben Weitere Informationen im helpdesk-hilfesystem unter: Allgemeine Kommandos (General Purpose Commands) Low-Level Ein-und Ausgabefunktionen für Dateien (Low-Level File I/O Functions) 2.16 Visualisieren in MATLAB Twenty years ago, we did not interact with computers graphically; now, everything is graphical. In the next twenty years an equally great change will occur as we begin to communicate with machines by speech. LLOYD N. TREFETHEN Was ist wissenschaftliches Visualisieren? Diese Frage kann mit: Darstellung von Daten beantwortet werden. Wozu ist wissenschaftliche Visualisierung nützlich? Hierzu gibt es folgende Gründe: 1. Man erkennt Strukturen und Merkmale in den Daten. 2. Man identifiziert Trends. 3. Man kann komplexe Informationen vergleichen. 4. Man kann Gegenstände untersuchen, die physikalisch nicht untersuchbar sind.

75 2.16 Visualisieren in MATLAB 75 MATLAB verfügt über moderne und mächtige Visualisierungsmöglichkeiten. Dies ist einer der Gründe für den Erfolg von MATLAB. Hierzu werden zahlreiche Funktionen und Kommandos bereitgestellt. Es ist möglich, Punkt-, Linien-, Säulen-, Balken-, Flächen- und Kreisdiagramme zu generieren. Man kann zwei- und dreidimensionale Grafiken, Gitter- und Konturgraphen erzeugen, Grafikobjekte markieren und beschriften, Achsen skalieren, Farben einstellen, Grafiken beleuchten, jedes Grafikobjekt individuell ändern sowie spezielle Diagramme generieren. In dieser Einführung ist es nicht möglich, alle diese Funktionalitäten aufzuzeigen 22. Deshalb wollen wir exemplarisch die Visualisierungsphilosophie von MATLAB aufzeigen und verweisen den Leser schon jetzt auf die folgenden weiterführenden Informationsquellen: Das MATLAB-Graphics-Handbuch Dieses Handbuch wird zu jeder MATLAB-Installation mitgeliefert und kann außerdem als PDF-File von der MATLAB-CD kopiert werden. Im Handbuch zur Studentenversion sind auch Beispiele beschrieben. Die MATLAB-Hilfesysteme Die Befehle help graph2d, help graph3d und help specgraph zeigen zur Verfügung stehende Kommandos und Funktionen. Klicken Sie nach dem helpdesk-aufruf auf die entsprechende Hypertextseite. Diese Hilfe ist deshalb komfortabel, weil Beispielgrafiken eingebunden sind. Hierzu muß auf Ihrem Rechner ein WEB-Browser installiert sein. Die Funktionsübersicht im Anhang dieses Buches Grafik im R 2 mit plot Die plot-funktion ist eine der grundlegenden Grafikfunktionen in MATLAB. Sind x und y zwei Vektoren der gleichen Länge, so öffnet der Befehl plot(x,y) ein Grafikfenster, zeichnet die Elemente von x gegen die Elemente von y und verbindet die Punkte x(i),y(i) durch Linien 23. Der erste Vektor x bildet die Koordinaten entlang der x-achse und der zweite Vektor y die Koordinaten entlang der y-achse. Wir beschreiben zwei Situationen, in denen der plot-befehl eingesetzt wird: 1. Es liegen Daten (zum Beispiel aus Meßwerten) vor, die visualisiert werden sollen. 2. Es sollen Graphen von explizit bekannten Funktionen gezeichnet werden. Das Visualisieren von Daten ist typisch im praktischen Einsatz von MATLAB, während das Zeichnen von explizit bekannten Funktionen sehr von Nutzen in der Lehre ist. Ein einfaches Beispiel soll die erste Situation erläutern. Hierzu nehmen wir an, daß die Messung des zeitlichen Verlaufs der Abkühlung einer Flüssigkeit die Werte aus der Tabelle 2.26 ergab. Wir wollen dieses Meßergebnis nun grafisch darstellen. Hierzu speichern wir 22 Dies wäre ein eigenes Buch. 23 Es entsteht ein Polygonzug.

76 76 2 MATLAB-Grundlagen Zeitpunkt in min Temperatur in 0 C Tabelle 2.26: Abkühlung einer Flüssigkeit die Zeitpunkte im Vektor x und die Temperaturwerte in y, also >> x=[ ]; >> y=[ ]; Der Befehl >> plot(x,y) erzeugt ein Grafikfenster und zeichnet die Elemente von x gegen die Elemente von y und verbindet diese Punkte geradlinig. Die Abbildung 2.5 zeigt das Ergebnis. Im allgemeinen schließt sich nun eine Grafikdokumentation an. MATLAB stellt auch hierfür mehrere Funktionen zur Verfügung. Die Tabelle 2.30 listet einige davon auf. Weitere Funktionen findet man in den Online-Hilfen. Ab der MATLAB-Version 5.3 können mehrere dieser Funktionen auch interaktiv benutzt werden. Sie können zum Beispiel auf die title-funktion verzichten und der Grafik einen Titel geben, nachdem Sie das Grafikfenster erzeugt haben. Will man nur die Meßwerte zeichnen, so kann man dies mit plot(x,y, o ) tun. Die Punkte werden durch Kreise dargestellt und auf eine geradlinige Verbindung wird verzichtet. Die Tabelle 2.27 zeigt weitere Markierungsmöglichkeiten für Punkte. Eine vollständige Übersicht erhält man unter doc linespec. Wir wollen nun den Graph der explizit gegebenen Funktion f(x) = sin(x) auf dem Intervall [0,2π] zeichnen. Dazu müssen drei Dinge getan werden: 1. Einen Vektor x erzeugen, der das Intervall [0, 2π] diskretisiert: 0 = x 1 < x 2 < < x n = 2π

77 2.16 Visualisieren in MATLAB Abbildung 2.5: Abkühlung einer Flüssigkeit Symbol Bedeutung o x + + * square diamond Tabelle 2.27: Markierungen von Punkten

78 78 2 MATLAB-Grundlagen 2. Die Funktion muß an jedem Diskretisierungspunkt ausgewertet werden: y k = f(x k ) k = 1 : n 3. Ein Polygonzug muß gezeichnet werden, der die Punkte (x 1 y 1 ),...,(x n y n ) verbindet. Das folgende Script zeigt die Realisierung: >> n = 20; >> x = linspace(0,2*pi,n); >> y = sin(x); >> plot(x,y) Hierzu haben wir das Intervall [0, 2π] in 20 äquidistante Punkte eingeteilt und die Werte dem Vektor x zugeordnet. Die Sinusfunktion ist eine eingebaute MATLAB-Funktion, die Vektoren als Argumente verarbeiten kann. Dadurch wird der Vektor y erzeugt. Die Glattheit des Funktionsgraphen richtet sich nach der Anzahl der Diskretisierungspunkte. Deshalb wird der Sinusgraph um so glatter, je größer wir n wählen. Der Script-File 2.2 illustriert dies. 1 % % Script-File: Sinusplot 3 % 4 % Zeigt wie die Glattheit eines Graphen von der Anzahl 5 % der Diskretisierungspunkte (Stützstellen) abhängt. 6 % for n = [8, ]; 8 x = linspace(-2*pi,2*pi,n); 9 y = sin(x); 10 plot(x,y); 11 xlabel( x ); ylabel( sin(x) ); 12 title(sprintf( Plot basiert auf n =%3.0f Punkten,n)) 13 pause; 14 end Script-File 2.2: Sinusfunktion mit zunehmender Anzahl von Diskretisierungpunkten Man kann mit plot auch mehrere Linien in ein Bild zeichnen. Das folgende Script zeichnet die Graphen der Funktionen im Intervall [0,2π] in eine Figur. x sin(x) x sin(x 0.25) x sin(x 0.5)

79 2.16 Visualisieren in MATLAB 79 Symbol Bedeutung - Linie (Default) -- gestrichelte Linie : punktierte Linie Tabelle 2.28: Gestaltungsvarianten für Linien Symbol r g b k Bedeutung rot grün blau (Default) schwarz >> x = linspace(0,2*pi); >> y1 = sin(x); >> y2 = sin(x-0.25); >> y3 = sin(x-0.5); >> plot(x,y1,x,y2,x,y3) Tabelle 2.29: Farben Die Abbildung 2.6 zeigt das Ergebnis. Um die Kurven zu unterscheiden, wählt MATLAB Abbildung 2.6: Drei Sinusfunktionen in einer Figur unterschiedliche Farben. Statt Farben könnte man auch unterschiedliche Linienarten aus Tabelle 2.28 verwenden. Die folgende Anweisung ist ein Beispiel: plot(x,y1, -,x,y2, --,x,y3, : )

80 80 2 MATLAB-Grundlagen Die plot-funktion erlaubt auch Matrixargumente. Für weitere Einzelheiten verweisen wir auf die Online-Hilfen. Mehrere Grafikfenster (Figuren) öffnen Grafikfunktionen wie zum Beispiel plot öffnen automatisch ein Grafikfenster, wenn noch keines vorhanden ist. Existiert schon eines, dann wird dieses benutzt, um weitere abzusetzende Kommandos aufzunehmen. Ist zum Beispiel Figur 1 das gegenwärtige Grafikfenster, dann wird mit dem Kommando figure(2) oder einfach figure ein zweites Grafikfenster geöffnet, welches dann auch das aktuelle ist. Mit dem Aufruf figure(1) wird wieder Figur 1 zum aktuellen Fenster. Mit dem Kommando gcf erhält man die Nummer des gegenwärtigen Grafikfensters. Grafiken einfrieren Mit dem Befehl hold lassen sich weitere Plots in bestehende Grafiken einfügen. Nach der Eingabe hold on löscht MATLAB die bestehende Grafik nicht, sondern ergänzt sie um die neuen Daten und skaliert bei Bedarf neu. Mehrere Diagramme in ein Fenster zeichnen Mit der Funktion subplot ist es möglich, ein Grafikfenster in mehrere Figuren zu unterteilen. Beispiele hierzu folgen. Überschriften, Achsenbeschriftung und Text Grafiken können eine Überschrift erhalten, Achsen können beschriftet werden und ein beliebiger Text kann irgendwo in der Grafik angebracht werden. Die Funktionen in der Tabelle 2.30 können hierfür eingesetzt, wobei jeweils eine Zeichenkette als Argument verwendet wird. Funktion grid text gtext title xlabel ylabel Bedeutung Erzeugt ein Gitter Positioniert Text an spezifizierten Koordinaten Plaziert Text mit der Maus (2D) Erzeugt eine Überschrift Beschriftung x-achse Beschriftung y-achse Tabelle 2.30: Bezeichnungen und Gitter

81 2.16 Visualisieren in MATLAB 81 Zum Beispiel gibt das Kommando title( Die beste Ausgleichsparabel ) einer Grafik diese Überschrift. Punkte im R 2 mit plot Will man Punkte im R 2 zeichnen, so geht das mit dem Befehl plot. Der Funktionsaufruf plot([1 2],[3 4], o, MarkerSize,5) zeichnet die beiden Punkte (1 3) und (2 4) als Kreise. Grafikfunktionen besitzen eine Vielzahl von zusätzlichen Optionen. Funktionsgraphen im R 2 mit ezplot Mit der ezplot-funktion kann man auch Graphen von Funktionen zeichnen. Der Script- File SinusundKosinus.m zeigt im ersten Teil, wie man die Sinus- und Kosinusfunktion im Intervall [ 2π, 2π] in ein Koordinatensystem zeichnet. Danach werden die beiden Funktionen in zwei untereinanderliegende Koordinatensysteme innerhalb eines Grafikfensters gezeichnet. 1 % % Script-File: SinusundKosinus 3 % 4 % Zeichnet Sinus und Kosinus. 5 % ezplot( sin(x),[-2*pi,2*pi]); 7 hold on; 8 ezplot( cos(x),[-2*pi,2*pi]); 9 title( Sinus und Kosinus ) 10 hold off; pause; 11 subplot(2,1,1); 12 ezplot( sin(x),[-2*pi,2*pi]); 13 subplot(2,1,2); 14 ezplot( cos(x),[-2*pi,2*pi]); Script-File 2.3: Zeichnet Sinus- und Kosinusfunktion in ein Koordinatensystem Der Script-File ElFunktionen.m, der sich auf der beiliegenden CD befindet, zeichnet mehrere elementare Funktionen. Die darin vorkommende pause-funktion trennt die Graphen voneinander.

82 82 2 MATLAB-Grundlagen Grafische Darstellung implizit definierter Kurven im R 2 mit ezplot Die Funktion ezplot erlaubt auch das Zeichnen von Kurven im R 2, die implizit definiert sind. Der Script-File ImpliziteK.m zeichnet im Bereich 15 x 15, 15 y 15 die folgenden Kurven: Die Ellipse x 2 /225 + y 2 /81 = 1. Die Hyperbel x 2 /4 + y 2 /25 = 1. Die Kurve x 4 + y 4 = Die elliptische Kurve y 2 = 1/9x 3 6x 10. Die Lemniskate (x 2 + y 2 ) 2 = 196(x 2 y 2 ). Die Kurve x + y = % % Script-File: ImpliziteK 3 % 4 % Zeichnet implizit definierte Kurven. 5 % subplot(2,3,1); 7 ezplot( x^2/15^2+y^2/9^2=1,[-15,15]) 8 hold on; plot([-12,12],[0,0], ro ); hold off; 9 grid; pause; 10 subplot(2,3,2); 11 ezplot( -x^2/4+y^2/25=1,[-15,15]) 12 grid; pause; 13 subplot(2,3,3); 14 ezplot( x^4+y^4=14^4,[-15,15]) 15 grid; pause; 16 subplot(2,3,4); 17 ezplot( y^2=x^3/9-6*x-10,[-15,15]) 18 grid; pause; 19 subplot(2,3,5); 20 ezplot( (x^2+y^2)^2=14^2*(x^2-y^2),[-15,15]) 21 grid; pause; 22 subplot(2,3,6); 23 ezplot( abs(x)+abs(y)=14,[-15,15]); grid; Script-File 2.4: Implizit definierte Funktionen

83 2.16 Visualisieren in MATLAB 83 Parametrisierte Kurven im R 2 mit ezplot Mit Hilfe der Funktion ezplot lassen sich parametrisierte Kurven im R 2 zeichnen. Als Beispiel betrachten wir eine Zykloide. Eine Zykloide wird beschrieben durch die Kurve f : [0,4π] R 2 t (t sin(t),1 cos(t)). Der folgende Befehl zeichnet eine Zykloide im Intervall [0, 4π]: >> ezplot( t-sin(t), 1-cos(t),[0,4*pi]) Die Abbildung 2.7 zeigt die Ausgabe. x = t sin(t), y = 1 cos(t) y x Abbildung 2.7: Zykloide Kurven in Polarkoordinaten mit ezpolar Die Funktion ezpolar zeichnet Kurven im R 2, deren Bestimmungsgleichungen in Polarkoordinaten gegeben sind. Die Herzkurve (Kardioide) wird durch die Gleichung r = 1 + cos(φ) beschrieben, deswegen genügt der Aufruf >> ezpolar( 1+cos(phi) )

84 84 2 MATLAB-Grundlagen Spezielle Plots MATLAB verfügt über weitere ebene Plotfunktionen. Hier sind einige, deren Bedeutung Sie mit den Online-Hilfen herausfinden können: polar, bar, hist, quiver, compass, feather, rose, stairs, fill. Kreisdiagramme können mit der Funktion pie erzeugt werden. Die Anweisungen >> subplot(2,2,1) >> pie([ ]) >> subplot(2,2,2) >> pie([ ]) >> subplot(2,2,3) >> pie([ ]) >> subplot(2,2,4) >> pie([1 2]) erzeugen die Kreisdiagramme von Abbildung 2.8. Entsprechend der Komponenten des Vektors wird der Kreis unterteilt. Ist die Summe größer als 1, so werden die Werte normalisiert (siehe Kreisdiagramm links unten). Ist dagegen die Summe kleiner als 1, so wird der Kreis nicht ausgefüllt. 20% 25% 20% 10% 10% 45% 45% 13% 33% 29% 58% 67% Abbildung 2.8: Kreisdiagramm

85 2.16 Visualisieren in MATLAB 85 3D-Grafik Um den Graph einer Funktion einer Variablen mit der Funktion plot zu zeichnen, muß man zwei Vektoren x und y erzeugen. x beinhaltet diskrete Werte der unabhängigen Variablen und y der abhängigen Variablen. >> x = linspace(0,5); >> y = sin(x.^2)-2*cos(x); Der Aufruf plot(x,y) zeichnet den Graph im Intervall [0,5]. Damit man die Funktionswerte einer Funktion f(x, y) zweier unabhängiger Variablen auswerten kann, muß man ein zweidimensionales Gitter in der xy-ebene erzeugen. Dann kann man die Funktion in diesen Gitterpunkten berechnen. Somit hat man Punkte auf der Fläche der Funktion bestimmt und man kann den Graph der Funktion zeichnen. Ein zweidimensionales Gitter in der xy-ebene wird in MATLAB durch zwei Matrizen definiert. Eine Matrix beinhaltet die x-koordinate und die andere die y-koordinate aller Gitterpunkte. Durch die beiden Matrizen und Y = X = wird ein Gitter mit zwanzig Punkten bestimmt, das den Bereich [ 2, 2] [ 1, 2] diskretisiert. Das Erzeugen dieser Matrizen kann mit der meshgrid-funktion automatisiert werden. Hierzu muß man die Vektoren x und y der Funktion als Argumente übergeben. Die obigen Matrizen X und Y werden durch >> x = -2:2; >> y = -1:2; >> [X,Y] = meshgrid(x,y); erzeugt. Nun können die dazugehörigen Funktionswerte berechnet werden. Wollen wir etwa die Funktionswerte von 1 f(x,y) = 1 + x 2 + y 2 auf obigem Gitter bestimmen, so geht das in einer Zeile:

86 86 2 MATLAB-Grundlagen >> Z = 1./( 1+X.^2+Y.^2 ); In der Matrix Z stehen so die Funktionswerte der entsprechenden Gitterpunkte. Beachten Sie, daß die arithmetischen Operationen elementweise ausgeführt werden müssen, das heißt, die Punkte bei einigen Operationen dürfen nicht weggelassen werden. Ein häufiger Fehler ist zudem, daß man die Vektoren x und y statt der Matrizen X und Y verwendet. Wahrscheinlich haben Sie auch bemerkt, daß man auf eine Schleifenprogrammierung verzichten kann. Hier kommt die Vektorisierungsstrategie von MATLAB zum Tragen. In MATLAB stehen nun mehrere Funktionen zur Verfügung, um den Graph von f zu zeichnen. Wir geben zwei Möglichkeiten an: mesh surf Erzeugt eine 3D-Darstellung (offenes Gitter) der Fläche. Erzeugt eine 3D-Darstellung (schattiertes Gitter) der Fläche. Die Abbildung 2.9 zeigt den Graph der Funktion der durch folgendes Script entsteht: f(x,y) = x 2 + y 2 >> n = 50; % 50 Diskretisierungspunkte >> x = linspace(-2,2,n); % x-intervall [-2,2] >> y = linspace(-1,2,n); % y-intervall [-1,2] >> [X,Y] = meshgrid(x,y); >> Z = 1./( 1+X.^2+Y.^2 ); >> mesh(x,y,z) Funktionsgraphen im R 3 >> ezmesh( x*exp(-x^2-y^2) ) zeichnet die Fläche der Funktion f(x,y) = xe x2 y 2 im Quadrat 2π x 2π, 2π y 2π. Die Fläche wird als Netz dargestellt. >> ezsurf( 2+x^2+y^2 ) zeichnet den Graph eines Paraboloids als schattiertes Netz. >> ezmeshc( 2+x^2-y^2 ) zeichnet eine Sattelfläche mit Höhenlinien Höhenlinien kann man mit der Funktion contour erzeugen.

87 2.16 Visualisieren in MATLAB Abbildung 2.9: Graph der Funktion 1 1+x 2 +y 2 mit mesh Parametrisierte Kurven im R 3 mit ezplot3 Kurven im R 3, die durch einen Parameter t beschrieben sind, lassen sich mit ezplot3 zeichnen. Als Beispiel betrachten wir folgende spiralenförmige Kurve: Die Anweisung f : [0,20] R 3 t (exp( 0.2t) cos(t), exp( 0.2t) sin(t), t). >> ezplot3( exp(-0.2*t)*cos(t), exp(-0.2*t)*sin(t),... t,[0,20]) zeichnet diese Kurve im Raum R 3. Parametrisierte Flächen im R 3 mit ezplot Mit ezmesh, ezsurf können parametrische Flächen im R 3 dargestellt werden. Ein Torus entsteht, wenn ein Kreis um eine Achse rotiert, die in der Ebene des Kreises, aber außerhalb des Kreises verläuft. Eine Parameterdarstellung eines Torus ist: x = (a + bcos θ)cos φ y = (a + bcos θ)sin φ z = bsin θ

88 88 2 MATLAB-Grundlagen Der folgende Script zeichnet einen Torus für a = 10 und b = 4: >> ezplot( (10+4*cos(theta))*cos(phi),... (10+4*cos(theta))*sin(phi),... 4*sin(theta) ) Punkte im R 3 mit plot Der Befehl >> plot(1,2,3, LineWidth,5) zeichnet einen Punkt im R 3 mit den Koordinaten x = 1, y = 2 und z = 3. Ausdrucken und speichern von Grafiken Grafiken können in mehreren Formaten in einer Datei abgespeichert werden. Dies geht mit dem Befehl print oder aus dem Figure-Menü heraus. Die folgende Anweisung speichert das aktuelle Diagramm als ENCAPSULATED POSTSCRIPT-Datei mit dem Namen beispiel.eps in das aktuelle Verzeichnis. print -deps beispiel.eps Bilder Zweidimensionale Felder können als Bilder dargestellt werden, wobei die Elemente der Felder die Helligkeit oder die Farbe der betreffenden Bildpunkte bezeichnen. Mit dem Befehl load gatlin2 werden die Daten der Datei gatlin2.mat geladen. Der Befehl whos zeigt, daß zwei Matrizen X und map der Größe bzw erstellt worden sind. Die Befehle image(x) colormap(map) axis image erzeugen die Abbildung 2.10 eine Schwarzweißfotografie dreier Pioniere der numerischen Mathematik. Von links nach rechts sind das die Wissenschaftler JAMES WILKINSON, WAL- LACE GIVENS und GEORGE FORSYTHE. Weitere Hinweise Um einem existierenden Graph durch einen neuen Grafikbefehl einen zusätzlichen Graph hinzuzufügen, wird das Bild durch die Anweisung hold on eingefroren. Mit hold off wird zum normalen Betrieb zurückgeschaltet. Werden die Intervallgrenzen einer Darstellung nicht explizit angegeben, so bestimmt MATLAB diese automatisch. Um sie zu ändern, können Sie die Funktion axis benutzen.

89 2.16 Visualisieren in MATLAB Abbildung 2.10: Fotografie dreier Pioniere der numerischen Mathematik Name loglog semilogx semilogy polar hist bar stem Beschreibung Logarithmisches Koordinatensystem x-achse logarithmisch y-achse logarithmisch polare Darstellung Darstellung als Histogramm Darstellung als Balkendiagramm Punkte mit Linien Tabelle 2.31: Weitere Grafikfunktionen

90 90 2 MATLAB-Grundlagen Handle Graphics Das Grafiksystem von MATLAB stellt sogenannte Low-Level-Funktionen zur Verfügung, mit denen alle Aspekte des Grafiksystems kontrolliert werden können. Damit besteht die Möglichkeit, detaillierte Grafiken zu generieren. Die Kommandos set und get erlauben, jedes Grafikobjekt anzusprechen. Mit help graphics erhalten Sie eine komplette Übersicht über alle zur Verfügung stehenden Kommandos und Funktionen. Weitere Informationen im helpdesk-hilfesystem unter: Grafik und Datenvisualisierung (Plotting and Data Visualization) Graphical User Interface (GUI) Das MATLAB-Grafiksystem verfügt außer der Handle-Graphics über eine weitere objektorientierte Grafikkapazität: Graphical User Interface (GUI). Damit hat man die Möglichkeit, Sliders, Buttons, Menüs und andere Grafikobjekte zu erzeugen, um so interaktive Benutzerschnittstellen zu generieren. Hierzu steht eine GUI-Entwicklungsumgebung zur Verfügung, siehe guide. Für weitere Einzelheiten verweisen wir auf das MATLAB-Handbuch Building GUIs mit MATLAB sowie auf das Kommando help uicontrol. Weitere Informationen im helpdesk-hilfesystem unter: Grafische Schnittstellen (Graphical User Interface Creation) Animation Um Animationen herzustellen und durchzuführen, siehe zum Beispiel doc movie. Interaktiver Grafikeditor Seit der Version 5.3 existiert in MATLAB ein interaktiver Grafikeditor. Dieser erlaubt, Grafiken interaktiv zu beschriften, Achsen zu skalieren und zu beschriften, Überschriften zu vergeben, Grafiken zu drehen und vieles mehr. Außerdem läßt sich jede Figur in der Größe verändern ( zoomen ). Weitere Informationen im helpdesk-hilfesystem unter: Grafik und Datenvisualisierung (Plotting and Data Visualization) Fenster (Windows) Bei der Arbeit mit MATLAB verwendet man im allgemeinen drei Arten von Fenstern (Windows). 1. Das Kommandofenster. Dieses Fenster wird von MATLAB beim Start als erstes geöffnet. Hierin erwartet MATLAB Ihre Eingabe.

91 2.17 Dünn besetzte Matrizen Das Grafikfenster oder auch mehrere. Ein Grafikfenster wird automatisch geöffnet, wenn Sie einen Zeichenbefehl, zum Beispiel mit der Funktion plot oder mesh, absetzen. Mit der Funktion close kann man ein Fenster schließen. 3. Ein Fenster zum Editieren. Zum Editieren von MATLAB-Programmen benötigt man einen Editor, der Ihre Anweisungen aufnehmen kann. Bei WINDOWS-Systemen ist ein MATLAB-Editor integriert Dünn besetzte Matrizen Rechnet man mit einer Matrix, so geht MATLAB davon aus, daß diese dicht besetzt ist, das heißt, nur wenige Matrixelemente sind Null. Sind in einer Matrix jedoch viele Elemente Null zum Beispiel 95% oder mehr so spricht man von einer Sparsematrix oder einer dünn besetzten Matrix. Liegt solch eine Sparsematrix vor und möchte man Matrixoperationen mit dieser durchführen, so kann man meistens Gleitpunktoperationen auf den Nullelementen einsparen. Darüber hinaus muß man nicht die ganze Matrix abspeichern, sondern es genügt, nur die von Null verschiedenen Elemente abzulegen. Trägt man diesen Sachverhalten Rechnung, so läßt sich die Effizienz von Algorithmen in bezug auf Speicher- und Zeitaufwand reduzieren. Damit ist es möglich, größere Probleme zu lösen, die sonst nicht lösbar wären. MATLAB kann die dünne Besetztheit einer Matrix ausnutzen. MATLAB verfügt über zwei Speichermodi: full und sparse, wobei full standardmäßig eingestellt ist. Die Funktionen full und sparse erlauben es, zwischen beiden Modi hin und her zu schalten. Im Sparsemodus werden die von Null verschiedenen Matrixelemente als eindimensionales (lineares) Feld mit ihren Zeilen- und Spaltenindizes abgespeichert. Die Anweisung» F = -triu(tril(ones(6),1),-1)+3*eye(6) erzeugt die 6 6-Matrix F = Mit» S = sparse(f) wird F im Sparsemodus abgespeichert: S = (1,1) 2

92 92 2 MATLAB-Grundlagen (2,1) -1 (1,2) -1 (2,2) 2 (3,2) -1 (2,3) -1 (3,3) 2 (4,3) -1 (3,4) -1 (4,4) 2 (5,4) -1 (4,5) -1 (5,5) 2 (6,5) -1 (5,6) -1 (6,6) 2 Die von Null verschiedenen Elemente werden zusammen mit ihren Indizes spaltenweise angeordnet. Mit» F = full(s) läßt sich dies rückgängig machen. Der Funktionsaufruf nnz(f) zeigt Ihnen die Anzahl der von Null verschiedenen Elemente der Matrix F. Sparsematrizen erzeugen Sparsematrizen können auch direkt erzeugt werden. Mit Hilfe der Funktion spdiags läßt sich zum Beispiel eine dünn besetzte Bandmatrix erzeugen. Obige Bandmatrix F kann somit direkt wie folgt erstellt werden: >> m = 6; n = 6; e = ones(n,1); d = 2*e; >> A = spdiags([-e,d,-e],[-1,0,1],m,n); Der Vektor [-1,0,1] gibt an, in welcher Diagonalen die Spalten von [-e,d,-e] stehen. Führen Sie die Anweisungen aus und sehen Sie sich die volle Matrix mit full(a) an. Alternativ dazu können Sie sich mit spy(a) die Struktur der Matrix A grafisch betrachten. Die zu eye, zeros, ones, rand und randn analogen Sparsefunktionen sind: speye, sparse, spones, sprand, sprandn. Mit Sparsematrizen rechnen Unabhängig vom Speichermodus können Sie die arithmetischen Operationen und viele Funktionen verwenden. Welchen Speichermodus haben dann die Ergebnismatrizen? Operationen mit vollen Matrizen ergeben volle Matrixresultate. Ist S eine Sparsematrix und F eine vollbesetzte Matrix, so ist:

93 2.18 MATLAB-Hilfesysteme und weitere Informationen 93 Sparse: Sparse: Full: S+S, S*S, S.*S, S.*F, S^n, S.^n, S\s inv(s),chol(s), lu(s), diag(s), max(s), sum(s) S+F, S*F, S\F, F\S Ist a ein Skalar, so sind die Ergebnisse von a*s und a\s vom Sparsemodus. Um Eigenwerte oder singuläre Werte einer Sparsematrix S zu berechnen, muß man S in den vollen Speichermodus konvertieren und die Funktionen eig bzw. svd verwenden: eig(full(s)) bzw. svd(full(s)). Will man nur einige Eigenwerte oder singuläre Werte berechnen, so kann man die Funktionen eigs und svds benutzen. Diese akzeptieren Sparsematrizen als Eingabeargument: eigs(s) bzw. svds(s). Bildet man eine Blockmatrix und ist eine Untermatrix eine Sparsematrix, so ist auch die Blockmatrix vom Speichermodus sparse. Der Script-File 2.5 vergleicht das Rechnen in den beiden Speichermodi. Gelöst wird ein tridiagonales lineares Gleichungssystem, zum einen im Sparse- und zum anderen im vollen Speichermodus. Zunächst werden die Matrizen T (sparse), A (voll), die rechten Seiten b, s erzeugt und schließlich die linearen Systeme gelöst. 1 % % Script-File: Sparserechnung. 3 % 4 % Zeitvergleich einer Sparse- und Vollrechnung. 5 % n = 1000; e = ones(n,1); d = 2*e; 7 T = spdiags([-e,d,-e],[-1,0,1],n,n); 8 A = full(t); 9 b = ones(n,1); s = sparse(b); 10 tic ; 11 T\s; 12 Sparsezeit = toc 13 tic ; 14 A\b; 15 Fullzeit = toc Script-File 2.5: Zeitvergleich Weitere Informationen im helpdesk-hilfesystem unter: Funktionen für Sparsematrizen (Sparse Matrix Functions) 2.18 MATLAB-Hilfesysteme und weitere Informationen In diesem Abschnitt beschreiben wir weitere Möglichkeiten, um an Informationen über MATLAB zu kommen. Viele Informationen erhalten Sie über die MATLAB-CD-ROM, für

94 94 2 MATLAB-Grundlagen andere Informationsdienste benötigen Sie einen Internetanschluß. Im folgenden wollen wir einige Informationsdienste vorstellen: Das help-kommando. Ein Hilfesystem Das lookfor-kommando. Suche nach Begriffen Das Helpwin-System. Ein Hilfefenstersystem Das Helpdesk-System. Ein Hilfesystem basierend auf Hypertext Dokumentationen. Elektronische Handbücher WWW-Seite von MathWorks (Internetanschluß) Die MATLAB News & Notes Die MATLAB Digest Die MATLAB Newsgroup (Internetanschluß) tour Tour durch alle MATLAB-Produkte demo MATLAB-Demonstrationen Das help-kommando Das help-kommando ist eine einfache Möglichkeit, Hilfe über eine MATLAB-Funktion im Kommandofenster zu erhalten. Hierzu gibt man help und den Funktionsnamen ein. Das folgende Beispiel zeigt, wie man sich Informationen über die eingebaute MATLAB- Funktion sqrt verschafft. >> help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also SQRTM. Auffallend ist, daß in der Erklärung der Name der sqrt-funktion groß geschrieben ist. Dies dient lediglich dazu, diesen Namen vom übrigen Text abzusetzen. Der richtige Name ist sqrt, klein geschrieben. MATLAB unterscheidet zwischen Groß- und Kleinbuchstaben, deshalb liefert die Eingabe help SQRT eine Fehlermeldung. SQRT.m not found.

95 2.18 MATLAB-Hilfesysteme und weitere Informationen 95 MATLAB-eigene Funktionsnamen bestehen stets aus Kleinbuchstaben. Nur im Hilfetext werden sie groß geschrieben. Das help-kommando ist nur geeignet, wenn man den Namen der Funktion kennt, zu der man Hilfe sucht. Was aber, wenn man ihn nicht kennt? Alle MATLAB-Funktionen sind in logische Gruppen (Themen) eingeteilt, und die MAT- LAB-Verzeichnisstruktur basiert auf dieser Einteilung. Gibt man help alleine ein, so wird diese Gruppierung angezeigt. >> help HELP topics: matlab\general - General purpose commands. matlab\ops - Operators and special characters. matlab\lang - Programming language constructs. matlab\elmat - Elementary matrices and matrix manipulation. matlab\elfun - Elementary math functions. matlab\specfun - Specialized math functions. matlab\matfun - Matrix functions - numerical linear algebra. matlab\datafun - Data analysis and Fourier transforms. matlab\polyfun - Interpolation and polynomials. matlab\funfun - Function functions and ODE solvers. matlab\sparfun - Sparse matrices. matlab\graph2d - Two dimensional graphs. matlab\graph3d - Three dimensional graphs. matlab\specgraph - Specialized graphs. matlab\graphics - Handle Graphics. matlab\uitools - Graphical user interface tools. matlab\strfun - Character strings. matlab\iofun - File input/output. matlab\timefun - Time and dates. matlab\datatypes - Data types and structures. usw... Hiermit kann man sich nun weiter vortasten. Gibt man zum Beispiel help matfun ein, so erhält man alle zur Verfügung stehenden MATLAB-Funktionen zum Bereich Matrixfunktionen numerische lineare Algebra. Matrix functions - numerical linear algebra. Matrix analysis. norm - Matrix or vector norm. normest - Estimate the matrix 2-norm. rank - Matrix rank. det - Determinant. trace - Sum of diagonal elements. null - Null space. orth - Orthogonalization. rref - Reduced row echelon form. subspace - Angle between two subspaces. Linear equations.

96 96 2 MATLAB-Grundlagen \ and / - Linear equation solution; use "help slash". inv - Matrix inverse. cond - Condition number with respect to inversion. condest - 1-norm condition number estimate. chol - Cholesky factorization. cholinc - Incomplete Cholesky factorization. lu - LU factorization. luinc - Incomplete LU factorization. qr - Orthogonal-triangular decomposition. lsqnonneg - Linear least squares with nonnegativity constraints. pinv - Pseudoinverse. lscov - Least squares with known covariance. Eigenvalues and singular values. eig - Eigenvalues and eigenvectors. svd - Singular value decomposition. gsvd - Generalized singular value decomposition. eigs - A few eigenvalues. svds - A few singular values. poly - Characteristic polynomial. polyeig - Polynomial eigenvalue problem. condeig - Condition number with respect to eigenvalues. hess - Hessenberg form. qz - QZ factorization for generalized eigenvalues. schur - Schur decomposition. Matrix functions. expm - Matrix exponential. logm - Matrix logarithm. sqrtm - Matrix square root. funm - Evaluate general matrix function. Factorization utilities qrdelete - Delete column from QR factorization. qrinsert - Insert column in QR factorization. rdf2cdf - Real block diagonal form to complex diagonal form. cdf2rdf - Complex diagonal form to real block diagonal form. balance - Diagonal scaling to improve eigenvalue accuracy. planerot - Given s plane rotation. cholupdate - rank 1 update to Cholesky factorization. qrupdate - rank 1 update to QR factorization. Zusammenfassung Das help-kommando ist eine Möglichkeit, Online-Hilfe im Kommandofenster zu erhalten. Die Tabelle 2.32 zeigt Aufrufmöglichkeiten des help-kommandos. Das lookfor-kommando Basierend auf einem Schlüsselwort können Sie mit dem lookfor-kommando nach Funktionen suchen. Dabei wird die erste Zeile des help-textes jeder MATLAB-Funktion zu-

97 2.18 MATLAB-Hilfesysteme und weitere Informationen 97 MATLAB-Kommando help help <Thema> help <Funktionsname> Beschreibung Gibt Themenliste Gibt eine Liste von Funktionen zu diesem Thema Gibt Informationen über diese Funktion Tabelle 2.32: Das help-kommando rückgegeben, die das entsprechende Schlüsselwort enthält. Zum Beispiel gibt es in MAT- LAB keine Funktion mit dem Namen inverse. Somit ist die Antwort auf >> help inverse folgende: inverse.m not found. Aber der Aufruf >> lookfor inverse liefert in Abhängigkeit der installierten Toolboxen folgendes: INVHILB Inverse Hilbert matrix. ACOS Inverse cosine. ACOSH Inverse hyperbolic cosine. ACOT Inverse cotangent. ACOTH Inverse hyperbolic cotangent. ACSC Inverse cosecant. ACSCH Inverse hyperbolic cosecant. ASEC Inverse secant. ASECH Inverse hyperbolic secant. ASIN Inverse sine. ASINH Inverse hyperbolic sine. ATAN Inverse tangent. ATAN2 Four quadrant inverse tangent. ATANH Inverse hyperbolic tangent. ERFINV Inverse error function. INV Matrix inverse. PINV Pseudoinverse. IFFT Inverse discrete Fourier transform. usw... Will man, daß alle help-zeilen durchsucht werden, so muß man im Aufruf die Option -all verwenden: >> lookfor inverse -all Das Hilfefenstersystem helpwin Gibt man das Kommando» helpwin

98 98 2 MATLAB-Grundlagen ein, so wird ein neues Fenster auf Ihrem Computerbildschirm geöffnet, das verwendet werden kann, um interaktive Hilfe über MATLAB Funktionen zu erhalten. Das in Abbildung 2.11 gezeigte Fenster existiert dann zusätzlich zu ihrem Kommandofenster. Abbildung 2.11: Das helpwin-hilfefenster Durch Doppelklicken auf ein Thema in diesem Textfenster, erhält man eine Liste zu diesem Thema. Ein weiteres Doppelklicken auf den gewünschten Funktionsnamen liefert schließlich Informationen über die MATLAB-Funktion. Das helpwin-kommando läßt sich analog dem help-befehl mit dem gewünschten Thema bzw. der gewünschten Funktion direkt aufrufen.

99 2.18 MATLAB-Hilfesysteme und weitere Informationen 99 Zusammenfassung Das helpwin-kommando ist eine weitere Möglichkeit, Online-Hilfe zu erhalten. Die Tabelle 2.33 zeigt die Aufrufmöglichkeiten des helpwin-kommandos. Hierzu wird ein eigenes Fenster geöffnet, von wo aus man sich durch Doppelklicken interaktiv zu weiteren Informationen vorarbeiten kann. Das Hilfefenstersystem helpwin kann auf dem PC auch über das Hilfemenü aus der Menüleiste des Kommandofensters oder eines Figure-Fensters aktiviert werden 25. MATLAB-Kommando helpwin helpwin <Thema> helpwin <Funktionsname> Beschreibung Ruft Hilfefenster mit Themenliste auf Gibt eine Liste von Funktionen zu diesem Thema Gibt Informationen über diese Funktion Tabelle 2.33: Das helpwin-kommando Das Hilfesystem helpdesk Das MATLAB-Hilfesystem helpdesk bietet die Möglichkeit, basierend auf Hypertext, das heißt auf HTML-Dokumenten 26, Informationen zu erhalten. (Hierzu ist es notwendig, daß auf Ihrem Rechner ein Web-Browser 27 installiert ist, sowie die entsprechenden HTML- Dateien von der MATLAB CD-ROM zur Verfügung stehen.) Ein Internetanschluß ist nicht notwendig! Diese HTML-Dokumente haben den Vorteil, daß sie Grafiken beinhalten können und Verweise auf andere Dokumente leicht machbar sind. Dadurch sind mehr Details und Beispiele möglich als mit dem help- bzw. helpwin-system. Die besonders gekennzeichneten Textlinks (unterstrichene Texte) können durch Anklicken zu weiteren Informationen führen. Insbesondere sind Hinweise möglich zu: MATLAB-Funktionen (nach Themen und Index geordnet) Hinweise für neue Benutzer Tutorials Handle Graphics Objects MathWorks Web-Seite (Internetanschluß notwendig!) Das helpdesk-hilfesystem kann mit dem Befehl» helpdesk oder 25 Oder man klickt auf den?-icon im Kommandofenster. 26 HTML: Abkürzung für Hypertext Markup Language. Standardisierte Auszeichnungssprache mit der Seiten im WWW gestaltet werden können. 27 Programm zum Erstellen und Weiterleiten von Befehlen im WWW, zum Beispiel NETSCAPE NAVIGATOR oder MICROSOFT INTERNET EXPLORER.

100 100 2 MATLAB-Grundlagen» doc <Funktionsname> aus dem Kommandomodus gestartet werden. Alternativ dazu kann es auch über das entsprechende Hilfemenü aktiviert werden. Auch vom helpwin-system kann helpdesk angesprochen werden. Haben Sie den Befehl helpdesk eingegeben, so wird ein Fenster geöffnet, wie die Abbildung 2.12 zeigt. Abbildung 2.12: Das helpdesk-hilfesystem Die über helpdesk erreichbaren Kommandos und Funktionen sind Version 5.3 in 24 Gruppen eingeteilt. Zusammenfassung Das helpdesk-system bietet eine weitere Möglichkeit der Online-Hilfe. Die Tabelle 2.34 zeigt die Aufrufmöglichkeiten des hypertextbasierten Systems. Das Hilfesystem helpdesk kann auch über das Hilfemenü aus der Menüleiste des Kommandofensters oder eines Figur- Fensters aktiviert werden. MATLAB-Kommando helpdesk doc <Funktionsname> Beschreibung Ruft Hilfefenster mit Themenliste auf Gibt Informationen über diese Funktion Tabelle 2.34: Das helpdesk-system

101 2.18 MATLAB-Hilfesysteme und weitere Informationen 101 Dokumentationen Auf der MATLAB-CD-ROM finden Sie die vollständige MATLAB-Dokumentation in Form von PDF-Dateien Zum Lesen dieser Dateien müssen Sie den Acrobat Reader von Adobe installiert haben. Ist dies der Fall, dann können Sie sich den Inhalt der MATLAB- Handbücher am Bildschirm anschauen und bei Bedarf ausdrucken. Die PDF-Dateien befinden sich unter WINDOWS unterhalb des Verzeichnisses MATLAB\help\pdf_doc Über helpdesk haben Sie ebenfalls einen Link auf diese Dateien. Die MathWorks WWW-Seite Die Firma MathWorks kann über das World Wide Web (WWW) erreicht werden. Die URL- Adresse 30 lautet: Der europäische Web Mirror (Spiegel) ist Von hier aus findet man verschiedene Informationen über MATLAB und SIMULINK sowie deren Toolboxen. Außerdem findet man Hinweise über Blocksets, eine Liste von Büchern über MATLAB sowie m-files von anderen Benutzern. Es empfiehlt sich, hin und wieder die Homepage aufzusuchen, da dort die aktuellen Informationen über MATLAB zu finden sind. Die MATLAB News & Notes Vierteljährlich erscheint eine Publikation der Firma MathWorks. Darin enthalten sind Neuigkeiten rund um MATLAB. Insbesondere werden neu erschienene Bücher über MATLAB vorgestellt. Besonders interessant finden wir Cleve s Corner. Dies sind interessante Artikel von CLEVE MOLER dem Vater von MATLAB über bestimmte Themen der numerischen Analysis. Diese Publikation erhält jeder angemeldete Benutzer unentgeltlich. Sind Sie nicht angemeldet, so können Sie dies unter der tun. 28 PDF: Portable Document Format 29 Bei der MATLAB-Installation werden Sie gefragt, ob Sie diese installieren wollen. 30 URL: Uniform Resource Locator.

102 102 2 MATLAB-Grundlagen Die MATLAB Digest Über können Sie eine elektronische Ansammlung (digest) von MATLAB-Neuigkeiten erhalten. Diese Nachrichten enthalten MATLAB-News und Artikel von MATLAB-Mitarbeitern und Benutzern sowie Hinweise, Tips und Antworten auf Benutzerfragen. Um diese Newsletter zu abonnieren, muß man eine an mit der Bitte um Aufnahme in die Versandliste schicken. Die MATLAB Newsgroup Falls Sie Zugang zu den Internet News 31 haben, so können Sie aktiv in der Diskussionsgruppe der MATLAB-Benutzer teilnehmen. Die MATLAB Newsgroup heißt comp.soft-sys.matlab Wenn Sie diese Newsgroup abonniert haben, können Sie mit anderen Anwendern und mit MATLAB-Mitarbeitern diskutieren. Tatsächlich besteht auf diesem Weg die Möglichkeit, mit MATLAB-Entwicklern ins Gespräch zu kommen. Bitte achten Sie auf die Benimmregeln in diesem Netz! Das tour-kommando Geben Sie tour nach dem MATLAB-Prompt ein, so startet MATLAB ein Fenster, in dem Sie Produktinformationen und Anwendungsmöglichkeiten erhalten. Das demo-kommando Geben Sie demo nach dem MATLAB-Prompt ein, so startet MATLAB ein Demo-Fenster, in dem Sie durch Klicken Demonstrationen zu MATLAB, SIMULINK und Toolboxen erhalten. 31 Auch NetNews Feed oder USENET genannt.

103 2.19 Polynome in MATLAB Polynome in MATLAB Polynome haben in der Mathematik eine große Bedeutung. Im wissenschaftlichen Rechnen benutzt man sie, um kompliziertere Funktionen durch einfachere anzunähern. Polynome lassen sich einfach differenzieren und integrieren, und man weiß, wie man numerische Näherungen für die Nullstellen 32 findet. Numerische Schwierigkeiten können auftreten, wenn man mit Polynomen höherer Ordnung arbeitet. In MATLAB gibt es eine Reihe von Funktionen, die es ermöglichen, effizient mit Polynomen zu arbeiten. Darstellung von Polynomen Polynome werden in MATLAB durch einen Zeilenvektor repräsentiert, wobei die Komponenten die Koeffizienten des Polynoms darstellen. Die Reihenfolge ist absteigend festgelegt, das heißt die erste Komponente des Vektors ist der Koeffizient des Monoms höchster Ordnung 33 und die letzte Komponente ist der Koeffizient des konstanten Terms des Polynoms. Der Zeilenvektor p1 repräsentiert das Polynom p 1 (x) = x 4 8x 3 +2x 2 +x 12. p2 stellt das Polynom p 2 (x) = 2x dar. Beachten Sie, daß Nullen mitgeführt werden müssen. >> p1=[ ] p1 = >> p2=[2 0 1] p2 = Nullstellen von Polynomen Ist ein Polynom als Zeilenvektor dargestellt, so erlaubt die Funktion roots, die Nullstellen des Polynoms zu berechnen, das heißt diejenigen Werte zu bestimmen, für die das Polynom den Wert Null annimmt. roots(p2) berechnet die Nullstellen des Polynoms 2x 2 +1, gibt sie als Spaltenvektor zurück und weist diese r zu. >> r=roots(p2) r = i i Kennt man die Nullstellen eines Polynoms, nicht aber das Polynom selbst, so kann man mit der Funktion poly das Polynom konstruieren. Da ein Polynom aber durch seine Nullstellen nur bis auf ein Vielfaches eindeutig bestimmt ist, wählt MATLAB das Polynom mit 32 Auch Wurzeln genannt. 33 Auch Höchstkoeffizient des Polynoms genannt.

104 104 2 MATLAB-Grundlagen Koeffizient 1 im höchsten Monom. poly(r) berechnet aus den Nullstellen in r das Polynom x >> poly(r) ans = Multiplikation von Polynomen Mit der Funktion conv kann man Polynome miteinander multiplizieren. Das Polynom p 1 (x) = x 2 +2x 3 multipliziert mit dem Polynom p 2 (x) = 2x 3 x 2 + 3x 4 ergibt das Polynom p 3 (x) = p 1 (x) p 2 (x) = 2x 5 + 3x 4 5x 3 + 5x 2 17x + 12 >> p1=[1 2-3]; >> p2=[ ]; >> p3=conv(p1,p2) p3 = Addition und Subtraktion von Polynomen In MATLAB gibt es keine Funktion zur Addition zweier Polynome. Haben die Polynome den gleichen Grad, werden die entsprechenden Zeilenvektoren addiert. Das Polynom p 1 (x) = x 2 + 2x 3 addiert mit dem Polynom p 4 (x) = x 2 + 3x 4 ergibt das Polynom p 5 (x) = p 1 (x) + p 4 (x) = 5x 7 >> p1=[1 2-3]; >> p4=[-1 3-4]; >> p5=p1+p4 p5 = Dies setzt jedoch Vektoren gleicher Dimension, das heißt Polynome gleichen Grades, voraus. Will man Polynome unterschiedlichen Grades addieren, so muß man den Zeilenvektor zum Polynom kleineren Grades durch Nullen auffüllen. Das Polynom p 1 (x) = x 2 +2x 3 addiert zu dem Polynom p 2 (x) = 2x 3 x 2 +3x 4 ergibt p 6 (x) = p(1) + p 2 (x) = 2x 3 + 5x 7 >> p1=[1 2-3]; >> p2=[ ]; >> p6=[0 p1]+p2 p6 =

105 2.19 Polynome in MATLAB function p1undp2 = addpoly(p1,p2) 2 % %Addiert zwei Polynome 4 % 5 % Input: p1 Polynom 1 6 % p2 Polynom 2 7 % Output: Summe von p1 und p2 8 % 9 % if nargin < 2 11 error( Zu wenig Argumente. ) 12 end 13 p1 = p1(:) ; % Stellt sicher, dass p1 Zeilenvektor ist. 14 p2 = p2(:) ; % Stellt sicher, dass p2 Zeilenvektor ist. 15 lp1 = length(p1); % Laenge von p1. 16 lp2 = length(p2); % Laenge von p2. 17 p1undp2 = [zeros(1,lp2-lp1) p1] + [zeros(1,lp1-lp2) p2]; Function-File 2.3: Addition zweier Polynome Die MATLAB-Funktion im Function-File 2.3 automatisiert diesen Prozeß. Um die Funktion addpoly zu verstehen, betrachte man die nachfolgenden Zeilen: >> addpoly(p1,p2) ans = Das Ergebnis ist das gleiche wie oben. Diese MATLAB-Funktion addpoly kann auch dazu verwendet werden, um Polynome zu subtrahieren. Dies zeigen nachfolgende MATLAB- Zeilen: >> p7 = addpoly(p1,-p2) p7 = p 1 (x) = x 2 + 2x 3 minus p 2 (x) = 2x 3 x 2 + 3x 4 ergibt das Polynom p 7 (x) = 2x 3 + 2x 2 x + 1. Division von Polynomen Mit der Funktion deconv kann man Polynome dividieren.

106 106 2 MATLAB-Grundlagen Das Polynom p 2 (x) = 2x 3 x 2 + 3x 4 dividiert durch das Polynom p 1 (x) = x 2 + 2x 3 ergibt das Polynom q(x) = 2x 5 mit dem Restpolynom r(x) = 19x 19. >> p2=[ ]; >> p1=[1 2-3]; >> [q,r]=deconv(p2,p1) q = 2-5 r = Ableiten von Polynomen Die MATLAB-Funktion polyder differenziert ein Polynom. Die Ableitung des Polynoms p 2 (x) = 2x 3 x 2 + 3x 4 ist das Polynom p 2 (x) = 6x 2 2x + 3. >> p2=[ ]; >> dp2=polyder(p2) dp2 = Auswerten von Polynomen Polynome können mit der Funktion polyval ausgewertet werden. Die nachfolgenden Kommandos berechnen p(2.5) für das Polynom p(x) = 4x 3 2x 2 + x 7. >> p=[ ]; >> px=polyval(p,2.5) px = Die nachfolgenden Befehle berechnen 100 Polynomwerte für das Polynom p(x) = 4x 3 2x 2 + x 7 zu 100 verschiedenen x-werten im Intervall von 1 bis 4. >> p=[ ]; >> x=linspace(-1,4); >> px=polyval(p,x); Das Resultat der Polynomauswertung zeigt die Abbildung 2.13, die mit folgenden Befehlen erzeugt worden ist.

107 2.19 Polynome in MATLAB 107 >> plot(x,px) >> title( Graph des Polynoms 4x^3-2x^2+x-7 ) >> xlabel( x ) >> ylabel( p(x) ) 250 Graph des Polynoms 4x 3 2x 2 +x p(x) x Abbildung 2.13: Zeichnen eines Polynoms als Anwendung der Polynomauswertung Zusammenfassung In MATLAB gibt es eine Reihe von nützlichen Funktionen, die dem Anwender das Arbeiten mit Polynomen erleichtern. Dies kommt vor allem dann zum Tragen, wenn Interpolationsund Approximationsaufgaben behandelt werden. Die Tabelle 2.35 faßt die Funktionen nochmals zusammen. Funktion conv deconv poly polyder polyval roots Beschreibung Multipliziert Polynome Dividiert Polynome Berechnet Polynom aus Nullstellen Berechnet die Ableitung eines Polynoms Berechnet Polynomwerte Berechnet Nullstellen eines Polynoms Tabelle 2.35: Polynome in MATLAB

108 108 2 MATLAB-Grundlagen Weitere Informationen im helpdesk-hilfesystem unter: Polynomfunktionen und Interpolationsfunktionen (Polynomial and Interpolation Functions) 2.20 Einfache Datenanalyse mit MATLAB In MATLAB gibt es eine Reihe von nützlichen Funktionen, um Daten (z.b. Meßwerte) zu analysieren. Wir stellen hier einfache Funktionen vor. Liegen die Daten als Matrix vor, so werden diese bei den nachfolgenden Funktionen stets spaltenweise betrachtet. Größte und kleinste Komponente Mit Hilfe der Funktionen max und min lassen sich zu einem gegebenen Vektor (Matrix) die größte und kleinste Komponente bestimmen. Darüber hinaus erhält man optional den dazugehörigen Index. Die nachfolgenden Befehle berechnen zum Vektor x = (1,13,8) T die größte Komponente und den dazugehörigen Index. Es ist dabei gleichgültig, ob der Vektor als Zeilen- oder Spaltenvektor eingegeben wird. Wird die Funktion max mit nur einem Ausgabeparameter aufgerufen, so erhält man nur den maximalen Wert zurück. >> x=[1 13 8] ; >> [mx,mi]=max(x) mx = 13 mi = 2 Analog arbeitet die Funktion min. Summe und Produkt der Komponenten Die Funktionen sum und prod berechnen die Summe bzw. Produkt der Vektorkomponenten. Es werden Summe und Produkt der Komponenten des Vektors x = (1,...,100) T berechnet. >> sum(1:100) ans = 5050 >> prod(1:100) ans = e+157

109 2.20 Einfache Datenanalyse mit MATLAB 109 Durchschnittswert und Median Ist ein Vektor x mit n Komponenten gegeben, so kann man mit der Funktion mean den Durchschnittswert (Mittelwert) 34 der Komponenten berechnen, das heißt x = x 1 + x x n. n Es wird der Durchschnittswert der Komponenten des Vektors x = (1,...,10) T berechnet. >> x=1:10; >> mean(x) ans = Die Funktion median berechnet den Median (Zentralwert) der Komponenten des Vektors x, das heißt es wird diejenige Komponente des Vektors x zurückgegeben, die in der Mitte liegt, nachdem der Vektor sortiert worden ist. Gibt es keine Mitte, weil n gerade ist, so wird der Mittelwert der beiden Werte, die sich in der Mitte befinden, berechnet und zurückgegeben. Es wird der Median der Vektoren x = (3,2,5,4,1) T bzw. x = (3,2,5,6,4,1) T berechnet. Im ersten Fall gibt es 5 (ungerade!) Komponenten, also ist 3 die Lösung, nachdem der Vektor sortiert wurde. Im zweiten Fall liegen (nach Sortierung) die Komponenten 3 und 4 in der Mitte und somit ist = 3.5 der Median. >> median([ ]) ans = 3 >> median([ ]) ans = Varianz und Standardabweichung Varianz und Standardabweichung sind wichtige Größen zur Meßbarkeit der Güte von Meßdaten. Sie sind ein Maß dafür, wie stark die Meßdaten von ihrem Durchschnittswert abweichen. Nehmen wir an, die Meßdaten seien im Vektor x gespeichert, dann ist die Varianz durch n σ 2 i=1 = (x i x) 2 n 1 definiert, das heißt es werden die Quadrate der Abweichungen der einzelnen Komponenten zum Durchschnittswert aufsummiert und durch n 1 dividiert. Die Standardabweichung σ ist nun einfach die Quadratwurzel aus der Varianz. Die Abbildung 2.14 zeigt zwei Meßreihen, die in den Vektoren x 1 und x 2 gespeichert sind. Beide Vektoren bestehen aus Auch arithmetisches Mittel genannt.

110 110 2 MATLAB-Grundlagen Komponenten. Die zwei Meßreihen haben 0 als Durchschnittswert. Ihre Varianzen aber sind unterschiedlich. Die Meßreihe x 1 besitzt eine kleinere Varianz als die Meßreihe x 2. Dies ist grafisch daran zu erkennen, daß die Meßwerte von x 2 im allgemeinen weiter vom Durchschnittswert 0 entfernt liegen als die Komponenten von x 1. Die Standardab- 10 Meßreihe 1 Werte des Vektors x Komponentenindex 10 Meßreihe 2 Werte des Vektors x Komponentenindex Abbildung 2.14: Unterschiedliche Varianzen weichung (und damit auch die Varianz) läßt sich mit der MATLAB-Funktion std berechnen. Die in der Abbildung 2.14 dargestellten Meßreihen haben die Standardabweichungen std(x1)= bzw. std(x2)= Die Standardabweichung der zweiten Meßreihe x 2 ist also rund dreimal und die Varianz rund 9 mal so groß wie die der ersten Meßreihe x 1. Sortieren von Daten Der MATLAB-Befehl sort(x) sortiert den Vektor x in aufsteigender Ordnung und gibt den sortierten Vektor zurück. Ist das Argument eine Matrix, so ist dies entsprechend unserer anfänglichen Bemerkung spaltenweise zu interpretieren, das heißt die Spaltenvektoren werden aufsteigend sortiert. Zusammenfassung In MATLAB gibt es eine Reihe nützlicher Funktionen, um Daten (z.b. Meßwerte) zu analysieren. Die Tabelle 2.36 faßt die Funktionen zusammen.

111 2.20 Einfache Datenanalyse mit MATLAB 111 Funktion max mean median min sort std sum Beschreibung Berechnet größte Komponente Berechnet den Mittelwert Berechnet den Median Berechnet kleinste Komponente Sortiert die Komponenten Berechnet die Standardabweichung Berechnet die Summe der Komponenten Tabelle 2.36: Datenanalyse in MATLAB Weitere Informationen im helpdesk-hilfesystem unter: Datenanalyse und FOURIER-Transformation (Data Analysis and Fourier Transform Functions) Zufallszahlen Zufallszahlen sind im technisch-wissenschaftlichen Rechnen ein nützliches Hilfsmittel. In vielen Fällen werden Zufallszahlen in einer rechnergestützten Simulation eines komplexen Problems eingesetzt. Diese Simulation kann dann auf dem Rechner immer und immer wieder ausgeführt werden, und die Resultate können analysiert werden. Oft werden Zufallszahlen auch als Testdaten benutzt. Hat man zum Beispiel einen Algorithmus entwickelt, der ein beliebiges Gleichungssystem lösen soll, so kann man eine Matrix als auch eine rechte Seite des Systems zum Testen des Algorithmus mit Zufallszahlen generieren. In MATLAB gibt es zwei eingebaute Funktionen rand und randn, mit denen man Zufallszahlen erzeugen kann. Wir wollen im folgenden diese beiden Funktionen vorstellen und miteinander vergleichen. Dabei werden uns ihre statistischen Eigenschaften durch grafische Darstellungen verdeutlicht. Gleichmäßig verteilte Zufallszahlen Zufallszahlen sind durch die Verteilung ihrer Werte charakterisiert. Zum Beispiel sind gleichmäßig verteilte Zufallszahlen dadurch gekennzeichnet, daß alle Werte der Zahlenfolge in einem bestimmten Intervall gleichmäßig verteilt liegen. So erzeugt die Funktion rand(10,1) einen Spaltenvektor mit 10 gleichmäßig über das Intervall (0,1) verteilten Zufallszahlen 35 : >> rand(10,1) ans = Genaugenommen erzeugt rand eine Gleitpunktzahl im abgeschlossenen Intervall [eps/2,(1 eps/2)].

112 112 2 MATLAB-Grundlagen Der Aufruf rand(50,2) erzeugt eine Matrix mit 50 Zeilen und 2 Spalten mit Werten zwischen 0 und 1. Testen Sie dies! Allgemein erzeugt der Aufruf rand(m,n) eine m n- Matrix mit gleichmäßig verteilten Zufallszahlen zwischen 0 und 1. In den Anwendungen werden oft auch Zufallszahlen gesucht, die in einem anderen Intervall als (0, 1) liegen. Mit der MATLAB-Funktion rand ist auch dies leicht möglich. Zum Beispiel erzeugt die Anweisung 5 + 5*rand(n,1) einen Spaltenvektor mit n gleichmäßig verteilten Werten im Intervall (5, 10). Mit rand und der eingebauten MATLAB-Funktion floor lassen sich auch leicht ganzzahlige Zufallszahllen generieren. Die Rundungsfunktion floor(a) rundet alle Elemente von A auf die nächstkleinere ganze Zahl (nächste ganze Zahl in Richtung ). Der Function-File 2.4 realisiert das Erzeugen von ganzzahligen Zufallszahlen. Außer der Größe der gewünschten Matrix läßt sich außerdem mit k ein Intervall [-k:k] angeben, aus dem die Zahlen zufällig erzeugt werden. Wird k nicht angegeben, so wird k=9 gewählt. 1 function A = randganz(m,n,k) 2 % % 4 % Input: m Anzahl der Zeilen 5 % n Anzahl der Spalten 6 % k Bestimmt das Intervall [-k,k] 7 % Output: A Ganzzahlige Zufallsmatrix 8 % if nargin == 1, n=m; end; 10 if nargin < 3, k=9; end; A = floor( (2*k+1)*rand(m,n)-k ); Function-File 2.4: Ganzzahlige Zufallszahlen Normalverteilte Zufallszahlen Erzeugen wir Zufallszahlen mit der Funktion rand, so treten alle Werte in einem bestimmten Intervall gleichmäßig häufig auf. In den Anwendungen sucht man oft auch Zufallszahlen, deren Werte nicht gleichmäßig auftreten, sondern wo bestimmte Werte häufiger

113 2.20 Einfache Datenanalyse mit MATLAB 113 vorkommen als andere. Zur Simulation von Datenfehlern benötigt man häufig auch normalverteilte Zufallszahlen 36. In MATLAB erzeugt man normalverteilte Zufallszahlen mit Mittelwert 0 und Varianz 1 mit der Funktion randn. Der Befehl randn(10,1) erzeugt zum Beispiel folgende normalverteilte Zufallszahlen: ans = Will man eine normalverteilte n-wertige Zufallsfolge mit Mittelwert 10 und Standardabweichung 5 erzeugen, so erreicht man dies durch: 10+5*randn(n,1) Im Vergleich: Gleichmäßig- und normalverteilte Zufallszahlen Histogramme bieten eine geeignete Möglichkeit, um Zufallszahlen grafisch darzustellen. Der Script-File Zufallszahlen.m auf der beiliegenden CD erzeugt die Abbildung 2.15 und illustriert die beiden MATLAB-Funktionen rand und randn grafisch. Das obere Histogramm zeigt, wie sich die Zufallszahlen gleichmäßig über das Intervall (0, 1) verteilen. Mit dem Befehl rand(10000,1) wird ein Spaltenvektor mit Werten erzeugt und yg zugeordnet. Die MATLAB-Funktion hist erstellt nun das Histogramm. Mit dieser Funktion kann man verschiedene Ziele erreichen. Ein Aufruf wie hist(yg,25) erzeugt ein Histogramm, das angibt, wie oft ein Wert in einem Subintervall von (0,1) vorkommt. Die Zahl 25 schreibt vor, das Intervall (0, 1) in 25 gleichgroße Subintervalle einzuteilen und 25 Rechtecksflächen zu zeichnen, deren Breite die Subintervallänge und deren Höhe die Anzahl der Zufallswerte in dem jeweiligen Subintervall angeben. Das untere Histogramm zeigt, wie sich Zufallszahlen mit Mittelwert 0 und Varianz 1 ähnlich einer Gaußschen Glockenkurve verteilen. Um weitere Unterschiede zwischen rand und randn sichtbar zu machen, führen Sie den auf der beiliegenden CD enthaltenen Script-File Punktwolken.m aus. Dieser erzeugt die Abbildung Auch Gaußsche Zufallszahlen genannt.

114 114 2 MATLAB-Grundlagen 600 Gleichmäßigverteilte Zufallszahlen Normalverteilte Zufallszahlen Abbildung 2.15: Zufallszahlen 1 Gleichmäßigverteilte Zufallszahlen 3 Normalverteilte Zufallszahlen Abbildung 2.16: Punktwolken

115 2.21 Weitere Bemerkungen und Hinweise 115 Weitere Informationen im helpdesk-hilfesystem unter: Spezielle Matrizen (Specialized Matrices) 2.21 Weitere Bemerkungen und Hinweise Auf die Visualisierungsmöglichkeiten von MATLAB konnten wir nur ganz grob eingehen. Zusätzlich zu den bereits erwähnten Hilfen und den MATLAB-Handbücher empfehlen wir dem Leser [38], [65] und [87]. Als Einführung in SIMULINK eignet sich für den interessierten Leser das deutschsprachige Buch [47]. Dort findet man SIMULINK-Modelle aus den Bereichen Regelungstechnik, Signalverarbeitung, Mechanik und Elektrotechnik. Das soeben erschienene zweite Buch [48] des gleichen Autors beschäftigt sich mit dem Einsatz von MATLAB und SIMULINK in der Signalverarbeitung und Kommunikationstechnik. Das Buch [5] behandelt lineare Systeme mit MATLAB in der Regelungstechnik. Auf die hinter den MATLAB-Funktionen rand und randn liegenden Algorithmen sind sind wir nicht näher eingegangen. Hierzu verweisen wir den interessierten Leser auf die MATLAB News & Notes vom Herbst Auf den WWW-Seiten von MathWorks findet man Hinweise zu Büchern über und mit MATLAB. Die Studentenversion beinhaltet ein Handbuch zu MATLAB. Eine C und FORT- RAN-Anbindung ist möglich, hierzu verweisen wir auf das Handbuch: MATLAB Application Program Interface Guide (API-Guide). Weitere Informationen findet man auf der MATLAB- Homepage www-europe.mathworks.com Übungsaufgaben 2.1 Zeichnen Sie den Graph der Funktion f(x) = sin(x 2 ) 2cos(x) über dem Intervall (0, 5) mit den Funktionen plot, fplot und ezplot. 2.2 Erzeugen Sie mit einem einzigen plot- Befehl die Graphen der Funktionen sin(kx) über dem Intervall [0,2π] für k = 1 : Zeichnen Sie den Graph der Funktion rect(x) = { 1 x sonst über dem Intervall [ 3,3]. 2.4 Zeichnen Sie die Kurve x = sin( t) + t y = 1 cos( t) in der xy-ebene für 0 t 4π. 2.5 Zeichnen Sie den Graph der Funktion f(x,y) = 1 5 cos(x) + y exp( x2 y 2 ) mit den Funktionen mesh und ezmesh über dem Quadrat 3 x 3, 3 y Gegeben sei die Funktion f(x,y) = x 2 8x + y 2 6y 0.1xy + 50.

116 116 2 MATLAB-Grundlagen Benutzen Sie die mesh-funktion, um das Minimum und den minimalen Wert der Funktion f im Bereich 0 < x < 5, 0 < y < 5 zu schätzen. 2.7 Wieviel verschiedene MATLAB Variablenamen stehen in folgender Zeile? anna ANNA anna anna_anna 2.8 In MATLAB findet man folgende eingebaute Funktionen: ceil(x) Rundet x zur nächsten ganzen Zahl auf. fix(x) Wählt von x den ganzzahligen Anteil. floor(x) Rundet x zur nächsten ganzen Zahl ab. round(x) Rundet x zur nächsten ganzen Zahl. Berechnen Sie die folgenden Ausdrücke per Hand und überprüfen Sie Ihre Ergebnisse mit MATLAB. (a) round(-2.6) (b) fix(-2.6) (c) floor(-2.6) (d) ceil(-2.6) (e) floor(ceil(10.8)) Zeichnen Sie die Funktionen im Intervall [ 3,3]! 2.9 Schreiben Sie einen Function-File, um folgende Funktion zu berechnen: x x < 0 f(x) = x 2 0 x < 2 4 x 2 Testen Sie Ihre Funktion für die Werte x = 2,1.5,2 und 6. Zeichnen Sie die Funktion f mit fplot über dem Intervall [ 3, 3]! 2.10 Schreiben Sie jeweils einen Function- File, um folgende Funktionen zu berechnen: { 1 x 0.5 (a) rect(x) = 0 sonst { 0 x < 0 (b) step(x) = 1 sonst { 0 x < 0 (c) ramp(x) = x sonst 0 x < 0 (d) g(x) = sin( πx 2 ) 0 x 1 1 x > 1 Zeichnen Sie die Funktionen über dem Intervall [ 2,2]! 2.11 Schreiben Sie einen Function-File, um die Funktion f(t) = t 1 3 zu berechnen. Benutzen Sie diesen, um die Funktion f im Intervall [ 1,1] zu zeichnen Zeichnen Sie die Funktion f(x) = 5 im Intervall [0, 2]. Bemerkung: Zunächst empfindet man diese Übung schwieriger als sie tatsächlich ist. In MATLAB ist es zwar leichter, eine nicht konstante Funktion zu zeichnen als eine Konstante. Es gibt aber eine Reihe von Tricks, dies zu tun. Hilfreich sind hierbei die MAT- LAB-Funktionen size und ones Zeichnen Sie die folgende Funktion f mit Hilfe von mesh: f(x,y) = 0.2cos(x) + y exp( x 2 y 2 ) im Bereich 3 x 3 3 y Es seien zwei Vektoren a und b wie folgt definiert:

117 2.22 Übungsaufgaben 117 a = [2,4,6] b = [1,2,3] Führen Sie die folgenden MATLAB- Operationen durch. Welche sind definiert und welche nicht? Erklären Sie! Was sind die Resultate? a + b a + b a + b a + b a - b a - b a - b a - b a * b a * b a * b a * b a \ b a \ b a \ b a \ b a.* b a.* b a.* b a.* b a.\ b a.\ b a.\ b a.\ b 2.15 Erzeugen Sie mit der MATLAB- Funktion rand eine 5 5-Zufallsmatrix A. Welches sind die Werte der folgenden Ausdrücke? Überlegen Sie sich die Resultate, bevor Sie die Rechnung am Computer durchführen. A(2,:) A(:,5) A([1,5]) A(:,1) A(1,1:2:5) A(4:-1:1,5:-1:1) 2.16 Berechnen Sie in MATLAB das direkte Produkt von A = und B = Es seinen A,B,C und D nachfolgend definierte Matrizen A = 2 4 B = ( ) 1 5 C = 5 3 und D = Berechnen Sie zunächst per Hand folgende Matrizenalgebra. Geben Sie die Matrizen dann in MATLAB ein und vergleichen Sie die jeweiligen Resultate. (a) A + B (b) B + C (c) DA (d) 2A 3B (e) A T (f) C Die nachfolgenden Regeln der Matrizenalgebra sehen so aus wie die der reellen Zahlen. Trotzdem sind einige davon falsch. Benutzen Sie MATLAB, um die falschen herauszufinden, und geben Sie für jede falsche Regel ein Gegenbeispiel. (a) A + B = B + A (b) AB = BA (c) Falls AB = 0 ist, dann ist A = 0 oder B = 0. (d) Falls A 2 = 0 ist, dann ist A = 0. (e) (A + B) 2 = A 2 + 2AB + B 2 (f) (A B)(A + B) = A 2 B 2 (g) A(B + C) = AB + AC (h) (A + B)C = CA + CB (i) (AB) 2 = A 2 B 2

118 118 2 MATLAB-Grundlagen 2.19 Erzeugen Sie eine Diagonalmatrix mit 1,2,3,4,5 auf der Diagonalen! 2.20 Erzeugen Sie eine 6 6 obere (untere) Dreiecksmatrix mit Zufallszahlen zwischen 0 und 1! 2.21 Erzeugen Sie eine symmetrische Matrix S mit Zufallswerten zwischen 0 und 8! 2.22 Die MATLAB-Funktion rand(n) erzeugt eine n n-matrix, deren Einträge gleichmäßig verteilte Zufallszahlen aus dem Intervall (0, 1) sind. Schreiben Sie einen Function-File, der n n-matrizen erzeugt, deren Einträge Zahlen aus {1,2,3,4,5,6} sind Warum gibt es in MATLAB kein.+ Operator? 2.24 Wir betrachten die folgende Matrix A: A = Geben Sie die Dimension dieser Matrix an! Wie kann man in MATLAB die Größe von A bestimmen? Geben Sie alle Indizes an, deren Matrixelemente 5.5 sind Gegeben sei die folgende Matrix A: A = Was ist A(:,2), A(3,:), A(4:5,2:3)? Überprüfen Sie Ihr Resultat in MATLAB Geben Sie jeweils den Vektor c an, nachdem Sie die folgenden Operationen ausgeführt haben. Überprüfen Sie Ihre Ergebnisse in MATLAB. a = [ ]; b = [ ]; (a) c = b+a-3; (b) c = a./b; (c) c = 2*a+a.ˆb; (d) c = 2.ˆb+a; (e) c = 2*b/3.*a; 2.27 Gegeben seien die folgenden Polynome: f 1 (x) = x 3 3x 2 x + 3 f 2 (x) = x 3 6x x 8 f 3 (x) = x 3 8x x 16 f 4 (x) = x 3 5x 2 + 7x 3 f 5 (x) = x 2 Zeichnen Sie die Polynome im Intervall [0, 4]. Benutzen Sie eingebaute MATLAB- Funktionen, um nachfolgende Polynome in den Punkten 0 und 1 auswerten zu können. (a) f 2 (x) 2f 4 (x) (b) 3f 5 (x) + f 2 (x) 2f 3 (x) (c) f 1 (x)f 3 (x) (d) f 4 (x)/(x 1) 2.28 Bestimmen Sie die reellen Nullstellen nachfolgender Polynome. Zeichnen Sie diese Polynome dann in einem geeigneten Intervall, um diese Nullstellen überprüfen zu können. (a) g 1 (x) = x 3 5x 2 + 2x + 8 (b) g 2 (x) = x 2 + 4x + 4 (c) g 3 (x) = x 5 3x 4 + 4x 3 4x Gegeben seien die Vektoren

119 2.22 Übungsaufgaben 119 x = [ ]; y = [ ]; und die Matrix A = [1 3 7;2 8 4;6-1 -2]; Bestimmen Sie folgende Ausdrücke, zunächst mit Bleistift und Papier, danach mit MATLAB. max(x); min(a); min(x,y); mean(a); median(x); cumprod(a); sort(2*x+y); sort(a); 2.30 Gegeben seien die Variablen a=5.5, b=1.5 und k=-3. Bestimmen Sie die Ergebnisse der folgenden Ausdrücke. Überprüfen Sie Ihre Resultate dann in MATLAB. (a) a < 10.0 (b) a+b >= 6.5 (c) k = 0 (d) b-k > a (e) (a == 3*b) (f) -k <= k+6 (g) a<10 & a>5 (h) abs(k)>3 k<b-a 2.31 Bestimmen Sie die Werte der folgenden Ausdrücke. Überprüfen Sie Ihre Ergebnisse dann in MATLAB B = (a) any(b) (b) find(b) (c) all(any(b)) (d) any(all(b)) (e) finite(b(:,3)) (f) any(b(1:2,1:3)) 2.32 Erzeugen Sie zehn gleichmäßig verteilte Zufallszahlen im jeweils angegebenen Intervall (a) zwischen 0 und 10. (b) zwischen -1 und 1. (c) zwischen -20 und 10. (d) zwischen π und π Erzeugen Sie tausend normalverteilte Zufallszahlen (a) mit Mittelwert 1.0 und Varianz 0.5. (b) mit Mittelwert -5.5 und Standardabweichung (c) mit Mittelwert -5.5 und Standardabweichung Gegeben seien die folgenden Matrizen: A = und B = Bestimmen Sie die Rückgabewerte und überprüfen Sie diese dann in MATLAB. (a) rot(b) (b) rot90(a,3) (c) fliplr(a) (d) reshape(a,4,3) (e) triu(b) (f) diag(rot90(b)) 2.35 Was ist 0 0 in MATLAB?

120 120 2 MATLAB-Grundlagen

121 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Computational mathematics is mainly based on two big ideas: Taylor series and linear algebra. LLOYD N. TREFETHEN. Ziel dieses Kapitels ist es, die für das vorliegende Buch wichtigen Begriffe und Notationen aus der linearen Algebra und Analysis kurz zu wiederholen. Für ausführliche Darstellungen verweisen wir auf die Bücher über lineare Algebra und Analysis, siehe Abschnitt 3.10 Weitere Bemerkungen und Notationen. 3.1 Vektoren und Matrizen Die lineare Algebra 1 ist ein wichtiges Hilfsmittel in zahlreichen Bereichen des wissenschaftlichen Rechnens bzw. der numerischen Mathematik. In diesem Kapitel stellen wir daher grundlegende Resultate bereit, die wir in diesem Buch immer wieder verwenden werden 2. Die Menge der reellen Zahlen bezeichnen wir mit R. Wir nennen eine endliche geordnete Menge von reellen Zahlen einen Vektor, und die Zahlen selbst heißen die Komponenten des Vektors. Vektoren bezeichnen wir gewöhnlich mit fettgedruckten Kleinbuchstaben. Ein Vektor v mit n Komponenten hat die Form v 1 v 2 v =.. v n Ein Vektor in dieser Form ist ein Spaltenvektor; der entsprechende transponierte Vektor ist ein Zeilenvektor. Die Menge aller n dimensionalen Spaltenvektoren bezeichnen wir mit R n. Den zu v transponierten Vektor bezeichnen wir mit v T. Die Komponenten eines Vektors v sind v i. Manchmal schreiben wir auch v(i), was der MATLAB-Notation entspricht. Insbesondere beim Rechnen mit Matrizen ist es vorteilhafter, Vektoren als Spaltenvektoren 1 Manchmal auch Matrizentheorie genannt. 2 MATLAB-Funktionen zur linearen Algebra und Matrixfunktionen erhalten Sie mit dem Befehl help matfun. 121

122 122 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis bzw. n 1 Matrizen zu schreiben. Da wir aus diesem Grund hauptsächlich mit Spaltenvektoren arbeiten werden, erwähnen wir das Wort Spalte nicht jedesmal und nennen die Elemente aus R n einfach Vektoren anstatt Spaltenvektoren. Den n-dimensionalen EUKLI- DISCHEN Raum bezeichnen wir mit R n und die Menge der reellen m n-matrizen mit R m n. Wir identifizieren R n also mit R n 1 : x R n x = x 1. x n x i R. Andererseits sind die Elemente von R 1 n Zeilenvektoren: x R 1 n x = ( x 1,...,x n ). Meistens sind die Vektoren (und Matrizen) in diesem Buch reell, obwohl sich vieles auf den komplexen Fall übertragen läßt. Die entsprechenden komplexen Räume sind dann C, C n und C m n. Sind u und v zwei Vektoren in R n, so ist deren Summe durch u 1 + v 1 u 2 + v 2 u + v =. u n + v n definiert. Ist α eine reelle Zahl, so gilt: αv 1 αv 2 αv =.. αv n Das Skalarprodukt zweier Vektoren u,v R n ist durch u T v = u 1 v 1 + u 2 v u n v n definiert. Die EUKLIDISCHE Länge eines Vektors v R n ist v = v T v = v v2 n. MATLAB besitzt eine Funktion zur Berechnung des Skalarprodukts. Geben Sie >> u = [1 4 2]; >> v = [2 3-1]; >> dot(u,v) ein und MATLAB antwortet mit dem Skalarprodukt der Vektoren u und v

123 3.1 Vektoren und Matrizen 123 ans = 12 Die EUKLIDISCHE Länge eines Vektors v erhält man in MATLAB mit der Funktion norm. Eine Menge von Vektoren v 1,...,v k aus R n ist linear abhängig, falls es k Zahlen α 1,...,α k gibt, die nicht alle Null sind, so daß α 1 v α n v k = 0 ist (Beim Nullvektor 0 sind alle Komponenten 0). Sonst ist die Menge linear unabhängig. Die Menge aller Linearkombinationen von v 1,...,v k bezeichnen wir mit Span(v 1,...,v k ) und nennen diese Menge lineare Hülle. Ist U eine Menge von Vektoren aus R n, dann ist U ein Untervektorraum (kurz: Unterraum) von R n, wenn mit v 1,v 2 U auch α 1 v 1 + α 2 v 2 U gilt, wobei α 1 und α 2 beliebige Zahlen sind. Demnach ist U ein Untervektorraum, wenn jede Linearkombination von zwei Vektoren aus U wieder in U liegt. Der Raum R n ist demnach ein Unterraum von sich selbst. Zu jedem Unterraum U gibt es eine kleinste natürliche Zahl r, so daß man jeden Vektor aus U als Linearkombination von höchstens r Vektoren aus U darstellen kann; r ist die Dimension des Unterraums und wird mit dim(u) = r bezeichnet. Jede Menge von r linear unabhängigen Vektoren aus U mit dim(u) = r ist eine Basis von U. Der Winkel φ zwischen zwei Vektoren v und w ist durch cos φ = vt w v w gegeben. Zwei Vektoren sind orthogonal, wenn φ = 90 gilt, das heißt, wenn v T w = 0 ist. Wir schreiben dann: v w. Gilt darüber hinaus v = w = 1, so sind die Vektoren orthonormal. Zwei Unterräume U 1 und U 2 von R n sind orthogonal, falls v T w = 0 für alle v U 1 und w U 2 gilt. Die Orthogonalität zweier Unterräume bezeichnen wir mit U 1 U 2. Ein weiteres fundamentales Objekt ist die Matrix. Als rechteckiges Zahlenschema mit Elementen aus R hat eine Matrix A die Form: a 11 a 12 a 1n a 21 a 22 a 2n A =.... a m1 a m2 a mn Die Matrix A hat die Ordnung m n, das heißt m Zeilen und n Spalten. Die Menge aller m n-matrizen mit Elementen aus R bezeichnen wir mit R m n. Wenn die Ordnung 3 klar ist, werden wir auch die Bezeichnung A = (a ij ) für eine m n-matrix verwenden. Im Falle n = m heißt die Matrix quadratisch, sonst rechteckig. Wir schreiben Vektoren stets als kleine fettgedruckte und Matrizen als große Buchstaben. Wir betrachten eine Matrix auf zwei Arten: Als ein rechteckiges Zahlenschema. Die Zahlen werden als Elemente der Matrix bezeichnet 4. 3 Auch Dimension genannt. 4 Manchmal aber auch als Komponenten oder Koeffizienten oder Einträge.

124 124 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Als eine lineare Abbildung 5 zwischen zwei Vektorräumen. Ist eine m n-matrix A gegeben, so ist es oft erforderlich, die einzelnen Zeilen oder Spalten anzusprechen. Hier ist die Doppelpunktnotation nützlich. Den i-ten Zeilenvektor von A bezeichnen wir mit a(i,:) bzw. mit A(i,:) und den j-ten Spaltenvektor mit a(:,j) bzw. mit A(:,j) 6. Da wir aber hauptsächlich mit Spaltenvektoren arbeiten, ist es sinnvoll, für diese eine kürzere Schreibweise zu benutzen. Häufig verwenden wir daher a j anstatt a(:,j) oder A(:, j). Da Zeilenvektoren nicht so häufig vorkommen, belassen wir es bei obiger Beschreibung. Ist also A eine m n-matrix, dann ist der i-te Zeilenvektor von A durch a(i,:) A(i,:) = ( ) a i1 a i2 a in i = 1,...,m und der j-te Spaltenvektor durch a j a(:,j) A(:,j) = a 1j a 2j. a mj j = 1,...,n gegeben. Damit können wir eine Matrix mit Hilfe von Spalten- oder Zeilenvektoren darstellen: a(1,:) A = a 1 a 2 a n a(2,:) oder A =.. a(m,:) Eine spezielle besonders wichtige quadratische Matrix ist die Einheitsmatrix I. Sie hat die Form: I = In MATLAB erzeugt man die Einheitsmatrix I n mit dem Aufruf eye(n), nachdem zuvor n spezifiziert worden ist. Die Summe zweier Matrizen A = (a ij ) und B = (b ij ) aus R m n ist wieder aus R m n und durch A + B = (a ij + b ij ) gegeben. Mit anderen Worten: Die Zahlen werden elementweise addiert. In MATLAB wird die Matrizenaddition durch A+B bewerkstelligt. Ist α eine Zahl, dann ist αa eine Matrix, die durch αa = ( αa ij ) 5 Auch Lineare Transformation genannt. 6 Dies ist genau die Notation, die MATLAB verwendet. Mit A(i,:) spricht man in MATLAB die i-te Zeile der Matrix A an. Mit A(:,j) die j-te Spalte.

125 3.1 Vektoren und Matrizen 125 definiert ist. In MATLAB gilt alpha*a für das Produkt der Matrix A mit einem Skalar α. Ist A eine m n-matrix und B eine n p-matrix, so ist die Produktmatrix AB eine m p Matrix und durch AB = ( n k=1 a ikb kj ) gegeben. Das Matrixprodukt AB wird in MATLAB mit A*B berechnet. Ist b ein Spaltenvektor, dann ist auch Ab ein Spaltenvektor. Ist a ein Spaltenvektor und b T ein Zeilenvektor, so ist ab T eine Matrix. Wir nennen ab T das dyadische Produkt von a und b. Es gilt: ab T = a 1. a n ( b 1 b m ) = Damit gibt es im R n zwei Vektorprodukte : a 1 b 1. a n b 1 1. Das Skalarprodukt: x T y. Das Ergebnis ist eine Zahl. Kurz:... a 1 b m.... a n b m Zeilenvektor Spaltenvektor = Skalar.. 2. Das dyadische Produkt: xy T. Das Ergebnis ist eine n n-matrix. Kurz: Im R 3 gibt es zusätzlich noch Spaltenvektor Zeilenvektor = Matrix. 3. Das Kreuzprodukt: x y. Das Ergebnis ist ein Vektor im R 3. Kurz: Vektor Vektor = Vektor. Das Skalarprodukt liefert reelle Werte und heißt manchmal auch inneres Produkt oder im Englischen inner product. In C n definiert man das Skalarprodukt durch u T v; dies wird im Englischen als dot product bezeichnet. In R n sind beide Begriffe identisch. Das dyadische Produkt liefert eine n n-matrix vom Rang 1 und heißt manchmal auch äußeres Produkt oder im Englischen outer product. Das Kreuzprodukt liefert einen Vektor im R 3 und wird manchmal auch als Vektorprodukt oder äußeres Produkt bezeichnet. Da dies für einen Anfänger oft verwirrend ist, verwenden wir in diesem Buch nur die Begriffe Skalarprodukt, dyadisches Produkt und Kreuzprodukt, und zwar in dem Sinne, wie wir sie eben definiert haben. Die Tabelle 3.1 faßt die drei Vektorprodukte nochmals zusammen. Operation MATLAB-Syntax Mathematische Syntax Skalarprodukt x *y=dot(x,y) x T y Dyadisches Produkt x*y xy T Kreuzprodukt cross(x,y) x y Tabelle 3.1: Vektorprodukte Ist A eine m n-matrix und x ein n-vektor, dann ist Ax wohldefiniert und ein Vektor in R m. In MATLAB gilt A*x für das Matrix-Vektor-Produkt. x muß ein Spaltenvektor sein. Ax kann auf zwei Arten berechnet werden:

126 126 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis 1. Zeilenweise. Die Komponenten von Ax sind Skalarprodukte der Zeilen von A mit x: a(1,:) a(1,:)x a(2,:) Ax =. x = a(2,:)x.. a(m,:) a(m,:)x 2. Spaltenweise. Ax ist eine Linearkombination der Spaltenvektoren von A: Ax = a 1 a 2 a n x = x 1 a 1 + x 2 a 2 Die Komponenten x j von x sind die Koeffizienten. + + x n Beide Möglichkeiten, das Matrix-Vektor-Produkt zu berechnen, sind mathematisch äquivalent. Wir werden später sehen, daß die Effizienz eines Algorithmus jedoch wesentlich davon abhängen kann, welche Methode man wählt. Die Matrix-Matrix-Multiplikation kann auf drei verschiedene Arten berechnet werden. Mathematisch sind alle drei äquivalent. 1. Zeilenweise 2. Spaltenweise 3. Summe von dyadischen Produkten In MATLAB berechnet man das Produkt zweier Matrizen A und B mit A*B. Vertauscht man Zeilen und Spalten einer m n-matrix A, so erhält man die transponierte Matrix A T : A T = ( a ji ). Es gilt stets: (AB) T = B T A T. Eine Matrix A ist symmetrisch, falls gilt: A T = A. Eine symmetrische Matrix A ist positiv definit, falls x T Ax > 0 für jeden Vektor x 0 gilt 7. Eine n n-matrix Q nennt man eine orthogonale Matrix 8, wenn die Spaltenvektoren von Q eine orthonormale Basis im R n bilden. Ist Q eine orthogonale Matrix, dann gilt: Q T Q = I. 7 In manchen Büchern wird eine Matrix als positiv definit definiert, ohne notwendig symmetrisch zu sein. 8 Eigentlich orthonormale Matrix, weil die Spalten orthonormal sind. Dieser Begriff hat sich aber leider nicht durchgesetzt. a n.

127 3.1 Vektoren und Matrizen 127 Q T = Q 1. (Qx) T (Qy) = x T y. Qx 2 = x 2. Jeder quadratischen Matrix A kann man eine Zahl zuordnen, die Determinante von A. Wir bezeichnen sie mit det(a). Für eine 2 2-Matrix A gilt: det(a) = a 11 a 22 a 12 a 21 ; für eine 3 3-Matrix A gilt: det(a) = a 11 deta 11 a 12 deta 12 + a 13 deta 13, wobei A 1j 2 2-Matrizen sind, die dadurch entstehen, daß man die erste Zeile und die j-te Spalte streicht. Dies kann man auf beliebige n n-matrizen übertragen: det(a) = ( 1) i+1 a i1 det(a i1 ) + ( 1) i+2 a i2 det(a i2 ) + + ( 1) i+n a in det(a in ), wobei A ij diejenige (n 1) (n 1)-Submatrix von A ist, die man erhält, wenn man die i-te Zeile und j-te Spalte von A streicht. Für det(a) gelten folgende Eigenschaften: det(a) = det(a T ). det(αa) = α n det(a T ), wobei α eine Zahl ist. det(ab) = det(a)det(b). Sind zwei Zeilen oder zwei Spalten von A gleich, so gilt: det(a) = 0. Allgemeiner gilt: Ist eine Zeile oder Spalte von A linear abhängig von den übrigen, so ist det(a) = 0. Ist B diejenige Matrix, die man erhält, wenn man zwei Zeilen oder Spalten einer Matrix A vertauscht, so gilt: det(b) = det(a). Die Determinante einer Dreiecksmatrix ist das Produkt ihrer Diagonalelemente. Die Determinante von A kann in MATLAB mit det(a) berechnet werden. Der Rang einer Matrix A ist die Dimension des Spaltenraumes von A. Wir bezeichnen ihn mit Rang(A). Eine quadratische Matrix A R n n ist regulär, wenn Rang(A) = n gilt. Sonst ist sie singulär. Eine m n-matrix hat vollen Spaltenrang, wenn die Spalten linear unabhängig sind. Analog ist der volle Zeilenrang definiert. Eine Matrix hat vollen Rang, wenn sie vollen Zeilen- und Spaltenrang hat. Ist ihr Rang nicht voll, dann nennen wir sie rangdefekt. Ist A eine m n-matrix, dann gilt: Rang(A) = Rang(A T ). Rang(A) + dim(null(a)) = n. Rang(AB) Rang(A) + Rang(B) n. Rang(AB) = Rang(A) = Rang(CA), wenn B und C reguläre Matrizen sind. Rang(AB) min{rang(a), Rang(B)}. Rang(A + B) Rang(A) + Rang(B).

128 128 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Der Rang einer Matrix A wird in MATLAB mit rank(a) berechnet. Zur Definition von Null(A) verweisen wir auf den nachfolgenden Abschnitt. Eine n n-matrix A ist invertierbar, wenn es eine n n-matrix B gibt, so daß gilt: AB = BA = I. Die Inverse von A wird mit A 1 bezeichnet. Sie ist eindeutig bestimmt. Eine invertierbare Matrix ist eine reguläre Matrix und umgekehrt. Es gilt stets: (AB) 1 = B 1 A 1. In MATLAB erhält man die Inverse einer Matrix A mit inv(a). Zwei Matrizen A und B heißen ähnlich, wenn es eine reguläre Matrix T gibt, so daß gilt: T 1 AT = B. Eine wichtige Eigenschaft ähnlicher Matrizen besteht darin, daß sie die gleichen Eigenwerte haben. 3.2 Die vier Fundamentalräume einer Matrix Es sei A eine m n-matrix. Der von den Zeilenvektoren von A aufgespannte Unterraum von R n heißt Zeilenraum von A. Die Spaltenvektoren spannen im R m den Spaltenraum von A auf. Der Lösungsraum des homogenen Gleichungssystems Ax = 0 heißt Nullraum von A und ist ein Unterraum von R n. Betrachten wir die Matrix A als eine lineare Abbildung von R n nach R m, das heißt: A : R n R m, dann ist der Spaltenraum von A das gleiche wie das Bild der Abbildung. Wir bezeichnen das Bild von A mit Bild(A). Damit gilt: Bild(A) = {y R m y = Ax für ein x R n } = Spaltenraum von A. Mit Null(A) bezeichnen wir den Nullraum (Kern) von A. Es gilt: Null(A) = {x R n Ax = 0}. A T beschreibt dann eine Abbildung von R m nach R n, das heißt: A T : R m R n. Im Zusammenhang mit einer Matrix A und ihrer Transponierten A T interessieren wir uns besonders für die folgenden Unterräume: Zeilenraum von A Spaltenraum von A

129 3.2 Die vier Fundamentalräume einer Matrix 129 Nullraum von A Zeilenraum von A T Spaltenraum von A T Nullraum von A T Bis auf die Notation stimmt der Spaltenraum von A mit dem Zeilenraum von A T sowie der Zeilenraum von A mit dem Spaltenraum von A T überein. Es verbleiben dann die folgenden vier Räume, die als Fundamentalräume von A bezeichnet werden: Zeilenraum von A Spaltenraum von A Nullraum von A Nullraum von A T Hat A den Rang r, das heißt Rang(A) = r, dann gilt (Fundamentalsatz 1): Bild(A) R m und dim(bild(a)) = r Null(A) R n und dim(null(a)) = n r Bild(A T ) R n und dim(bild(a T )) = r Null(A T ) R m und dim(null(a T )) = m r Weiterhin gilt (Fundamentalsatz 2): Der Nullraum von A ist das orthogonale Komplement des Zeilenraumes von A in R n : Null(A) Bild(A T ) = R n. Der Nullraum von A T ist das orthogonale Komplement des Spaltenraumes von A in R m : Null(A T ) Bild(A) = R m. Die Abbildung 3.1 wurde von G. STRANG geprägt und veranschaulicht die vier Fundamentalräume einer Matrix A. In MATLAB erhält man mit null(a) eine orthonormale Basis für den Nullraum von A und mit orth(a) eine orthonormale Basis für den Bildraum von A.

130 130 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Zeilenraum von A A T A Spaltenraum von A R n R m Nullraum von A Nullraum von A T Abbildung 3.1: Die vier Fundamentalräume einer m n-matrix A Orthonormale Basen für die vier fundamentalen Unterräume Es sei A R m n gegeben. Dann gibt es orthogonale Matrizen U R m m und V R n n, so daß ( ) U T S1 0 AV = = S. 0 0 wobei S 1 eine reguläre n n-diagonalmatrix ist. Die Faktorisierung heißt Singulärwertzerlegung (SVD Zerlegung 9 ) und die Diagonalelemente von S sind die singulären Werte. Die Diagonalelemente von S sind alle nicht negativ und können der Größe nach abfallend angeordnet werden. Die Anzahl der von Null verschiedenen Diagonalelemente von S ist gleich dem Rang der Matrix A. In MATLAB erhält man mit svd(a) die Singulärwertzerlegung von A. Die Matrizen U und V beinhalten orthonormale Basen für alle vier fundamentalen Unterräume der Matrix A: Bild(A) = Span(u 1,...,u r ) Null(A) = Span(v r+1,...,v n ) Bild(A T ) = Span(v 1,...,v r ) 9 SVD=Singular Value Decomposition.

131 3.3 Lineare Gleichungssysteme 131 Null(A T ) = Span(u r+1,...,u m ) Die Spalten von U, die zu den von Null verschiedenen singulären Werten von A gehören, bilden eine orthonormale Basis von Bild(A); die Spalten von U, die zu den Null singulären Werten von A gehören, bilden eine orthonormale Basis von Null(A T ), usw. Weiterhin gilt: Die orthogonale Projektionsmatrix auf Bild(A) ist durch U 1 U T 1 gegeben. Die orthogonale Projektionsmatrix auf Null(A) ist durch V 2 V T 2 gegeben. Die orthogonale Projektionsmatrix auf Null(A T ) ist durch U 2 U T 2 gegeben. Die orthogonale Projektionsmatrix auf Bild(A T ) ist durch V 1 V T 1 gegeben. 3.3 Lineare Gleichungssysteme Allgemein lautet ein lineares Gleichungssystem für die Unbekannten x 1,x 2,...,x n : a 11 x 1 + a 12 x a 1n x n = b 1 a 21 x 1 + a 22 x a 2n x n = b 2 a m1 x 1 + a m2 x a mn x n = b m. Die Koeffizienten a ij und die rechten Seiten b j sind gegeben. Faßt man die Koeffizienten a ij zu einer m n-matrix A zusammen, die rechten Seiten b j zu einem m-spaltenvektor b und die Unbekannten x i zu einem n-spaltenvektor x, so schreibt sich ein lineares Gleichungssystem in Matrix-Vektor-Schreibweise kompakt in folgender Form: Ax = b Dabei stellt sich als erstes die Frage nach der Lösbarkeit des Sytems oder gleichbedeutend: Kann der Vektor b als Linearkombination der Spalten von A ausgedrückt werden? Kann die Frage positiv beantwortet werden, dann sind die Koeffizienten dieser Linearkombination die Komponenten des Vektors x. Ist ein lineares System lösbar, so spricht man auch von einem konsistenten oder kompatiblen System. Hat es keine Lösung, so ist es inkonsistent oder inkompatibel. Lineare Gleichungssysteme haben entweder genau eine Lösung, unendlich viele Lösungen oder aber keine Lösung. Andere Möglichkeiten gibt es nicht. Es stellen sich daher die folgenden Fragen nach Lösbarkeit. Unter welchen Bedingungen an A und b gibt es mindestens ein x mit Ax = b? Universellen Lösbarkeit. Unter welchen Bedingungen an A ist Ax = b für alle b R m lösbar? Beschreibung aller Lösungen von Ax = b. Wie kann man alle Lösungen analytisch beschreiben?.

132 132 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Eindeutige Lösbarkeit. Unter welchen Bedingungen gibt es genau eine Lösung x von Ax = b? Numerische Berechnung. Wie werden Lösungen numerisch berechnet? Welche Verfahren gibt es? Realisierung in MATLAB. Welche Methoden stehen in MATLAB zur Verfügung? Antworten auf die ersten Fragen geben die folgenden Sätze. Die Beweise findet man in Büchern über lineare Algebra, zum Beispiel bei [58]. Satz 3.1 (Lösbarkeit) Es sind äquivalent: 1. Das Gleichungssystem Ax = b ist lösbar. 2. b Bild(A). 3. Rang(A) = Rang(A, b), dabei bezeichne (A, b) die Matrix, die entsteht, wenn man die Spalten von A um den Vektor b zu einer Matrix ergänzt. Satz 3.2 (Universelle Lösbarkeit) Es sind äquivalent: 1. Das Gleichungssystem Ax = b ist universell lösbar. 2. Rang(A) = m. Die Beschreibung aller Lösungen von Ax = b liefert folgender Satz. Satz 3.3 (Beschreibung aller Lösungen) 1. Die Menge Null(A) der Lösungen x des homogenen Gleichungssystems Ax = 0 ist ein Untervektorraum von R n der Dimension n Rang(A). 2. Ist x eine Lösung von Ax = b, so erhält man alle Lösungen von Ax = b in der Form x = x + y mit y Null(A). Die Antwort auf die eindeutige Lösbarkeit gibt folgender Satz 3.4 (Eindeutigkeit) Ist Ax = b lösbar, dann sind äquivalent: 1. Das Gleichungssystem Ax = b ist eindeutig lösbar. 2. Null(A) = {0}. 3. Rang(A) = n. Satz 3.5 (Quadratische Matrizen) Ist A R n n eine quadratische Matrix, dann sind äquivalent: 1. Das Gleichungssystem Ax = b ist für jeden Vektor b lösbar. 2. Das Gleichungssystem Ax = b ist für einen Vektor b eindeutig lösbar.

133 3.4 Vektornormen Ax = 0 besitzt nur die Lösung x = Ax = b ist für jeden Vektor b eindeutig lösbar. 5. A ist invertierbar. 6. det(a) 0. Besonders interessant ist der Fall, wenn eine m n-matrix A vollen Rang hat. Denn es gilt: In der Regel hat eine m n-matrix A vollen Rang 10. Hat die Matrix A vollen Rang und liegt ein quadratisches Gleichungssystem vor, dann ist A regulär und das lineare System Ax = b ist für jede rechte Seite b eindeutig lösbar, das heißt universell eindeutig lösbar, wenn A maximalen Rang hat. Ist m < n, dann ist Rang(A) = m und Ax = b ist universell lösbar. Das unterbestimmte System Ax = b ist für jedes b lösbar. Die Lösungsmenge ist dabei stets unendlich. Liegt ein überbestimmtes System Ax = b vor, dann gilt: Rang(A) = n. In diesem Fall hängt es von der rechten Seite b ab, ob es eine eindeutige oder aber keine Lösung gibt. Lineare Systeme können in MATLAB mit \ gelöst werden. 3.4 Vektornormen Will man die Sensitivität, das heißt die Empfindlichkeit der Lösung gegenüber Störungen der Daten, von linearen Gleichungssystemen bezüglich der Koeffizienten studieren, so benötigt man dazu ein Maß für die Fehler in den Koeffizienten der Matrix A und ein Maß für die Störung im Lösungsvektor. Eine Möglichkeit wäre, jeden Fehler einzeln zu behandeln. Für n n-matrizen sind dies aber n 2 -Zahlen zu viele. Statt dessen faßt man die Größe der Vektoren in eine einzige Zahl der Norm. Es gibt Normen sowohl für Matrizen als auch für Vektoren. Eine Vektornorm ist eine Funktion : R n R, die jedem Vektor eine Länge zuordnet. Damit man von einer Länge sprechen kann, müssen folgende Bedingungen erfüllt sein: 1. x > 0 für alle x 0 2. αx = α x 3. x + y x + y Die erste Bedingung drückt aus, daß die Länge eines von Null verschiedenen Vektors stets positiv ist. Die zweite Bedingung besagt, daß sich die Länge eines Vektors proportional ändert, wenn der Vektor mit einem Skalar multipliziert wird. Die dritte Bedingung ist eine Verallgemeinerung der Tatsache, daß eine Seite eines Dreiecks nie länger ist als die Summe der beiden anderen Seiten. Diese sogenannte Dreiecksungleichung zeigt die Abbildung Im Sinne der sogenannten Maßtheorie haben sogar fast alle Matrizen, die nahe bei A liegen, vollen Rang.

134 134 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis y x x + y Abbildung 3.2: Die Dreiecksungleichung Die Bedingungen, die eine Vektornorm erfüllt, werden auch von der Betragsfunktion auf der reellen Zahlengerade R erfüllt, das heißt, die Betragsfunktion ist eine Norm auf den reellen Zahlen 11. Viele Eigenschaften, die man von der Betragsfunktion auf R kennt, lassen sich auf den R n übertragen. Unter x kann man sich die Länge des Vektors x R n vorstellen, das heißt den Abstand des Fußpunktes zur Spitze des Vektors. Bei einem Ortsvektor ist dies der Abstand vom Nullpunkt zur Spitze des Vektors. Obwohl es unendlich viele Vektornormen gibt, sind für die Praxis drei Normen besonders wichtig: Die 1-, 2- und -Norm. Diese sind wie folgt definiert: 1-Norm: x 1 = n i=1 x i 1 2-Norm: x 2 = ( n i=1 x i 2 ) Norm: x = max i=1,...,n x i 1 Die neben den entsprechenden Normen skizzierten Mengen repräsentieren die Einheitskugeln {x R 2 x 1}. Alle drei Normen sind einfach zu berechnen. Insbesondere gilt: x 1 x 2 x. 11 Eine Norm für Vektoren ist die Verallgemeinerung des Betrags für Skalare.

135 3.4 Vektornormen 135 Im R 3 ist die 2-Vektornorm die gewöhnliche EUKLIDISCHE Länge. Deshalb wird sie auch als Euklidische Norm bezeichnet. Die 1-Norm heißt Betragssummennorm und die -Norm heißt Maximumnorm. Die Bezeichnungen 1, 2 und haben ihren Ursprung darin, daß für p > 0 durch n x p = ( x i p ) 1 p Normen auf dem R n gegeben sind, und daß für alle x R n gilt. i=1 lim p x p = x Vektornormen in MATLAB Für einen Vektor x läßt sich jede p-norm (p > 0) mit der MATLAB-Funktion norm berechnen. Die Tabelle 3.2 zeigt die Befehle. MATLAB-Name Bedeutung norm(x)=norm(x,2) x 2 norm(x,1) x 1 norm(x,inf) x norm(x,p) x p für p > 0 Tabelle 3.2: Vektornormen Der Script-File 3.1 berechnet (1, 2,3) T p für p = 0.5,1,1.5,...,9.5 und p = und erzeugt nachfolgende Ausgabe: p norm(x,p)

136 136 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Inf % % Script-File: VektorNormen 3 % 4 % Gibt eine kleine Tabelle von Vektornormen für den 5 % Vektor x = [1-2 3] aus. 6 % close all 8 9 %-Vektor x 10 x = [1-2 3]; 11 % 12 disp( p norm(x,p) ); 13 disp( ); 14 for p = [0.5:0.5:9.5 inf] 15 disp(sprintf( %2.1f %15.4f,p,norm(x,p))) 16 end Script-File 3.1: Berechnet p-normen für x = (1, 2,3) T Die Abbildung 3.3 zeigt die Form der Einheitskreise für verschiedene Normen im R Matrixnormen Wie mißt man die Größe einer Matrix? Für einen Vektor x ist die Länge durch x gegeben 12. Für eine Matrix A ist die Norm A. Bei Vektoren benutzt man das Wort Norm statt der Länge des Vektors. Bei Matrizen spricht man nie von einer Länge; man benutzt ausschließlich das Wort Norm. Es gibt eine sehr allgemeine Definition der Norm einer Matrix, aber alle Matrixnormen, die wir hier verwenden, sind konkreter in dem Sinn, daß sie aus Vektornormen erzeugt werden. Wir wollen uns auf diese Matrixnormen beschränken. Eine naheliegende Möglichkeit, eine Norm von A zu definieren, wäre, alle Elemente zu quadrieren, sie aufzusummieren und als A die positive Quadratwurzel dieser Summe zu wählen. Dieses Vorgehen kommt dadurch zustande, daß man die n n-matrix als langen n n-vektor betrachtet. 12 Die Norm eines Vektors ist die Verallgemeinerung des Betrags einer Zahl.

137 3.5 Matrixnormen Vektoren der Länge 1 für verschiedene Normen x x 1 Abbildung 3.3: Vektoren der Länge 1 für verschiedene Normen Welche Forderungen stellen wir also an eine Matrixnorm? Für Vektoren ist x + y nicht größer als x + y ; dies ist die Dreiecksungleichung. Ferner gilt, daß die Vektoren 2x und 2x die gleiche Norm 2 x haben. Die gleichen Regeln fordern wir für Matrixnormen: A + B A + B αa = α A Die weiteren Anforderungen an Matrixnormen lassen sich nicht über Vektornormen motivieren. Sie beziehen sich auf die multiplikative Struktur der Matrizen. Deshalb fordert man für alle Matrizen und alle Vektoren: Ax A x AB A B Die nachfolgende Definition erfüllt alle diese Forderungen und ordnet jeder von der Nullmatrix verschiedenen Matrix eine positive Zahl zu. Ist eine Vektornorm gegeben, dann ist die Norm einer Matrix A das Maximum von Ax x : A = max x 0 Ax x. Dies bedeutet, daß Ax / x nie größer als A ist. Das heißt: Es ist Ax A x wie gefordert. Die Norm einer Matrix mißt die maximal mögliche Dehnung 13, die die Matrix jedem Vektor zufügt, gemessen in der gegebenen Vektornorm. 13 ein Streckungsfaktor

138 138 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Es gibt Matrixnormen, die leichter zu berechnen sind als andere. Die Matrixnorm, die zur 1-Vektornorm gehört, ist das Maximum der betragsmäßig aufsummierten Spalten der Matrix, das heißt A 1 = max j n a ij und die Matrixnorm, die zur -Vektornorm gehört, ist das Maximum der betragsmäßig aufsummierten Zeilen der Matrix, das heißt A = max i i=1 m a ij Naheliegenderweise nennt man sie Spaltensummennorm bzw. Zeilensummennorm. Leider läßt sich die zur 2-Vektornorm gehörende Matrixnorm nicht so einfach berechnen; es stellt sich heraus, daß diese gleich der Quadratwurzel des größten Eigenwertes der Matrix A T A ist oder, was gleichbedeutend ist, der größte singuläre Wert der Matrix A 14. j=1 Matrixnormen in MATLAB Die drei erwähnten Matrixnormen lassen sich mit MATLAB-Funktionen berechnen. Die Tabelle 3.3 gibt die Funktionen und deren Beschreibung an. Hier ein Zahlenbeispiel mit MATLAB: >> A=[1 2;3 4] A = >> norm(a,1) ans = 6 >> norm(a,inf) ans = 7 >> norm(a) ans = MATLAB-Name Bedeutung norm(a)=norm(a,2) A 2 norm(a,1) A 1 norm(a,inf) A Tabelle 3.3: Matrixnormen 14 Die Norm A 2 heißt Spektralnorm.

139 3.6 Singuläre Werte und die Singulärwertzerlegung Singuläre Werte und die Singulärwertzerlegung Die Singulärwertzerlegung 15 ist eine Faktorisierung einer rechteckigen Matrix. Sie ist sowohl aus theoretischen als auch aus numerischen Gründen bedeutend. Viele Algorithmen verwenden sie als einen Lösungsschritt. Diese Faktorisierung erinnert an Zerlegungen, wie sie bei Eigenwertaufgaben üblich sind. Ist A eine m n-matrix, dann hat die Singulärwertzerlegung die Form A = USV T, wobei U eine m m orthogonale Matrix, V eine n n orthogonale Matrix, und S eine m n Diagonalmatrix mit { s i 0 für i = j, s ij = 0 für i j sind. Die Diagonalelemente s i heißen singuläre Werte von A und sind gewöhnlich absteigend angeordnet, also s i s i+1 für i = 1,...,n 1. Die Spalten u i von U und v i von V sind die singulären Vektoren. Beispiel 3.1 Singuläre Werte und die Singulärwertzerlegung Die Singulärwertzerlegung der Matrix A = ergibt: A = = USV T. Demnach sind s 1 = , s 2 = und s 3 = die singulären Werte der Matrix A. Die singulären Werte von A sind die positiven Quadratwurzeln der Eigenwerte von A T A bzw. AA T. Die Spalten von U heißen linke singuläre Vektoren von A und die Spalten von V heißen rechte singuläre Vektoren von A. Die Matrix V diagonalisiert die symmetrische Matrix A T A. Damit sind die Spalten von V die Eigenvektoren von A T A. Die Matrix U diagonalisiert die symmetrische Matrix AA T. Damit sind die Spalten von U die Eigenvektoren von AA T. Algorithmen zur Berechnung der Singulärwertzerlegung arbeiten aber aus numerischen Gründen direkt mit A und nicht mit AA T bzw. A T A. Dadurch vermeidet man gegebenenfalls einen Informationsverlust, wenn man diese Produkte bilden würde. Die Singulärwertzerlegung wird gewöhnlich durch eine Variante der QR Methode berechnet. QR Methoden besprechen wir später SVD=singular value decomposition. 16 Siehe auch im Anhang B

140 140 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Anwendungen der Singulärwertzerlegung Die Singulärwertzerlegung A = USV T hat viele wichtige Anwendungen. Wir geben einige an. Die EUKLIDISCHE Norm einer Matrix ist gleich dem größten Singulärwert: A 2 = max x 0 Ax 2 x 2 = s max Die Konditionszahl einer Matrix. Die Konditionszahl einer Matrix 17 bezüglich der EU- KLIDISCHEN Norm ist cond 2 (A) = s max s min. Dieses Ergebnis stimmt für quadratische Matrizen mit der früheren Definition überein. Darüber hinaus wird dadurch die Konditionszahl für eine rechteckige Matrix definiert. Während die Konditionszahl einer quadratischen Matrix darüber Auskunft gibt, wie nahe diese an einer singulären Matrix liegt, so gibt die Konditionszahl einer rechteckigen Matrix Information darüber, wie nahe diese an einer rangdefekten liegt. Der Rang einer Matrix. Theoretisch ist der Rang einer Matrix gleich der Anzahl der von Null verschiedenen singulären Werte. In der Praxis ist der Rang einer Matrix oft schwer zu bestimmen, da einige singuläre Werte sehr klein, aber ungleich Null sein können. Dann empfiehlt es sich, vom numerischen Rang zu sprechen und alle singulären Werte, die unter einer Schranke liegen als Null zu betrachten. Eine mögliche Interpretation ist, daß die gegebene Matrix in der Nähe einer Matrix mit diesem berechneten Rang liegt. Für weitere Einzelheiten siehe 6.7. Lösen linearer Ausgleichsaufgaben. Die Lösung kleinster EUKLIDISCHER Länge des Problems Ax b ist gegeben durch: x = s i 0 u i T b s i v i. Die Pseudoinverse einer Matrix. Wir definieren die Pseudoinverse eines Skalars α als 1/α mit α 0 und als 0 für α = 0. Die Pseudoinverse einer möglicherweise rechteckigen Diagonalmatrix definieren wir als deren Transponierte und berechnen jedes Element der Matrix als skalares Pseudoinverses. Die Pseudoinverse einer allgemeinen m n-matrix A wird mit A + bezeichnet und ist durch A + = V S + U T gegeben. Beachten Sie, daß die Pseudoinverse einer allgemeinen m n Matrix A immer existiert. In folgenden Fällen läßt sich die Pseudoinverse explizit mit Hilfe der Matrix A angeben: 17 Die sogenannte Konditionszahl einer Matrix A ist ein Maß dafür, wie nahe A an einer rangdefekten Matrix liegt. Diese Zahl stellt ein Maß für die Sensitivität der Lösungen eines linearen Gleichungssystems bezüglich Störungen dar. Hierauf gehen wir noch näher ein.

141 3.7 Gradient, HESSE- und JACOBI-Matrix 141 A + = A 1, falls m = n und A regulär. A + = (A T A) 1 A T, falls m > n und Rang(A) = n. A + = A T (AA T ) 1, falls m < n und Rang(A) = m. In jedem Fall ist x = A + b = V S + U T b die Lösung der linearen Ausgleichsaufgabe Ax b mit kleinster Euklidischer Länge. Orthonormale Basen für die vier fundamentalen Unteräume. Die Spalten von V, die zu den singulären Werten 0 gehören, bilden eine orthonormale Basis für den Nullraum von A. Die verbleibenden Spalten von V bilden eine orthonormale Basis für den Zeilenraum von A. Analog bilden die Spalten von U, die zu den von 0 verschiedenen singulären Werten gehören, eine orthonormale Basis für den Spaltenraum von A und die verbleibenden Spalten bilden eine orthonormale Basis für den Nullraum von A T. Approximation einer Matrix durch Rang-1-Matrizen. Die Singulärwertzerlegung läßt sich wie folgt schreiben: A = USV T = s 1 E 1 + s 2 E s n E n, wobei E i = u i v T i ist. Jede Matrix E i ist damit vom Rang 1 und kann in einem Vektor der Größe m + n abgespeichert werden. Eine nützliche Approximation an die Matrix kann nun dadurch zustande kommen, daß man diejenigen Summanden nicht berücksichtigt, die zu kleinen singulären Werten gehören, da diese wenig Einfluß auf die Summe haben. Solche Approximationen werden in der Bildverarbeitung, Datenkompression, Kryptographie und verschiedenen numerischen Anwendungen nutzbringend eingesetzt. Singulärwertzerlegung in MATLAB Es gibt in MATLAB Funktionen, um die Singulärwertzerlegung und die verallgemeinerte Singulärwertzerlegung 18 zu berechnen. Die Tabelle 3.4 zeigt die Funktionen. Funktion svd(a) gsvd(a) Beschreibung Singulärwertzerlegung von A Verallgemeinerte Singulärwertzerlegung von A Tabelle 3.4: Singulärwertzerlegungen 3.7 Gradient, HESSE- und JACOBI-Matrix Die Ableitung einer Funktion f(x) einer Variablen x bezeichnen wir mit df(x)/dx oder mit f (x). f (k) (x) d k f(x)/dx k ist die k te Ableitung von f. Partielle Ableitungen einer Funktion mehrerer Variablen, wie z.b. f(x 1,x 2 ) schreiben wir als f/ x 1 oder als f x1. 18 Es ist möglich, die Singulärwertzerlegung zu verallgemeinern. Hierzu verweisen wir auf [34].

142 142 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Eine stetige Funktion f : R n R ist im Punkt x R n stetig differenzierbar, falls ( f/ x i )/(x) für alle 1 i n existiert und stetig ist. Der Gradient von f in x ist dann durch f(x) = ( f x 1 (x),, ) T f x n (x) definiert. Die Funktion f ist stetig differenzierbar in einer offenen Menge D R n, falls f in jedem Punkt von D stetig differenzierbar ist. Eine stetig differenzierbare Funktion f : R n R ist im Punkt x R n zweimal stetig differenzierbar, falls alle Ableitungen ( 2 f/ x i x j )(x) existieren und stetig sind. Die HESSE-Matrix von f in x ist die n n-matrix H f (x) = 2 f x f x n x 1 2 f x 1 x 2. 2 f x n x 2 2 f x 1 x n Die HESSE-Matrix einer zweimal stetig differenzierbaren Funktion f ist symmetrisch. Die Funktion f ist stetig differenzierbar in einer offenen Menge D R n, falls f in jedem Punkt von D stetig differenzierbar ist.. 2 f x 2 n Beispiel 3.2 Gradient und HESSE-Matrix Wir betrachten die Funktion f(x 1, x 2) = 2x x 2 1x 2 + 2x 1x x 2 2. Der Gradient dieser Funktion ist und die HESSE-Matrix ist Im Punkt x 0 = ( 2,3) T ist daher: ( ) 8x 3 f(x) = 1 + 6x 1x 2 + 2x 3 2 3x x 1x x 2 H f (x) = f(x 0) = ( ) 24x x 2 6x 1 + 6x 2 2 6x 1 + 6x x 1x ( ) H f (x 0) =. ( ) Eine vektorwertige Funktion f : R n R m ist im Punkt x R n stetig differenzierbar, wenn jede Komponentenfunktion f i : R n R, i = 1,...,m, in x differenzierbar ist. Die JACOBI-Matrix von f im Punkt x ist die m n-matrix: J f (x) = Beispiel 3.3 JACOBI-Matrix Wir betrachten die vektorwertige Funktion: f 1 x 1.. f m x1 f 1 x n f m xn. sin(x 1) + cos(x 2) f(x) f(x 1, x 2) = e 3x 1+x 2 2 4x x 1x 2 2.

143 3.8 Der Satz von TAYLOR 143 Damit ergibt sich die JACOBI Matrix zu: cos(x 1) sin(x 2) 3e 3x 1+x 2 2 2x 2e 3x 1+x x x x 1x 2. Im Punkt x 0 = (1, 2) T wird daraus: cos(1) sin(2) 3e 7 4e Der Satz von TAYLOR Die Bedeutung und Nützlichkeit des Satzes von TAYLOR kann nicht überschätzt werden und wird deshalb in jeder Analysis-Vorlesung behandelt. Die Aussage dieses Satzes ist, daß eine gegebene hinreichend oft differenzierbare Funktion f in der Nähe eines gegebenen Punktes x 0 durch ein Polynom das TAYLOR-Polynom gut approximiert werden kann. Dadurch besteht die Möglichkeit, eine Funktion lokal durch eine einfachere Funktion mit einfachen algebraischen Termen zu ersetzen. Diese Idee durchdringt die gesamte numerische Mathematik und wird eingesetzt, um Nullstellen von Funktionen zu finden, Funktionen zu differenzieren und integrieren, Funktionen zu optimieren, Differentialgleichungen zu lösen. Wir formulieren nun den Satz von TAYLOR und verweisen auf [25], [43] oder [67] für einen Beweis. Satz 3.6 (Satz von TAYLOR) Für jede auf dem offenen Intervall I R (n + 1)-mal stetig differenzierbare Funktion f und x 0,x I gilt f(x) = f(x 0 ) + f (x 0 )(x x 0 ) n! f(n) (x 0 )(x x 0 ) n + R n (x) mit dem LAGRANGE-Restglied oder Fehlerterm: R n (x) = f(n+1) (ξ) (n + 1)! (x x 0) n+1, wobei ξ ein nicht näher bekannter Wert zwischen x und x 0 ist. Das im Satz erwähnte Polynom T n (x) = f(x 0 ) + f (x 0 )(x x 0 ) n! f(n) (x 0 )(x x 0 ) n = n k=0 f (k) (x 0 ) (x x 0 ) k k!

144 144 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis heißt TAYLOR Polynom von f der Ordnung n. Sind die Werte einer Funktion f : I R und ihrer ersten n Ableitungen in einem Punkt x = x 0 aus dem Inneren des Intervalls I bekannt, dann wird mit p(x) = T n (x) = f(x 0 ) + f (x 0 )(x x 0 ) n! f(n) (x 0 )(x x 0 ) n ein Polynom bestimmt, das die Funktion in einer Umgebung des Punkte x = x 0 approximiert. Die Kurve y = p(x) und y = f(x) gehen beide durch (x 0,f(x 0 )), sie haben dort dieselbe Steigung, dieselbe Krümmung und alle Eigenschaften gemeinsam, die sich aus den ersten Ableitungen bis zur Ordnung n ergeben: p (k) (x 0 ) = f (k) (x 0 ), (1 k n). Die Bedeutung des Satzes von TAYLOR besteht darin, daß der bei dieser Approximation gemachte Fehler f(x) T n (x) = R n (x) durch die Kenntnis des Restgliedes abgeschätzt werden kann. Beispiel 3.4 Zum Satz von TAYLOR Bestimme (a) das TAYLOR-Polynom zweiter Ordnung T 2(x) und (b) das TAYLOR-Polynom dritter Ordnung T 3(x) für cos(x) um x 0 = 0 und verwende diese Polynome, um cos(0.01) zu approximieren. (c) Stelle die Situation in MATLAB grafisch dar, indem darüber hinaus das TAYLOR-Polynom T 4(x) dargestellt wird. (a) Für n = 2 und x 0 = 0 liefert der Satz von TAYLOR cos(x) = 1 x2 2 + sin(ξ) x 3, 6 wobei ξ eine Zahl zwischen 0 und x ist. Für x = 0.01 gilt dann cos(0.01) = 1 (0.01)2 2 wobei 0 < ξ < gilt. Da sin(ξ) < 1 gilt, folgt + sin(ξ) (0.01) 3 = sin(ξ) (0.1 6) 10 6, 6 cos(0.01) , so daß die Approximation in fünf Dezimalen mit cos(0.01)übereinstimmt. Mit MATLAB findet man cos(0.01) = , was eine Übereinstimmung in den ersten neun Dezimalen bedeutet. (b) Da f (0) = 0 ist, gilt für das TAYLOR-Polynom dritter Ordnung um x 0 = 0 cos(x) = 1 x2 2 + cos(ˆξ) 24 x4, mit 0 < ˆξ < Das approximierende Polynom ist das gleiche und damit hat die Näherung den Wert Nun aber haben wir eine bessere gesicherte Genauigkeit, denn: cos(ˆξ) 24 x (0.01) (c) Verfügt man über die Symbolic Math Toolbox, so kann man das TAYLOR-Polynom symbolisch berechnen.» T2=taylor(cos(x),3) T2 = 1-1/2*x^2» T3=taylor(cos(x),4) T3 = 1-1/2*x^2» T4=taylor(cos(x),5) T4 = 1-1/2*x^2+1/24*x^4

145 3.8 Der Satz von TAYLOR 145 Erwartungsgemäß gilt T 2(x) = T 3(x). Mit der Funktion ezplot können wir nun diese drei TAYLOR- Polynome und die Kosinusfunktion im Intervall [ π, π] grafisch darstellen, siehe Abbildung 3.4. Man erkennt deutlich, daß mit wachsendem Grad des TAYLOR Polynoms der Bereich sich vergrößert, in dem Funktion und Polynom grafisch übereinstimmen cos(x) 0.4 T 2 (x)=1 x 2 /2 0.6 T 4 (x)=1 x 2 /2+x 4 / x Abbildung 3.4: Zum Satz von TAYLOR Beim praktischen Rechnen ist man oft nur am TAYLOR-Polynom bis höchstens zur zweiten Ordnung interessiert bzw. für eine Funktion f : R n R f(x) f(x 0 ) + f (x 0 )(x x 0 ) + f (x 0 ) (x x 0 ) 2 2 f(x) f(x 0 ) + f(x 0 ) T (x x 0 ) xt H f (x 0 )x, weil Terme höherer Ordnung im mehrdimensionalen Fall zu aufwendig werden. Nicht unerwähnt bleiben soll die MATLAB-Funktion taylortool aus der Symbolic Math Toolbox. Ruft man taylortool auf, so öffnet MATLAB eine grafische Benutzeroberfläche und zeigt symbolisch und grafisch die Approximationseigenschaften des Satzes von TAYLOR. Vergleichen Sie hierzu den Anhang A. Der Satz von TAYLOR wird oft auch in anderen äquivalenten Formen angegeben. Dabei haben die Restglieder jeweils eine andere Form: Satz von TAYLOR mit integralem Restglied: R n (x) = 1 n! x x 0 (x t) n f (n+1) (t)dt

146 146 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis Satz von TAYLOR in alternativer Form: wobei f(x + h) = f(x) + f (x)h + + f(n) (x) h n + R n (h), n! und ξ zwischen x und x + h liegt. R n (h) = f(n+1) (ξ) (n + 1)! hn+1 Läßt man im TAYLOR-Polynom T n (x) n gegen unendlich gehen, so spricht man von der TAYLOR-Reihe von f um x 0 : T f (x) = k=0 f k (x 0 ) (x x 0 ) k. k! Jede Funktion f, die in x 0 unendlich oft differenzierbar ist, besitzt eine TAYLOR-Reihe T f. Diese Reihe konvergiert und stellt die Funktion im Konvergenzbereich genau dann dar, wenn das Restglied gegen Null geht. Wichtige und bekannte Beispiele sind die Exponential-, Sinus- und Kosinusfunktion: Funktion TAYLOR-Reihe Konvergenzbereich e x 1 + x + x 2 /2 + x 3 /6 + x < sin(x) x x 3 /6 + x 5 /120 + x < cos(x) 1 x 2 /2 + x 4 /24 + x < Für weitere Einzelheiten verweisen wir wieder auf die bereits oben genannte Literatur [25], [43] oder [67]. 3.9 Zur Komplexität numerischer Algorithmen Der Rechenaufwand oder die Komplexität numerischer Algorithmen wird gewöhnlich durch die Anzahl der arithmetischen Operationen gemessen. Traditionell wurden in der numerischen Analysis nur die Multiplikationen (und möglicherweise Divisionen und Quadratwurzeln) gezählt, da Multiplikationen gewöhnlich zeitaufwendiger waren als Additionen und Subtraktionen, und weil bei vielen Algorithmen ähnlich viele Additionen wie Multiplikationen auftreten (z.b. beim Skalarprodukt zweier Vektoren). Neuerdings aber gibt es kaum noch nennenswerte Unterschiede zwischen Additionen und Multiplikationen. Somit wird zunehmend jede arithmetische Operation gezählt. Um die Anzahl arithmetischer Operationen und die Genauigkeit von Approximationen zu beschreiben, wird oft die groß O -Notation 19 verwendet. Die Bezeichnung kennzeichnet die Größenordnung oder den dominanten Term einer Funktion. Beim Zählen arithmetischer Operationen sind wir am Verhalten der Größe sagen wir n des Problems interessiert, wenn n groß wird. Wir sagen, daß 19 Manchmal auch LANDAU-Symbol genannt. f(n) = O(g(n))

147 3.10 Weitere Bemerkungen und Notationen 147 (gelesen: f ist von der Größenordnung g ) gilt, falls es eine positive Konstante c gibt, so daß für hinreichend großes n gilt: Zum Beispiel ist: f(n) c g(n). 3n 3 + 2n 2 + 5n = O(n 3 ), da für große n, die Terme mit kleinerem Exponent als 3 vernachlässigbar werden. Um die Genauigkeit einer Approximation zu bestimmen, sind wir am Verhalten einer Größe h interessiert, wie zum Beispiel der Schrittweite. Wir sagen, daß f(h) = O(g(h)) gilt, falls es eine positive Konstante c gibt, so daß für hinreichend kleines h gilt: Zum Beispiel ist: f(h) c g(h). 1 1 h = 1 + h + h2 + h = 1 + h + O(h 2 ), da Terme nach h 2 vernachlässigbar sind, falls h hinreichend klein wird Weitere Bemerkungen und Notationen Die in diesem Kapitel dargestellten Grundbegriffe werden ausführlich in Einführungsvorlesungen über lineare Algebra und Analysis erläutert, siehe [24], [25, 26], [43, 44], [53], [58] und [102]. Dort werden auch orthogonale Vektoren und Matrizen behandelt. Die Verallgemeinerung auf unendlich dimensionale Räume führt auf die HILBERT Raum Theorie. Algorithmen, die auf orthogonalen Matrizen beruhen, wurden um 1960 durch Arbeiten von HOUSEHOLDER, FRANCIS, GIVENS, WILKINSON, GOLUB und andere verbreitet. Diese Algorithmen vereinen theoretische Eleganz und numerische Stabilität. Lange Zeit war der Begriff Norm der Funktionalanalysis vorbehalten und wurde nur langsam in die lineare Algebra übernommen. Die Erklärung ist wahrscheinlich darin zu suchen, daß die lineare Algebra ihre Wurzeln in der Algebra und nicht in der Analysis hat. Da in den Anwendungen die Vektorräume R n und C n besonders wichtig sind, ist der Einfluß der Analysis gewachsen. Immer dann, wenn in der Anwendung die Rede von einer Größe bzw. Länge ist, sind Normen wichtig, insbesondere bei Konvergenzuntersuchungen. Die Singulärwertzerlegung für Matrizen wurde unabhängig voneinander von BELTRA- MI (1873), JORDAN (1874) und SYLVESTER (1889) entdeckt. Die Verallgemeinerung auf unendlich dimensionale Räume wurde im Zusammenhang mit Integralgleichungen von SCHMIDT (1907) und WEYL (1912) durchgeführt. Eine historische Diskussion findet man in [51] und [97]. Trotz dieser lang zurück reichenden Geschichte war die Singulärwertzerlegung in der angewandten Mathematik nicht sehr verbreitet. Dies änderte sich nach 1960 als GOLUB

148 148 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis und andere zeigten, daß man die Singulärwertzerlegung effektiv berechnen kann. Viele moderne, stabile Algorithmen basieren nun auf der Singulärwertzerlegung, weil das Problem der Berechnung der singulären Werte einer allgemeinen Matrix wie das Berechnen der Eigenwerte einer HERMITESCHEN Matrix gut konditioniert ist. Im Gegensatz dazu war die Bedeutung der Eigenwerte von Beginn an akzeptiert. TAYLOR Reihen werden in der Analysisvorlesung behandelt, siehe zum Beispiel [25, 26], [43, 44] oder [115, 116] Übungsaufgaben 3.1 Berechnen Sie ( )( ) Ax = zeilenweise und spaltenweise. Kontrollieren Sie Ihr Ergebnis mit MATLAB. 3.2 Berechnen Sie x y z Überprüfen Sie das Ergebnis mit MATLAB. 3.3 Für welche 2 2-Matrix P gilt: P ( ) x = y ( ) y x Überprüfen Sie das Ergebnis mit MATLAB. 3.4 Welche 2 2-Matrix R dreht jeden Vektor um 90? Es muß also sein: ( ) ( ) x y R = y x Überprüfen Sie das Ergebnis mit MATLAB. 3.5 Welche 2 2-Matrix dreht jeden Vektor um 180? Überprüfen Sie das Ergebnis mit MATLAB. 3.6 Welche 2 2-Matrix E subtrahiert die erste Komponente von der zweiten ( ) ( ) 3 3 E =? 5 2 Für welche 3 3-Matrix E gilt 3 3 E 5 = 2? 7 7 Überprüfen Sie das Ergebnis mit MATLAB. Berechnen Sie x y z 3.7 Multiplizieren Sie den Vektor u 0 = (1,0) T mit der Matrix ( ) A = Das Ergebnis sei u 1. Berechnen Sie dann u 2 = Au 1 und schließlich u 3 = Au 2. Welche Eigenschaft haben die vier Vektoren u 0, u 1, u 2, u 3? 3.8 Rechnen Sie mit MATLAB nach der Idee der vorhergehenden Aufgabe bis zum Vektor u 7. Machen Sie das gleiche, aber beginnen Sie die Iteration mit dem Startvektor v 0 = (0,1) T. Wiederholen Sie schließlich den Vorgang mit dem Startvektor w 0 =

149 3.11 Übungsaufgaben 149 (0.5,0.5) T. Was beobachten Sie bei den Vektoren u 7, v 7 und w 7? Plotten Sie die Ergebnisse auch in MATLAB. Hierzu können Sie das MATLAB-Script Markov verwenden; dieses befindet sich auf der beiliegenden CD. 3.9 Gegeben seien und A = ( ) x = 8. 9 Man berechne Ax zeilenweise und spaltenweise Angenommen Sie wollen einen Algorithmus testen, der als Eingabe eine symmetrische Matrix verlangt. Finden Sie eine Möglichkeit eine (beliebige) symmetrische Matrix in MATLAB zu erzeugen Angenommen Sie wollen einen Algorithmus testen, der als Eingabe eine orthogonale Matrix benötigt. Finden Sie eine Möglichkeit eine (beliebige) orthogonale Matrix zu erzeugen Zeigen Sie, daß die Matrix G = ( c s s c ) R 2 mit c 2 + s 2 = 1 orthogonal ist. Eine Matrix dieser Form heißt GIVENS-Matrix Zeigen Sie, daß die Matrix H = I 2 uut u T u orthogonal ist. Eine Matrix dieser Form heißt HOUSEHOLDER-Matrix Eine n n-hadamard-matrix A besitzt nur die Elemente ±1 und erfüllt die Bedingung A T A = ni. Man zeige det(a) = n n 2. Überprüfen Sie die Formel in MATLAB für n = Berechnen Sie mit inv und rref die Inverse der Matrix A = Man berechne die 1-, 2- und -Norm der Vektoren ( ) ( ) ( ) 2 1 1, und Man berechne die 1-, 2- und -Norm der Matrizen ( ) ( ) ( ) , und Machen Sie sich mit der Funktion taylortool vertraut, falls Sie Zugang zur Symbolic Math Toolbox haben Gegeben ist die Funktion f(x) = 2xcos(2x) (x 2) 2 und x 0 = 0. (a) Berechnen Sie das TAYLOR-Polynom dritten Grades T 3 (x) und verwenden Sie es, um f(0.4) zu approximieren. (b) Verwenden Sie den Satz von TAYLOR, um eine obere Schranke für den Fehler f(0.4) T 3 (0.4) zu finden. Berechnen Sie den tatsächlichen Fehler. (c) Finden Sie das TAYLOR-Polynom vierter Ordnung T 4 (x) und verwenden Sie es, um f(0.4) anzunähern. (d) Verwenden Sie den Satz von TAYLOR, um eine obere Schranke für den Fehler f(0.4) T 4 (0.4) zu finden. Berechnen Sie den tatsächlichen Fehler.

150 150 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis 3.20 Finden Sie für die Funktion f(x) = ln(x) das TAYLOR-Polynom fünfter Ordnung T 5 (x) mit Entwicklungspunkt x 0 = 1. Berechnen Sie eine Schranke für den maximalen Fehler, der auftritt, wenn ln(x) durch T 5 (x) im Intervall [1,1.3] approximiert wird Es seien x = [0:4,4,-4,1,1] und y = ones(9,1) gegeben. Als Norm ist im folgenden stets die EUKLIDISCHE Norm gemeint. (a) Berechnen Sie mit MATLAB die Werte x, y, x + y und verifizieren Sie die Dreiecksungleichung. Überprüfen Sie ebenfalls die Gültigkeit der Parallelogrammidentität: x + y 2 + x y 2 = 2( x 2 + y 2 ). (b) Berechnen Sie die Gültigkeit der Parallelogrammidentität: t = xt y x y. Warum ist t kleiner oder gleich 1? Berechnen Sie den Winkel in Grad, den die beiden Vektoren x und y einschließen. (c) Berechnen Sie den Projektionsvektor p von x auf y. Setzen Sie z = x p und überprüfen Sie, daß z auf p orthogonal steht, indem Sie das Skalarprodukt berechnen. Berechnen Sie x 2 und z 2 + p 2 und verifizieren Sie den Satz von Pythagoras Wir betrachten n n-matrizen A n mit 2 auf der Diagonalen und -1 auf der oberen und unteren Nebendiagonale. Die übrigen Matrixeinträge von A n sind alle 0. Somit gilt: A 1 = ( 2 ) ( ) 2 1 A 2 = A 3 = Diese Matrizen lassen sich in MATLAB einfach erzeugen. Zum Beispiel erzeugt man A 4 durch folgende Befehle: >> n = 4; >> A = toeplitz([2,-1,... zeros(1,n-2)]); (a) Berechnen Sie für n = 2,3,4,5,6 die Determinante von A n. Welche Berechnungsformel vermuten Sie für det(a n )? (b) Zeigen Sie, daß die Rekursionsgleichung det(a n+1 ) = 2det(A n ) det(a n 1 ) für n 3 gilt Es sei die Matrix A = gegeben. Berechnen Sie mit MATLAB numerisch und symbolisch eine Basis für den Zeilenraum von A, eine Basis für den Spaltenraum von A, eine Basis für den Nullraum von A, eine Basis für den Nullraum von A T. Was beobachten Sie? 3.24 Die ersten Wavelets sind die Spalten der Wavelet-Matrix W =

151 3.11 Übungsaufgaben 151 Was ist das Besondere an den Spalten der Matrix W? Berechnen Sie die inverse Wavelet Transformation W 1 und überprüfen Sie das Ergebnis mit der Symbolic Toolbox. Finden Sie eine Beziehung zwischen W 1 und W Berechnen Sie per Hand und mit MAT- LAB die 1-, 2- und -Normen der Vektoren: ( ) ( ) 2 1 v 1 = v 1 2 = 0 v 3 = ( Berechnen Sie per Hand und mit MAT- LAB die 1-, 2- und -Normen der Matrizen: ( ) ( ) A 1 = A = 2 2 A 3 = ( Berechnen Sie per Hand, numerisch und symbolisch mit MATLAB die Inverse der Matrix: A = Verwenden Sie die Funktionen inv und rref Vergleichen Sie mit den Kommandos tic und toc die benötigten Zeiten für das Lösen eines linearen Gleichungssystems einmal mit A\b und zum anderen mit inv(a)*b. Wählen Sie dazu eine Zufallsmatrix A der Größe n = 200 und n = 500 sowie eine entsprechende rechte Seite b Vergleichen Sie die Anzahl der Gleitpunktoperationen, die für das Lösen eines linearen Gleichungssystems einmal mit A\b ) ) und zum anderen mit inv(a)*b benötigt werden. Wählen Sie dazu eine Zufallsmatrix A der Größe n = 200 und n = 500 sowie eine entsprechende rechte Seite b Gegeben seien die folgenden Matrizen 2 1 A = ( ) 1 3 B = C = und D = ( 1 2 ). Führen Sie in MATLAB die folgenden Operationen durch, falls sie definiert sind: (a) DB 2 (b) BC T (c) (CB)D T (d) AC T 3.31 Gegeben seien die folgenden Matrizen 2 1 A = B = C = ( und D = ( 1 2 ). Führen Sie in MATLAB die folgenden Operationen durch, falls sie definiert sind: (a) (AC T ) 1 (b) det(b) (c) det(ac T ) (d) (C T A) 1 )

152 152 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis 3.32 Es sei n 1. Dann besteht der R n aus n reellen Zahlen. n-tupeln reeller Zahlen. n-tupeln von Vektoren Wie viele Untervektorräume hat R 2? zwei: {0} und R 2. vier: {0}, R 0, 0 R und R 2. unendlich viele Welche der folgenden Eigenschaften hat die Matrizenmultiplikation nicht: Assoziativität Kommutativität Distributivität Überprüfen Sie Ihr Ergebnis in MATLAB Der Rang der 3 3-Matrix ist Es sei I R n n die Einheitsmatrix. Dann ist die transponierte Matrix I T = T T Begründen Sie Ihre Antwort durch ein Beispiel in MATLAB. λ λ λ 3.37 det λ λ λ = λ λ λ 0 λ λ 3 Überprüfen Sie Ihr Ergebnis in MATLAB Welche der folgenden Matrizen ist (oder sind) orthogonal? ( ) ( ) ( ) Überprüfen Sie Ihr Ergebnis in MATLAB Welche der folgenden Matrizen ist symmetrisch? Finden Sie eine Basis für den Nullraum. Wie ist die Dimension? ( ) 2 2 (a) 1 1

153 3.11 Übungsaufgaben 153 (b) Finden Sie heraus, ob die folgenden Vektoren linear abhängig oder unabhängig sind. ( ) ( ) 1 3 (a) und 2 6 ( ) ( ) 1 3 (b) und 2 5 (c) , und Finden Sie die allgemeine Lösung der folgenden linearen Gleichungssysteme. Verwenden Sie die MATLAB-Funktion rref. (a) 3x 1 9x 2 + 6x 3 = 15 2x 1 + 9x 2 + x 3 = Die Pseudoinverse X R n m von A R m n kann als eindeutige Matrix definiert werden, die folgenden vier MOORE PENROSE Bedingungen genügt: 1. AXA = A, 2. XAX = X, 3. AX = (AX) T, 4. XA = (XA) T. Es sei A = USV T eine Singulärwertzerlegung, mit S = diag(σ i ) und r = Rang(A). Beweisen Sie, daß X = V diag(σ1 1,...,σ 1 r,0,...,0)u T die Bedingungen 1. bis 4. erfüllt und somit die Pseudoinverse von A ist. Zeigen Sie, daß (A + ) + = A gilt. (b) 8x 1 10x 2 228x 3 = 112 2x 1 x 2 4x 3 = 16 4x 1 5x 2 14x 3 = Für die HILBERT Matrizen gilt a ij = 1/(i + j 1). Berechnen Sie mit der eingebauten MATLAB-Funktion invhilb(6) die exakte inverse Matrix. Rufen Sie dann inv(hilb(6)) auf. Warum sind die Resultate verschieden?

154 154 3 Grundbegriffe und Notationen aus der linearen Algebra und Analysis

155 4 Grundlegende Konzepte numerischen Rechnens Never in the history of mankind has it been possible to produce so many wrong answers so quickly. CARL-ERIK FRÖBERG Gegenstand dieses Buches ist die numerische Mathematik. Die numerische Mathematik beschäftigt sich mit der Entwicklung und Analyse numerischer Algorithmen. Die dabei vorkommenden Größen sind meist stetiger Natur, im Gegensatz zu diskreten Größen. Zugrundeliegende Objekte sind Gleichungen und Funktionen, deren Variablen Zeit, Ort, Geschwindigkeit, Temperatur, Dichte, Druck usw. stetig sind. Viele Probleme der Mathematik beinhalten Ableitungen, Integrale und Nichtlinearitäten. Sie können deswegen in der Regel nicht in endlich vielen Schritten gelöst werden, sondern müssen durch einen iterativen theoretisch unendlichen Prozeß angegangen werden. Natürlich kann man praktisch nicht unendlich oft iterieren, sondern hört dann auf, wenn man nahe genug an der Lösung ist. Ein wichtiger Gesichtspunkt ist deshalb, schnelle Algorithmen so zu entwerfen, daß die resultierende, approximative Lösung auch genau genug an der wahren Lösung liegt. Hat man einen schnellen, iterativen Algorithmus gefunden, so ist es möglich, daß man diesen auch dort einsetzt, wo man sonst einen endlichen Algorithmus verwenden würde. Zum Beispiel gibt es Situationen, in denen man lineare Gleichungssysteme besser durch iterative Methoden löst als durch (endliche) Faktorisierungen. Konsequenterweiser ist es wichtig, die vorkommenden Approximationen und ihre Effekte zu studieren. Viele Verfahren machen Gebrauch von unterschiedlichen Approximationsmethoden. Eine davon ist, daß man nicht jede reelle Zahl exakt in einem digitalen Computer darstellen kann. 4.1 Allgemeine Lösungsstrategien Hat man im wissenschaftlichen Rechnen, in der numerischen Mathematik oder in der Ingenieurmathematik ein schwieriges Problem zu lösen, so besteht eine allgemeine Strategie darin, dieses Problem durch ein leichteres zu ersetzen, so daß die Lösung die gleiche oder aber mindestens eine gute Näherung ist. Man ersetzt einen unendlichen Prozeß durch einen endlichen, z.b. eine unendliche Summe durch eine endliche oder die Ableitungen durch Differenzenquotienten. Man ersetzt Matrizen durch solche, die eine einfachere Struktur haben. 155

156 156 4 Grundlegende Konzepte numerischen Rechnens Man ersetzt Funktionen durch einfachere Funktionen, z.b. durch Polynome. Man ersetzt nichtlineare Probleme durch lineare Probleme. Man ersetzt Differentialgleichungen durch algebraische Gleichungen. Man ersetzt Systeme hoher Ordnung durch Systeme niedriger Ordnung. Man ersetzt unendlich-dimensionale Räume durch endlich-dimensionale. Wenn wir zum Beispiel ein nichtlineares Gleichungssystem lösen müssen, dann ersetzen wir dieses in einem ersten Prozeßabschnitt durch ein lineares Gleichungssystem. Dieses wiederum durch ein spezielles lineares System Dreiecksystem, das leichter zu lösen ist. Zusätzlich muß man überprüfen, ob die resultierende Lösung auch eine gute Näherung für das nichtlineare System darstellt. Im allgemeinen sind daher zwei Dinge zu tun: 1. Wir müssen Ausschau nach alternativen Problemen oder Problemklassen halten, die einfacher zu lösen sind. 2. Wir müssen das gegebene Problem auf die alternative Problemstellung transformieren mit der Auflage, daß die Lösung in einem gewissen Sinn erhalten bleibt. Idealerweise ist die Lösung des Ersatzproblems gleich der Lösung des Ausgangsproblems. Dies ist jedoch in der Regel nicht der Fall. Dann aber muß die approximative Lösung gut genug sein. Ist sie es nicht, so soll zusätzlich die Möglichkeit bestehen können, durch zusätzlichen Arbeitsaufwand, die Genauigkeit zu erhöhen. Daher muß die Genauigkeit abgeschätzt und die Konvergenz gegen die wahre Lösung gezeigt werden. 4.2 Approximationen und Fehlerquellen Woher kommen die Approximationen? Bevor man irgendwelche Rechnungen beginnt, führt man bereits Näherungen durch: Modellierungsfehler. Einige physikalische Eigenschaften des Problems oder des Systems müssen vereinfacht oder weggelassen werden. Reale Meßfehler. Laborinstrumente haben nur endliche Genauigkeit. Aus Kostengründen werden oft nur wenige Meßreihen durchgeführt. Eingabefehler. Eingabedaten sind oft selbst nur Näherungen. Auf die bisher besprochenen Approximationen kann meist nur wenig Einfluß genommen werden, dennoch sind sie für Genauigkeitsbestimmungen beim numerischen Rechnen von entscheidender Bedeutung. Einfluß dagegen haben wir auf die folgenden Näherungen: Diskretisierungsfehler. Mathematische Modelle müssen oft genähert werden. Zum Beispiel muß man den Differentialquotienten durch den Differenzenquotienten annähern.

157 4.2 Approximationen und Fehlerquellen 157 Abbruchfehler. Bei iterativen Verfahren müssen Abbruchkriterien verwendet werden. Rundungsfehler. Die Darstellung reeller Zahlen im Computer und die Rechnung mit ihnen ist im allgemeinen unexakt. Daten- und Rechenfehler Wie wir soeben gesehen haben, können Fehler bereits bei der Eingabe geschehen. Andere Fehler entstehen dann beim Rechnen. Diese Unterscheidung ist jedoch nicht immer klar. Rundungsfehler zum Beispiel können sowohl die Eingabe als auch die Ergebnisse beeinflussen. Betrachten wir zum Beispiel das Auswerten eines Funktionswertes an einer Stelle. Hierzu sei f : R R eine Funktion, x der wahre Eingabewert und f(x) der zu berechnende Wert. Nehmen wir nun an, daß wir mit einem ungenauen Eingabewert x statt x und einer approximativen Funktion f statt f rechnen müssen. Dann gilt: Totaler Fehler = f( x) f(x) = ( f( x) f( x)) + (f( x) f(x)) = Rechenfehler + Datenfehler Der erste Summand ist die Differenz zwischen dem approximativen und dem exakten Funktionswert für den gleichen Eingabewert x und kann als Rechenfehler betrachtet werden. Der zweite Summand ist die Differenz zwischen den exakten Funktionswerten des ungenauen und wahren Eingabewertes. Er kann als Datenfehler interpretiert werden. Welchen Algorithmus wir auch immer wählen, auf den Datenfehler hat dieser keinen Einfluß. Diskretisierungs- und Rundungsfehler Ein Rechenfehler, der während einer Rechnung am Computer entsteht, kann weiter in Diskretisierungs- und Rundungsfehler eingeordnet werden. Ein Diskretisierungsfehler ist die Differenz zwischen dem wahren Ergebnis (für die tatsächliche Eingabe) und dem Ergebnis, das man erhalten würde, wenn man mit einem gegebenen Algorithmus am Computer exakt rechnen könnte. Ersetzt man zum Beispiel den Differentialquotient durch den Differenzenquotient, so macht man einen Diskretisierungsfehler. Ein Rundungsfehler ist die Differenz zwischen dem Ergebnis, das ein gegebener Algorithmus in genauer Arithmetik erzeugt, und dem Ergebnis, das durch den gleichen Algorithmus in endlich genauer Arithmetik berechnet wird. Rundungsfehler werden wir in Abschnitt 4.3 genauer studieren. Folglich verstehen wir also unter einem Rechenfehler die Summe aus Diskretisierungsund Rundungsfehler. Obwohl beide Fehlertypen beim numerischen Rechnen eine große Rolle spielen, so ist einer von beiden im Vergleich zum anderen meist dominant. Grob gesprochen kann man sagen: Bei einem algebraischen Problem (zum Beispiel beim Lösen linearer Gleichungssysteme) fällt der Rundungsfehler mehr ins Gewicht als der Diskretisierungsfehler. Anderer-

158 158 4 Grundlegende Konzepte numerischen Rechnens seits sind bei Problemen, die Ableitungen, Integrale oder Nichtlinearitäten enthalten, meist Diskretisierungsfehler bedeutsamer als Rundungsfehler. Das Unterteilen von Fehlern ist für das Verständnis numerischer Algorithmen von großer Bedeutung. Dennoch ist es bei einem vorgegebenen Problem nicht nötig und auch nicht möglich, alle Fehlertypen individuell quantitativ zu präzisieren. Absoluter und relativer Fehler Ist b ein Näherungswert einer Zahl a, dann gibt es zwei mögliche Wege, den Grad der Abweichung von b gegenüber a zu messen den absoluten und den relativen Fehler. Der Unterschied der beiden Fehlermaße besteht darin, daß der absolute Fehler keinerlei Bezug auf die Maßzahl der Größe nimmt, wohingegen der relative Fehler die Maßzahl als einen Skalierungsfaktor berücksichtigt. Absoluter Fehler Wir beginnen mit der Definition des absoluten Fehlers. Definition 4.1 Es seien a und b zwei Zahlen. Der absolute Fehler von b als ein Näherungswert von a ist die Zahl ǫ = a b. Bevor wir den relativen Fehler besprechen, wollen wir mehrere Bemerkungen zur Definition machen. Der absolute Fehler mißt den Abstand zwischen einem Näherungswert und seinem wahren Wert. Führt man die Zahl e = b a ein, so gilt b = a + e. Damit gilt: Ist b eine Näherung für a mit absolutem Fehler ǫ, dann gibt es eine Zahl e = b a, so daß gilt: (a) e = ǫ, (b) b = a + e. Ein kleiner absoluter Fehler bedeutet: Man muß eine Zahl nahe der Null zum wahren Wert addieren, um die Näherung zu erhalten. In vielen Anwendungen kennt man nur den Näherungswert, der wahre Wert dagegen bleibt unbekannt. Dies bedeutet, daß es unmöglich ist, den Fehler exakt zu bestimmen. Das Problem wird dann so gelöst, daß man eine obere Schranke für den absoluten Fehler berechnet. Wir werden dazu viele Beispiele kennenlernen. Es ist schwierig, den absoluten Fehler ohne zusätzliche Informationen über den wahren Wert zu interpretieren. Beispiel 4.1 Absoluter Fehler Es sei b ein Näherungswert der Zahl a mit einem absoluten Fehler von Falls a = 2.45 ist, dann stimmen a und b auf 1 Dezimale 1 überein. Ist aber auf der anderen Seite a = , dann ist der absolute Fehler größer als a. Tatsächlich kann dann b = sein und somit 5 mal so groß wie a. 1 Ziffern hinter dem Punkt (Komma) heißen Dezimalen.

159 4.2 Approximationen und Fehlerquellen 159 Manchmal wird der absolute Fehler auch als Näherungswert exakter Wert oder als exakter Wert Näherungswert definiert, das heißt, auf die Beträge wird verzichtet: Absoluter Fehler = Näherungswert wahrer Wert Relativer Fehler Wie das obige Beispiel zeigt, gibt es beim absoluten Fehler keine Skalierung, das heißt kein Verhältnis des Fehlers zur approximierten Zahl. Ein Weg, eine solche Skalierung aufzustellen, besteht darin, das Verhältnis von Fehler zu wahrem Wert zu nehmen. Im obigen Beispiel ist für a = 2.45 das Verhältnis ungefähr , was hinreichend klein ist. Ist andererseits a = , dann ist das Verhältnis ungefähr 4. Diese Überlegung führt auf folgende Definition: Definition 4.2 Es seien a 0 und b zwei Zahlen. Der relative Fehler von b als ein Näherungswert von a ist die Zahl b a ρ =. a Der Begriff relativer Fehler ist komplexer als der Begriff absoluter Fehler. Wir wollen dies diskutieren. In der Definition wird a ungleich Null vorausgesetzt. Dies steht im Einklang mit unserer Motivation zur Definition des relativen Fehlers, denn jeder auch noch so kleine Fehler ist unendlich groß im Vergleich zur Null. Bei einem kleinen absoluten Fehler muß man eine kleine Zahl zum wahren Wert hinzuaddieren, um den genäherten Wert zu erhalten. Analog muß man bei einem kleinen relativen Fehler mit einer Zahl nahe der Eins multiplizieren, um den genäherten Wert zu erhalten. Im einzelnen bedeutet dies: Ist b eine Näherung für a mit relativem Fehler ρ, dann gibt es eine Zahl r = b a a, so daß gilt: (a) r = ρ, (b) b = a(1 + r). Genügt umgekehrt b diesen beiden Bedingungen, so ist b eine Näherung an a mit dem relativen Fehler r. Ist b eine Näherung für a mit absolutem Fehler ǫ, so kann auch a als eine Näherung für b mit absolutem Fehler ǫ betrachtet werden. Solch eine austauschende Betrachtungsweise ist aber im allgemeinen für den relativen Fehler nicht möglich. Ein extremes Beispiel: Null approximiert jede Zahl mit einem relativen Fehler 1. Wie aber oben bereits bemerkt, gibt es für die Null keine Näherung mit einem relativen Fehler. Ist aber der relative Fehler klein, so gibt es eine austauschende Betrachtungsweise.

160 160 4 Grundlegende Konzepte numerischen Rechnens Satz 4.1 Es sei b eine Näherung für a mit einem relativen Fehler ρ < 1. Dann ist b ungleich null und es gilt: a b ρ b 1 ρ. Man kann also auch a als Näherung für b ansehen; in dieser Sicht ist der relative Fehler dann höchstens ρ/(1 ρ). Der relative Fehler liefert ein Aussage darüber, wie viele Ziffern zweier Zahlen übereinstimmen. Betrachten wir hierzu das Beispiel in der Tabelle 4.1, das die Zahl exp(1) e = approximiert: Näherung Relativer Fehler (genähert) Tabelle 4.1: Signifikante Stellen Die Tabelle 4.1 suggeriert folgende Faustregel: Stimmen zwei Zahlen a und b bis zur k-ten Ziffer überein, dann ist der relative Fehler von b annähernd 10 k. Die Daumenregel ist auch für andere Zahlensysteme gültig. Für eine binäres System liest sie sich wie folgt: Stimmen zwei Zahlen a und b bis auf k Bits überein, dann ist der relative Fehler von b annähernd 2 k. Manchmal verzichtet man bei der Definition des relativen Fehlers auf die Beträge und definiert: Relativer Fehler = Absoluter Fehler wahrer Wert. Relativer Fehler bei Vektoren Zur Definition des relativen Fehlers bei skalaren Größen haben wir die Betragsfunktion verwendet. Für Vektoren (und auch für Matrizen) tritt an deren Stelle eine Norm. Somit ist der relative Fehler im Vektor y als eine Approximation an den Vektor x die Zahl ρ = y x. x Wir haben oben bereits festgestellt, daß es für Skalare eine enge Beziehung zwischen dem relativen Fehler und der Anzahl korrekter Ziffern gibt: Ist ρ der relative Fehler des Skalars y, dann stimmen x und y ungefähr bis aus log(ρ) Dezimalen überein. Diese einfache Beziehung gilt nicht mehr für Komponenten von Vektoren, wie das folgende Beispiel zeigt.

161 4.2 Approximationen und Fehlerquellen 161 Beispiel 4.2 Relativer Fehler bei Vektoren Es sei x = und y = In der -Norm gilt: y x = = x aber die einzelnen Komponenten haben die relativen Fehler = = 0.03 und = 1. Die größte Komponente ist genau, aber die beiden kleineren Komponenten sind es nicht. Sie sind um so ungenauer, je kleiner sie sind. Das soeben dargestellte Beispiel führt uns auf den folgenden Merksatz: Der relative Fehler von Vektoren gibt eine gute Information darüber, wie genau die größeren Komponenten sind, sagt aber wenig über die Genauigkeit der kleineren Komponenten aus. Die Kondition eines Problems Bei einem vorgegebenen Problem liegen die Schwierigkeiten, dieses zu lösen, nicht immer im mathematischen Modell bzw. in den Formeln oder im Algorithmus, sondern häufig auch im Problem selbst. Auch bei exakter Rechnung ist das Problem gegenüber Störungen in den Eingangsdaten empfindlich. Ein Problem hat typischerweise Eingabe und Ausgabe. Die Eingabe besteht aus Zahlen, zum Beispiel den Koeffizienten einer Gleichung, und die Ausgabe wiederum aus Zahlen, die durch die Eingabe eindeutig bestimmt sind, zum Beispiel allen Lösungen der Gleichung in einer vorgeschriebenen Anordnung. Sammeln wir die Eingabe in einem Vektor x R n (angenommen die Zahlen sind reell) und einem Ausgabevektor y R m (auch reell), so liegt die Blackbox-Situation vor, wie in Abbildung 4.1 zu sehen, wobei das Rechteck P das Problem für x löst und die Ausgabe y erzeugt. x P y Abbildung 4.1: Blackbox-Situation Wir können uns die Lösung des Problems als eine Abbildung f vorstellen, die durch f : R n R m y = f(x)

162 162 4 Grundlegende Konzepte numerischen Rechnens gegeben ist. Wir sind nun an der Sensitivität der Abbildung f interessiert, wenn der Punkt x leicht gestört wird. Es stellt sich dann die Frage: Um wieviel größer (oder kleiner) wird y im Vergleich zur Störung in x? Insbesondere wollen wir den Grad der Sensitivität durch eine Zahl der Konditionszahl der Abbildung f im Punkt x messen. Ein mathematisches Problem heißt gut konditioniert, wenn relativ kleine Änderungen in den Eingangsdaten auch relativ kleine Änderungen in der Lösung bewirken. Ist dies nicht der Fall, so nennt man das Problem schlecht konditioniert. Formal ausgedrückt: Kondition = Relative Änderung im Ergebnis Relative Änderung in den Eingangsdaten Wenn die Konditionszahl des mathematischen Problems viel größer als 1 ist, dann sind auch bei kleinen Datenänderungen starke Abweichungen im Ergebnis zu befürchten. Diesem Sachverhalt entstammt die Sprechweise, Probleme mit großen Konditionszahlen als schlecht konditioniert zu bezeichnen, während man Probleme mit kleinen Konditionszahlen gut konditioniert nennt. Dabei gibt es natürlich keine scharfe Grenze zwischen gut und schlecht konditionierten Problemen; die Kondition muß stets in Relation zur gewünschten Gesamtgenauigkeit gesehen werden. Wir betrachten noch folgendes Zahlenbeispiel. Beispiel 4.3 Zur Kondition Es sollen Funktionswerte der Kosinusfunktion für Argumente in der Nähe von π/2 berechnet werden. Es ist also x π/2 und h eine kleine Störung von x. Dann gilt und Absoluter Fehler = cos(x + h) cos(x) hsin(x) h Relativer Fehler h sin(x) = htan(x). cos(x) Dies bedeutet, daß kleine Störungen in x π/2 relativ große Änderungen in cos(x) verursachen, unabhängig davon mit welchem Verfahren man die Rechnung durchführt. In MATLAB gilt: >> cos( ) ans = e-06 dagegen ist >> cos( ) ans = e-05 Dies bedeutet: Der relative Ausgabefehler ist >> (cos( )-cos( ))/cos( ) ans = Der relative Eingabefehler dagegen >> abs( ( )/ ) ans = e-06 Der relative Ausgabefehler ist damit ungefähr eine viertel Million mal größer als der relative Eingabefehler. Die Abbildung 4.2 symbolisiert eine gute und eine schlechte Kondition eines mathematischen Problems.

163 4.2 Approximationen und Fehlerquellen 163 Gut konditioniert Schlecht konditioniert Abbildung 4.2: Zur Kondition eines Problems Vorwärtsanalyse Bei der Vorwärtsanalyse verfolgt man die einzelnen Rechenschritte, die man bis zum endgültigen Ergebnis durchlaufen muß und schätzt die bei jedem Schritt auftretenden Rundungsfehler ab. Diese Methode ist in der Regel nur geeignet, um eine qualitative Aussage machen zu können, welcher der Faktoren den größten Einfluß auf die Genauigkeit des Ergebnisses hat. Quantitativ führt dies meist zu einer starken Überschätzung des Fehlers. Rückwärtsanalyse Ein alternativer Weg besteht in der Rückwärtsanalyse. In der Numerik unterscheidet man deshalb zwischen Vorwärts- und Rückwärtsfehler. Der Vorwärtsfehler ist die Abweichung der berechneten Lösung von der exakten Lösung eines mathematischen Problems. Der Rückwärtsfehler gibt an, wie stark sich das Problem vom ursprünglich gegebenen Problem unterscheidet. Mit anderen Worten: Wie muß man die originalen Eingangsdaten x stören, damit man bei exakter Rechnung f zu diesem Ergebnis gekommen wäre? Eine berechnete Lösung wird dann als gut bezeichnet, wenn sie die exakte Lösung eines benachbarten Problems ist. In der Regel ist die Rückwärtsanalyse sehr viel leichter durchzuführen als die Vorwärtsanalyse. Sie liefert jedoch auch nur eine qualitative Einschätzung der Genauigkeit des numerisch berechneten Wertes. Die Abbildung 4.3 illustriert schematisch die Rückwärtsfehleranalyse. Hierbei ist x die exakte Eingabe und f die exakte Funktion, während x die gestörte Eingabe und f die den numerischen Lösungsprozeß beschreibende Funktion ist. Beachte, daß x durch die Gleichung f( x) = f(x) bestimmt wird. Beispiel 4.4 Rückwärtsfehleranalyse Angenommen wir wollen die Exponentialfunktion f(x) = e x durch eine einfachere Funktion annähern und die Abweichung im Punkt x = 1 betrachten. Wir wissen, daß die Exponentialfunktion durch folgende (unendliche) TAYLOR-Reihe gegeben ist f(x) = e x = 1 + x x x3 +.

164 164 4 Grundlegende Konzepte numerischen Rechnens x f f(x) Rückwärtsfehler f Vorwärtsfehler x f f( x) = f(x) Abbildung 4.3: Schematisches Diagramm zur Rückwärtsanalyse Berücksichtigen wir hiervon die ersten vier Terme, also f(x) = 1 + x x x3, so erhalten wir für die Approximation folgenden Vorwärtsfehler f(x) f(x). Um nun den Rückwärtsfehler bestimmen zu können, muß man den Eingabewert x kennen, für den f( x) = f(x) gilt. Für die Exponentialfunktion wissen wir, daß dieser Wert durch x = ln( f(x)) gegeben ist. Insbesondere für x = 1 erhält man mit vier Dezimalen sowie Damit ergibt sich und f(1) = e 1 = und f(1) = x = ln(2.6667) = Vorwärtsfehler = f(1) f(1) = = Rückwärtsfehler = x x = = Das Entscheidende in diesem Beispiel besteht nicht darin, die numerischen Werte der beiden Fehlertypen quantitativ miteinander zu vergleichen, sondern vielmehr die Konzepte zu erörtern. Der Vorwärtsfehler zeigt, daß die Approximation gut ist, denn die berechnete Lösung liegt in der Nähe der exakten Lösung. Aber auch der Rückwärtsfehler zeigt, daß die Approximation gut ist, denn das berechnete Resultat wird durch eine exakte Berechnung erreicht, wo die Eingabe nur wenig von der tatsächlichen abweicht. Stabilität und Genauigkeit Stabilität eines numerischen Verfahrens ist das Analogon zur Kondition eines mathematischen Problems. Beide Begriffe stützen sich auf die Sensitivität gegenüber Störungen. Der Begriff Stabilität wird gewöhnlich für Algorithmen verwendet und der Begriff Kondition

165 4.3 Computerarithmetik 165 für mathematische Probleme (manchmal weicht man davon auch ab und verwendet Stabilität für beides Algorithmus und Problem zum Beispiel bei Differentialgleichungen). Ein Algorithmus ist stabil, wenn das Endresultat relativ robust gegenüber Störungen ist, die während des Rechnens aufgrund von Näherungen und Fehlern entstehen. Wie nahe eine berechnete Lösung bei der wahren Lösung des Problems liegt, führt auf den Begriff Genauigkeit. Ist ein Algorithmus stabil, so bedeutet das nicht zwangsläufig, daß die berechnete Lösung genau ist. Die Genauigkeit hängt vielmehr sowohl von der Kondition des Problems als auch von der Stabilität des Verfahrens ab. Ein stabiles Verfahren erzeugt eine Lösung, die für ein benachbartes Problem exakt ist, aber die Lösung dieses benachbarten Problems liegt nur dann in der Nähe der Lösung, wenn das Problem gut konditioniert ist. Dies hat zur Folge, daß Ungenauigkeiten sowohl von einem stabilen Algorithmus eines schlecht konditionierten Problems als auch von einem instabilen Algorithmus eines gut konditionierten Problems herrühren können. Aus Sicht der Rückwärtsanalyse ist ein Algorithmus stabil, wenn er exakt rechnend das gleiche Resultat für ein benachbartes Problem hervorbringt. Die Abbildung 4.4 illustriert dies schematisch. Abbildung 4.4: Stabiler Algorithmus 4.3 Computerarithmetik Will man auf einem Computer zwei reelle Zahlen addieren oder irgendeine andere arithmetische Operation ausführen, so muß man zunächst die reellen Zahlen in den Rechner eingeben. Der Rechner aber kann im allgemeinen eine reelle Zahl nicht genau darstellen. Die Zahl π = hat unendlich viele Ziffern und kann somit nicht exakt abgebildet werden. Deshalb müssen reelle Zahlen zur Darstellung im Rechner approximiert wiedergegeben werden. Diese Zahlen nennt man Maschinenzahlen. Es gibt stets nur endlich viele Maschinenzahlen. Wie man in der Mathematik lernt, gibt es zwischen verschiedenen reellen Zahlen immer unendlich viele Zahlen. Diese Vorstellung ist für Maschinenzahlen falsch. Reelle Zahlen sind mathematische Abstraktionen. Wirkliches Rechnen mit reellen Zahlen ist unpraktisch, da es Grenzwerte und Unendlichkeiten abverlangt. Digitale Rechner benützen Gleitpunktarithmetik 2, das heißt sie können nur endlich viele Zahlen mit end- 2 Auch Fließpunktarithmetik genannt.

166 166 4 Grundlegende Konzepte numerischen Rechnens licher Genauigkeit darstellen. Dies führt auf Phänomene wie Rundungsfehler, Underflow und Overflow. Rechnet man mit MATLAB, so muß man sich im allgemeinen über die Details dieser Phänomene nicht kümmern. Im Laufe der Zeit aber wird man immer mehr Interesse daran finden, mehr über die Eigenschaften und Grenzen von Gleitpunktzahlen und Gleitpunktarithmetik zu erfahren. Vor 20 Jahren war die Situation viel komplizierter als heute. Jeder Computer hatte sein eigenes Gleitpunktsystem. Einige basierten auf binärer Darstellung, andere auf dezimaler. Es gab auch einen RUSSISCHEN Computer mit trinärer Darstellung. Rechner, die auf binärer Darstellung beruhten, benutzten außerdem unterschiedliche Basen, z.b. 2, 8 oder 16, und jeder hatte eine andere Genauigkeit. Im Jahr 1985 wurde der IEEE 3 -Standard 754 für ein binäres Gleitpunktsystem publiziert. Dies war das Ergebnis jahrelanger Arbeit einer Gruppe von 92 Personen, die aus Mathematikern, Informatikern und Ingenieuren aus Universitäten und Firmen der Computerund Mikroprozessorbranche bestand. Alle in den letzten Jahren entwickelten Computer realisieren diese IEEE-Gleitpunktsysteme. Dies bedeutet aber nicht, daß man auf allen Computern die gleichen numerischen Resultate erhält. Dies liegt daran, daß man im IEEE-Standard Möglichkeiten offen ließ, die es den Herstellern erlauben, Gleitpunktsysteme bis zu einem gewissen Grad flexibel zu realisieren. MATLAB benutzt das IEEE-Gleitpunktsystem in doppelt genauem Format 4 auf allen Rechnern, die dies von der Seite der Hardware unterstützen. In MATLAB gibt es ein Kommando isieee, das angibt, ob Ihre MATLAB-Installation den IEEE-Standard unterstützt oder nicht. Ist der Rückgabewert 1, so wird der Standard unterstützt, ansonsten (Rückgabewert 0) nicht. Es gibt im IEEE-Standard auch ein einfach genaues Format 5, das Speicherplatz spart, aber auf modernen Rechnern zu keiner wesentlichen Zeitersparnis führt. Ebenfalls möglich sind erweiterte doppelt genaue Formate, und diese können auf verschiedenen Computern gegebenenfalls unterschiedliche Ergebnisse hervorrufen. Gleitpunktzahlen In einem digitalen Rechner wird das reelle Zahlensystem R der Mathematik durch ein Gleitpunktzahlensystem approximativ dargestellt. Die grundsätzliche Idee, die dahinter steckt, ist analog dem Vorgehen, eine große oder kleine Zahl als Potenz von 10 zu schreiben. So schreibt man z.b. die Zahlen 3456 und in der Form bzw In diesem Format bewegt sich (gleitet oder fließt) der Dezimalpunkt entsprechend der Änderung der Potenz von 10. Allgemein ist ein Gleitpunktsystem durch folgende 4 ganze Zahlen charakterisiert, siehe Tabelle 4.2: Jede Zahl x aus einem Gleitpunktsystem läßt sich wie folgt darstellen: x = ±(d 0 + d 1 β + d 2 β d t 1 β t 1)βe = ±d 0.d 1 d 2 d t 1 β e 3 IEEE=The Institute of Electrical and Electronics Engineers; sprich: ei triple i 4 double precision; Datentype double. 5 single precision; nicht aber in MATLAB

167 4.3 Computerarithmetik 167 β t e min e max Basis Anzahl der Ziffern kleinster Exponent größter Exponent Tabelle 4.2: Charakteristische Größen für ein Gleitpunktsystem wobei 0 d i β 1 für i = 0,...,t 1 und e min e e max gilt. Die Ziffernfolge d 0.d 1 d 2 d t 1 bezeichnet man als Mantisse. e ist der Exponent und β die Basis der Zahl x. Beispiel 4.5 Darstellung einer Gleitpunktzahl ( )103 = Zahl Gleitpunktdarstellung / Tabelle 4.3: Gleitpunktdarstellung verschiedener Dezimalzahlen Computer verwenden heutzutage fast auschließlich binäre Arithmetik, das heißt β = 2. Taschenrechner dagegen benutzen aus naheliegenden Gründen dezimale Arithmetik, das heißt β = 10. Unabhängig davon, welche Basis ein Computer verwendet, konvertiert er bei einer Eingabe eine dezimale Zahl in die entsprechende Maschinenzahl und wieder in eine dezimale Zahl zurück. Die Tabelle 4.4 zeigt die vier Parameter von verschiedenen Gleitpunktsystemen. Die IEEE-Standardsysteme für einfache und doppelt genaue binäre Gleitpunktarithmetik sind heutzutage die am weitesten verbreiteten. Sie sind in Personalcomputern, Workstations, Mainframes und Supercomputern akzeptiert. In einem Computer wird das Vorzeichen, der Exponent und die Mantisse in getrennten Feldern in einem Gleitpunktwort fester Länge gespeichert. System β t e min e max IEEE (einfach) IEEE (doppelt) HP 28 Taschenrechner Tabelle 4.4: Verschiedene Gleitpunktsysteme

168 168 4 Grundlegende Konzepte numerischen Rechnens Normalisierte Gleitpunktzahlen Ein Gleitpunktsystem ist normalisiert, wenn die erste Ziffer d 0 der Mantisse m ungleich 0 ist, sofern die darzustellende Zahl nicht gerade die Null ist 6. Für die Mantisse m einer gegebenen von Null verschiedenen Gleitpunktzahl gilt deshalb immer 1 m < β. Normalisierte Gleitpunktsysteme haben folgende Eigenschaften: Die Darstellung jeder Zahl ist eindeutig. Die Genauigkeit ist maximal, weil keine Ziffer durch führende Nullen unnötig verbraucht wird. In einem binären Gleitpunktsystem (β = 2) ist die führende Ziffer immer 1. Deshalb muß man sie nicht explizit speichern und gewinnt dadurch ein zusätzliches Bit, um die Genauigkeit zu erhöhen. Eigenschaften von Gleitpunktsystemen Gleitpunktsysteme sind stets endlich und diskret. Die Anzahl der normalisierten Gleitpunktzahlen ist 2(β 1)β t 1 (e max e min + 1) + 1, da zwei Möglichkeiten für das Vorzeichen bestehen, β 1 Möglichkeiten für d 0, β Möglichkeiten für die verbleibenden t 1 Ziffern und e max e min + 1 Möglichkeiten für den Wert des Exponenten. 1 muß für die Null hinzuaddiert werden. Es gibt eine kleinste positive normalisierte Gleitpunktzahl Underflow Level UFL = β e min, bei der d 0 = 1 ist, alle sonstigen Ziffern der Mantisse 0 sind und der Exponent die kleinste positive Zahl ist. Die größte normalisierte Gleitpunktzahl ist Overflow Level OFL = β e max+1 (1 β t ) bei der alle Werte der Mantisse β 1 sind und der Exponent die größtmögliche Zahl (für den Exponenten) ist. Jede Zahl, die größer als OFL und kleiner als UFL ist, kann in dem gegebenen Gleitpunktsystem nicht dargestellt werden. Gleitpunktzahlen sind über ihrem Wertebereich nicht gleichmäßig verteilt. Beispiel 4.6 Ein normalisiertes Gleitpunktsystem Die Abbildung 4.5 zeigt ein Gleitpunktsystem mit 25 Gleitpunktzahlen. Die 25 Gleitpunktzahlen sind: 0, ±0.5, ±0.625, ±0.75, ±0.875, ±1.0, ±1.25, ±1.5, ±1.75, ±2.0, ±2.5, ±3.0 und ±3.5. Hier gilt β = 2, t = 3, e min = 1 und e max = 1. Die größte Gleitpunktzahl ist OFL = (1.11) = (3.5) 10 und die kleinste positive Gleitpunktzahl ist UFL = (1.00) = (0.5) 10. Natürlich ist dies ein sehr kleines Gleitpunktsystem, aber es zeigt alle charakteristischen Eigenschaften eines solchen Systems: Die Zahlen sind ungleichmäßig und diskret verteilt. 6 Eine alternative Definition eines normierten Gleitpunktsystems besteht darin, stets d 0 = 0, aber d 1 0 zu fordern. In diesem Fall gilt dann: β 1 m < 1.

169 4.3 Computerarithmetik 169 Runden Abbildung 4.5: Beispiel eines normalisierten Gleitpunktsystems Aus der Schule kennt man zwei Arten des Rundens. Das konventionelle Runden und das Runden durch Abschneiden. Soll z.b. die Zahl π = auf 3 Nachkommastellen gerundet werden, so ergibt sich durch konventionelles Runden die angenäherte Zahl und durch Runden durch Abschneiden Die allgemeine Regel für das Runden durch Abschneiden ist einfach: Man schneidet einfach alle Ziffern ab, die man nicht will. Das konventionelle Runden geschieht wie folgt: Angenommen wir wollen eine Dezimalzahl a = X.XXXY auf 3 Nachkommastellen runden, so ist die gerundete Zahl ã = X.XXZ, und man rundet auf, falls Y 5 ist, und man rundet ab, falls Y < 5 gilt. Beim konventionellen Runden unterteilt man also die 10 Ziffern in 2 Hälften, nämlich {0, 1, 2, 3, 4} und {5,6,7,8,9} und rundet entsprechend ab und auf 7. Hier liegt also die Approximierte der gegebenen Zahl am nächsten; liegt sie in der Mitte, so wird aufgerundet. Kann eine gegebene reelle Zahl x nicht genau als Gleitpunktzahl dargestellt werden, so muß sie approximiert werden. Diese Gleitpunktnäherung bezeichnen wir mit fl(x) und der Prozeß heißt Runden. Der Fehler, der dadurch entsteht, heißt Rundungsfehler. Der IEEE- Standard sieht hierfür die Rundung auf den nächstgelegenen Wert (optimale Rundung) vor; fl(x) ist der zu x am nächsten liegende Gleitpunktwert. Liegt x genau in der Mitte zwischen zwei Gleitpunktzahlen, so verwendet man die Vorschrift round to even, das heißt diejenige Gleitpunktzahl wird als Näherung gewählt, deren letzte Mantissenziffer gerade ist. Beispiel 4.7 Round to even Soll die Zahl auf eine Nachkommastelle gerundet werden, so erhält man die Näherung 1.8. Die Zahl wird dagegen auf 1.6 gerundet. Das Runden auf den nächstgelegenen Wert ist die genaueste Methode, sie ist aber auch schwieriger zu implementieren. 7 Beachte: Aus a = wird ã = 1.274, also eine kleinere Zahl.

170 170 4 Grundlegende Konzepte numerischen Rechnens Maschinengenauigkeit Die Genauigkeit eines Gleitpunktsystems kann durch eine Größe charakterisiert werden, die man Maschinengenauigkeit, relative Maschinengenauigkeit, Maschinenepsilon oder relative Rechengenauigkeit nennt. Den Wert dieser Größe bezeichnen wir mit ǫ M. Er ist abhängig von: der Basis β des Gleitpunktsystems der Anzahl der Mantissenstellen t der Rundungsregel Beachte: Alle in MATLAB abgebildeten reellen Zahlen sind mit einem relativen Fehler kleiner oder gleich eps= behaftet. Es ist also wenig sinnvoll, mehr als sechzehn Stellen in der Mantisse ein- oder auszugeben. Computerarithmetik in MATLAB In MATLAB ist der IEEE-Standard 754 mit doppelter Genaugkeit realisiert, wann immer Hardware und Software dies zulassen. Deshalb hat in MATLAB jede Zahl x die Form: x = ±(1 + f) 2 e wobei f = d d 52 und jede Ziffer d 2 52 k 0 oder 1 ist. Für den Exponent e gilt 1022 e Die Endlichkeit von f ist eine Einschränkung an die Genauigkeit und die Endlichkeit von e ist eine Begrenzung an den Zahlenbereich. MATLAB-Name Beschreibung eps Maschinengenauigkeit; IEEE: realmin Kleinste positive reelle Zahl; IEEE: realmax Größte positive reelle Zahl; IEEE: ( ) Tabelle 4.5: Kennzeichnende Größen für das MATLAB-Gleitpunktsystem realmin bezeichnet die kleinste von Null verschiedene positive Zahl, die in MATLAB dargestellt werden kann. Entsprechendes gilt für realmax. Rechnungen, die betragsmäßig auf Zahlen führen, die kleiner als realmin bzw. größer als realmax sind, verursachen einen Fehler, den man als underflow bzw. overflow bezeichnet. Underflow wird meist dadurch ausgeschlossen, daß Zahlen, die betragsmäßig kleiner als realmin sind, durch Null ersetzt werden. Eine letzte Bemerkung betrifft ganzzahlige Werte (integer). In MATLAB wird standardmäßig jede Zahl als Gleitpunktzahl dargestellt, somit auch ganzzahlige Werte. 3 und 3.5 haben das gleiche Format. Viele Programmiersprachen unterscheiden diese, nicht aber MAT- LAB. In MATLAB spricht man von flints und meint eine Gleitpunktzahl, deren Wert eine ganze Zahl ist. Bei flint-zahlen gibt es in der Gleitpunktarithmetik keine Rundungsfehler. Das folgende Beispiel zeigt dies.

171 4.4 Zur Komplexität numerischer Algorithmen 171» sqrt(363/3) ans = 11 Die IEEE-Gleitpunktarithmetik erlaubt zwei spezielle Werte für folgende Ausnahmefälle: Inf für unendlich (infinity), zum Beispiel wenn eine Zahl durch Null dividiert wird, wie 1/0. NaN für not-a-number, wenn die Operation undefiniert oder unbestimmt ist, wie 0/0 oder Inf/Inf. MATLAB stellt dafür die speziellen Variablen inf und nan zur Verfügung. 4.4 Zur Komplexität numerischer Algorithmen Für Probleme der numerischen Mathematik gibt es mehr als einen Lösungsweg. Wählt man zur Lösung einen Algorithmus aus mehreren aus, so benutzt man hierfür drei Hauptkriterien: Geschwindigkeit, Speicheraufwand und Stabilität. Welcher Algorithmus ist schneller? Welcher braucht weniger Speicherplatz? Sind die Ergebnisse genau genug? Die Stabilität numerischer Algorithmen wurde in Abschnitt 4.2 behandelt, die Speicherproblematik besprechen wir im nachfolgenden. Jetzt wollen wir nützliche Dinge über die Geschwindigkeit lernen, indem wir die arithmetischen Operationen (Gleitpunktoperationen) eines Algorithmus zählen. Zählen arithmetischer Gleitpunktoperationen Addition zweier Vektoren. Die Addition zweier n-vektoren x und y kann wie folgt realisiert werden: z = zeros(n,1); for i = 1:n z(i) = x(i) + y(i); end Für die Berechnung der Summe werden n Additionen benötigt. Die Anzahl der Operationen wächst linear mit der Dimension der Eingabevektoren. Zu beachten ist, daß diese Programmzeilen lediglich als Beispiel von Gleitpunktoperationen dienen. In den Anwendungen schreibt man in MATLAB einfach x+y für die Addition zweier Vektoren x und y. Dies gilt analog für nachfolgende Überlegungen. Der Algorithmus benötigt: 1. n Additionen. Skalarprodukt. Das Skalarprodukt der n-vektoren x und y kann wie folgt berechnet werden:

172 172 4 Grundlegende Konzepte numerischen Rechnens z = 0; for i = 1:n z = z + x(i) * y(i); end Damit benötigt der Algorithmus: 1. n Additionen 2. n Multiplikationen

173 4.4 Zur Komplexität numerischer Algorithmen 173 Addition zweier quadratischer Matrizen. Werden zwei n n-matrizen A und B addiert, so sind n 2 Additionen notwendig, da eine quadratische Matrix n 2 Elemente enthält. 1. n 2 Additionen Multiplikation zweier quadratischer Matrizen. Wenn wir zwei n n-matrizen A und B miteinander multiplizieren, so erhalten wir eine n n-matrix C, das heißt C = AB. Die Elemente der Matrix C sind das Produkt der Zeilen von A mit den Spalten von B, also Skalarprodukte mit 2n Operationen. Da die Matrix C n 2 Elemente hat, benötigt das Produkt zweier Matrizen insgesamt 2n 3 Operationen. 1. n 3 Additionen 2. n 3 Multiplikationen Es gibt spezielle Algorithmen, die zur Matrixmultiplikation zumindest asymptotisch, das heißt für große Dimensionen, weniger Operationen erfordern! Diese sind jedoch keinesfalls offensichtlich und nach wie vor Gegenstand der Forschung. Lösen eines linearen Systems mit Dreiecksmatrix. Wir werden in Kapitel 5 sehen, daß das Lösen eines linearen Gleichungssystems mit dreiecksförmiger Matrix folgende Operationen benötigt: n2 1 2 n Additionen n2 1 2 n Multiplikationen. 3. n Divisionen. Bemerkungen zum Zählen von Gleitpunktoperationen Der dominante Term. Für große n ist der Term 1 2 n2 im Ausdruck 1 2 n2 1 2 n dominant gegenüber dem Term 1 2n. Ist zum Beispiel n = 100, so ist das Verhältnis hundert zu eins. Konsequenterweise gibt man beim Zählen oft nur den dominanten Term hier 1 2 n2 an. Ordnung und Ordnungskonstante. Den variablen Faktor im dominanten Term hier n 2 nennt man den dominanten Term des Algorithmus. Damit ist die Ordnung des Algorithmus zur Lösung eines linearen Systems mit Dreiecksmatrix von der Ordnung n 2, während das Skalarprodukt die Ordnung n hat. Hierfür schreibt man gewöhnlich O(n 2 ) bzw. O(n) 8. Der Faktor 1 2 im Term 1 2 n2 heißt die Ordnungskonstante. Es stellt sich heraus, daß man die Ordnung eines Algorithmus oft leicht bestimmen kann, die Ordungskonstante aber nicht. Aus diesem Grund wird sie oft unterdrückt und nicht angegeben. Sie ist aber wichtig, wenn man zwei Algorithmen gleicher Ordnung vergleichen will, und kann auch dann wichtig werden, wenn man Verfahren unterschiedlicher Ordnung vergleicht. Bezeichnungen. Traditionell wurden in der numerischen Mathematik vorwiegend die Multiplikationen und Divisionen 9 gezählt, da sie gewöhnlich rechenintensiver waren als Additionen und Subtraktionen, und weil bei vielen Algorithmen ähnlich viele Additionen bzw. 8 Man nennt dies die groß O-Notation oder manchmal auch das LANDAU-Symbol. 9 Auch wesentliche Operationen genannt.

174 174 4 Grundlegende Konzepte numerischen Rechnens Subtraktionen wie Multiplikationen bzw. Divisionen auftreten. Neuerdings aber gibt es kaum noch nennenswerte Unterschiede zwischen Additionen bzw. Subtraktionen und Multiplikationen bzw. Divisionen. Daher wird zunehmend jede arithmetische Operation gezählt. Gleitpunktoperationen heißen im Englischen floating point operations oder kurz flops. Jede Addition, Subtraktion, Multiplikation, Division und das Berechnen der Quadratwurzel zählt als eine Gleitpunktoperation (flop). Algorithmen unterschiedlicher Ordnung. Um ein Gefühl dafür zu bekommen, wie die Rechenzeit mit der Ordnung eines Algorithmus wächst, betrachten wir die Tabelle 4.6. Hierzu nehmen wir an, daß die Ordnungskonstante jeweils 1 ist und der Rechner 10 Megaflops in einer Sekunde verarbeiten kann. n O(n) O(n 2 ) O(n 3 ) s 10 5 s 10 4 s s 10 3 s 10 1 s s 10 1 s 10 2 s 1.7 min s 10 1 s 10 5 s 1.2 Tage Tabelle 4.6: Rechenzeit in Abhängigkeit der Ordnung Man erkennt, daß die Rechenzeit bei O(n 3 )-Algorithmen drastisch ansteigt. Unglücklicherweise sind viele wichtige Matrixalgorithmen von der Ordnung O(n 3 ), wobei n die Ordnung der Matrix ist. Arithmetik alleine ist nicht alles. Die Anzahl der Gleitpunktoperationen eines Verfahrens beeinflußt die Laufzeit des Programms, aber es gibt auch noch andere Einflußfaktoren. Ein Algorithmus beschäftigt den Rechner auch mit anderen Dingen als der Gleitpunktarithmetik. Bei der Vektoraddition zum Beispiel bedeutet eine Referenz auf x(i), daß ein Element von x aus dem Speicher geholt werden muß. Dieser Overhead beeinflußt natürlich die Rechenzeit. Das Zählen der Gleitpunktoperationen stellt daher nur eine untere Schranke für die gesamte Ausführungszeit eines Algorithmus dar. Dennoch ist das Zählen der Gleitpunktoperationen sinnvoll, zumindest wenn der zusätzliche Overhead proportional zur Anzahl der Operationen ist. Vergleich von Algorithmen gleicher Ordnung. Sind die Ordnungen zweier Algorithmen gleich, so entscheidet die Ordnungskonstante. Sind alle sonstigen Bedingungen gleich, so wird man sich für den Algorithmus mit der kleineren Ordnungszahl entscheiden. Man denke aber daran, daß diese sonstigen Dinge in der Regel nicht gleich sind und zum Beispiel ein Faktor zwei in der Ordnungszahl unter Umständen vernachlässigbar ist. Vergleich von Algorithmen verschiedener Ordnung. In der Regel wird man denjenigen Algorithmus auswählen, der die kleinere Ordnung hat. Trotzdem aber kommt es vor, daß man diese allgemeine Regel verletzt. Hat ein Algorithmus zum Beispiel die Ordnung O(n 3 ) mit der Ordnungskonstanten eins, ein anderer die Ordnung O(n 2 ), aber ein Konstante von tausend, so wird man für n kleiner als tausend den O(n 3 )-Algorithmus wählen.

175 4.4 Zur Komplexität numerischer Algorithmen 175 Die MATLAB-Funktion flops Die MATLAB-Funktion flops kann (approximativ) die Anzahl der Gleitpunktoperationen zählen. Um flops zu benutzen, muß man die Programmzeilen, für die man sich interessiert, zwischen flops(0) und einer Anweisung der Form <Variablename> = flops einschließen. Wir wollen flops benützen, um die eben dargestellten Sachverhalte experimentell zu verifizieren. Dazu dient der Script-File ShowKomplexitaet.m, der sich auf der beiliegenden CD befindet. Die Anweisung flop(0) setzt den Zähler für Gleitpunktoperationen auf Null. Führt man den Script-File ShowKomplexitaet.m aus, so erhält man die Ergebnisse in Tabelle 4.7 n Vektoraddition Skalarprodukt Matrixaddition Matrixmultiplikation Tabelle 4.7: Anzahl der flops von Vektor- und Matrixverknüpfungen Die Abbildung 4.6 zeigt die Werte aus Tabelle 4.7 in einer Grafik und macht die Unterschiede der Komplexitäten der Vektor- und Matrixverknüpfungen deutlich. Zusammenfassung Die Tabelle 4.8 faßt die Gleitpunktoperationen (flops) der betrachteten Vektor- und Matrixverknüpfungen zusammen. Mit Hilfe der eingebauten MATLAB-Funktion flops kann man die Gleitpunktoperationen zählen. Dabei ist flops bereits nach der neuen flop-definition implementiert. Vektoraddition Skalarprodukt Matrixaddition Matrixmultiplikation n = O(n) 2n = O(n) n 2 = O(n 2 ) 2n 3 = O(n 3 ) Tabelle 4.8: Anzahl der Gleitpunktoperationen Das Zählen von Gleitpunktoperationen ist nur eine grobe Näherung zur Meßbarkeit der Effizienz numerischer Algorithmen, da weder Speicherplatzaufwand noch Datentransfers in oder außerhalb der Speicherhierarchien berücksichtigt werden.

176 176 4 Grundlegende Konzepte numerischen Rechnens Vektoraddition Skalarprodukt Matrixaddition Matrixmultiplikation 1400 Anzahl der flops n Abbildung 4.6: Grafische Darstellung der Komplexitäten 4.5 Elementare Matrixrechnungen The following table gives a thumbnail history of matrix computations over the years: 1950 n = 20 WILKINSON 1965 n = 200 FORSYTHE and MOLER 1980 n = 2000 LINPACK 1995 n = LAPACK LLOYD N. TREFETHEN, Numerical Linear Algebra, 1997 Eine grundlegende Aufgabe im wissenschaftlichen Rechnen ist das Lösen linearer Gleichungssysteme Ax = b. Gegeben sind A und b, gesucht ist x, so daß gilt: Ax = b. Bevor man jedoch im Detail verschiedene Lösungsalgorithmen bespricht, ist es sinnvoll, Matrix- Vektor-Produkt Ax und Matrix-Matrix-Produkt AB genauer zu studieren. Beide Operationen werden in MATLAB direkt unterstützt. Sind A und B Matrizen und x ein Vektor, dann berechnet sich das Matrix-Vektor-Produkt Ax in MATLAB zu A*x und das Matrix-Matrix-Produkt AB zu A*B In diesem Sinn ist eigentlich nichts mehr zu tun. Dennoch ist es aufschlußreich, darüber nachzudenken, wie man diese Produkte implementieren kann. Matrix-Vektor-Multiplikationen treten häufig auf, wenn man lineare Systeme der Form Ax = b löst. Daher ist es

177 4.5 Elementare Matrixrechnungen 177 ratsam, Matrix-Vektor-Operationen genauer zu untersuchen, bevor man Löser für Ax = b implementiert. Bevor man ein lineares System Ax = b berechnet, muß man die Matrix A und die rechte Seite b dem Rechner zur Verfügung stellen. Der Aufwand dafür ist in den Anwendungen oft genau so groß oder größer als Ax = b zu lösen. Deshalb nehmen wir diese Aufgabe zuerst in Angriff. Matrizen erzeugen Bevor man eine Matrixaufgabe lösen kann, muß man die Matrix oder die Matrizen im Rechner eingeben. Dieser Aufwand wird oftmals unterschätzt. Einfache ij-schleifen Sind die Matrixelemente durch mathematische Regeln definiert, wie zum Beispiel a ij = 1 i + j 1, dann kann man mit einer doppelten for-schleife die Matrix A wie folgt erzeugen: A = zeros(n,n); for i=1:n for j=1:n A(i,j) = 1/(i+j-1); end end Beachten Sie, daß ein Vorbesetzen der Matrix A mit Nullen die Arbeit des Speichermanagements reduziert. Die Matrix A ist die HILBERT-Matrix und kann in MATLAB mit A=hilb(n) erzeugt werden. Beispiel 4.8 HILBERT-Matrix für n = 3 >> A=hilb(3) A = Im allgemeinen hat eine Matrix wie hier die HILBERT-Matrix eine Struktur, die man zum Erzeugen ausnutzen kann. Die HILBERT-Matrix ist symmetrisch, das heißt, a ij = a ji für alle i und j. Dies bedeutet, daß wir A effizienter erzeugen können: A = zeros(n,n); for i=1:n for j=i:n

178 178 4 Grundlegende Konzepte numerischen Rechnens A(i,j) = 1/(i+j-1); A(j,i) = A(i,j); end end Hierbei läuft die innere Schleife nur von i bis n. Der Function-File 4.1 zeigt, wie die eingebaute MATLAB-Funktion hilb implementiert ist. Bei dieser Implementierung von C. MOLER wird auf for-schleifen verzichtet. Dadurch ist der Code (in MATLAB) schneller ausführbar, benötigt dafür aber mehr Speicherplatz. Betrachten wir den Code für n = 3 im einzelnen. Zunächst wird in Zeile 21 der Zeilenvektor J = ( ) erzeugt. Die Zeile 22 erzeugt die 3 3 Matrix J = 1 2 3, und I wird in Zeile 23 gleich der Transponierten von J gesetzt: I = J T = E ist die Einsmatrix und in Zeile 25 wird schließlich die HILBERT-Matrix 1 1/2 1/3 H = 1/2 1/3 1/4. 1/3 1/4 1/5 erzeugt. HILBERT-Matrizen sind Paradebeispiele schlecht konditionierter Matrizen, das heißt, mit zunehmender Matrixgröße wird die Kondition immer schlechter. Matrizen erzeugen, die durch einen Parameter definiert sind Viele Matrizen sind durch Terme bestimmt, die von einem Parameter abhängen. Betrachten wir zum Beispiel die folgende VANDERMONDE-Matrix: 1 x 1 x 2 1 x 3 1 V = 1 x 2 x 2 2 x x 3 x 2 3 x x 4 x 2 4 x 3 4 Eine Möglichkeit VANDERMONDE-Matrizen zu erzeugen, ist folgende spaltenorientierte Methode:

179 4.5 Elementare Matrixrechnungen function H = hilb(n) 2 % %HILB Hilbert matrix. 4 % HILB(N) is the N by N matrix with elements 1/(i+j-1), 5 % which is a famous example of a badly conditioned 6 % matrix. 7 % See INVHILB for the exact inverse. 8 % 9 % This is also a good example of efficient MATLAB 10 % programming style where conventional FOR or DO loops 11 % are replaced by vectorized statements. This 12 % approach is faster, but uses more storage % C. Moler, % Copyright (c) by The MathWorks, Inc. 16 % $Revision: 5.5 $ $Date: 1997/04/08 05:49:32 $ % I, J and E are matrices whose (i,j)-th element 19 % is i, j and 1 respectively J = 1:n; 22 J = J(ones(n,1),:); 23 I = J ; 24 E = ones(n,n); 25 H = E./(I+J-1); Function-File 4.1: Erzeugung der HILBERT-Matrix nach C. MOLER

180 180 4 Grundlegende Konzepte numerischen Rechnens n = length(x); V(:,1) = ones(n,1); for j=2:n V(:,j) = x.*v(:,j-1); end Bandmatrizen Zahlreiche interessante Matrizen haben viele Nullelemente. Wichtige Matrizen sind: untere Dreiecksmatrizen obere Dreiecksmatrizen und tridiagonale Matrizen Hierbei bedeutet das Zeichen ein beliebiges im allgemeinen von Null verschiedenes Matrixelement. Allgemein hat eine Matrix A = (a ij ) untere Bandbreite p, falls gilt: a ij = 0 für i > j + p. Demnach hat eine obere Dreiecksmatrix untere Bandbreite 0 und eine tridiagonale Matrix untere Bandbreite 1. Analog hat eine Matrix A = (a ij ) obere Bandbreite q, falls gilt: a ij = 0 für j > i + q. Somit hat eine untere Dreiecksmatrix obere Bandbreite 0 und eine tridiagonale Matrix obere Bandbreite 1. Das folgende Beispiel zeigt eine Matrix mit oberer Bandbreite 2 und unterer

181 4.5 Elementare Matrixrechnungen 181 Bandbreite 3: Diagonalmatrizen haben obere und untere Bandbreite 0 und können mit der MATLAB- Funktion diag erzeugt werden. Die Zuweisungen >> d = [ ]; >> D = diag(d) erzeugen die Diagonalmatrix D D = Gibt man diag mit einem zweiten Eingabeargument ein, so lassen sich damit Nebendiagonalen ansprechen. Die Zuweisungen >> a = [1 2 3]; >> A = diag(a,1) erzeugen die Diagonalmatrix A A = Umgekehrt kann man mit Hilfe der diag-funktion aus einer Matrix, einen Vektor extrahieren. Ist A eine gegebene Matrix, so extrahiert die Anweisung v = diag(a,k) die k-te Diagonale und weist sie dem Vektor v zu. Die Funktionen tril und triu können verwendet werden, um aus einer gegebenen Matrix A neue Dreiecksmatrizen zu erzeugen. Die Anweisung tril(a,k)

182 182 4 Grundlegende Konzepte numerischen Rechnens extrahiert aus A eine Matrix mit oberer Bandbreite k und triu(a,-k) extrahiert aus A eine Matrix mit unterer Bandbreite k. Damit erzeugt das Kommando >> T = -triu(tril(ones(6),1),-1)+3*eye(6) die tridiagonale Matrix T = Die gleiche Matrix T erhält man auch mit dem Kommando >> T = -diag(ones(5,1),-1)+diag(2*ones(6,1))-diag(ones(5,1),1); oder >> T = toeplitz([2;-1;zeros(4,1)],[2;-1;zeros(4,1)]); Matrizen mit Blockstruktur Oft ist es sinnvoll, eine Matrix in Untermatrizen aufzuteilen. Eine Matrix A kann in kleinere Matrizen zerlegt werden, indem man horizontale Linien zwischen Zeilen und vertikale Linien zwischen Spalten zeichnet. Die dadurch entstehenden kleineren Matrizen sind Blöcke der Matrix A. Beispiel 4.9 Blockmatrizen Zeichnen wir zwischen der zweiten und dritten Zeile bzw. zwischen der dritten und vierten Spalte der Matrix A = zwei Linien, A = , so haben wir dadurch A in vier Untermatrizen A 11, A 12, A 21 und A 22 zerlegt: ( ) A11 A 12 = A 21 A

183 4.5 Elementare Matrixrechnungen 183 In MATLAB kann man effizient mit Blockmatrizen umgehen. Das nachfolgende Script zeigt, wie man die Blockmatrizen A 11, A 12, A 21 und A 22 aus obiger Beispielmatrix A extrahieren kann: >> A11 = A(1:2,1:3); >> A12 = A(1:2,4:end); >> A21 = A(3:end,1:3); >> A22 = A(3:end,4:end); Soll umgekehrt aus gegebenen Blockmatrizen eine Matrix zusammengesetzt werden, so realisiert man dies wie folgt: >> B11 = eye(2); >> B12 = ones(2); >> B13 = 2*ones(2); >> B21 = ones(2); >> B22 = eye(2); >> B23 = 3*ones(2); >> B = [B11 B12 B13;B21 B22 B23] B = Die Spalten einer Matrix können als Blöcke aufgefaßt werden: C = c 1 c 2 c 3. In MATLAB erhält man die Spalten folgendermaßen: c1 = C(:,1); c2 = C(:,2); c3 = C(:,3); Operationen mit Matrizen Hat man Matrizen initialisiert, so kann man mit ihnen rechnen. Wir wollen uns jetzt die Matrix-Vektor- und Matrix-Matrix-Multiplikation genauer anschauen. Obwohl beide Multiplikationen Einzeiler in MATLAB sind, ist es aufschlußreich zu wissen, wie sie implementiert werden können, insbesondere wenn man mit anderen Programmiersprachen wie JAVA, C/C++ oder FORTRAN arbeitet.

184 184 4 Grundlegende Konzepte numerischen Rechnens Multiplikation einer Matrix mit einem Vektor Nehmen wir an, A R m n und x R n seien gegeben und wir wollen y = Ax R m berechnen. In MATLAB genügt:» y = A*x; In anderen Programmiersprachen, die mit Einträgen A(i,j) 10 und Komponenten x(i) arbeiten, liegt es am Programmierer, wie er das Matrix-Vektor-Produkt implementiert. Eine Möglichkeit besteht darin, die Komponenten von y = Ax als Skalarprodukte der Zeilen von A mit x zu berechnen: n y i = a ij x j mit i = 1... m. Dies ist der übliche Weg. j=1 Beispiel 4.10 Ax als Skalarprodukte ( ) 7 ( Ax = = Dies führt auf folgenden Algorithmus: [m,n] = size(a); y = zeros(m,1); for i = 1:m for j = 1:n y(i) = A(i,j)*x(j)+y(i); end end ) = ( ) = ( y1 y 2 ) = y. Mit 2mn Gleitpunktoperationen (flops) liefert dieser Algorithmus das gleiche Ergebnis wie das Kommando y=a*x. Ax berechnet sich also als Skalarprodukte der Zeilen A(i,:) mit x: Ax = A(1,:) A(2,:). A(m,:) x = A(1,:)x A(2,:)x. = A(m,:)x y 1 y 2. y m = y. Da es in MATLAB möglich ist, Skalarprodukte ohne eine for-schleife zu realisieren, können wir auf die innere for-schleife verzichten und erhalten die Funktion in Function-File 4.2. Man nennt das Verfahren auch zeilenorientiert, weil man auf die Matrix A zeilenweise zugreift. Das Innere der for-schleife der Funktion MatVekZei stellt eine Operation der Form 10 Oder in C/C++: A[i][j]. Skalar Vektor Vektor

185 4.5 Elementare Matrixrechnungen function y = MatVekZei(A,x) 2 % % Matrix mal Vektor. Zeilenweise Methode oder 4 % Skalarproduktmethode. 5 % 6 % Eingabe: A mxn Matrix. 7 % x n Spaltenvektor. 8 % Ausgabe: y m Spaltenvektor. y=ax. 9 % [m,n] = size(a); 11 y = zeros(m,1); 12 for i=1:m 13 y(i) = A(i,:)*x; 14 end; Function-File 4.2: Zeilenorientiertes Matrix-Vektor Produkt dar. In LAPACK wird hierfür der Name DOT verwendet, da das Matrix-Vektor-Produkt über Skalarprodukte berechnet wird. Aus der linearen Algebra ist bekannt, daß Ax auch als Linearkombination der Spalten von A berechnet werden kann: Beispiel 4.11 Ax als Linearkombination der Spalten ( ) 7 ( ) ( Ax = = Allgemein gilt: Ax = a 1 a 2 a n x = x 1 a 1 + x 2 ) ( a 2 ) = ( x n ) = y. a n = y. Mit anderen Worten, y ist eine Linearkombination der Spalten von A, wobei die Komponenten x j von x die Koeffizienten sind. Dies führt auf folgenden spaltenorientierten Algorithmus 4.3 zur Berechnung von Ax. Das Innere der for-schleife der Funktion MatVekSp stellt eine Operation der Form Vektor Skalar Vektor + Vektor dar. In LAPACK wird hierfür der Name SAXPY verwendet, der als Abkürzung für Single (precision) Alpha X Plus Y steht. Zusammen mit dem Skalarprodukt ist dies eine wichtige Operation in Matrizenrechnungen. Wie MatVekZei benötigt auch MatVekSp 2mn Gleitpunktoperationen. Wir bemerken jedoch ausdrücklich, daß dieses Komplexitätsmaß seine Grenzen hat. Es ist keinesfalls

186 186 4 Grundlegende Konzepte numerischen Rechnens 1 function y = MatVekSp(A,x) 2 % % Matrix mal Vektor. Spaltenweise Methode oder 4 % Linearkombinationsmethode. 5 % 6 % Eingabe: A mxn-matrix. 7 % x n-spaltenvektor. 8 % Ausgabe: y m-spaltenvektor. y=ax. 9 % [m,n] = size(a); 11 y = zeros(m,1); 12 for j=1:n 13 y = A(:,j)*x(j) + y; 14 end; Function-File 4.3: Spaltenorientiertes Matrix-Vektor-Produkt so, daß beide Funktionen auf einem Rechner gleich schnell laufen. Die Ursache liegt darin, daß die Geschwindigkeit eines Algorithmus auch davon abhängt, wie eine Matrix im Computer gespeichert ist. In höheren Progrmmiersprachen werden Matrizen gewöhnlich in einem zweidimensionalen Feld (Array) 11 gespeichert. Dieses zweidimensionale Objekt muß im Computer in einen eindimensionalen Speicher abgelegt werden, das heißt, alle Elemente einer Matrix werden in aufeinanderfolgenden Speichereinheiten 12 gespeichert. Dies kann man auf verschiedene Weisen tun, jede hat ihre Vor- und Nachteile. Für allgemeine Matrizenrechnungen sind zwei Methoden üblich: Zeilenweise speichern. In diesem Fall wird die Matrix Zeile für Zeile abgespeichert. Beispiel 4.12 Zeilenweise speichern Die Elemente eines 3 2-Feldes A werden wie folgt gespeichert: A(1,1) A(1,2) A(2,1) A(2,2) A(3,1) A(3,2) Tabelle 4.9: Zeilenweise speichern Spaltenweise speichern. In diesem Fall wird die Matrix Spalte für Spalte abgespeichert. Beispiel 4.13 Spaltenweise speichern Die Elemente eines 3 2-Feldes A werden wie folgt gespeichert: 11 In C/C++ heißen Felder auch Vektoren und man spricht von einem zwei(drei,vier,...)dimensionalen Vektor. 12 Auch Speicherzellen genannt.

187 4.5 Elementare Matrixrechnungen 187 A(1,1) A(2,1) A(3,1) A(1,2) A(2,2) A(3,2) Tabelle 4.10: Spaltenweise speichern Werden die Matrixelemente spaltenweise gespeichert, dann ist es effizienter, das Matrixprodukt Ax mit dem spaltenorientierten Algorithmus wie in der Funktion MatVekSp zu implementieren. Würde man nämlich die zeilenorientierte Methode wählen, so wären die Elemente einer Spalte über den Speicher verteilt und ein zur Berechnung notwendiger Zugriff würde einen unnötigen Zeitverzug mit sich bringen. Stimme die Orientierung des Algorithmus mit der Speichermethode einer Matrix ab. In C/C++ werden die Matrizen zeilenweise gespeichert, während in FORTRAN dies spaltenweise geschieht. Da LINPACK und LAPACK in FORTRAN geschrieben sind 13, sind die Algorithmen dort spaltenorientiert realisiert. Der Script-File MatVekBench.m, der sich auf der beiliegenden CD befindet, vergleicht die beiden Funktionen MatVekZei und MatVekSp mit dem MATLAB-Einzeiler y=a*x. Entscheidend sind in der nachfolgenden Tabelle nicht die absoluten Zeitwerte, sondern vielmehr die Problematik des Zählens der Gleitpunktoperationen. Verschiedene Methoden mit der gleichen Anzahl an Gleitpunktoperationen haben unterschiedliche Effizienz. Ob der Algorithmus über ein Skalarprodukt oder eine SAXPY-Operation implementiert ist, hat eine größere Bedeutung als die Anzahl der Gleitpunktoperationen. >> MatVekBench n=m Zeilenweise Spaltenweise Direkt Zusammenfassung Das Produkt Ax kann auf zwei verschiedene Arten berechnet werden. Welche Methode implementiert werden soll, hängt davon ab, ob die Matrizen im Rechner zeilen- oder spaltenweise abgelegt werden. 1. Als Skalarprodukte der Zeilen von A mit x. Den dazugehörigen Algorithmus nennt man zeilenorientiert. 13 Es gibt für LAPACK auch eine C-Implementierung, die aber auch spaltenweise speichert, da C nur die Schnittstelle darstellt.

188 188 4 Grundlegende Konzepte numerischen Rechnens 2. Als Linearkombination der Spalten von A, wobei die Koeffizienten die Komponenten von x sind. Den dazugehörigen Algorithmus nennt man spaltenorientiert. Somit hat man in MATLAB drei verschiedene Möglichkeiten, ein Matrix-Vektor-Produkt zu realisieren: 1. Direkt: y = A*x 2. Zeilenweise: y(i) = A(i,:)*x 3. Spaltenweise: y = A(:,j)*x(j)+y Multiplikation einer oberen Dreiecksmatrix mit einem Vektor In vielen Anwendungen sind die Matrizen strukturiert, zum Beispiel treten viele Nullelemente auf. Dann ist es angebracht, die Algorithmen entsprechend anzupassen, um die Effizienz zu steigern. Wir wollen nun als Beispiel den Fall dsikutieren, wenn A R n n eine obere Dreiecksmatrix ist und das Produkt y = Ax berechnet werden soll. Das Produkt lautet im Fall n = 4: y = = = Ax. Wählt man die zeilenorientierte Methode über das Skalarprodukt, so gilt: for i = 1:n y(i) = A(i,:)*x; end Ist nun A eine obere Dreiecksmatrix, so werden in der Schleife viele Multiplikationen durchgeführt, die überflüssig sind, da jeweils ein Faktor null ist. Im Fall n = 10 hat das Skalarprodukt A(7,:)*x folgende Form: ( ) Gleitpunktoperationen lassen sich nun einsparen, indem man die auftretenden Nullen derart ignoriert, daß man das Skalarprodukt entsprechend kürzt..

189 4.5 Elementare Matrixrechnungen 189 Aufgrund dieser Beobachtungen folgt, daß in der Zeile A(i,:) die Elemente A(i,i:n) von Null verschieden sind und deshalb A(i,i:n)*x(i:n) derjenige Teil des ganzen Skalarproduktes A(i,:)*x ist, den man überhaupt berücksichtigen muß. Deshalb ist der Algorithmus 4.4 eine Version der Funktion MatVekZei (Function-File 4.2), die die obere Dreieckstruktur ausnutzt. 1 function y = ObDreiMatVekZei(A,x); 2 % % Obere Dreiecksmatrix mal Vektor. Zeilenweise Methode 4 % oder Skalarproduktmethode. 5 % 6 % Eingabe: A nxn obere Dreiecksmatrix. 7 % x n-spaltenvektor. 8 % Ausgabe: y n-spaltenvektor. y=ax. 9 % [n,n] = size(a); 11 y = zeros(n,1); 12 for i=1:n 13 y(i) = A(i,i:n)*x(i:n); 14 end Function-File 4.4: Matrix-Vektor-Produkt für Dreiecksmatrizen (zeilenorientiert) Die Funktion MatVekSp kann ebenfalls für obere Dreiecksmatrizen effizient implementiert werden. Bemerkt man, daß in Spalte A(:,j) nur die ersten j Elemente von Null verschieden sind, so erhält man den Algorithmus 4.5 als Version von MatVekSp, der die obere Dreieckstruktur ausnutzt. Multiplikation einer Matrix mit einer Matrix Es seien A R m p und B R p n gegeben. Dann ist das Produkt C = AB definiert und eine m n-matrix. Wie für das Matrix-Vektor-Produkt, so ist auch die Matrix-Matrix- Multiplikation in MATLAB ein Einzeiler und durch C = A*B gegeben. Das bedeutet, daß der MATLAB-Benutzer keine Funktion schreiben muß, um zwei Matrizen miteinander zu multiplizieren. Dennoch wollen wir uns die Implementierungsmöglichkeiten genauer anschauen. Insbesondere wird sich dabei zeigen, daß die Anzahl der Gleitpunktoperationen nur ein eingeschränktes Kriterium für die Effizienz eines numerischen Verfahrens ist und die Matrizenmultiplikation in MATLAB effizient implementiert ist.

190 190 4 Grundlegende Konzepte numerischen Rechnens 1 function y = ObDreiMatVekSp(A,x); 2 % % Obere Dreiecksmatrix mal Vektor. Spaltenweise Methode 4 % oder Linearkombinationsmethode. 5 % 6 % Eingabe: A nxn obere Dreiecksmatrix. 7 % x n-spaltenvektor. 8 % Ausgabe: y n-spaltenvektor. y=ax. 9 % [n,n] = size(a); 11 y = zeros(n,1); 12 for j=1:n 13 y(1:j) = A(1:j,j)*x(j) + y(1:j); 14 end Function-File 4.5: Matrix-Vektor-Produkt für Dreiecksmatrizen (spaltenorientiert) In der linearen Algebra lernt man drei Möglichkeiten kennen, um das Matrix-Matrix-Produkt zu berechnen: 1. Spaltenweise. Man berechnet die Produktmatrix C = AB spaltenweise, indem man A mit der ersten Spalte b 1 von B multipliziert, was die erste Spalte c 1 von C ergibt, dann A mit der zweiten Spalte b 2 von B multipliziert, was die zweite Spalte c 2 von C ergibt, usw., bis alle Spalten von C berechnet sind. Symbolisch: AB = A = b 1 b 2 b n c 1 c 2 c n = = C. Ab 1 Ab 2 Ab n Beispiel 4.14 C = AB spaltenweise 1 2 ( ) AB = = = = C ( ) ( ) 2. Zeilenweise. Man berechnet die Produktmatrix C = AB zeilenweise, indem man die erste Zeile A(1,:) von A mit B multipliziert, was die erste Zeile C(1,:) von C ergibt, dann die zweite Zeile A(2,:) von A mit B multipliziert, was die zweite Zeile C(2,:)

191 4.5 Elementare Matrixrechnungen 191 von C ergibt, usw., bis alle Zeilen von C berechnet sind. Symbolisch: A(1,:) A(1,:)B A(2,:) A(2,:)B AB =. B = A(m,:). = A(m,:)B C(1,:) C(2,:). C(m,:) = C. Beispiel 4.15 C = AB zeilenweise AB = = ( = C. ) = ( ) ( ) ( ) ( ) ( ) ( ) Summe von dyadischen Produkten. Man berechnet die Produktmatrix C = AB, indem man das dyadische Produkt a 1 B(1,:) der ersten Spalte a 1 von A mit der ersten Zeile B(1,:) von B bildet, dann das dyadische Produkt a 2 B(2,:) der zweiten Spalte a 2 von A mit der zweiten Zeile B(2,:) von B bildet usw., bis schließlich alle p berechneten m n-matrizen aufsummiert sind, was gerade die Matrix C ergibt. Symbolisch: AB = a 1 a 2 a p B(1,:) B(2,:). B(p,:) = a 1 B(1,:) + a 2 B(2,:) +...a p B(p,:) = C Beispiel 4.16 C = AB als Summe von dyadischen Produkten 1 2 ( ) 1 AB = = 3 ( ) = = = C. ( ) Betrachten wir die spaltenweise Methode. Jede Spalte c j von C ist ein Matrix-Vektor- Produkt, nämlich c j = Ab j. Aus den obigen Überlegungen heraus wissen wir, daß sich dieses Produkt auf zwei Arten berechnen läßt. Einmal als Skalarprodukt der Zeilen von A mit b j und zum anderen als Linearkombination der Spalten von A, wobei die Koeffizienten die Komponenten von b j sind. Demzufolge gibt es insgesamt vier Möglichkeiten das Matrixprodukt C = AB in MATLAB zu implementieren: 1. Direkt: C = A * B

192 192 4 Grundlegende Konzepte numerischen Rechnens 2. Als direktes Matrix-Vektor-Produkt: C(:,j) = A * B(:,j) 3. Als Matrix-Vektor-Produkt C(i,j) = A(i,:) * B(:,j) über Skalarprodukte c ij = a T i b j 4. Als Matrix-Vektor-Produkt C(:,j) = B(1,j) * A(:,1)+...+B(p,j) * A(:,p) über Linearkombinationen c j = b 1j a 1 + b 2j a b pj a p Realisierungen der Matrix-Matrix-Multiplikation Ist A R m p und B R p n, dann ist das Matrixprodukt C = AB definiert und es gilt: c ij = r a ik b kj k=1 für alle i und j mit 1 i m und 1 j n. In Worten: C ist das Skalarprodukt einer Zeile von A mit einer Spalte von B. Eine Implementierung in FORTRAN oder C/C++ benötigt hierzu drei for-schleifen. Die Struktur wird aus nachfolgenden MATLAB-Zeilen deutlich, die das Produkt AB berechnen und der Matrix C zuweisen. C = zeros(m,n); for j=1:n for i=1:m for k=1:p C(i,j)=C(i,j)+A(i,k)*B(k,j); end end end In MATLAB genügt die Anweisung C = A*B; Es gibt viele Möglichkeiten eine Matrix-Matrix-Multiplikation zu betrachten. Die folgende zeilenweise oder Skalarproduktmethode ist eine davon. Da in MATLAB das Skalarprodukt in einer Zeile berechnet werden kann, kann man auf die innere k-schleife verzichten und eine zeilenweise Methode, wie im Function File 4.6 gezeigt, realisieren. 4.6 Weitere Bemerkungen und Hinweise Einen flop haben wir als eine Gleitpunktoperation definiert. Diese Definition findet man im Buch [34] und auch in MATLAB. Trotzdem ist diese Definition nicht allgemein akzeptiert und befindet sich daher in einem ungeordneten Zustand. Vielmehr gibt es geschichtlich bedingt, mehrere unterschiedliche Definitionen. Da dieser Begriff daher abgenutzt erscheint, schlägt G.W. STEWART eine neue Definition vor. Wir wollen darauf nicht weiter eingehen und verweisen auf [95].

193 4.6 Weitere Bemerkungen und Hinweise function C = MatMatDot(A,B) 2 % % Matrix mal Matrix. Zeilenweise Methode oder 4 % Skalarproduktmethode. 5 % 6 % Eingabe: A mxp-matrix. 7 % B pxn-matrix. 8 % Ausgabe: C mxn-matrix. C=AB. 9 % [m,p] = size(a); 11 [p,n] = size(b); 12 C = zeros(m,n); 13 for j=1:n 14 % Berechnet die j-te Spalte von C. 15 for i=1:m 16 C(i,j) = A(i,:)*B(:,j); 17 end 18 end; Function-File 4.6: Berechnet Matrix mal Matrix zeilenweise Weitere Hinweise und Ergänzungen über mathematische Software findet man in [9] und [106]. Für durchschnittliche Ansprüche können auch die Codes aus [77] und [20] bzw. [21] herangezogen werden. Elementare Matrixrechnungen werden im Buch [108] ausführlich diskutiert. Die Suche nach einer Möglichkeit, die Vorwärtsanalyse zu systematisieren und automatisch vom Rechner mit ausführen zu lassen, führte auf die Entwicklung der Intervallarithmetik, siehe zum Beispiel [42]. Im Anhang A des Buches [41] wird die IEEE-Arithmetik detailliert beschrieben. Das Buch [45] ist die aktuellste Darstellung über Rundungsfehler. Weitere Untersuchungen zum gesamten Thema in diesem Kapitel findet man in [16], [46], [74] und [107]. Viele Beispiele zur Gleitpunktarithmetik, insbesondere zu Gefahrensituationen beim Rechnen in endlicher Genauigkeit, wie zum Beispiel Auslöschung, findet man in den Büchern [40] und [54].

194 194 4 Grundlegende Konzepte numerischen Rechnens 4.7 Übungsaufgaben 4.1 WAHR oder FALSCH: Ein Problem ist schlecht konditioniert, wenn seine Lösung sehr sensitiv gegenüber kleinen Störungen in den Problemdaten ist. 4.2 WAHR oder FALSCH: Ein schlecht konditioniertes Problem wird besser konditioniert, wenn man eine genauere Gleitpunktarithmetik verwendet. 4.3 WAHR oder FALSCH: Die Kondition eines Problems hängt vom Algorithmus ab, der dies löst. 4.4 WAHR oder FALSCH: Unabhängig von der Kondition des Problems produziert ein guter Algorithmus eine genaue Lösung. 4.5 WAHR oder FALSCH: Sind zwei reelle Zahlen exakt als Gleitpunktzahlen darstellbar, dann ist das Resultat einer arithmetischen Operation auf diesen beiden Zahlen wieder eine Gleitpunktzahl. 4.6 WAHR oder FALSCH: Gleitpunktzahlen sind über ihren Darstellbarkeitsbereich gleichmäßig verteilt. 4.7 WAHR oder FALSCH: Eine Gleitpunktaddition ist zwar assoziativ, aber nicht kommutativ. 4.8 Erklären Sie den Unterschied zwischen Diskretisierung und Rundung. 4.9 Erklären Sie den Unterschied zwischen absolutem und relativem Fehler Erklären Sie den Unterschied zwischen Rechen- und Datenfehler (a) Was versteht man unter der Kondition eines Problems? (b) Wird sie durch den Algorithmus, der das Problem löst, beeinflußt? (c) Wird sie durch die Genauigkeit der Arithmetik beeinflußt? 4.12 Falls ein Problem eine Konditionszahl von 1 hat, ist dies gut oder schlecht? Warum? 4.13 Wann ist die genäherte Lösung eines Problems im Sinne der Rückwärtsfehleranalyse eine gute Lösung? 4.14 Beschreiben Sie in Worten die Verteilung der Maschinenzahlen entlang der reellen Zahlengerade Was ist harmloser, Overflow oder Underflow? Warum? 4.16 Geben Sie zwei Gründe an, warum Gleitpunktzahlensysteme gewöhnlich normiert sind Finden Sie mit MATLAB heraus, ob auf Ihrem Rechner der IEEE-Standard unterstützt wird Finden Sie auf Ihrem Computer die Maschinengenauigkeit, die kleinste und die größte positive Maschinenzahl heraus In vielen Gleitpunktsystemen bekommt man durch den Term 3( 4 3 1)) 1 eine Näherung für die relative Rechengenauigkeit u, das heißt u 3( 4 1)) 1. 3 (a) Berechnen Sie die rechte Seite mit Bleistift und Papier. (b) Benutzen Sie MATLAB, um die rechte Seite zu berechnen. (c) Erklären Sie den Unterschied zwischen beiden Ergebnissen. (d) Vergleichen Sie die bisherigen Ergebnisse mit der MATLAB-Variablen eps.

195 4.7 Übungsaufgaben 195 (e) Benutzen Sie Ihren Taschenrechner, um eine Näherung für u zu bekommen. (f) Funktioniert dieser Trick auch in Gleitpunktsystemen mit Basis β = 3? Bevor man den IEEE-Standard schuf, war dieser Code eine schnelle Methode, um u auf verschiedenen Computern zu berechnen (a) Führen Sie das nachfolgende MATLAB-Script aus: x=1; p=0; while (1+x) > 1 x = x/2; p = p+1; end (b) Geben Sie die Werte an, die nach Ausführung des Scripts in den Variablen p und x stehen. (c) Interpretieren Sie dieses MATLAB- Script Das Polynom (x 1) 6 ist im Punkt x = 1 Null und sonst positiv. Die ausmultiplizierte Form dieses Polynoms ist x 6 6x x 4 20x x 2 6x + 1 und ist mathematisch äquivalent zu obigem Term, ergibt aber nicht die gleichen numerischen Ergebnisse. Berechnen und zeichnen Sie die Werte dieses Polynoms für beide Darstellungen im Intervall [0.995,1.005] für 101 im gleichen Abstand befindliche Punkte. Können Sie die Ergebnisse erklären? 4.22 Berechnen Sie das Matrix-Matrix- Produkt 1 2 ( ) AB = (a) Spaltenweise (Matrix mal Spaltenvektor). (b) Zeilenweise (Zeilenvektor mal Matrix). (c) Als Summe dyadischer Produkte 4.23 Welche Resultate erwarten Sie und welche Ergebnisse erhalten Sie mit MAT- LAB tatsächlich? (a) >> x = 2.5e200; >> y = 1.0e200; >> z = x*y; (b) >> x = 2.5e-200; >> y = 1.0e200; >> z = x/y; (c) >> x = 2; >> y = 0; >> z = x/y; (d) >> x = 0; >> y = 0; >> z = x/y; (e) >> 1 / Inf (f) >> Inf + Inf (g) >> Inf - Inf (h) >> -1 * Inf 4.24 Geben Sie in MATLAB jeweils ein Beispiel an, das zeigt, daß das Kommutativ- Assoziativ- und Distributivgesetz der Addition nicht erfüllt ist Die spezielle Variable NaN (oder nan) steht in MATLAB für Not a Number. Nach dem IEEE-Standard ist NaN ein Ergebnis für undefinierte Ausdrücke, wie zum Beispiel 0/0. Ein kreativer Gebrauch von NaN in MATLAB besteht darin, fehlende Werte eines Datensatzes, zum Beispiel eines Vektors, damit zu belegen. Nehmen wir nun an, der Vektor x habe NaNs als Komponenten und Sie wollen einen neuen Vektor y erzeugen, der keine NaNs mehr enthält. Wie lautet der MATLAB-Code, der dies tut? Angenommen >> x = [1 NaN 3]; Was steht im Vektor y nach der Anweisung: >> y = x(~(x~=x));

196 196 4 Grundlegende Konzepte numerischen Rechnens Begründen Sie das Resultat! 4.26 Berechnen Sie die nachfolgenden Ausdrücke in MATLAB. Sind die Ergebnisse die, die Sie erwarten? (Diese Ausdrücke sind im IEEE-Standard nicht definiert.) (a) 1 (b) 2 (c) exp( ), exp( ) (d) sign(nan), sign(-nan) (e) NaN 0 (f) 0 (g) 1 NaN (h) log( ), log( ), log(0) 4.27 Finden Sie mit einem angegebenen Suchsystem die Homepage der HARWELL- Bibliothek.

197 5 Lineare Gleichungssysteme For engineers and social and physical scientists, linear algebra now fills a place that is often more important than calculus. My generation of students, and certainly my teachers, did not see this change coming. It is partly the move from analog to digital, in which functions are replaced by vectors. GILBERT STRANG The simplest model in applied mathematics is a system of linear equations. It is also by far the most important. GILBERT STRANG Bei vielen realen, aber auch innermathematischen 1 Problemen treten n unbekannte reelle Größen x 1,x 2,...,x n auf, die einem linearen Gleichungssystem a 11 x 1 + a 12 x a 1n x n = b 1 a 21 x 1 + a 22 x a 2n x n = b 2. a m1 x 1 + a m2 x a mn x n = b m mit bekannten reellen Koeffizienten a ij und rechten Seiten b j genügen und so bestimmt werden sollen, daß das lineare Gleichungssystem erfüllt ist. Mit den Bezeichnungen a 11 a 1n A =.. a m1 a mn, b = läßt sich das lineare Gleichungssystem kurz als b 1. Ax = b b m und x = x 1. schreiben. Die Matrix A = (a ij ) R m n wird als Koeffizientenmatrix oder Systemmatrix, der Vektor b = (b 1,...,b n ) T R m als rechte Seite des Systems bezeichnet, und x = (x 1,...,x n ) T R n ist der gesuchte Vektor der Unbekannten. 1 Zum Beispiel um nichtlineare Gleichungen durch lineare zu approximieren oder Differentialgleichungen durch algebraische Gleichungen zu ersetzen. x n 197

198 198 5 Lineare Gleichungssysteme Das Lösen eines linearen Gleichungssystems stellt ein sogenanntes inverses Problem dar. Im Gegensatz dazu spricht man vom direkten Problem, wenn A und x gegeben sind und b berechnet werden muß. Ein Identifikationsproblem liegt vor, wenn x und b gegeben sind, aber die Systemmatrix A unbekannt ist. Wir beschäftigen uns hier mit dem inversen Problem, dem Lösen eines linearen Gleichungssystems. Die Aufgabe, ein lineares Gleichungssystem zu lösen, schreibt sich kompakt wie folgt: Lineare Gleichungssysteme Gegeben ist eine m n-matrix A und ein m-vektor b. Finde einen n-vektor x, so daß gilt: Ax = b Ein entscheidender Gesichtspunkt bei der Lösung solcher Systeme ist die Struktur der Systemmatrix A. Bei Ausgleichsaufgaben ist die Matrix A oft vollbesetzt, das heißt, nur wenige Elemente sind gleich Null. Andererseits ist A bei gewissen Randwertaufgaben tridiagonal, und bei Randwertproblemen für partielle Differentialgleichungen kommt es vor, daß A groß und dünn besetzt ist. Bei der numerischen Lösung muß dem soweit wie möglich Rechnung getragen werden, um effiziente Algorithmen zu erhalten. Aus diesen Gründen ist das genaue und effiziente Lösen linearer Systeme für viele numerische Verfahren von entscheidender Bedeutung. Es gibt zwei grundlegende Lösungsmethoden für lineare Systeme. Mit direkten Verfahren erhält man die exakte Lösung (in Gleitpunktarithmetik) mit endlich vielen Schritten, wogegen bei iterativen Verfahren eine Folge von Näherungen erzeugt wird, die gegen die Lösung konvergiert. Im allgemeinen eignen sich direkte Verfahren am besten für vollbesetzte oder Bandmatrizen, dagegen sind iterative Verfahren am besten für große, dünnbesetzte Matrizen geeignet. Der Grund dafür liegt darin, daß direkte Verfahren in der Regel die dünne Besetztheit zerstören, während iterative Verfahren die Matrixstruktur erhalten. Sowohl hinsichtlich der Existenz und Struktur der Lösungsmenge als auch für die Auswahl geeigneter Lösungsverfahren ist es zweckmäßig, bei linearen Gleichungssystemen die folgenden drei Fälle zu unterscheiden: Fall 1: Quadratische Systeme 2, das heißt m = n Fall 2: Unterbestimmte Systeme, das heißt m < n Fall 3: Überbestimmte Systeme, das heißt m > n Im Fall 1 gibt es genau so viele Gleichungen wie Unbekannte, das heißt m = n. Die nachfolgende Abbildung 5.1 zeigt dies schematisch. Im Fall 2 ist die Anzahl der Gleichungen kleiner als die Zahl der Unbekannten, das heißt m < n. Daher der Name unterbestimmt. Die nachfolgende Abbildung 5.2 zeigt dies symbolisch. Im Fall 3 gibt es mehr Gleichungen als Unbekannte, das heißt m > n. Daher der Name überbestimmt. Die nachfolgende Abbildung 5.3 zeigt dies symbolisch. 2 Auch Bestimmte Systeme genannt.

199 5 Lineare Gleichungssysteme 199 m = n = A x b Abbildung 5.1: Quadratisches lineares Gleichungssystem m < n = A x b Abbildung 5.2: Unterbestimmtes lineares Gleichungssystem m > n = A x b Abbildung 5.3: Überbestimmtes lineares Gleichungssystem

200 200 5 Lineare Gleichungssysteme Quadratische lineare Gleichungssysteme haben in der Regel 3 genau eine Lösung; unterbestimmte Systeme haben in der Regel unendlich viele Lösungen und überbestimmte Systeme sind im allgemeinen nicht lösbar. Über- und unterbestimmte Gleichungssysteme behandeln wir im Kapitel 6 Lineare Ausgleichsrechnung. Hier wollen wir uns mit quadratischen Systemen beschäftigen. Die Methoden zur Lösung linearer Gleichungssysteme stellen ein umfangreiches Gebiet der numerischen Mathematik dar. Wir beschäftigen uns hier mit dem GAUSSschen Eliminationsverfahren bzw. mit der LU-Faktorisierung, das zu den direkten Lösungsverfahren gehört. Zuvor müssen wir jedoch einige Vorbereitungen treffen. 5.1 Zur Lösbarkeit linearer Gleichungssysteme Für lineare Gleichungssysteme Ax = b fassen wir die Lösbarkeit nochmals in der Tabelle 5.1 zusammen. Lösungen Genau eine Lösung Keine Lösung Unendlich viele Lösungen Bedingungen Rang(A) = n b / Bild(A) b Bild(A) und Rang(A) < n Tabelle 5.1: Zur Lösbarkeit linearer Systeme Eine n n-matrix A ist singulär, wenn eine der nachfolgenden, untereinander äquivalenten Eigenschaften gilt: A hat keine Inverse, das heißt, es gibt keine Matrix B, so daß AB = BA = I ist, wobei I die Einheitsmatrix ist. det(a) = 0, das heißt, die Determinante von A ist 0. Rang(A) < n, das heißt, die maximale Anzahl der linear unabhängigen Zeilen oder Spalten ist kleiner als n. Az = 0 für ein z 0, das heißt, der Kern (Nullraum) von A besteht nicht nur aus dem Nullvektor. Andernfalls ist die Matrix nicht singulär oder regulär. Die Lösbarkeit eines linearen Gleichungssystems Ax = b hängt davon ab, ob die Matrix A singulär oder regulär ist. Ist A regulär, dann besitzt sie eine Inverse A 1 und das System Ax = b hat unabhängig von b immer eine eindeutige Lösung x = A 1 b. Wir sagen auch, das lineare System ist universell eindeutig lösbar. Ist andererseits A singulär, dann hängt die Anzahl der Lösungen von der rechten Seite b des Gleichungssystems ab. Entweder hat Ax = b keine Lösung oder aber unendlich viele. Ist x irgendeine Lösung, 3 Man sagt auch: Haben generisch genau eine Lösung.

201 5.1 Zur Lösbarkeit linearer Gleichungssysteme 201 dann gibt es ein z 0 mit Az = 0 und alle Vektoren der Form x + αz, α R sind Lösungen, denn A(x + αz) = Ax + αaz = b + α 0 = b. Damit gilt: Hat ein singuläres System eine Lösung, dann kann diese nicht eindeutig sein. Wir fassen den Zusammenhang der Lösbarkeit eines linearen Gleichungssystems mit der dazugehörigen Systemmatrix A in der Tabelle 5.2 zusammen. Lösungen A b Genau eine Lösung regulär b R m Keine Lösung singulär b / Bild(A) Unendlich viele Lösungen singulär b Bild(A) Tabelle 5.2: Zur Lösbarkeit In zwei Dimensionen stellt eine lineare Gleichung eine Gerade in der Ebene dar. Die Lösung eines Gleichungssystems (n = 2) ist der Schnittpunkt der beiden Geraden. Sind die beiden Geraden nicht parallel, so gibt es genau einen Schnittpunkt (genau eine Lösung; regulärer Fall). Sind dagegen die Geraden parallel, so gibt es entweder keinen Schnittpunkt (keine Lösung, singulärer Fall) oder die beiden Geraden sind identisch (unendlich viele Lösungen; singulärer Fall). Die Abbildung 5.4 zeigt die Situation. In höheren Dimensionen bestimmt 1 Genau eine Lösung 1 Keine Lösung Unendlich viele Lösungen Abbildung 5.4: Zeilenbild im Fall n = 2 jede Gleichung eine Hyperebene und im regulären Fall bedeutet dies, daß alle Hyperebenen genau einen Punkt gemeinsam haben. Da hier ein Gleichungssystem zeilenweise interpretiert wird, spricht man vom Zeilenbild eines Gleichungssystems.

202 202 5 Lineare Gleichungssysteme Es gibt auch ein Spaltenbild eines Gleichungssystems. Hierzu betrachtet man die Spalten von A und die Spalte b. In zwei Dimensionen spannen die Spaltenvektoren von A den R 2 auf, wenn sie linear unabhängig sind. Dann kann jeder Vektor b mit diesen linear kombiniert werden. Dies bedeutet, daß das lineare System universell eindeutig lösbar ist und die Koeffizienten der Linearkombination sind die Lösungskomponenten. Sind die Spalten von A dagegen linear abhängig, so hängt es von b ab, ob es eine Lösung gibt oder nicht. Liegt b nicht im eindimensionalen Raum, der von den beiden Spaltenvektoren von A aufgespannt wird, so gibt es keine Lösung; b kann nicht linear kombiniert werden. Liegt b aber im Spaltenraum von A, dann gibt es unendlich viele Lösungen. Die Abbildung 5.5 zeigt die Situation. 1 Genau eine Lösung 1 Keine Lösung Unendlich viele Lösungen b b b Abbildung 5.5: Spaltenbild im Fall n = 2 Beispiel 5.1 Reguläre und singuläre Gleichungssysteme Das 2 2 System bzw. ( x 1 + 3x 2 = b 1 5x 1 + 4x 2 = b 2 ) ( x1 x 2 ) = ist regulär und hat unabhängig von b immer genau eine Lösung. Ist z.b. b = (8,13) T, dann ist x = (1, 2) T die Lösung. Das 2 2 System ( ) ( ) ( ) 2 3 x1 b1 = 4 6 x 2 ( b1 ist dagegen singulär. Ist z.b. b = (4, 7) T, dann gibt es keine Lösung, wohingegen für b = (4, 8) T ( ) α x = 4 2α 3 b 2 b 2 )

203 5.2 Wie löst man lineare Systeme? 203 für jedes α R eine Lösung ist. 5.2 Wie löst man lineare Systeme? Möchte man ein lineares Gleichungssystem lösen, so sollte man dieses in ein anderes transformieren, das sich leichter lösen läßt und natürlich die gleiche Lösungsmenge hat. Dies ist eine allgemeine Strategie im wissenschaftlichen Rechnen. Aus diesem Grund fragen wir zunächst danach: Welcher Typ von Transformation ändert die Lösung bzw. die Lösungen eines linearen Systems nicht? Die Antwort ist: Wir können beide Seiten des linearen Gleichungssystems Ax = b von links mit irgendeiner regulären Matrix M multiplizieren, ohne die Lösung zu ändern. Um dies im Fall einer regulären Matrix A einzusehen, betrachte man die Lösung des linearen Systems MAx = Mb: x = (MA) 1 Mb = A 1 M 1 Mb = A 1 b. 5.3 Lineare Systeme mit Dreiecksmatrizen Die Frage ist nun, welche Typen linearer Gleichungssysteme sind leicht lösbar? Nehmen wir an, in einem linearen System Ax = b gibt es eine Gleichung, die nur eine Variable enthält oder anders gesagt, es gibt in der Matrix A eine Zeile, die bis auf einen Eintrag lauter Nullen hat. Mit einer Division kann man dann leicht nach dieser Variablen auflösen. Nehmen wir weiter an, es gebe eine zweite Gleichung mit nur zwei Variablen, wovon eine diejenige ist, nach der wir bereits aufgelöst haben. Setzt man nun diese Lösung in die zweite Gleichung ein, so kann man eine Lösung für die andere Variable erhalten. Setzt sich diese Struktur in einem linearen System so fort, das heißt, hat man pro Gleichung eine Variable mehr, so kann man alle Komponenten des Lösungsvektors der Reihe nach bestimmen. Eine Matrix mit dieser speziellen Struktur kann immer durch Zeilenvertauschungen auf Dreiecksgestalt gebracht werden; man spricht dann von einer Dreiecksmatrix. Da solche Dreieckssysteme durch sukzessives Einsetzen leicht lösbar sind, besteht das Ziel darin, allgemeine lineare Systeme in solche zu überführen. Dies ist das Eliminationsverfahren nach GAUSS. Ziel des GAUSSCHEN Eliminationsverfahrens ist es, ein lineares Gleichungssystem in ein äquivalentes dreieckförmiges System zu überführen. Die quadratische Systemmatrix wird dabei in eine dreiecksförmige Matrix transformiert, ohne daß sich dadurch die Lösungsmenge ändert. In den Anwendungen spielen zwei Arten von Dreiecksmatrizen eine besondere Rolle: die oberen und die unteren Dreiecksmatrizen. Eine Matrix ist eine obere Dreiecksmatrix, wenn unterhalb der Hauptdiagonalen lauter Nullen stehen:

204 204 5 Lineare Gleichungssysteme Eine Matrix ist eine untere Dreiecksmatrix, wenn oberhalb der Hauptdiagonalen lauter Nullen stehen: Die oberen Dreiecksmatrizen bezeichnen wir 4 mit U und die unteren mit L. Vorwärtseinsetzen Wir betrachten zunächst untere Dreieckssysteme Lx = b. Hierzu sei folgendes 3 3- System gegeben: l x 1 b 1 l 21 l 22 0 x 2 = b 2 l 31 l 32 l 33 x 3 b 3 L x b Die Unbekannten x 1, x 2 und x 3 können wie folgt berechnet werden: x 1 = b 1 l 11 x 2 = b 2 l 21 x 1 l 22 x 3 = b 3 l 31 x 1 l 32 x 2 l 33. Dieses Verfahren nennt man Vorwärtseinsetzen 5. Der Lösungsvektor wird dabei so berechnet, daß zuerst die erste Komponente x 1, dann die zweite x 2 und schließlich die dritte Komponente x 3 ermittelt wird. Das Verfahren setzt voraus, daß l 11, l 22 und l 33 ungleich 0 sind oder gleichbedeutend, daß die Determinante von L ungleich 0 ist, was der Regularität von L gleichkommt. Betrachten wir nun den allgemeinen Fall Lx = b, wobei L eine untere Dreiecksmatrix ist. Die i-te Gleichung dieses linearen Systems ist l i1 x l ii x i = b i. Löst man diese Gleichung nach x i auf, so erhält man: x i = b i i 1 j=1 l ijx j l ii. Führt man dies für i = 1 : n durch, so liefert der folgende Algorithmus eine Lösung für x: 4 Hierbei steht U für Upper und L für Lower. 5 Auch Vorwärtssubstitution genannt.

205 5.3 Lineare Systeme mit Dreiecksmatrizen 205 for i=1:n x(i) = b(i); for j=1:i-1 x(i) = x(i) - L(i,j) * x(j) end x(i) = x(i) / L(i,i); end Anzahl der Gleitpunktoperationen Die innere Schleife benötigt eine Addition (Subtraktion) und eine Multiplikation. Sie wird i 1 mal ausgeführt, wenn j von 1 bis i 1 läuft. i selbst läuft von 1 bis n. Somit benötigt der Algorithmus n(n 1) (n 1) = 2 Additionen und Multiplikationen. Zählt man die Division noch dazu, so erhält man: n2 1 2 n Additionen n2 1 2 n Multiplikationen 3. n Divisionen Da in der j ten Schleife ein Skalarprodukt i 1 l ij x j = L(i,1 : i 1)x(1 : i 1) j=1 von b i subtrahiert wird, können wir diesen Algorithmus effizienter in folgender vektorisierten Form schreiben: x(1) = b(1) / L(1,1); for i=2:n x(i) = ( b(i) - L(i,1:i-1) * x(1:i-1) ) / L(i,i); end Dieser Algorithmus arbeitet zeilenorientiert. In jedem Iterationsschritt wird ein Skalarprodukt berechnet, nämlich ein Teil der i-ten Zeile von L mit den ersten bereits berechneten Komponenten von x. Der Function-File 5.1 löst das untere Gleichungssystem Lx = b zeilenweise. Wir können ebenso ein spaltenorientiertes Verfahren entwickeln. Hierzu betrachten wir zunächst den Fall n = 3. Für das Gleichungssystem x 1 x 2 = x

206 206 5 Lineare Gleichungssysteme 1 function x = LTriSolZei(L,b) 2 % % Löst ein unteres Dreieckssystem Lx=b zeilenorientiert. 4 % (Vorwärtseinsetzen). 5 % 6 % Eingabe: L Reguläre untere nxn-dreiecksmatrix. 7 % b rechte Seite (n-spaltenvektor). 8 % Ausgabe: x Lösung von Lx=b (n-spaltenvektor). 9 % n = length(b); 11 x = zeros(n,1); 12 x(1) = b(1)/l(1,1); 13 for i=2:n 14 x(i) = ( b(i) - L(i,1:i-1)*x(1:i-1) )/L(i,i); 15 end Function-File 5.1: Löst unteres Dreieckssystem Lx = b zeilenorientiert ist x 1 = 2 die erste Lösungskomponente von x. Mit ihr erhalten wir x 2, wenn wir das folgende 2 2-System lösen: ( )( x2 x 3 ) = ( ) ( ) ( ) 2 8 = 1 10 Daraus folgt sofort x 2 = 8. Schließlich ist nur noch das 1 1-System 2x 3 = nach x 3 aufzulösen, was x 3 = 7 ergibt. Betrachten wir nun den allgemeinen Fall. Zunächst berechnen wir x 1 = b 1 /l 11 und wir erhalten damit: l x 2 b 2 l 21 l 32 l 33 0 x = b 3. x l l n2 l n3 l nn x n b n l n1 In MATLAB schreibt sich die rechte Seite als b(2:n)-x(1)*l(2:n,1). Allgemein berechnen wir nun im j-ten Schritt x j = b j /l jj und führen den SAXPY-Update b(j+1:n) = b(j+1:n)-x(j)*l(j+1:n,j) durch. Dies führt auf den Function-File 5.2.

207 5.3 Lineare Systeme mit Dreiecksmatrizen function x = LTriSolSp(L,b) 2 % % Löst ein unteres Dreieckssystem Lx=b spaltenorientiert. 4 % (Vorwärtseinsetzen). 5 % 6 % Eingabe: L Reguläre untere nxn-dreiecksmatrix. 7 % b rechte Seite (n-spaltenvektor). 8 % Ausgabe: x Lösung von Lx=b (n-spaltenvektor). 9 % n = length(b); 11 x = zeros(n,1); 12 for j=1:n-1 13 x(j) = b(j)/l(j,j); 14 b(j+1:n)=b(j+1:n) - x(j)*l(j+1:n,j); 15 end 16 x(n) = b(n)/l(n,n); Function-File 5.2: Löst unteres Dreieckssystem Lx = b spaltenorientiert Rückwärtseinsetzen Das Lösen eines linearen Systems U x = b mit oberer Dreiecksmatrix U geschieht analog zum unteren Dreiecksfall. Der einzige Unterschied besteht darin, daß die Unbekannten in umgekehrter Reihenfolge berechnet werden. Um das 3 3-System u 11 u 12 u 13 0 u 22 u u 33 x 1 x 2 = x 3 b 1 b 2 b 3 U x b zu lösen, beginnt man zunächst nach x 3, dann nach x 2 und schließlich nach x 1 aufzulösen: x 3 = b 3 u 33 x 2 = b 2 u 23 x 3 u 22 x 1 = b 1 u 12 x 2 u 13 x 3 u 11 Man nennt diesen Algorithmus Rückwärtseinsetzen oder Rücksubstitution; auch dieser erfordert offensichtlich, daß die Hauptdiagonalelemente der Dreiecksmatrix von Null verschieden sind. Der Function-File 5.3 löst Ux = y für den allgemeinen Fall n. Wie im

208 208 5 Lineare Gleichungssysteme 1 function x = UTriSolZei(U,b) 2 % % Löst ein oberes Dreieckssystem Ux=b zeilenorientiert. 4 % (Rückwärtseinsetzen). 5 % 6 % Eingabe: U Reguläre obere nxn-dreiecksmatrix. 7 % b rechte Seite (n-spaltenvektor). 8 % Ausgabe: x Lösung von Ux=b (n-spaltenvektor). 9 % n = length(b); 11 x = zeros(n,1); 12 x(n) = b(n)/u(n,n); 13 for i=n-1:-1:1 14 x(i) = ( b(i) - U(i,i+1:n)*x(i+1:n) )/U(i,i); 15 end Function-File 5.3: Löst oberes Dreieckssystem U x = b zeilenorientiert unteren Dreiecksfall, so läßt sich auch hierfür ein spaltenorientierter Algorithmus (SAXPY- Update) entwickeln. Der Function File 5.4 realisiert dies. Zusammenfassung Für ein oberes dreieckförmiges System U x = b heißt das sukzessive Einsetzen Rückwärtseinsetzen (Rücksubstitution) und kann wie folgt ausgedrückt werden, wobei angenommen wird, daß die Dreiecksmatrix in den Diagonalelementen keine Null enthält: x n = bn u nn x i = b i n j=i+1 u ijx j u ii mit i = n 1,...,1 Für ein unteres Dreieckssystem Lx = b heißt der Einsetzungsprozeß Vorwärtseinsetzen (Vorwärtssubstitution) und kann wie folgt geschrieben werden: x 1 = b 1 l 11 x i = b i i 1 j=1 l ijx j l ii mit i = 2,...,n Ein oberes lineares Gleichungssystem wird durch Rückwärtseinsetzen gelöst und ein unteres System durch Vorwärtseinsetzen.

209 5.3 Lineare Systeme mit Dreiecksmatrizen function x = UTriSolSp(U,b) 2 % % Löst ein oberes Dreieckssystem Ux=b spaltenorientiert. 4 % (Rückwärtseinsetzen). 5 % 6 % Eingabe: U Reguläre obere nxn-dreiecksmatrix. 7 % b rechte Seite (n-spaltenvektor). 8 % Ausgabe: x Lösung von Ux=b (n-spaltenvektor). 9 % n = length(b); 11 x = zeros(n,1); 12 for j=n:-1:2 13 x(j) = b(j)/u(j,j); 14 b(1:j-1) = b(1:j-1) - x(j)*u(1:j-1,j); 15 end 16 x(1) = b(1)/u(1,1); Function-File 5.4: Löst oberes Dreieckssystem U x = b spaltenorientiert Mehrere rechte Seiten bei Dreieckssystemen In vielen Anwendungen müssen wir eine Folge von dreiecksförmigen Systemen lösen, bei denen die Systemmatrix immer die gleiche ist, aber die rechte Seite sich ändert. Ist zum Beispiel L eine untere Dreiecksmatrix und B R n r gegeben, dann besteht die Aufgabe darin, X R n r zu finden, so daß LX = B ist. Betrachten wir die k te Spalte dieser Matrixgleichung, so gilt: LX(:,k) = B(:,k). Um X zu berechnen, ist es naheliegend, den Vorwärtseinsetzalgorithmus r-mal auf die verschiedenen rechten Seiten anzuwenden: X = zeros(n,r); for k=1:r X(:,k) = LTriSolSp(L,B(:,k)); end Die nachfolgenden MATLAB-Zeilen erweitern die Funktion LTriSolSp, siehe Function- File 5.2: X = zeros(n,r); for k=1:r for j=1:n-1

210 210 5 Lineare Gleichungssysteme X(j,k) = B(j,k)/L(j,j); B(j+1:n,k) = B(j+1:n,k) - X(j,k)*L(j+1:n,j); end X(n,k) = B(n,k)/L(n,n); end Diesen Algorithmus können wir nach k vektorisieren. Statt zuerst X(:, 1), dann X(:, 2) usw. zu berechnen, lösen wir zuerst nach X(1,:) auf, dann nach X(2,:) usw. Dies bedeutet, daß die k-te mit der j-ten Schleife vertauscht werden muß: X = zeros(n,r); for j=1:n-1 for k=1:r X(j,k) = B(j,k)/L(j,j); B(j+1:n,k) = B(j+1:n,k) - X(j,k)*L(j+1:n,j); end end for k=1:r X(n,k) = B(n,k)/L(n,n); end Vektorisiert man die k-te Schleife, so erhält man den Function-File 5.5. Analog behandelt 1 function X = LTriSolSpM(L,B) 2 % % Löst ein unteres Dreieckssystem LX=B. 4 % 5 % Eingabe: L Reguläre untere nxn-dreiecksmatrix. 6 % B rechte Seite (nxr-matrix). 7 % Ausgabe: X Lösung von LX=B (nxr-matrix). 8 % [n,r] = size(b); 10 X = zeros(n,r); 11 for j=1:n-1 12 X(j,1:r) = B(j,1:r)/L(j,j); 13 B(j+1:n,1:r) = B(j+1:n,1:r) - X(j,1:r)*L(j+1:n,j); 14 end 15 for k=1:r 16 X(n,k) = B(n,k)/L(n,n); 17 end man den Fall UX = B. Function-File 5.5: Löst unteres Dreieckssystem LX = B

211 5.4 Eliminationsmatrizen Eliminationsmatrizen Von dreiecksförmigen linearen Gleichungssystemen wissen wir, daß sie sich durch sukzessives Einsetzen leicht lösen lassen und daß reguläre lineare Abbildungen die Lösungsmenge eines linearen Gleichungssystems nicht verändern. Unsere Strategie wird deshalb darin bestehen, ein lineares System durch eine reguläre lineare Transformation in ein Dreieckssystem zu überführen. Wir suchen deshalb nach einer Transformation, die ausgewählte von Null verschiedene Elemente einer gegebenen Matrix zu Null macht. Dies kann man durch Linearkombinationen der Zeilen der Matrix erreichen. Ist ein Spaltenvektor a R n gegeben, so kann man mit nachfolgender Transformation erreichen, daß alle Einträge unterhalb der k-ten Komponenten zu Null werden, vorausgesetzt a k 0: 1 M k a =... 1 m k m n 1 a 1. a k a k+1. a n = a a k 0, wobei gilt: m i = a i /a k für i = k + 1,...,n. (Kein Eintrag bedeutet in obiger Matrix M k eine Null.) m i heißt Multiplikator und der Divisor a k heißt Pivotelement. Eine Matrix dieser Form heißt Eliminationsmatrix oder manchmal auch GAUSS-Transformation. Eliminationsmatrizen haben folgende Eigenschaften: M k ist eine untere Dreiecksmatrix mit Einsdiagonale und daher eine reguläre Matrix. M k = I me T k, wobei m = (0,...,0,m k+1,...,m n ) T und e k die k-te Spalte der Einheitsmatrix ist. M 1 k = I +me T k, das heißt, M k und M 1 k sind bis auf die Vorzeichen der Multiplikatoren gleich. Wir bezeichnen die untere Dreiecksmatrix M 1 k mit L k. Ist M j, j > k eine andere Eliminationsmatrix mit Multiplikationsvektor t, dann gilt: M k M j = I me T k tet j me T k tet j = I me T k tet j, weil e T k t = 0 ist. Dies bedeutet: Das Produkt zweier Eliminationsmatrizen ist ihre Vereinigung. Ein ähnliches Resultat gilt für ihre Inversen, das heißt L k L j = I+me T k +tet j. Beispiel 5.2 Eliminationsmatrizen Ist a = (2,4, 2) T gegeben, dann gilt: M 1a = = und M 2a = =

212 212 5 Lineare Gleichungssysteme Weiterhin ist und L 1 = M 1 1 = , L 2 = M 1 2 = M 1M 2 = 2 1 0, L 1L 2 = Eliminationsmatrizen in MATLAB Die folgenden Anweisungen erzeugen eine Eliminationsmatrix M 1, die die zweite und dritte Komponente des Vektors a = (2,4, 2) T zu Null transformiert. >> a=[2 4-2] ; >> m=[0 a(2)/a(1) a(3)/a(1)] ; >> M1=eye(3); >> M1=M1-m*M1(:,1) M1 = Somit gilt: >> M1*a ans = Die folgenden Anweisungen erzeugen eine Eliminationsmatrix M 2, die die dritte Komponente des Vektors a = (2,4, 2) T zu Null transformiert. >> a=[2 4-2] ; >> m=[0 0 a(3)/a(2)] ; >> M2=eye(3); >> M2=M2-m*M2(:,2) M2 = Somit gilt:

213 5.5 GAUSS-Elimination und LU-Zerlegung 213 >> M2*a ans = Weiterhin gilt für die inversen Eliminationsmatrizen L 1 = M1 1 und L 2 = M2 1 >> L1=M1^-1, L2=M2^-1 L1 = L2 = und für die Produkte M 1 M 2 und L 1 L 2 : >> M1*M2, L1*L2 ans = ans = GAUSS-Elimination und LU-Zerlegung Mit den eben definierten Eliminationsmatrizen zeigen wir nun, wie man ein lineares Gleichungssystem Ax = b auf obere Dreiecksform bringen kann. Hierzu konstruieren wir die Eliminationsmatrix M 1 nach obigen Rezepten in der Form, daß die erste Spalte von A unterhalb der ersten Zeile zu Null wird, wobei a 11 als Pivotelement gewählt wird. Natürlich werden auch die anderen Spalten von A und die rechte Seite b mit M 1 multipliziert, damit ist M 1 Ax = M 1 b das neue Gleichungssystem. Man erinnere sich daran, daß sich die Lösung dadurch nicht ändert. Als nächstes wird das zweite Diagonalelement von M 1 A als Pivotelement zur Konstruktion der Eliminationsmatrix M 2 gewählt, womit erreicht werden soll, daß die zweite Spalte der neuen Matrix M 1 A unterhalb der zweiten Zeile zu Null wird. Damit erhalten wir

214 214 5 Lineare Gleichungssysteme das neue System M 2 M 1 Ax = M 2 M 1 b. Führt man diesen Prozeß so lange durch, bis alle Elemente unterhalb der Diagonalen Null sind, dann erhält man das lineare System MAx = M n 1 M 1 Ax = M n 1 M 1 b = Mb, welches die gewünschte Dreiecksform hat. Durch Rückwärtseinsetzen ergibt sich schließlich die Lösung des linearen Gleichungssystems Ax = b. Diesen Prozeß bezeichnet man als GAUSS-Elimination. Er ist ebenfalls bekannt als LU- Zerlegung oder LU-Faktorisierung, da während dieses Vorgangs die Matrix A in ein Produkt zweier Matrizen zerlegt wird, einer unteren Dreiecksmatrix L mit 1 in der Diagonalen und einer oberen Dreiecksmatrix U. Um dies einzusehen, erinnere man sich daran, daß L k L j (k < j) eine untere Dreiecksmatrix mit 1 in der Diagonalen ist, so daß insgesamt L = M 1 = (M n 1 M 1 ) 1 = M 1 1 M 1 n 1 = L 1 L n 1 eine untere Dreiecksmatrix mit Einsdiagonale ist. Außerdem gilt nach Konstruktion, daß U = MA eine obere Dreiecksmatrix ist. Damit haben wir insgesamt die Systemmatrix A in ein Produkt A = LU einer unteren Dreiecksmatrix L mit 1 in der Diagonalen und einer oberen Dreiecksmatrix U zerlegt. Die Transformation der Systemmatrix in eine obere Dreiecksmatrix kann man sich für eine 3 3-Matrix wie folgt veranschaulichen: M 1 0 x x 0 x x M 2 0 x A M 1 A M 2 M 1 A (Hier bedeutet kein Eintrag eine Null und ein x eine Zahlenänderung.) Ist nun eine LU-Faktorisierung gegeben, dann kann man das lineare Gleichungssystem Ax = b auch als LUx = b schreiben. Damit läßt sich das untere Dreieckssystem Ly = b durch Vorwärtseinsetzen und das obere Dreieckssystem U x = y durch Rückwärtseinsetzen lösen. Beachte, daß die Zwischenlösung y der gleiche Vektor wie M b ist. Beispiel 5.3 GAUSS-Elimination und LU-Zerlegung Wir wollen das GAUSS-Eliminationsverfahren erläutern, indem wir folgendes lineare Gleichungssystem lösen 2x 1 + 4x 2 2x 3 = 2 4x 1 + 9x 2 3x 3 = 8 2x 1 3x 2 + 7x 3 = 10 In Matrixschreibweise lautet das System x 1 x 2 x 3 =

215 5.6 GAUSS Elimination ohne Zeilenvertauschungen 215 Um die Nullen in der ersten Spalte unterhalb der Diagonalen der Matrix A zu erzeugen, subtrahieren wir zweimal die erste Zeile von der zweiten und addieren die erste Zeile zur dritten: M 1A = = 0 1 1, M 1b = = Um nun Nullen in der zweiten Spalte unterhalb der Diagonalen von M 1A zu erzeugen, subtrahieren wir die zweite Zeile von der dritten: M 2M 1A = = 0 1 1, M 2M 1b = = Damit haben wir das ursprüngliche Gleichungssystem auf ein äquivalentes oberes Dreieckssystem transformiert: x x 2 = 4, x 3 8 Durch Rücksubstitution erhalten wir die Lösung x = ( 1,2,2) T. Die LU Faktorisierung schreibt sich explizit wie folgt: L = L 1L 2 = = 2 1 0, und damit gilt: A = = = LU. 5.6 GAUSS Elimination ohne Zeilenvertauschungen Wir streben nun eine MATLAB-Implementierung zur Lösung eines linearen Gleichungssystems Ax = b an. Grundlage ist das eben diskutierte GAUSS-Verfahren. Zunächst berechnen wir eine LU-Zerlegung, indem wir als erstes U und dann L konstruieren. Wir erinnern uns daran, daß das lineare Gleichungssystem von links mit n 1 Eliminationsmatrizen multipliziert wird, die dafür sorgen, daß eine obere Dreiecksmatrix entsteht. Dieser Prozeß aber ist gleichbedeutend damit, die entsprechenden Zeilen vom m i -Vielfachen der Zeile, in dem sich das Pivotelement befindet, zu subtrahieren. Die Operationen an A lassen sich grob wie folgt beschreiben: for k=1:n-1 1. Berechne die Multiplikatoren und speichere sie in m(k+1:n) ab. 2. Ändere die Zeilen von k+1 bis n. end

216 216 5 Lineare Gleichungssysteme Die Multiplikatoren berechnen sich wie folgt: for i=k+1:n-1 m(i) = A(i,k)/A(k,k); end wobei a kk 0 das k-te Pivotelement ist. In MATLAB können wir auf die Schleife verzichten und folgende vektorisierte Form bevorzugen: m(k+1:n) = A(k+1:n,k)/A(k,k); Um nun die k-te Zeile mit m(i) zu multiplizieren und von Zeile i zu subtrahieren, gilt: A(i,k:n) = A(i,k:n) - m(i)*a(k,k:n). Der Spaltenbereich beginnt bei k, weil die ersten k 1 Einträge der Zeile k Null sind. Folgendes Script macht aus A eine obere Dreiecksmatrix U: for k=1:n-1 m(k+1:n) = A(k+1:n,k)/A(k,k); for i=k+1:n A(i,k+1:n) = A(i,k+1:n) - m(i)*a(k,k+1:n); end end U = triu(a); Wir betrachten die innere Schleife. Sie besteht aus mehreren zeilenorientierten SAXPY- Operationen. Für n = 6 und k = 3 sind drei zeilenorientierte SAXPY-Operationen durchzuführen: A(4,4 : 6) A(4,4 : 6) m 4 A(3,4 : 6) A(5,4 : 6) A(5,4 : 6) m 5 A(3,4 : 6) A(6,4 : 6) A(6,4 : 6) m 6 A(3,4 : 6). Diese sind äquivalent zu: A(4,4 : 6) A(4,4 : 6) m 4 A(4 : 6,4 : 6) = A(5,4 : 6) A(5,4 : 6) m 5 A(3,4 : 6). A(6,4 : 6) A(6,4 : 6) m 6 Deshalb kann man die i-te Schleife durch einen dyadischen Produkt-Update ersetzen: for k=1:n-1 m(k+1:n) = A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n) = A(k+1:n,k+1:n)-m(k+1:n)*A(k,k+1:n); end U = triu(a);

217 5.6 GAUSS Elimination ohne Zeilenvertauschungen 217 Damit haben wir die obere Dreiecksmatrix U berechnet. Nun fehlt noch L, die untere Dreiecksmatrix. Die untere Dreiecksmatrix L ist das Gedächtnis der GAUSS-Elimination. Ihre Diagonalelemente sind 1 und unterhalb der Diagonalen stehen die Multiplikatoren m i für i = k + 1 : n: 1... L k = M 1 k = 1 m k m n 1 Zum Beispiel gilt für n = 6: L = M 1 1 M 1 2 M 1 3 M 1 4 M 1 5 = m (1) m (1) 3 m (2) m (1) 4 m (2) 4 m (3) m (1) 5 m (2) 5 m (3) 5 m (4) m (1) 6 m (2) 6 m (3) 6 m (4) 6 m (5) 6 1 wobei der obere Index den jeweiligen Schritt angibt. Dies aber suggeriert, die Multiplikatoren an den Stellen der Matrix A zu speichern, die man zu Null machen will. Zum Beispiel wird der Multiplikator m (2) 4 im zweiten Schritt so gewählt, daß das Element a 42 in der Matrix A zu Null wird. Deshalb kann man m (2) 4 in Position (4,2) speichern. Dies führt auf die Realisierung im Function-File 5.6.,

218 218 5 Lineare Gleichungssysteme 1 function [L,U] = LU(A) 2 % % Berechnet eine LU-Zerlegung (Gauss-Elimination). 4 % 5 % Eingabe: A nxn-reguläre Matrix. 6 % Ausgabe: L nxn-untere Dreiecksmatrix. 7 % U nxn-obere Dreiecksmatrix. 8 % [m,n] = size(a); 10 if (m ~= n) 11 error( Matrix A ist nicht quadratisch ) 12 end 13 for k=1:n-1 14 A(k+1:n,k) = A(k+1:n,k)/A(k,k); 15 A(k+1:n,k+1:n) = A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n); 16 end 17 L = eye(n,n) + tril(a,-1); 18 U = triu(a); Function-File 5.6: Berechnet LU-Zerlegung (GAUSS-Verfahren) Das lineare Gleichungssystem Ax = b wird nun wie folgt gelöst: Lösungsalgorithmus für das lineare Gleichungssystem Ax = b 1. Berechne die LU-Zerlegung der Matrix A. 2. Löse Ly = b nach y. 3. Löse Ux = y nach x. Mit den Funktionen LTriSolSp, UTriSolSp und LU sieht eine MATLAB Lösung wie folgt aus: >> [L,U] = LU(A); % LU--Zerlegung >> y = LTriSolSp(L,b); % Vorwärtseinsetzen >> x = UTriSolSp(U,y) % Rückwärtseinsetzen Bemerkungen: Beachten Sie, daß diese Implementierung nur dann funktioniert, wenn A regulär ist und die Pivotelemente alle von Null verschieden sind. Der auf der beiliegenden CD befindliche Script-File ShowLU.m zeigt die LU-Zerlegung interaktiv anhand der Matrix

219 5.7 GAUSS Elimination mit Zeilenvertauschungen GAUSS Elimination mit Zeilenvertauschungen Der oben beschriebene Eliminationsprozeß ist nicht durchführbar, wenn ein Pivotelement Null ist. Auf die reguläre Matrix ( ) 0 1 A = 1 0 ist der Eliminationsprozeß nicht anwendbar, weil das Pivotelement a 11 gleich Null ist. Wir können das Problem jedoch dadurch beheben, daß wir Zeilenvertauschungen zulassen. Beachte: Zeilenvertauschungen ändern die Lösungsmenge eines linearen Gleichungssystems nicht. Vertauscht man daher die beiden Zeilen, so gilt: ( Diese Matrix hat eine LU Zerlegung, denn es gilt offensichtlich: ( ) ( )( ) = = LU Zeilenvertauschungen lassen sich durch Permutationsmatrizen P beschreiben. Die Permutationsmatrix P, die die beiden Zeilen der Matrix A vertauscht, ist ( ) 0 1 P =. 1 0 Damit gilt: PA = und insgesamt erhält man: ( 0 1 PA = 1 0 ( )( ). )( ) =. ) = ( ( ) )( ) = LU. Was aber, wenn während des Eliminationsprozesses unterhalb der Diagonalen in Spalte k kein von Null verschiedenes Element existiert? In diesem Fall kann man nicht mehr tun, als zur nächsten Spalte überzugehen (M k = I). Dies bedeutet, daß ein Diagonalelement mit dem Wert Null zurückgelassen wird, das heißt, die obere Dreiecksmatrix U ist singulär, aber die LU-Zerlegung ist durchführbar. Weiterhin heißt dies, daß der Rücksubstitutionsprozeß nicht durchführbar ist, weil dieser eine Division durch jedes Diagonalelement von U fordert. Damit ist klar, daß man durch Rücksubstitution in der bisher besprochenen Form keine Lösung des Gleichungssystems erhält, was auch nicht verwunderlich ist, da die ursprüngliche Matrix singulär sein muß.

220 220 5 Lineare Gleichungssysteme Beispiel 5.4 LU-Zerlegung ist möglich, aber die Matrix ist singulär Die Matrix ( ) 0 1 A = 0 0 hat eine LU-Zerlegung A = ( ist aber singulär. In MATLAB erhält man: >> A=[0 1;0 0] A = >> [L,U]=lu(A) L = U = ) = ( ) ( ) = LU Dies erklärt, warum man mit dem GAUSS-Verfahren keine Lösung des linearen Gleichungssystems Ax = b erhält, wenn die Matrix A singulär ist, obwohl es möglich ist, daß das System Ax = b unendlich viele Lösungen hat, dann nämlich, wenn b im Bildraum Bild(A) von A liegt. Insbesondere erhält man mit dem MATLAB-Operator \ keine Lösung, weil dahinter ein GAUSS-Verfahren steht. Theoretisch reicht es aus, jede von Null verschiedene Zahl als Pivotelement für das Eliminationsverfahren zu wählen. Praktisch jedoch sind kleine Pivotelemente gefährlich. Kleine Pivotelemente führen auf große Multiplikatoren (da durch das Pivotelement dividiert wird). Genaue Lösungen zu bekommen bedeutet aber, unnötig große Zahlen zu vermeiden. Aus diesem Grund strebt man an, die Multiplikatoren nicht größer als 1 werden zu lassen. Dies ist möglich, wenn man die größte Zahl auf oder unterhalb der Diagonalen als Pivotelement wählt. Ein solche Strategie nennt man teilweise oder partielle Pivotisierung. Diese ist notwendig, um die numerische Stabilität des GAUSS-Eliminationsverfahrens zu verbessern. Eine partielle Pivotisierung erfordert Zeilenvertauschungen. Daher muß während einer LU Zerlegung jeder Eliminationsmatrix M k im allgemeinen eine Permutationsmatrix P k vorgeschaltet werden, die die Zeilenvertauschung durchführt, damit die größte Zahl in die Diagonalposition gelangt. Dies führt auf MA = U, wobei U wiederum eine obere Dreiecksmatrix ist, aber nun gilt: M = M n 1 P n 1 M 1 P 1. M 1 ist dreiecksförmig in unserer allgemeinen Definition. M ist bis auf Permutationen eine untere Dreiecksmatrix. Obwohl dann eine LU-Zerlegung nicht mehr untere mal obere Dreiecksmatrix bedeutet, bezeichnen wir M 1 weiterhin mit L, weil dies in bezug auf das Lösen durch Vorwärts und Rückwärtseinsetzen trotzdem sinnvoll ist. Faßt man die Permutationen P k zu einer Permutation P zusammen, das heißt P = P n 1 P 1,

221 5.7 GAUSS Elimination mit Zeilenvertauschungen 221 so beschreibt diese Permutation P alle notwendigen Zeilenvertauschungen für eine partielle Pivotisierung. Daher kann man eine partielle Pivotisierung auch als einen Prozeß interpretieren, der für die gegebene Systemmatrix A eine Zeilenordnung derart herstellt, daß keine weitere Pivotisierung notwendig ist, um numerische Stabilität zu erreichen. Damit erhält man die Faktorisierung PA = LU, wobei L nun wieder eine untere Dreiecksmatrix ist. Um das lineare System Ax = b zu lösen, sind folgende Schritte notwendig: 1. Faktorisiere A, das heißt P A = LU. 2. Löse Ly = P b durch Vorwärtseinsetzen. 3. Löse U x = y durch Rückwärtseinsetzen. Der Name teilweise Pivotisierung 6 kommt daher, daß das größte Element nur aus der gegenwärtigen Spalte ausgewählt wird. Wählt man das Pivotelement als größtes Element in der verbleibenden reduzierten Untermatrix, so spricht man von vollständiger Pivotisierung. Diese verwendet bei Bedarf auch Spaltenvertauschungen, die als eine Umnumerierung gedeutet werden kann. Wir gehen darauf nicht näher ein und verweisen auf [34]. Im obigen Beispiel haben wir das lineare Gleichungssystem 2x 1 + 4x 2 2x 3 = 2 4x 1 + 9x 2 3x 3 = 8 2x 1 3x 2 + 7x 3 = 10 mit GAUSS Elimination ohne Zeilenvertauschungen gelöst. An diesem Beispiel wollen wir nun zeigen, wie die partielle Pivotisierung funktioniert, indem wir als Pivotelement das größte der jeweiligen Spalte unterhalb der Hauptdiagonalen wählen und dadurch erreichen, daß die Multiplikatoren durch 1 beschränkt bleiben. Beispiel 5.5 Teilweise Pivotisierung Das lineare System ist: x 1 x 2 x 3 = Die größte Zahl in der ersten Spalte ist 4. Deshalb müssen die erste und zweite Zeile mit Hilfe der Permutationsmatrix P 1 = vertauscht werden. Man erhält: P 1A = 6 Auch Spaltenpivotsuche genannt x 1 x 2 x 3 = = P 1b.

222 222 5 Lineare Gleichungssysteme Um die Elemente in der ersten Spalte unterhalb der Diagonalen zu Null zu machen, benutzen wir die Eliminationsmatrix M 1 = und bekommen: x 1 8 M 1P 1A = x = 2 = M 1P 1b. 0 x Der größte Eintrag in der zweiten Spalte auf oder unterhalb der Diagonalen ist 3. Deshalb müssen die zweite 2 und dritte Zeile mit Hilfe der Permutationsmatrix P 2 = vertauscht werden. Man erhält: P 2M 1P 1A = x 1 x 2 x 3 = = P 2M 1P 1b. Schließlich sorgt die Eliminationsmatrix M 2 = für das gewünschte äquivalente obere Dreieckssystem: M 2P 2M 1P 1A = x 1 x 2 x 3 = Durch Rückwärtseinsetzen findet man die gleiche Lösung wie oben. Wir wollen die LU Faktorisierung wieder explizit betrachten. Es gilt: und damit = M 2P 2M 1P 1b. L = M 1 = (M 2P 2M 1P 1) 1 = P T 1 L 1P T 2 L 2 = = A = = LU Hier ist L keine untere Dreiecksmatrix, sondern eine Dreiecksmatrix in unserer allgemeinen Definition. Sie ist eine Permutation einer unteren Dreiecksmatrix. Entsprechend unseren obigen Ausführungen gilt alternativ: P = P 2P 1 = = , und L = ,

223 5.8 LU-Zerlegung in MATLAB 223 so daß insgesamt gilt: PA = Nun ist L wieder eine untere Dreiecksmatrix. = Zusammenfassung Zusammenfassend läßt sich sagen: Zeilenvertauschungen sind aus einem theoretischen und einem praktischen Grund wichtig. Aus theoretischer Sicht, damit man überhaupt das GAUSSsche Eliminationsverfahren durchführen kann, und aus praktischer Sicht, damit man numerische Instabilitäten vermeidet. Allgemein läßt sich sagen: Viele Hauptideen der (numerischen) linearen Algebra beruhen auf Faktorisierungen einer Matrix. Hierbei wird die Originalmatrix A in eine Produkt von zwei oder drei speziellen Matrizen zerlegt. Pivotisierungen sind notwendig, um das GAUSSsche Eliminationsverfahren bei Verwendung von Gleitpunktarithmetik zu stabilisieren. Es gibt aber auch Klassen von Matrizen, bei denen eine Pivotisierung nicht notwendig ist, z.b. wenn die Matrix A diagonaldominant oder positiv definit ist. Dadurch reduzieren sich die Rechenzeiten. 5.8 LU-Zerlegung in MATLAB In MATLAB erfolgt eine LU-Zerlegung einer Matrix A mit dem Befehl lu(a). Je nach Anzahl der Ausgabeargumente erhält man unterschiedliche Antwortmatrizen. Wir diskutieren die verschiedenen Fälle anhand unseres obigen Zahlenbeispiels. >> A=[2 4-2;4 9-3;-2-3 7]; >> [L,U,P]=lu(A) L = U = P = Mit Hilfe von 3 Ausgabeargumenten erhält man die obere Dreiecksmatrix L, die untere Dreiecksmatrix U sowie die Permutationsmatrix P. Der Aufruf >> [L,U]=lu(A)

224 224 5 Lineare Gleichungssysteme liefert L = U = Man erkennt die untere Dreiecksmatrix U und die (verallgemeinerte) Dreiecksmatrix L, entsprechend unseren obigen Ausführungen. Schließlich liefert der Aufruf >> lu(a) die Matrix ans = Man findet im oberen Teil der Matrix ans die obere Dreiecksmatrix U wieder. Welche Werte stehen aber in den Elementen unterhalb der Diagonalen? Dies sind nicht die Werte von L, sondern vielmehr die Multiplikatoren, das heißt die Elemente von M k. Diese Ausgabe ist von der LINPACK-Routine ZGEFA übernommen. 5.9 Zur Realisierung des GAUSS-Verfahrens Es gibt mehr Möglichkeiten, das GAUSS-Verfahren zu realisieren, als bisher besprochen wurden. Die teilweise Pivotisierung sucht ein geeignetes Pivotelement in der jeweiligen Spalte und vertauscht gegebenenfalls die Zeilen. Alternativ kann man auch die Zeilen absuchen und dann die Spalten vertauschen. Außerdem haben wir L so konstruiert, daß die Diagonalelemente nur aus Einsen bestehen. Es ist jedoch auch möglich, U entsprechend zu gestalten. Ein paar Variationen der GAUSS-Methode sind sogar so bedeutend, daß sie einen eigenen Namen haben, wie zum Beispiel die CROUT- und DOOLITTLE-Methoden. Die von uns eingeführten Matrizen die Eliminationsmatrizen M k, ihre Inversen L k und die Permutationsmatrizen P k beschreiben den Faktorisierungsprozeß nur formal. In einer Implementierung werden diese Matrizen nicht explizit gebildet. Die Elemente von L und U überschreiben die Systemmatrix A, um Speicherplatz zu sparen. U überschreibt den oberen Dreiecksanteil von A einschließlich der Diagonalen, und die Multiplikatoren, die L bilden, stehen im unteren Teil von A. Die Einselemente von L müssen nicht gespeichert werden. Um Datenbewegungen zu minimieren, werden notwendige Zeilenvertauschungen nicht explizit durchgeführt, sondern ein Hilfsvektor angelegt, der die neue Zeilenordnung speichert.

225 5.10 Wie komplex ist das Lösen linearer Gleichungssysteme? Wie komplex ist das Lösen linearer Gleichungssysteme? Die LU-Faktorisierung benötigt ungefähr n 3 /3 Multiplikationen und ähnlich viele Subtraktionen (Additionen). In MATLAB können wir die Gleitpunktoperationen mit dem Kommando flops zählen. Das folgende Script zählt die Gleitpunktoperationen einer LU-Faktorisierung für eine Zufallsmatrix >> n = 100; >> flops(0); % Setzt den Zähler auf 0 >> lu(rand(n)); >> flops ans = Das Ergebnis entspricht dem theoretisch vorhergesagten Wert 2n 3 /3. Hat das Gleichungssystem genau eine rechte Seite, so benötigt man für die Vorwärtsund Rücksubstitution zusätzlich nochmals ungefähr n 2 Multiplikationen und ebenso viele Subtraktionen (Additionen). Dies zeigt folgendes: Läßt man beim Lösen eines linearen Gleichungssystems die Ordnung n des Systems anwachsen, so wird die LU-Faktorisierungsphase im gesamten Lösungsprozeß zunehmend dominant. Eine LU-Faktorisierung einer Matrix benötigt auf meinem Pentium II Notebook ungefähr eine Sekunde. Für n = 700 war die verstrichene Zeit ungefähr zehn Sekunden. Dies entspricht der n 3 -Regel, wonach die Zeitdauer mit acht multipliziert werden muß, wenn man n um den Faktor 2 erhöht. Das folgende Script mißt für n = 350 die Zeit in Sekunden: >> n = 350; >> tic % Startet die Uhr >> lu(rand(350)); >> toc Beachten Sie bei allen Ihren Zeitmessungen stets, daß der Rechner im allgemeinen auch mit anderen Prozessen beschäftigt ist und somit die Zeitmessungen verfälscht Wie berechnet man die Inverse einer Matrix? Wir haben bereits mehrfach erwähnt, daß das explizite Berechnen der Inversen einer Matrix, wann immer möglich, vermieden werden soll. Lineare Gleichungssysteme sollten nicht dadurch gelöst werden, daß man die Systemmatrix explizit invertiert. Ist es trotzdem notwendig, die Inverse numerisch explizit zu kennen, so kann man diese zum Beispiel mit dem GAUSS-Verfahren berechnen. Hierzu hilft folgende Beobachtung. Das Berechnen der Inversen A 1 einer Matrix A ist äqivalent zu Ax i = e i

226 226 5 Lineare Gleichungssysteme für i = 1 : n zu berechnen, wobei e i der i te Einheitsvektor ist. Diese n linearen Systeme können nun mit jeder Methode gelöst werden, mit denen man lineare Gleichungssysteme lösen kann. In der Praxis wird das GAUSS-Verfahren mit teilweiser Pivotisierung bevorzugt, siehe dazu Abschnitt 5.7. Da die Systemmatrix A für alle n Systeme die gleiche ist, muß A nur einmal faktorisiert werden. Somit kann A 1 wie folgt gelöst werden. Berechnung für A 1 mit dem GAUSS-Verfahren und teilweiser Pivotisierung 1. Faktorisiere A: MA = U. 2. Löse die n oberen Dreieckssysteme Ux i = Me i für i = 1 : n. Beispiel 5.6 Berechnet A 1 Als Zahlenbeispiel berechnen wir die Inverse der Matrix A = aus Beispiel 5.5. Dort fanden wir und Damit folgt aus Ux i = Me i für i = 1 : 3 Damit gilt: x 1 = U = M = M 2P 2M 1P 1 = x 2 = x 3 = A = = Die eingebaute MATLAB Funktion inv berechnet die Inverse einer Matrix, wenn sie exisitiert Normen, Fehler und Konditionszahlen Relativer Fehler In gleicher Weise wie wir die Betragsfunktion eingesetzt haben, um den relativen Fehler einer skalaren Größe zu definieren, so benützen wir nun Normen, um den relativen Fehler bei Vektoren und Matrizen zu erklären.

227 5.12 Normen, Fehler und Konditionszahlen 227 Definition 5.1 Es seien x 0 und y zwei Vektoren. Der relative Fehler von y als Näherung von x ist die Zahl y x ρ =. x Für skalare Größen gibt es eine enge Beziehung zwischen dem relativen Fehler und der Anzahl übereinstimmender Ziffern: Ist der relative Fehler in y gleich ρ, dann stimmen x und y bis zur log 10 ρ-ten Dezimalen überein. Diese Beziehung gilt nicht mehr für Komponenten eines Vektors, wie folgendes Beispiel zeigt: Beispiel 5.7 Relativer Fehler von Vektoren Es seien x = und y = In der -Norm ist der relative Fehler in y als Näherung für x gleich Die relativen Fehler in den Komponenten aber sind , und 1. Nur für x 1 = 1 ist der relative Fehler eine gute Näherung, nicht aber für x 2 und x 3. Dies ist für Normen, wie wir sie eingeführt haben, allgemein richtig: Der relative Fehler gibt eine gute Näherung für die Genauigkeit der größeren Komponenten, aber nicht für kleinere.. Die Konditionszahl einer quadratischen Matrix Die Konditionszahl einer quadratischen Matrix A ist wie folgt definiert: cond(a) = A A 1. Ist A singulär, dann setzen wir cond(a) =. Erinnern wir uns an die Definition der Norm einer Matrix, dann erkennt man A A 1 = (max x =0 Ax x ) (min Ax x =0 x ) 1, das heißt, die Konditionszahl einer Matrix mißt das Verhältnis maximaler Dehnung zu minimaler Stauchung. Stets gilt: cond(a) 1. Beispiel 5.8 Berechnung der Kondition einer Matrix Es sei ( ) 3 4 A = 4 5 gegeben, dann gilt: A = 9 und A 1 = 8. Somit ist 3 A 1 = 1 3 ( ) cond (A) = = 24.

228 228 5 Lineare Gleichungssysteme Man sagt, eine Matrix ist gut konditioniert, wenn cond(a) 1 ist. A heißt schlecht konditioniert, wenn cond(a) 1 ist. Beispiel 5.9 Eine schlecht konditionierte Matrix Die HILBERT-Matrix H n = n n+1 n+2 1 n 1 n n 1 ist ein Beispiel einer mit wachsendem n zunehmend schlecht konditionierten Matrix. Zum Beispiel gilt: cond 2(H 10) und cond 2(H 15) Die Kondition ist eine normabhängige Zahl. Deshalb schreibt man cond 2 (A), wenn man die 2-Norm zugrunde legt, und entsprechend cond p (A), wenn eine p-norm zugrunde liegt. Man kann zeigen: Ist eine Matrix A bezüglich einer Norm p 1 schlecht konditioniert, so ist sie es auch in jeder anderen Norm p 2. Konditionszahlen lassen sich auch für rechteckige Matrizen definieren. An die Stelle der inversen Matrix tritt die Pseudoinverse, auf die wir später noch eingehen. Möchte man die Kondition einer Matrix A abschätzen oder berechnen, so muß man die Inverse von A ausrechnen; dies aber ist aufwendiger, als Ax = b zu lösen. Deshalb muß man sich Verfahren überlegen, die darauf verzichten, A 1 explizit zu berechnen. Die Kondition hat folgende Eigenschaften: cond(i n ) = 1, wobei I n die Einheitsmatrix ist. cond(a) 1. cond(a) = cond(a 1 ). Ist α 0, dann gilt für jede Matrix A: cond(αa) = cond(a). cond(p) = 1, wenn P eine Permutationsmatrix ist. Insbesondere gilt: cond(i n ) = 1. Ist D eine Diagonalmatrix, dann gilt: cond(d) = max d ii min d ii. cond(ab) cond(a)cond(b). cond 2 (A) = σmax(a) σ min (A), dabei bezeichnet σ max bzw. σ min den größten bzw. kleinsten Singulärwert von A. Ist A symmetrisch, dann gilt: cond 2 (A) = λmax(a) λ min (A), wobei λ max(a) der betragsgrößte und λ min (A) der betragskleinste Eigenwert von A ist. Ist Q eine orthogonale Matrix, dann gilt: cond 2 (Q) = 1. cond (A) = cond 1 (A T ). cond 2 (A) = cond 2 (A T ).

229 5.12 Normen, Fehler und Konditionszahlen 229 Zu jedem α und β gibt es positive Konstanten c 1 und c 2, so daß insbesondere gilt: c 1 cond α (A) cond β (A) c 2 cond α (A), (1/n) cond 2 (A) cond 1 (A) n cond 2 (A) (1/n) cond (A) cond 2 (A) n cond (A) (1/n 2 ) cond 1 (A) cond (A) n 2 cond 1 (A) Dies bedeutet insbesondere, daß, falls A in der α-norm schlecht konditioniert ist, das auch für die β-norm zutrifft. Die Konditionszahl und fast singuläre Matrizen Die Konditionszahl einer Matrix ist ein guter Indikator dafür, ob eine Matrix fast singulär ist. Ist die Konditionszahl einer Matrix groß, so ist sie fast singulär. Da eine Matrix singulär ist, falls deren Determinate gleich Null ist, wird manchmal angenommen, die Kleinheit der Determinante sei ein Maß für eine schlechte Kondition. Dies ist jedoch nicht allgemein zutreffend. Beispiel 5.10 Kleine Determinante, aber gut konditioniert Die Diagonalmatrix D = hat den Determinantenwert det(a) = , also einen sehr kleinen Wert. Andererseits ist D regulär und perfekt konditioniert, denn es ist cond(a) = 1. Umgekehrt kann die Matrix, deren Determinate einen Wert nahe bei Eins hat, singulär sein. Dies zeigt das folgende Beispiel. Beispiel 5.11 Fast singuläre Matrix, aber der Determinantenwert ist 1 Für die n n-dreiecksmatrix 1 A = gilt unabhängig von n det(a) = 1. Für große n aber ist A fast singulär, denn es gilt cond(a) = n2 n 1. Die Größe des Determinantenwerts egal ob groß oder klein gibt keinerlei Auskunft darüber, wie nahe die Matrix bei einer singulären Matrix liegt.

230 230 5 Lineare Gleichungssysteme Berechnung der Konditionszahl in MATLAB In MATLAB kann man die Konditionszahl einer Matrix A mit dem Befehl cond(a) berechnen. Ist zum Beispiel >> A=[1 2 3;3 4 5;6 7 8]; so ist >> cond(a) ans = e+16 Mit cond(a) wird die Konditionszahl von A bezüglich der 2-Norm berechnet, das heißt cond 2 (A). Die numerisch berechnete Konditionszahl ist deswegen so groß, weil die Matrix A singulär ist. Wir geben weitere Beispiele: Beispiel 5.12 Kondition von Matrizen 1. Für A = ( ) 1 0 gilt: 0 1» cond(a) ans = 1 ( ) Für A = gilt: » cond(a) ans = e+006 ( ) Für A = gilt: 0 0» cond(a) ans = Inf 4. Für die HILBERT-Matrix H 10 gilt:» cond(hilb(10)) ans = e+013 Andererseit erhält man mit» min(svd(hilb(10))) ans = e-013 den kleinsten und mit» max(svd(hilb(10))) ans =

231 5.13 Zur Genauigkeit der Lösung 231 den größten singulären Wert von H 10. Damit ist: cond 2(H 10) = σmax(h10) σ min(h 10) , was obiges Resultat bestätigt. Die Abbildung 5.6 zeigt die zehn singulären Werte von H 10, wobei die y Achse logarithmischen Maßstab hat (MATLAB Funktion semilogy) Singuläre Werte Abbildung 5.6: Die zehn singulären Werte der HILBERT-Matrix H 10 Die nachfolgende Tabelle 5.3 zeigt, daß es in MATLAB möglich ist, die Konditionszahl auch bezüglich anderer Normen zu berechnen. MATLAB-Name cond(a)=cond(a,2) cond(a,1) cond(a,inf) Bedeutung cond 2 (A) cond 1 (A) cond (A) Tabelle 5.3: Kondition einer Matrix 5.13 Zur Genauigkeit der Lösung Die Frage, die uns hier beschäftigt, ist: Wie nahe liegt die berechnete an der exakten Lösung? Wir haben allgemein bereits festgestellt, daß die Genauigkeit sowohl von der Stabilität des jeweiligen Verfahrens als auch von der Kondition des Problems abhängt. Diesen Sachverhalt wollen wir nun anhand linearer Gleichungssysteme diskutieren. Kondition und lineare Systeme Ein lineares Gleichungssystem Ax = b heißt schlecht konditioniert, wenn cond(a) sehr groß ist, und gut konditioniert, wenn cond(a) relativ klein ist, sagen wir cond(a) 10 t/2, wenn t die Anzahl der verfügbaren Dezimalstellen ist.

232 232 5 Lineare Gleichungssysteme Es wird sich herausstellen, daß die Kondition der Koeffizientenmatrix A entscheidend dafür ist, ob man bei der numerischen Lösung des linearen Gleichungssystems Ax = b mit Schwierigkeiten zu rechnen hat. Man kann nicht erwarten, daß schlecht konditionierte Gleichungssysteme durch eine numerisch stabile Methode gut gelöst werden. Von einem numerischen Verfahren aber muß man unabdingbar verlangen, daß es neben einer Näherungslösung auch die Schätzung der Konditionszahl von A liefert. Dann hat der Residuenvektor einen Aussagewert, und nur dann kann man den Einfluß von Fehlern in den Eingangsdaten auf die Lösung absehen. Der Residuenvektor einer Lösung Hat man eine Lösung x des linearen Gleichungssystems Ax = b mit irgendeinem Verfahren zum Beispiel der GAUSS-Methode berechnet, so wird man sich anschließend fragen, wie genau diese ist. Kennt man die exakte Lösung x, dann liegt es nahe den relativen Fehler x x / x zu berechnen, um x zu testen. Natürlich kennt man in praktischen Fällen die exakte Lösung x nicht man will sie ja gerade bestimmen. Deshalb liegt es nahe, x in das Ausgangssystem Ax = b einzusetzen und den Residuenvektor r = A x b zu berechnen. Theoretisch betrachtet ist x x = 0 genau dann, wenn r = 0 ist, das heißt x = x ist dann die exakte Lösung. Somit kann man auf den Gedanken kommen, das relative Residuum r / b zu berechnen und zu folgern, daß x eine bessere Näherung für x ist, wenn dieses relative Residuum klein ist. Dies ist jedoch unglücklicherweise falsch. Das folgende Beispiel illustriert dies: Beispiel 5.13 Residuum Seien x = ( ) und x = zwei berechnete Näherungslösungen des Gleichungssystems 0.780x x 2 = x x 2 = ( ) Dann berechnet man r( x) = ( ) r( x) = ( und vermutet natürlich, daß x eine bessere Lösung als x ist. Dies ist aber nicht richtig, da die exakte Lösung ( ) 1 x = 1 mit r(x) = 0 ist, von der offenbar x sehr viel weiter als x entfernt ist. Das Beispiel zeigt, die Größe des Residuums eines linearen Systems alleine ist kein Maßstab für die Güte einer Näherungslösung. Woran liegt das? Die Antwort steht in der Gültigkeit folgender Ungleichung: x x x cond(a) r b. )

233 5.13 Zur Genauigkeit der Lösung 233 Bevor wir deren Gültigkeit nachweisen, beantworten wir obige Frage. Diese Ungleichung zeigt, daß der relative Fehler von x nicht nur vom relativen Residuum r / b abhängt, sondern auch von der Konditionszahl der Systemmatrix A. Eine berechnete Lösung x kann nur dann genau genug sein, wenn sowohl das relative Residuum r / b als auch die Konditionszahl cond(a) klein sind. Im obigen Beispiel ist cond(a)=2.1932e+06 und es verwundert nun nicht mehr, daß die Kleinheit von r / b in diesem Fall nichts über die relative Genauigkeit von x bzw. x aussagt. Will man die Genauigkeit einer Näherungslösung mit Hilfe des Residuenvektors beurteilen, so ist auch die Schätzung der Konditionszahl erforderlich. Ein kleines Residuum alleine ist noch kein Maß für die Güte einer Näherungslösung. Es bleibt die Gültigkeit obiger Ungleichung zu zeigen. Diese folgt aber einfach aus folgender Zeile: x x b = A 1 r Ax A 1 r A x. Abschätzungen der Genauigkeit Wir werden nun sehen, daß die Kondition der Systemmatrix A cond(a) auch bei der Abschätzung des Einflusses von Fehlern in A und b auf die exakte Lösung x von Ax = b eine entscheidende Rolle spielt. Gewöhnlich kennt man die Koeffizientenmatrix A und/oder die rechte Seite b eines linearen Gleichungssystems Ax = b nicht exakt z.b. weil die Koeffizienten Meßgrößen sind oder weil sie mit dem Computer berechnet worden und daher mit Rundungsfehlern behaftet sind. In beiden Fällen löst man daher in Wirklichkeit nicht das wahre lineare Gleichungssystem Ax = b sondern vielmehr das gestörte System à x = b. Natürlich will man wissen, wie nahe der berechnete Lösungsvektor x zum wahren Vektor x liegt. Dies ist eine Problem der Störungsrechnung. Störung in der rechten Seite b. Wir wollen zunächst den Fall behandeln, daß eine Störung in der rechten Seite des linearen Gleichungssystems vorliegt. Es sei also x die Lösung des regulären Systems Ax = b und x die Lösung des Systems A x = b + b wobei die rechte Seite b durch b gestört ist. Dann gilt zunächst: Somit ist x x = A 1 b. Mit Hilfe von b = b A x = Ax A x = A(x x). b = Ax b A x x x = A 1 b x x A 1 b

234 234 5 Lineare Gleichungssysteme folgt schließlich x x x cond(a) b b. Diese Ungleichung bedeutet: Die Konditionszahl der Matrix bestimmt den möglichen Fehler in der Lösung, wenn man die rechte Seite als gestört betrachtet, unabhängig davon, welcher Algorithmus zum Lösen verwendet wird. Beispiel 5.14 Störung der rechten Seite Es sei und A = b = ( ) ( ) 2, 2.01 dann hat das lineare Gleichungssystem die eindeutige Lösung ( ) 1 x =. 1 Stören wir nun die rechte Seite b ein klein wenig zu ( ) 2 b =, dann erhalten wir x = ( ) als eindeutige Lösung des linearen Systems Ax = b. Obwohl wir b 2 um weniger als 0.25% geändert haben, verkleinert sich x 1 = 1 um 50% zu 0.5 und x 2 = 1 vergrößert sich um 50% zu 1.5. Mit anderen Worten: Eine kleine Störung in der rechten Seite verändert die Lösung drastisch. Wir bestätigen die beiden Lösungen in MATLAB. >> A = [1 1;1 1.01]; >> b = [2;2.01]; >> x = A\b x = und >> A = [1 1;1 1.01]; >> bs = [2;2.015]; >> xs = A\bs xs = Da >> norm(bs-b)/norm(b) ans = ist, der relative Fehler in jeder Lösungskomponente aber 0.5 beträgt, muß nach obiger Ungleichung die Kondition von A groß sein, was folgende Zeile bestätigt:

235 5.13 Zur Genauigkeit der Lösung 235 >> cond(a) ans = Störung der Systemmatrix A. Ein ähnliches Ergebnis erhält man, wenn man annimt, daß die Systemmatrix A gestört wird. Bevor wir dies allgemein herleiten, betrachten wir zunächst folgendes Beispiel: Beispiel 5.15 Störung der Systemmatrix Es sei wieder und mit der eindeutigen Lösung A = b = ( ) x = ( ) 2, 2.01 ( ) 1. 1 Wir ändern das Element A 12 um einen kleinen Betrag zu ( ) ( ) Ã = = dann erhalten wir x = ( ) ( ) Auch hier beobachtet man wieder eine drastische Änderung der Lösung, obwohl die Systemmatrix A nur geringfügig geändert wurde. Wenn man A 12 um 0.5% verändert, verkleinert sich die ursprüngliche Lösung x 1 = 1 um ungefähr 101% zu und vergrößert sich x 2 = 1 um 100% zu 2. Es ist nun nicht überraschend, das Ergebnis vorwegzunehmen: Die schlechte Kondition der Matrix A ist für dieses sensitive Verhalten verantwortlich. Ist Ax = b und dann gilt und was die Ungleichung (A + A) x = b x x = A 1 (b A x) = A 1 A x x x A 1 A x x x x cond(a) A A liefert. Um ein Gefühl dafür zu bekommen, welche Rolle die Konditionszahl der Matrix A beim Lösen linearer Systeme auf dem Computer spielt, nehmen wir an, A sei bis auf Maschinengenauigkeit ǫ M bekannt. Damit ist ã ij = a ij (1 + ǫ ij ), wobei ǫ ij ǫ M. Dann gilt in irgendeiner Matrixnorm: A ǫ M A.

236 236 5 Lineare Gleichungssysteme Lösen wir nun (ohne weitere Fehler) das lineare System à x = b, dann bekommen wir eine Lösung x mit der Eigenschaft: x x x cond(a)ǫ M. Ist z.b. ǫ M = 10 t und cond(a) = 10 k, dann kann die Lösung x einen relativen Fehler von 10 t+k haben.

237 5.13 Zur Genauigkeit der Lösung 237 Dies führt auf folgende Faustregel: Falls die Konditionszahl der Systemmatrix A 10 k ist, dann verliert man beim Lösen des linearen Systems in mindestens einer Komponente des Lösungsvektors k Ziffern. Wir bemerken ausdrücklich, daß diese beobachteten Sensitivitäten nichts mit einem Algorithmus zu tun haben. Sie sind mathematischer Natur und liegen im Problem selbst. Kleine Störungen in den Daten können auf große Änderungen in der Lösung führen, wenn die Systemmatrix fast singulär bzw. schlecht konditioniert ist. Die Abbildung 5.7 zeigt die geometrische Bedeutung der Kondition für ein 2 2 lineares Gleichungssystem. Ist die Kondition schlecht, so sind die Geraden nahezu parallel. Schlecht konditioniert Gut konditioniert Abbildung 5.7: Zur Kondition eines linearen Gleichungssystems Wie man die Genauigkeit verbessern kann Wir wollen zwei Möglichkeiten aufzeigen, wie man die Genauigkeit einer berechneten Näherungslösung verbessern kann. Diese sind einmal, das System zu skalieren, und zum anderen, die Lösung iterativ zu verbessern. Beispiel 5.16 Zeilenskalierung Das lineare System ( ) ( ) 1 0 x1 = 0 ǫ x 2 ist für kleine ǫ schlecht konditioniert, weil cond(a) = 1/ǫ ist. Dies bedeutet, daß kleine Störungen in den Eingangsdaten zu großen relativen Änderungen in der Lösung führen können. Stören wir zum Beispiel die ( ) 1 ǫ

238 238 5 Lineare Gleichungssysteme rechte Seite mit (0, ǫ) T, so ist diese Störung für kleine ǫ klein, aber die Lösung ändert sich von x = (1, 1) T zu x = (1,0) T relativ stark. Multiplizieren wir jedoch die zweite Gleichung mit 1/ǫ, so entsteht das System ( ) ( ) ( ) 1 0 x1 1 = x 2 was perfekt konditioniert ist. Eine kleine Störung in der rechten Seite b = (1, 1) T, verursacht nun auch nur eine kleine Lösungsänderung. Dieses Beispiel darf jedoch nicht den Eindruck erwecken, daß dies immer so einfach möglich ist. In der Praxis ist eine Skalierung von allgemeinen Systemen nicht so einfach, wie hier gezeigt. Eine Skalierung hat Einfluß auf die Kondition einer Matrix und damit auf ein lineares System Spezielle lineare Gleichungssysteme Bisher haben wir angenommen, daß A eine allgemeine, dicht besetzte quadratische Matrix ohne spezielle Struktur ist. Hat die Systemmatrix A spezielle Struktur, so kann man beim Lösen eines linearen Gleichungssystems Zeit- und Speicheraufwand einsparen. Die Systemmatrix A hat eine spezielle Struktur, wenn sie eine der folgenden Eigenschaften besitzt: A ist symmetrisch und positiv definit. A hat Bandstruktur. A ist eine Sparsematrix. Techniken, um Gleichungssysteme mit symmetrisch positiv definiter Matrix oder Bandstruktur zu lösen, sind naheliegende Variationen der GAUSS-Methode für dichte gewöhnliche Matrizen. Algorithmen für Sparsesysteme aber sind im allgemeinen aufwendiger zu realisieren. Es sei erwähnt, daß die hier aufgeführten Eigenschaften für reelle Matrizen komplexe Analoga haben und sich somit Verfahren für den komplexen Fall entsprechend entwickeln lassen. Wir wollen darauf im einzelnen jedoch nicht eingehen. Lineare Systeme mit symmetrischer und positiv definiter Matrix A A ist symmetrisch und positiv definit, dann kann in einer LU-Faktorisierung U = L T konstruiert werden, so daß gilt A = LL T, wobei L eine untere Dreiecksmatrix mit positiven Diagonalelementen ist (im allgemeinen aber keine Einsen in der Diagonalen hat). Solch eine Zerlegung heißt CHOLESKY- Faktorisierung. Die MATLAB-Funktion chol berechnet die CHOLESKY-Zerlegung. Eine MATLAB-Implementierung zeigt der Function-File 5.7. Beachten Sie, daß in MATLAB die obere Dreiecksmatrix zurückgegeben wird. Wir bezeichnen sie mit R.

239 5.14 Spezielle lineare Gleichungssysteme 239 Löst das lineare Gleichungssystem Ax = b, falls A symmetrisch und positiv definit ist. 1. Berechne die CHOLESKY-Zerlegung von A: A = LL T. 2. Löse das untere Dreieckssystem Ly = b nach y. 3. Löse das obere Dreieckssystem L T x = y nach x. 1 function [x] = LGPD(A, b); 2 % % Zweck: Loest Lineares System Ax=b, wenn A symmetrisch 4 % und positiv definit ist. 5 % 6 % Eingabe: A nxn-matrix symmetrisch und positiv definit. 7 % b n-spaltenvektor. 8 % Ausgabe: x n-loesungsvektor. 9 % R = chol(a); 11 y = R \b; 12 x = R\y; Function-File 5.7: Löst Ax = b mit CHOLESKY-Zerlegung Tridiagonale Gleichungssysteme Wir betrachten das folgende 5 5 tridiagonale lineare System: d 1 f x 1 e 2 d 2 f x 2 0 e 3 d 3 f 3 0 x e 4 d 4 f 4 x 4 = e 5 d 5 x 5 b 1 b 2 b 3 b 4 b 5 A x = b Um für diese tridiagonale Matrix A eine LU-Faktorisierung zu erhalten, besteht eine Möglichkeit darin, A wie folgt zu zerlegen: d 1 f u 1 f e 2 d 2 f e 3 d 3 f e 4 d 4 f 4 = l u 2 f l u 3 f l u 4 f e 5 d l u 5 A = L U

240 240 5 Lineare Gleichungssysteme Die Elemente u i und l i bestimmen sich wie folgt: Allgemein gilt für i = 2 : n d 1 = u 1 u 1 = d 1 e 2 = l 2 u 1 l 2 = e 2 /u 1 d 2 = l 2 f 1 + u 2 u 2 = d 2 l 2 f 1 e 3 = l 3 u 2 l 3 = e 3 /u 2 d 3 = l 3 f 2 + u 3 u 3 = d 3 l 3 f 2 e 4 = l 4 u 3 l 4 = e 4 /u 3 d 4 = l 4 f 3 + u 4 u 4 = d 4 l 4 f 3 e 5 = l 5 u 4 l 5 = e 5 /u 4 d 5 = l 5 f 4 + u 5 u 5 = d 5 l 5 f 4 d i = l i f i 1 + u i u i = d i l i f i 1 e i = l i u i 1 l i = e i /u i 1 Lineare Systeme mit Sparsematrizen Als Sparsematrizen oder schwach besetzte Matrizen bezeichnet man Matrizen, die nur wenig Nichtnullelemente enthalten. Sparsematrizen entstehen vorwiegend bei der Diskretisierung partieller Differentialgleichungen und bei der Modellierung von Netzwerkproblemen. Im ersten Fall treten die Nichtnullelemente in einer regelmäßigen Struktur auf. Ist diese Gestalt eine Bandstruktur oder kann sie auf eine solche gebracht werden, so empfehlen sich die effektiven Bandalgorithmen. Im zweiten Fall aber liegt im allgemeinen keine regelmäßige Struktur vor, so daß Bandalgorithmen im allgemeinen nicht geeignet sind. Dasselbe ist der Fall, wenn die Bandbreite sehr groß ist und innerhalb des Bandes sehr viele Nullen auftreten. Dann sollten spezielle Varianten des GAUSSSCHEN Algorithmus für Sparsematrizen angewendet werden. Bei der schrittweisen Berechnung der LU-Zerlegung werden in der Regel gewisse Nullelemente von A zu Nichtnullelementen, das heißt, es tritt ein sogenanntes fill in auf. Allerdings ist dieses fill in meist nicht sehr groß. Um sehr große schwach besetzte Systeme mit dem GAUSS-Verfahren oder dessen Varianten effektiv lösen zu können, sind zwei Forderungen zu erfüllen: 1. Kompaktspeicherung, das heißt, es werden nur die in der Matrix A vorkommmenden und im Laufe der Elimination entstehenden Nichtnullelemente in geeigneter Form als Listen (eindimensionale Felder, Vektoren) gespeichert. Zum Beispiel: Der Wert des Elementes a ij, den Zeilenindex i und den Spaltenindex j. 2. Verwendung einer Pivotstrategie, die ein kleines fill in erzeugt. Die Realisierung dieser Forderungen ist schwierig und verlangt unter anderem tiefergehende Kenntnisse in Graphentheorie, kombinatorischen Algorithmen und nichtnumerischer Datenverarbeitung. Wir verweisen hierzu auf die Spezialliteratur und für die entsprechenden MATLAB-Funktionen auf Abschnitt 2.17.

241 5.15 Iterative Lösungsmethoden für lineare Gleichungssysteme 241 Lineare Systeme mit mehreren rechten Seiten schreiben sich wie folgt: AX = B Ax i = b i Wir wollen auf die effizienten Lösungsalgorithmen nicht eingehen. In MATLAB löst man solche Systeme mit dem \ Operator. Beispiel 5.17 Lineares System mit mehreren rechten Seiten» A=[1 2; 2 7];» B=[1 1; 2 3];» A\B ans = Die erste Spalte ist die Lösung zur rechten Seite (1,2) T und die zweite zur rechten Seite (1,3) T. Überprüfen Sie dies! 5.15 Iterative Lösungsmethoden für lineare Gleichungssysteme Das GAUSS-Eliminationsverfahren ist eine Methode, ein lineares Gleichungssystem in einer endlichen Anzahl von Schritten zu lösen. Iterative Methoden dagegen lösen ein lineares System dadurch, daß sie mit einem Startpunkt beginnen und diesen so lange sukzessiv verbessern, bis die gewünschte Genauigkeit der Lösung erreicht ist. Theoretisch müssen unendlich viele Iterationsschritte durchgeführt werden. In der Praxis aber hört man auf, sobald das Residuum b Ax oder ein anderes Fehlermaß klein genug ist. Für eine Reihe von Problemen sind iterative Methoden zum Lösen linearer Systeme besser geeignet als direkte. So führt das numerische Lösen von partiellen Differentialgleichungssystemen (PDE) auf dünn besetzte lineare Gleichungssysteme, die man besser iterativ löst, da diese Methoden die dünne Struktur der Matrix nicht zerstören. Die Methode der konjugierten Gradienten Die Methode der konjugierten Gradienten basiert auf Ideen der mathematischen Optimierung. Sie ist anwendbar auf lineare Systeme mit symmetrischen und positiv definiten Matrizen. In exakter Arithmetik konvergiert das Verfahren in einer endlichen Anzahl von Schritten. Aufgrund von Rundungsfehlern auf dem Computer muß die Methode jedoch als ein iteratives Verfahren betrachtet werden. Es gibt viele publizierte Varianten der konjugierten Gradientenmethode. Ist eine symmetrische Matrix A positiv definit, dann hat die quadratische Funktion q(x) = 1 2 xt Ax x T b ihr eindeutiges Minimum an der Stelle x, an der gilt Ax = b. Mit anderen Worten: Das Lösen der linearen Gleichung Ax = b ist gleichbedeutend damit, das Minimum der quadratischen Funktion q zu bestimmen. Mehrdimensionale Optimierungsmethoden berechnen

242 242 5 Lineare Gleichungssysteme eine neue Näherung x k+1 = x k + αs k dadurch, daß sie zu einer bestimmten Schrittrichtung s k eine Schrittweite α festlegen, so daß die Zielfunktion q(x k +αs k ) entlang s k minimal wird. Für quadratische Optimierungsaufgaben macht man folgende Beobachtungen: 1. Der negative Gradient ist der Residuenvektor: q(x) = b Ax = r. 2. Zu einer Schrittrichtung s k braucht man keine Schrittweitenbestimmung vorzunehmen, da man α analytisch berechnen kann. Das Minimum über α wird dort angenommen, wo das neue Residuum senkrecht zur Schrittrichtung steht: 0 = d dα q(x k+1) = q(x k+1 ) T d dα x k+1 = (Ax k+1 b) T ( d dα (x k+αs k )) = r T k+1 s k. Das neue Residuum aber kann mit dem alten Residuum und der Schrittrichtung ausgedrückt werden: r k+1 = b Ax k+1 = b A(x k + αs k ) = (b Ax k ) αas k = r k αas k. Setzt man r k+1 oben ein und löst nach α auf, so gilt: α = rt k s k s T k As. k Damit erhält man die konjugierte Gradientenmethode, um symmetrische positiv definite lineare Systeme zu lösen. Ist x 0 der Startpunkt und s 0 = r 0 = b Ax 0, dann wiederholt man für k = 0, 1,... folgende Schritte bis Konvergenz eintritt: 1. α k = rt k r k s T k As k (Schrittweite) 2. x k+1 = x k + α k s k (Approximierte Lösung, Iterierte) 3. r k+1 = r k α k As k (Residuum) 4. β k+1 = rt k+1 r k+1 r T k r k 5. s k+1 = r k+1 + β k+1 s k (Schrittrichtung) Der Algorithmus berechnet α etwas anders. Es gilt jedoch: r T k s k = r T k (r k + β k s k 1 ) = r T k r k + β k r T k s k 1 = r T k r k. Auf der CD befindet sich der m-file mit dem Namen konjgrad.m. Dieser realisiert den eben beschriebenen Algorithmus der konjugierten Gradientenmethode.

243 5.16 Weitere Bemerkungen und Hinweise Weitere Bemerkungen und Hinweise Eliminationsmethoden zur Lösung linearer Gleichungssysteme gibt es bereits seit dem neunzehnten Jahrhundert. GAUSS arbeitete so um 1809 mit positiv definiten Matrizen; JACOBI erweiterte das Eliminationsverfahren um 1857 auf beliebige Matrizen. Die Interpretation als Matrixfaktorisierung schreibt man DWYER 1944 zu. Eine systematische Fehlerbehandlung begann aber erst mit dem Computerzeitalter. Ausführliche Fehleranalysen und Störungstheorien für lineare Systeme findet man in den Büchern von [45] und [96]. Das GAUSS- Verfahren und Varianten davon werden in allen Büchern über numerische Mathematik bzw. numerische lineare Algebra besprochen. Wir erwähnen stellvertretend die Bücher [12], [92], [95], [102] und [108]. Das definitive Buch über Matrixrechnungen ist [34]. Eines der ersten Bücher über das Lösen linearer Systeme ist [28]; dieses ist auch eines der ersten mit qualitativ hochwertiger Software. Zur Lösung linearer Gleichungssysteme mittlerer Dimension mit voll besetzten Koeffizientenmatrizen ohne spezielle innere Struktur ist der GAUSSsche Algorithmus das günstigste Verfahren. Ist die Matrix strikt diagonaldominant oder symmetrisch und positiv definit, kann ohne Pivotisierung gearbeitet werden. Andernfalls muß Durchführbarkeit und numerische Gutartigkeit durch Pivotisierung erzwungen werden, wobei die partielle Pivotisierung mit Zeilenvertauschungen fast immer ausreicht. Dies entspricht gerade der MAT- LAB-Realisierung des \- Operators zur Lösung eines linearen Systems. Im Fall einer symmetrischen und positiv definiten Matrix ist die CHOLESKY-Zerlegung mit halbem Aufwand möglich. Eine ausführliche Darstellung der verschiedenen Varianten des GAUSS-Verfahrens einschließlich solcher Probleme wie iterative Verbesserung findet man zum Beispiel bei [37], [34] oder [57]. In geeigneten Modifikationen ist der GAUSSsche Algorithmus auch zur Lösung von Gleichungssystemen hoher Dimension mit dünn besetzten Matrizen, die keine Bandgestalt haben, geeignet. Dabei werden nur die von Null verschiedenen Elemente mittels Kompaktspeichertechniken gespeichert, und durch Pivotisierungsstrategien wird versucht, das fill in gering zu halten. Hierzu exisitiert eine umfangreiche Literatur. Wir verweisen auf [19] und [31]. Dünn besetzte Matrizen werden in MATLAB unterstützt, siehe Abschnitt Ausgereifte FORTRAN-Programme zum Thema lineare Gleichungssyteme findet man in LAPACK und LINPACK, siehe hierzu [2] und [17]. Die Begriffe partielle und komplette (totale) Pivotisierungen stammen von WILKINSON um Eine ausführliche Darstellung zur Matrixinversion befindet sich im Buch [45]. Dort findet der Leser auch ein Kapitel über das Schätzen von Konditionszahlen einer Matrix. Gleichungen, die bei der Diskretisierung partieller Differentialgleichungen entstehen, haben häufig symmetrische, positiv definite Systemmatrizen mit regelmäßig angeordneten Nichtnullelementen. Solche Systeme können auch mittels der oben erwähnten direkten Sparseversionen des GAUSSschen Algorithmus gelöst werden, siehe zum Beispiel [31]. Allerdings sind iterative Verfahren ernsthafte Konkurrenten. Für Systeme mit sehr hoher Dimension, wie sie etwa bei räumlich dreidimensionalen Problemen entstehen, sind sie häufig die einzige akzeptable Alternative. Für spezielle Klassen von Gleichungssystemen, die bei Diskretisierung von Differentialgleichungen entstehen, stellen heute allerdings die in den letzten Jahren entwickelten

244 244 5 Lineare Gleichungssysteme Mehrgitterverfahren mit ihrer engen Verbindung von Diskretisierung und Lösung der linearen Systeme die effektivste Lösungsvariante dar. Bücher neueren Datums über iterative Methode sind zum Beispiel [35], [36], [56] und [66]. Anfang dieses Jahrhunderts formulierte der französische Mathematiker J. HADAMARD bei Betrachtungen von CAUCHY-Problemen zu partiellen Differentialgleichungen den Begriff der Korrektheit eines Problems. Er stellte drei Forderungen auf: Eine Lösung sollte existieren, die Lösung sollte eindeutig sein und sie sollte stetig von den Daten abhängen. Die letzte Forderung kommt daher, daß in Anwendungen die Daten Meßwerte sind und diese stets mit Fehlern behaftet sind. Ein Problem, das diese drei Forderungen erfüllt heißt nach HADAMARD korrekt oder gut-gestellt. Ist A : X Y ein beschränkter linearer Operator von einem normierten Raum X in einen normierten Raum Y, dann ist die Gleichung Ax = y korrekt, wenn A bijektiv ist und der inverse Operator A 1 : Y X beschränkt ist. Sind X und Y endlich dimensionale Räume, so wird A durch eine reelle oder komplexe Matrix dargestellt. Ist die Matrix regulär, dann ist die Abbildung bijektiv. Da außerdem jede Matrix beschränkt ist, folgt somit, daß ein reguläres lineares Gleichungssystem korrekt bzw. gut gestellt nach HADAMARD ist. Da man jedoch wünscht, daß bei einem linearen System kleine Datenfehler auch kleine Fehler in der Lösung hervorrufen, ist eine zusätzliche Forderung notwendig, um diese Stabilität zu gewährleisten. Ein Maß für diese gesuchte Forderung ist die Konditionszahl. Diese erlaubt es, zwischen gut und schlecht konditionierten linearen Systemen zu unterscheiden. Da bei letzteren aus kleinen Eingangsfehler große Lösungsfehler entstehen können, ist es notwendig, den numerischen Lösungsprozeß besonders zu behandeln. Solche Verfahren heißen Regularisierungsmethoden. Hierbei spielt sowohl die Singulärwertzerlegung als auch die Pseudoinverse eine besondere Rolle. Für weitere Einzelheiten verweisen wir auf [39] und [60]. Lineare und nichtlineare inverse Probleme in unendlich dimensionalen Räumen werden in den Büchern [22], [49] und [64] behandelt Übungsaufgaben 5.1 WAHR oder FALSCH: Ist die Matrix A regulär, dann hängt die Anzahl der Lösungen des linearen Systems Ax = b von der rechten Seite des Vektors b ab. 5.2 WAHR oder FALSCH: Besitzt eine Matrix eine kleine Determinante, so ist die Matrix fast singulär. 5.3 WAHR oder FALSCH: Hat eine Dreiecksmatrix eine Null auf ihrer Hauptdiagonalen, dann ist die Matrix notwendigerweise singulär. 5.4 WAHR oder FALSCH: Ein unterbestimmtes lineares Gleichungssystem Ax = b hat immer eine Lösung. 5.5 WAHR oder FALSCH: Das Produkt zweier oberer Dreiecksmatrizen ist wieder eine obere Dreiecksmatrix. 5.6 WAHR oder FALSCH: Das Produkt zweier symmetrischer Matrizen ist wieder symmetrisch. 5.7 WAHR oder FALSCH: Die Inverse einer regulären oberen Dreiecksmatrix ist wieder eine obere Dreiecksmatrix.

245 5.17 Übungsaufgaben WAHR oder FALSCH: Sind die Zeilen einer quadratischen Matrix linear abhängig, dann sind auch die Spalten dieser Matrix linear abhängig. 5.9 WAHR oder FALSCH: Ein lineares Gleichungssystem Ax = b hat genau dann eine Lösung, wenn die Matrix A und die erweiterte Matrix ( A b ) den gleichen Rang haben WAHR oder FALSCH: Ist A eine n n-matrix und P eine n n- Permutationsmatrix, dann gilt: P A = AP WAHR oder FALSCH: Sind Zeilenvertauschungen erlaubt, dann existiert die LU Faktorisierung immer, auch dann, wenn die Matrix A singulär ist WAHR oder FALSCH: Ist ein lineares Gleichungssystem gut konditioniert, dann ist eine Pivotisierung im GAUSS-Verfahren unnötig WAHR oder FALSCH: Ist eine Matrix singulär, dann kann sie keine LU- Faktorisierung besitzen WAHR oder FALSCH: Ist eine reguläre symmetrische Matrix nicht positiv definit, dann kann sie keine CHOLESKY- Faktorisierung besitzen WAHR oder FALSCH: Eine symmetrische positiv definite Matrix ist immer gut konditioniert WAHR oder FALSCH: Das GAUSSsche Eliminationsverfahren ohne Pivotisierung läuft nur dann schlecht, wenn die Matrix schlecht konditioniert oder singulär ist WAHR oder FALSCH: Hat man die LU- Faktorisierung einer Matrix A berechnet, um eine lineares System Ax = b zu lösen, dann kann man weitere lineare Systeme mit der gleichen Matrix A, aber verschiedenen rechten Seiten b lösen, ohne die Matrix erneut faktorisieren zu müssen WAHR oder FALSCH: Ist x ein Vektor, dann gilt: x 1 x WAHR oder FALSCH: Die Norm einer singulären Matrix ist Null WAHR oder FALSCH: Falls A = 0 ist, dann gilt A = WAHR oder FALSCH: A 1 = A T WAHR oder FALSCH: Ist A regulär, dann gilt cond(a) = cond(a 1 ) WAHR oder FALSCH: Löst man ein reguläres lineares Gleichungssystem mit GAUSSCHER Elimination und teilweiser Pivotisierung, dann erhält man gewöhnlich ein kleines Residuum, wenn die Matrix schlecht konditioniert ist WAHR oder FALSCH: Da bei einer GAUSSCHEN Elimination mit teilweiser Pivotisierung die Multiplikatoren durch 1 beschränkt sind, können die Matrixelemente in den reduzierten Matrizen nicht größer werden Ist es möglich, daß ein lineares System Ax = b genau zwei unterschiedliche Lösungen hat? 5.26 Kann die Anzahl der Lösungen eines linearen Systems Ax = b alleine durch die Matrix A bestimmt werden, ohne die rechte Seite b zu kennen? 5.27 Was macht beim Lösen eines linearen Systems Ax = b ernsthaftere Probleme: Die Zeilen von A sind linear abhängig oder die Spalten von A sind linear abhängig? Erklären Sie.

246 246 5 Lineare Gleichungssysteme 5.28 (a) Geben Sie eine Bedingung dafür an, daß eine Matrix A singulär ist. (b) Nehmen Sie nun an, daß das lineare System Ax = b zwei Lösungen y und z hat. Benutzen Sie die gewählte Bedingung in (a) und zeigen Sie, daß A singulär ist Gegeben sei ein reguläres System linearer Gleichungen Ax = b. Welchen Effekt auf die Lösung x hat jede der folgenden Aktionen? (a) Permutation der Zeilen von ( A b ). (b) Permutation der Spalten von A. (c) Multiplikation beider Seiten der Gleichung von links mit einer regulären Matrix M Nehmen wir an, daß ein lineares System Ax = b von beiden Seiten mit einer von Null verschiedenen Zahl α multipliziert wird. (a) Ändert dies die wahre Lösung x? (b) Ändert dies das Residuum r = b Ax für ein gegebenes x? (c) Welche Folgerung kann man über die Qualität einer berechneten Lösung ziehen? 5.31 Wie groß dürfen Sie auf Ihrem Rechner die Ordnung n einer Matrix A wählen, damit die LU-Faktorisierung in ungefähr einer Sekunde abgearbeitet ist? Erhöhen Sie dann die Ordnung der Matrix A um den Faktor 2. Benötigt Ihr Rechner jetzt ungefähr 8 Sekunden? 5.32 Es sei die Summe jeder Zeile einer n n-matrix A Null. Zeigen Sie, daß A singulär sein muß Es sei A eine singuläre n n-matrix. Zeigen Sie, daß Ax = b unendlich viele Lösungen haben muß, wenn x eine Lösung ist (a) Zeigen Sie, daß die folgende Matrix singulär ist: A = (b) Es sei b = ( ) T. Wie viele Lösungen hat das System Ax = b? 5.35 Berechnen Sie die Inverse der Matrix A = Berechnen Sie die Inverse der Matrix und die Konditionszahlen cond p (A) für p = 1,2,. Überprüfen Sie Ihre Resultate mit MATLAB Es sei A eine n n-matrix mit der Eigenschaft A 2 = 0. Zeigen Sie, daß A singulär sein muß Es sei A = ( ) ǫ. 1 ǫ 1 (a) Berechnen Sie die Determinante von A! (b) Angenommen wir rechnen in Gleitpunktarithmetik. Für welchen Zahlenbereich für ǫ ist die Determinante Null? (c) Wie lautet die LU-Faktorisierung von A? (d) Angenommen wir rechnen in Gleitpunktarithmetik. Für welchen Zahlenbereich für ǫ ist U singulär? 5.39 (a) Beweisen Sie, daß das Produkt zweier unterer Dreiecksmatrizen wieder eine untere Dreiecksmatrix ist.

247 5.17 Übungsaufgaben 247 (b) Beweisen Sie, daß die Inverse einer regulären unteren Dreiecksmatrix wieder eine untere Dreiecksmatrix ist (a) Wie lautet die LU-Faktorisierung der folgenden Matrix ( ) 1 a? c b (b) Unter welcher Bedingung ist diese Matrix singulär? 5.41 Berechnen Sie die LU-Faktorisierung der folgenden Matrix: Zeigen Sie, daß die Matrix A = ( keine LU-Faktorisierung besitzt, das heißt, es gibt keine unter Dreiecksmatrix L und obere Dreiecksmatrix U, so daß A = LU gilt Schreiben Sie eine MATLAB-Funktion A = RandBand(n,p,q), die eine n n- Zufallsmatrix mit unterer Bandbreite p und oberer Bandbreite q zurückgibt Schreiben Sie einen MATLAB Function-File X = UTriSolSpM(U,B), der ein oberes Dreieckssystem mit mehreren rechten Seiten löst Berechnen Sie symbolisch mit inv und rref die Inverse der Matrix A = ) 5.46 Schreiben Sie ein Programm, das eine Matrix zu vorgegebener Konditionszahl erzeugt (a) Zeigen Sie, daß die Matrix A = singulär ist. Beschreiben Sie die Lösungsmenge des Systems Ax = b, falls b = (0.1,0.3,0.5) T ist. (b) An welcher Stelle im GAUSS-Verfahren mit partieller Pivotsuche bricht der Prozeß zusammen, falls wir mit exakter Arithmetik rechnen? (c) Wenn Sie die Matrix A in einen Rechner mit binärer Gleitpunktdarstellung eingeben, so ist sie nicht länger exakt singulär. Nicht alle Einträge der Matrix A sind binär exakt darstellbar. Somit ist es möglich, dieses Gleichungssystem mit dem GAUSS-Verfahren zu lösen. Lösen Sie das System in MATLAB und vergleichen Sie die berechnete Lösung mit der Lösungsmenge aus Teil (a). Berechnen Sie außerdem cond(a). Wieviel genaue Stellen erwarten Sie in der Lösung? 5.48 Berechnen Sie die Inverse der Matrix m m Es sei A eine quadratische und Q eine orthogonale n n-matrix. Zeigen Sie, daß gilt: cond 2 (QA) = cond 2 (A) und cond 2 (A T A) cond 2 (A).

248 248 5 Lineare Gleichungssysteme 5.50 Berechnen Sie cond (A) für die Matrix A = Verbessern Sie die Kondition dieser Matrix A durch Skalierung mit der Diagonalmatrix D = diag(1/3, 1/111, 1/10101). Berechnen Sie cond (DA) Zeigen Sie, daß für eine reguläre Matrix A gilt: 1 cond(a) = 1 min{ B : A+B ist singulär}. A Dieses Resultat zeigt: Hat eine reguläre Matrix A eine große Konditionszahl, so liegt diese in der Nähe einer singulären Matrix Gegeben sei eine reelle m n-matrix A. Zeigen Sie, daß A T A symmetrisch und positiv semidefinit ist.

249 6 Lineare Ausgleichsrechnung The World s Simplest Impossible Problem: I am thinking of two numbers. Their average is 3. What are the numbers? CLEVE MOLER Bisher haben wir uns mit der Lösung linearer Gleichungssysteme Ax = b beschäftigt und immer vorausgesetzt, daß so viele Gleichungen wie Unbekannte vorhanden sind: Die Gleichungen beschreiben die Informationen, die die Unbekannten miteinander verknüpfen. Anders ausgedrückt: Die Koeffizientenmatrix A ist quadratisch. In diesem Fall gibt es gewöhnlich eine eindeutige Lösung, die man numerisch zum Beispiel mit dem GAUSS-Verfahren gewinnt. Nun betrachten wir den Fall, daß die Koeffizientenmatrix rechteckig ist. Falls A m Zeilen und n Spalten hat, dann ist x ein Vektor mit n Komponenten und b ein Vektor mit m Komponenten. Ist m größer als n, dann gibt es mehr Gleichungen als Unbekannte und das System Ax = b heißt überbestimmt. Typischerweise hat ein überbestimmtes System keine Lösung. Ist umgekehrt n größer als m, dann gibt es mehr Unbekannte als Gleichungen und das System Ax = b ist unterbestimmt. Typischerweise hat ein unterbestimmtes System unendlich viele Lösungen. In beiden Fällen, m > n und n > m, gibt es jedoch Lösungen im Sinne der kleinsten Quadrate. Dieses Kapitel diskutiert Techniken, um kleinste Quadratelösungen linearer Gleichungssysteme zu berechnen. Die ersten Abschnitte beschäftigen sich mit überbestimmten linearen Systemen. Unterbestimmte Gleichungssysteme behandeln wir gegen Ende dieses Kapitels. Liegt ein überbestimmtes System vor, so hat dies im allgemeinen keine Lösung. Statt dessen lösen wir das dazugehörige lineare Ausgleichsproblem. Es wird sich zeigen, daß sich orthogonale Transformationen besonders gut zur Lösung dieser Systeme eignen. Aus diesem Grund werden wir Orthogonalisierungsverfahren besprechen, mit deren Hilfe sich Ausgleichsaufgaben elegant und numerisch stabil lösen lassen. Wo aber treten überbestimmte Gleichungssysteme auf? Woher kommen sie? Die häufigste Ursache haben überbestimmte Systeme im Ausgleich von Daten, zum Beispiel bei der Berechnung von Ausgleichsgeraden, Ausgleichsparabeln usw. Die Anpassung von Daten an ein mathematisches Modell, das freie Parameter hat, bezeichnet man als Parameteridentifikation. Das folgende Beispiel zeigt ein überbestimmtes System und das dazugehörige Ausgleichsproblem. Beispiel 6.1 Datenausgleich; Parameteridentifikation Es soll eine Parabel x 1 + x 2t + x 3t 2 durch die vier Meßpunkte der Tabelle 249

250 250 6 Lineare Ausgleichsrechnung t i b i gelegt werden. Mit anderen Worten: Suche unter allen Parabeln diejenige, die die Punkte bestmöglichst approximiert. Würden alle vier Punkte genau auf der Parabel liegen, so gäbe es ein x = (x 1, x 2, x 3) T R 3 mit x 1 + x 2t i + x 3t 2 i = b i, für i = 1,2, 3, 4. Das heißt, die vier Punkte würden durch die Parabel interpoliert. Diese vier Gleichungen beschreiben ein überbestimmtes Gleichungssystem mit vier Gleichungen und drei unbekannten Parametern. Jedoch sind Messungen fehlerbehaftet, so daß man im allgemeinen nur x 1 + x 2t i + x 3t 2 i b i fordern kann. Durch die Berechnung eines Interpolationspolynoms zu vier Punkten ergibt sich im allgemeinen keine quadratische Parabel, es sei denn, die Punkte lägen zufällig auf einer solchen. Die einzelnen Fehler können nun auf verschiedene Arten behandelt werden. Eine Möglichkeit unter bestimmten Bedingungen im statistischen Sinn auch optimale ist, die Fehler zu quadrieren und alle aufzusummieren 4 ri 2 = i=1 r i = x 1 + x 2t i + x 3t 2 i b i 4 (x 1 + x 2t i + x 3t 2 i b i) 2 i=1 und dann nach einem x = (x 1, x 2, x 3) T zu suchen, das diese Summe der Fehlerquadrate minimiert, das heißt die Aufgabe Minimiere x R 3 4 i=1 (x1 + x2ti + x3t2 i b i) 2 löst. Dies ist ein lineares Ausgleichsproblem bzw. eine lineare Ausgleichsrechnung nach GAUSS, welches man wie folgt in Vektor-Matrix-Notation schreiben kann: 1 t 1 t b 1 Minimiere 1 t 2 t 2 x 1 x R t 3 t 2 x 2 b 2 3 b 3. 1 t 4 t 2 x 3 4 b 4 Eine Matrix dieser Form heißt VANDERMONDE-Matrix. Setzt man nun die Werte der Daten ein, so erhält man: Minimiere x 1 x R x x Die eindeutige Lösung dieses Ausgleichsproblems ist x 1 x = x 2 = x 3 Die dazugehörigen Einzelfehler sind und der Gesamtfehler ist r = r 1 r 2 r 3 r 4 = r 2 =

251 Fehler r 1 Fehler r 3 6 Lineare Ausgleichsrechnung Fehler r t+0.5t Fehler r t Abbildung 6.1: Beispiel einer Datenapproximation Die Abbildung 6.1 zeigt die Datenpunkte, die Lösungsparabel t + 0.5t 2. und die Einzelfehler. Die Lösung, die Einzelfehler und den Gesamtfehler erhält man in MATLAB mit folgenden Anweisungen, nachdem man zuvor A und b eingegeben hat:» x=a\b x = » r=a*x-b r = » norm(r)^2 ans = Es ist Ziel dieses Kapitels zu erklären, wie man Ausgleichsprobleme löst. Insbesondere soll am Ende die Bedeutung des MATLAB-Operators \ klar sein, der wie wir hier sehen, Ausgleichsprobleme und nicht nur quadratische lineare Gleichungssysteme lösen kann. Die MATLAB Funktion polyfit berechnet Anpassungen von Polynomen an gegebene Daten. Damit können Sie das Beispiel 6.1 ebensogut folgendermaßen lösen:

252 252 6 Lineare Ausgleichsrechnung >> t = [ ]; >> b = [ ]; >> x = polyfit(t,b,2) x = Das dritte Argument im Funktionsaufruf gibt den maximalen Polynomgrad an. Als Resultat erhält man die Koeffizienten des Ausgleichspolynoms beim Höchstkoeffizient beginnend. Im Beispiel haben wir vorausgesetzt, daß das mathematische Modell die Parabel korrekt ist. Sind darüber hinaus die Informationen exakt, also keine Meßfehler vorhanden, so gilt x 1 + x 2 t i + x 3 t 2 i = b i für i = 1,2,3,4. In diesem Fall könnte man willkürlich drei der vier Gleichungen herausgreifen und hieraus x 1,x 2 und x 3 berechnen. Tatsächlich bewirken ungenaue Informationen, daß die Meßpunkte nicht auf, aber in der Nähe, einer Parabel liegen. Ziel des GAUSS-Ausgleichs ist es, diese in der Nähe der Meßdaten liegende Parabel möglichst gut zu berechnen. Wir behandeln hier das Problem unter der Annahme, daß die Meßstellen t i exakt bekannt sind, die Meßwerte b i aber Fehler enthalten können. In diesem Kapitel wollen wir uns damit beschäftigen, wie man Probleme dieser Art numerisch stabil löst und wie man dies in MATLAB realisieren kann. Natürlich kann man dieses kleine Beispiel noch mit Bleistift und Papier lösen, wenn aber mehr Daten und Parameter auftreten, dann ist man auf rechnergestützte Verfahren angewiesen. Bevor wir die allgemeine Problemstellung für Ausgleichsprobleme formulieren, fassen wir die wesentlichen Schritte des Beispiels zusammen, weil sie charakteristisch für die allgemeine Problemstellung sind. 1. Das Problem besteht darin, Daten (t i,b i ) durch eine Parabel f(t,x) = x 1 + x 2 t + x 3 t 3 auszugleichen. 2. Für mehr als drei Meßpunkte führt diese Aufgabenstellung auf ein überbestimmtes lineares Gleichungssystem. 3. Überbestimmte Gleichungssysteme haben in der Regel keine Lösung. Aus diesem Grund formuliert man die lineare Ausgleichsaufgabe als Ersatzproblem. 4. Man berechnet eine Ausgleichslösung, was als approximative Lösung des überbestimmten Systems gedeutet werden kann. 6.1 Die allgemeine Problemstellung Einen realen Prozeß kann man oft durch zwei skalare Zustandsgrößen beschreiben. Wir nennen sie t und y. Man vermutet nun, daß zwischen diesen eine Gesetzmäßigkeit besteht, so daß sich die Abhängigkeit von y von t durch eine Modellfunktion y = f(t,x)

253 6.1 Die allgemeine Problemstellung 253 ausdrücken läßt. In diese Modellfunktion f : R R n R gehen n unbekannte Parameter x = (x 1,,x n ) T ein. Ist sie in x linear, so gilt f(t,x) = x 1 φ 1 (t) + x 2 φ 2 (t) + + x n φ n (t) mit bekannten Funktionen φ i (t) 1. Unter Verwendung von m Beobachtungen (t i,b i ) der Zustandsgrößen (t,y) sind nun die Parameter x = (x 1,,x n ) T zu bestimmen. Dabei ist m > n eine natürliche Voraussetzung: Die Anzahl der beobachteten Zustände muß größer als die Zahl der zu schätzenden Parameter sein. Praktisch ist im allgemeinen sogar m n. Wenn die Beobachtungen b i keinen Fehler enthalten, sollten Parameter x = (x 1,,x n ) T zu bestimmen sein, so daß gilt: b i = x 1 φ 1 (t i ) + x 2 φ 2 (t i ) + + x n φ n (t i ). Offensichtlich ist dies ein lineares Gleichungssystem mit m Gleichungen für die n unbekannten Parameter x j. In Vektor-Matrix-Notation schreibt sich dies mit φ 1 (t 1 ) φ n (t 1 ) x 1 1 A =.. x =. b = b. φ 1 (t m ) φ n (t m ) x n b m als Ax = b. Wegen m > n ist dies ein überbestimmtes Gleichungssystem. Tatsächlich treten jedoch immer Meß- und andere Fehler auf, so daß sich b i von dem zu t i gehörenden Wert y i = x 1 φ 1 (t i ) + x 2 φ 2 (t i ) + + x n φ n (t i ) um einen unbekannten, zufälligen und im allgemeinen von Null verschiedenen Fehler r i unterscheidet, das heißt es ist y = b + r mit y = (y 1,,y m ) T und r = (r 1,,r m ) T. Da y = Ax ist, kann man dies auch als Ax = b + r oder r = Ax b ausdrücken. Man kann nicht erwarten, daß Ax = b eine Lösung x hat: Das System ist im allgemeinen inkonsistent, das heißt, es gibt keine Lösung x mit r = Ax b = 0. Nun gibt es mehrere Möglichkeiten, die einzelnen Fehler r i = x 1 φ 1 (t i ) + x 2 φ 2 (t i ) + + x n φ n (t i ) b i zu behandeln. Bei Ausgleichsproblemen verwendet man die EUKLIDISCHE Norm 2, das heißt, man quadriert die Fehler und summiert sie auf m m ri 2 = (x 1 φ 1 (t i ) + x 2 φ 2 (t i ) + + x n φ n (t i ) b i ) 2. i=1 i=1 1 Ist die Modellfunktion f(t,x) in x nichtlinear, so führt die Problemstellung auf ein nichtlineares Ausgleichsproblem. Dies behandeln wir in Kapitel Wird die Lösung des Ausgleichsproblems bezüglich anderer Abstandsmaße (anderer Normen) gesucht, so bleibt natürlich das Modell weiterhin linear, aber die Bestimmung seiner Parameter x = (x 1,..., x n) T muß unter Umständen durch ein iteratives Minimierungsverfahren erfolgen.

254 254 6 Lineare Ausgleichsrechnung Dann bestimmt man die Parameter x = (x 1,,x n ) T so, daß m (x 1 φ 1 (t i ) + x 2 φ 2 (t i ) + + x n φ n (t i ) b i ) 2 i=1 minimal wird. Dies ist ein lineares Ausgleichsproblem. In Vektor-Matrix-Notation sieht dieses wie folgt aus: Lineare Ausgleichsaufgabe Gegeben ist eine m n-matrix A mit m > n und ein m-vektor b. Gesucht ist ein n-vektor x, der die folgende Aufgabe löst: Minimiere x R n Ax b 2 2 Die Minimierung der Fehlerquadratsumme geht bereits auf GAUSS zurück und trägt daher auch den Namen Lineare Ausgleichsrechnung im Sinne von GAUSS. Andere Namen sind Methode der kleinsten Quadrate, lineares Quadratmittelproblem oder im Englischen linear least squares oder Maximum Likelihood Problem. In der Statistik spricht man von linearer Regression und bezeichnet die Matrix mit X statt mit A, die rechte Seite mit y statt mit b und die zu bestimmenden Parameter mit β statt x. Für das lineare Ausgleichsproblem schreibt man auch kurz Ax b. Diese Schreibweise soll darauf hindeuten, daß das im allgemeinen inkonsistente zugehörige überbestimmte Gleichungssystem Ax = b im Sinne einer minimalen EUKLIDISCHEN Norm des Residuums bestmöglich gelöst wird. Eine Lösung x des Ausgleichsproblems wird Ausgleichslösung oder Quadratmittellösung genannt. Die bisherigen Ausführungen lassen sich wie folgt zusammenfassen: Liegt ein überbestimmtes lineares Gleichungssystem vor, so geht man dazu über, das lineare Ausgleichsproblem als Ersatzaufgabe zu formulieren und dann zu lösen. Aus statistischen Gründen ist es bisweilen sinnvoll zum Beispiel, wenn Meßwerte mit unterschiedlicher Genauigkeit vorliegen ein gewichtetes Ausgleichsproblem Minimiere x R n W(Ax b) 2 2 mit einer Gewichtsmatrix W zu betrachten; W T W ist dabei die Inverse der sogenannten Kovarianzmatrix der Messungen. Dies ist zum Beispiel der Fall, wenn man k i Messungen b ij,j = 1,...,k i, an derselben Stelle t i durchführt und als einzigen Datenpunkt den Mittelwert der Messungen verwendet: (t i,1/k i k i j=1 y ij). Damit die unter Umständen sehr unterschiedliche Anzahl der Messungen, die in die einzelnen Datenpunkte eingehen, beim Ausgleich berücksichtigt wird, wählt man W als Diagonalmatrix mit Einträgen k i. Die Behandlung dieser Aufgabe erfolgt wie im Fall W = I, auf den wir uns hier beschränken.

255 6.1 Die allgemeine Problemstellung 255 Wir merken noch an, daß die Probleme Minimiere x R n Ax b 2 2 und Minimiere x R n Ax b 2 dieselbe Lösung haben beachten Sie das Fehlen des Quadrates bei der zweiten Formulierung, da das Wurzelziehen bei positiven Zahlen eine streng monoton wachsende Funktion ist. Wie schon bei linearen Gleichungssystemen untersuchen wir auch hier folgende Fragen: Unter welcher (welchen) Bedingung(en) hat die Ausgleichsaufgabe eine Lösung? Wann ist die Lösung eindeutig? Gibt es analytische Lösungen und wenn ja, wie sehen diese aus? Welche numerischen Methoden kennt man? Wie löst MATLAB diese Probleme? Wir nehmen die Antworten vorweg und begründen diese in den nachfolgenden Abschnitten dieses Kapitels. Die lineare Ausgleichsaufgabe hat immer eine Lösung. Es gibt genau dann eine eindeutige Lösung, wenn die Matrix A vollen Rang hat. Analytische Lösungen lassen sich mit der verallgemeinerten Inversen bzw. Pseudoinversen angeben. Die numerischen Methoden sind: Normalgleichungs-, QR-Zerlegungs- und Singulärwertzerlegungsmethoden. QR-Zerlegungs- und Singulärwertzerlegungsmethoden sind in MATLAB direkt über \ und pinv verfügbar. Mit dem \-Operator kann man Ausgleichsaufgaben effizient lösen. Zur Wahl der Modellfunktion Das folgende Beispiel zeigt, daß zu vorgegebenen Meßwerten die Wahl der Modellfunktion eine Modellierungsangelegenheit ist, die nur zusammen mit der entsprechenden Anwendung heraus entschieden werden kann und muß. Das Beispiel zeigt außerdem, wie man kleine Probleme mit Hilfe der Differentialrechnung analytisch lösen kann.

256 256 6 Lineare Ausgleichsrechnung Beispiel 6.2 Zur Wahl der Modellfunktion Wir betrachten die vier Zahlenpaare t i b i , die in der Nähe einer nicht bekannten Geraden f(t,x) = x 1 + x 2t liegen. Das Ausgleichsproblem lautet: Die zu minimierende Zielfunktion g(x 1, x 2) = lautet mit den gegebenen Zahlen Minimiere x 1,x 2 4 (x 1 + x 2t i b i) 2 i=1 4 (f(t i,x) b i) 2 = i=1 4 (x 1 + x 2t i b i) 2 g(x 1, x 2) = (x 1 + x 2 0 0) 2 + (x 1 + x 2 1 1) 2 + (x 1 + x 2 3 2) 2 + (x 1 + x 2 4 5) 2 i=1 = 4x x 1x x x 1 54x Im Minimum einer total differenzierbaren Funktion mehrerer Variablen haben bekanntlich alle partiellen Ableitungen den Wert Null: x 1 g(x 1, x 2) = 8x x 2 16 = 0 x 2 g(x 1, x 2) = 16x x 2 54 = 0. Daher ist x 1 = 1 11, x2 = und aus der positiven Definitheit der HESSE-Matrix 5 10 ( ) 8 16 H g = folgt, daß die vorliegende Zielfunktion in diesem Punkt tatsächlich ein Minimum annimmt. Einen wesentlichen Gesichtspunkt des vorliegenden Ansatzes wollen wir nicht unerwähnt lassen: Die Ansatzfunktion (das zugrundeliegende mathematische Modell ) f(t,x) = x 1 + x 2t hängt linear von den gesuchten Parametern x 1 und x 2 ab; die Linearität bezüglich t spielt keine wesentliche Rolle. In gleicher Weise könnten wir zum Beispiel die gegebenen Punkte an eine quadratische Parabel der Form f(t,x) = x 1t + x 2t 2 anpassen; in diesem Fall läßt sich die Zielfunktion in der Form g(x 1, x 2) = (x x ) 2 + (x x ) 2 + (x x ) 2 + (x x ) 2 = 26x x 1x x x 1 198x schreiben, aus der sich die optimale Lösung x 1 = 1, 18 x2 = 5 unmittelbar ergibt. 18 Welcher der Ansätze x 1 + x 2 t oder x 1 t + x 2 t 2 ist im letzten Beispiel der bessere? Die Antwort auf diese Frage ist nicht Gegenstand der Mathematik! Dies muß aus der Anwendungsdisziplin, die die untersuchten Daten modelliert hat (Physik, Chemie, Technik, Wirtschaftswissenschaften usw.) heraus entschieden werden. Sagt die Theorie oder die Erfahrung ein bezüglich t lineares Verhalten voraus, so ist der erste Ansatz der bessere, selbst wenn der Gesamtfehler größer ist als beim quadratischen Ansatz. Die Größe der Abweichungen ist kein Maß für die Güte des verwendeten Modells! Verwendet man als Modellfunktion ein Polynom hinreichend hohen Grades, so kann man immer erreichen, daß die Abweichungen sogar Null sind. In diesem Fall hat man die Daten inklusive ihrer Fehler interpoliert 3. 3 Man spricht dann auch von einem überdimensionierten Modellansatz.

257 6.1 Die allgemeine Problemstellung 257 Trendvorhersagen können beliebig falsch sein, wenn das dem Ausgleich zugrundeliegende mathematische Modell falsch ist. Dies zeigt das nachfolgende Beispiel. Beispiel 6.3 Falsche Modellierung Ein junger Sportler führt über seine 100-m-Zeiten Buch Alter in Jahre Zeit in Sekunden und versucht hieraus seine Leistungsfähigkeit im Alter von 25 Jahren vorherzusagen. Unter der Annahme einer linearen Leistungsentwicklung ergibt sich ein Fabelweltrekord: Die Lösung der Ausgleichsaufgabe ergibt x 1 = 22.36, x 2 = Die Ausgleichsgerade zu diesen Daten ist demnach t. Der Fabelweltrekord für die 100-m-Strecke aufgrund dieses Modells wäre = 6.86 Sekunden! Der kubische Ansatz f(t,x) = x 1 + x 2t + x 3t 3 sichert immerhin noch die voraussichtliche Endlaufteilnahme bei der deutschen Meisterschaft; die Ausgleichsfunktion (auf vier Stellen gerundet) ergibt sich zu f(t,x) = t t 3 und hat bei t = 25 den Wert Die Abbildung 6.2 zeigt für beide Modelle Daten und Ausgleichsfunktion. 15 Lineares Modell für den 100m Lauf Spezieller kubischer Ansatz für den 100m Lauf Abbildung 6.2: Falsche mathematische Modelle Was lehrt uns dieses Beispiel? Obwohl beide Ansätze die vorgegebenen Daten recht gut wiedergeben, sind die daraus abgeleiteten Vorhersagen mit hoher Wahrscheinlichkeit unsinnig. Der Leser, der mit verschiedenen Ansätzen etwas experimentiert, wird schnell feststellen, daß man durch geeignete Wahl eines Modells faktisch jedes Ergebnis als Trendvorhersage erreichen kann. Sinnvoll ist ein Modell nur, wenn man zunächst bei möglichst

258 258 6 Lineare Ausgleichsrechnung vielen Probanden die Leistungsentwicklung über den gesamten interessierenden Zeitraum untersucht und die Form dieser Kurven mathematisch modelliert; in diesem Fall geschieht die Anpassung der Daten an ein empirisch etabliertes Modell. In anderen Anwendungen erfordert die Modellbildung die Zuhilfenahme theoretischer Einsichten aus der entsprechenden Disziplin. 6.2 Überbestimmte lineare Gleichungssysteme Wir haben bereits erkannt, daß überbestimmte Gleichungssysteme in der Regel unlösbar sind. Statt dessen formuliert man die dazugehörige Ersatzaufgabe das Ausgleichsproblem und löst diese. Bevor wir dazu übergehen, Ausgleichsaufgaben zu lösen, wollen wir die wichtigsten Eigenschaften von überbestimmten Systemen diskutieren. Beispiel 6.4 Überbestimmte lineare Gleichungssysteme 1. Das folgende überbestimmte System hat keine Lösung. x 1 + x 2 = 1 x 1 x 2 = 3 x 1 + 2x 2 = 2 Drei Geraden im R 2 haben im allgemeinen keinen Punkt gemeinsam. Die Abbildung 6.3 zeigt die Situation. Da die Matrix A vollen Rang 2 hat, gibt es eine eindeutige Lösung von Ax b. In MAT- LAB erhält man die eindeutige Lösung x = (1.7143, ) T mit einer der folgenden Anweisungen: x=a\b=pinv(a)*b= inv(a *A)*A *b. 6 Drei Gleichungen und zwei Unbekannte 4 x+y=1 x y=3 2 y 0 x+2*y= x Abbildung 6.3: Überbestimmtes System: Keine Lösung von Ax = b

259 6.2 Überbestimmte lineare Gleichungssysteme Das folgende überbestimmte System hat genau eine Lösung. x 1 x 2 = 3 x 1 + 2x 2 = 2 2x 1 + 4x 2 = 4 Die zweite und die dritte Gleichung beschreiben die gleiche Gerade, welche mit der verbleibenden Geraden genau einen gemeinsamen Punkt haben. Die Abbildung 6.4 zeigt die grafische Darstellung. In MATLAB erhält man die eindeutige Lösungx = (4,1) T mit einer der folgenden Anweisungen: x=a\b=pinv(a)*b= inv(a *A)*A *b. 6 Genau eine Lösung 4 x y=3 2 y 0 2 x+2*y= 2 4 2*x+4*y= x Abbildung 6.4: Überbestimmtes System: Genau eine Lösung von Ax = b 3. Das folgende überbestimmte System hat unendlich viele Lösungen. x 1 x 2 = 3 2x 1 2x 2 = 6 3x 1 3x 2 = 9 Alle drei Gleichungen beschreiben die gleiche Gerade. Deshalb sind alle Punkte auf der Geraden Lösungspunkte. Diese können durch x = (3 + α, α) T mit α R beschrieben werden. Die Abbildung 6.5 stellt die Situation grafisch dar. Das MATLAB-Kommando x=a\b liefert eine der Lösungen, im vorliegenden Beispiel x = (3, 0) T 4. Die Lösung kleinster Länge x = (1.5, 1.5) T erhält man mit x=pinv(a)*b. Zur Lösbarkeit überbestimmter Gleichungssysteme Für ein überbestimmtes System kann wie bei einem quadratischen System auch einer der folgenden Fälle eintreten: Fall 1: Das überbestimmte System Ax = b hat keine Lösung (generischer Fall). 4 Man nennt sie eine Basislösung. Wir kommen später darauf zurück.

260 260 6 Lineare Ausgleichsrechnung 6 Unendlich viele Lösungen 4 2 3*x 3*y=9 y x y=3 2*x 2*y= x Abbildung 6.5: Überbestimmtes System: Unendlich viele Lösungen von Ax = b Fall 2: Das überbestimmte System Ax = b hat genau eine Lösung. Fall 3: Das überbestimmte System Ax = b hat unendlich viele Lösungen. Ein überbestimmtes System hat eine Lösung oder unendlich viele Lösungen, wenn der Vektor b im Bildraum von A liegt. Ansonsten gibt es keine Lösung. Die Tabelle 6.1 faßt dies zusammen. Lösungen Bedingung Rang(A) Keine Lösung b / Bild(A) beliebig Genau eine Lösung b Bild(A) maximal Unendlich viele Lösungen b Bild(A) nicht maximal Tabelle 6.1: Zur Lösbarkeit überbestimmter linearer Systeme Für m = 3 und n = 2 kann man überbestimmte Systeme wie folgt geometrisch deuten: Eine Gleichung mit zwei unabhängigen Variablen stellt im R 2 eine Gerade dar. Hat man drei Gleichungen, so gibt es auch drei Geraden, deren gemeinsamen Schnittpunkt man sucht. Im allgemeinen haben jedoch drei Gleichungen keinen gemeinsamen Schnittpunkt und daher das Gleichungssystem keine Lösung. Fallen jedoch zwei Geraden zusammen, so gibt es genau eine Lösung, wenn die dritte nicht zufällig parallel liegt. Unendlich viele Lösungen gibt es, wenn alle drei Geraden gleich sind. Die Abbildung 6.6 zeigt die Situation. Liegt b nicht im Spaltenraum (=Bildraum) von A, so hat das System Ax = b keine Lösung. In diesem Fall ist der Fehlervektor (Residuum) r = Ax b nicht gleich dem Nullvektor. Wäre r der Nullvektor, so wäre x eine Lösung von Ax = b. Was können wir tun, zumal

261 6.2 Überbestimmte lineare Gleichungssysteme Genau eine Lösung 3 Keine Lösung Unendlich viele Lösungen y 1.5 y 1.5 y x x x Abbildung 6.6: Zur Lösbarkeit überbestimmter Systeme solche Probleme in der Realität häufig vorkommen und daher gelöst werden müssen? Ein x zu finden, das die Gleichung Ax = b erfüllt, ist im allgemeinen unmöglich, aber wir können versuchen, einen Vektor x derart zu berechnen, daß Ax fast gleich b ist oder so nahe wie möglich an b liegt. Wir können das Residuum so klein wie möglich machen, das heißt, wir müssen eine Optimierungsaufgabe lösen. Um den Fehlervektor r zu messen, müssen wir eine Norm einführen, die je nach Aufgabenstellung gewählt wird. Für die EUKLIDISCHE Norm 2 löst man anstelle Ax = b als Ersatzaufgabe das lineare Ausgleichsproblem: Dies ist ein lineares Ausgleichsproblem 5. Minimiere x R n Ax b 2 Verfahren zur Lösung überbestimmter Systeme Im Fall 2 und 3 gibt es eine bzw. unendlich viele Lösungen des überbestimmten Systems. Welche Verfahren kann man einsetzen und welche Lösung soll im Fall 3 berechnet werden? Wir werden im Abschnitt 6.6 Unterbestimmte lineare Systeme Lösungsmethoden kennenlernen, die man in diesem Fall einsetzen kann. Eine Möglichkeit besteht darin, die Lösung kleinster Länge zu berechnen. Überbestimmte lineare Systeme in MATLAB Im Fall 2 liefert sowohl 5 Ein lineares Ausgleichsproblem ist ein Beispiel eines (diskreten) Approximationsproblems.

262 262 6 Lineare Ausgleichsrechnung >> x = A\b als auch >> x = pinv(a)*b und >> x = inv(a *A)*A *b die eindeutige Lösung von Ax = b. Hinter der ersten Möglichkeit steckt eine QR Zerlegung und hinter der zweiten eine Singulärwertzerlegung. Die QR Zerlegung ist die schnellere. Im dritten Fall liefert x = A\b eine der unendlich vielen Lösungen und x = pinv(a)*b unter allen Lösungen von x diejenige kleinster Länge. Im Fall 1 wird das Ersatzproblem, nämlich das dazugehörige lineare Ausgleichsproblem, gelöst. Hat A vollen Rang, dann berechnet jede der nachfolgenden Anweisungen theoretisch dieselbe Ausgleichslösung x, was eine approximative Lösung an das überbestimmte System darstellt: >> x = A\b >> x = pinv(a)*b >> x = inv(a *A)*A *b Mit Hilfe des Backslash-Operators geht es am schnellsten, weil dahinter die schnellere QR- Zerlegung steckt. Beachten Sie: Ax = b ist zwar unlösbar, aber die Ersatzaufgabe Ax b liefert eine eindeutige Lösung. Ist der Rang der Matrix A nicht voll, so gibt es unendlich viele Lösungen der Ersatzaufgabe. Mit x = A\b erhält man eine Lösung der Ersatzaufgabe und mit x = pinv(a)*b die Lösung kleinster Länge. Das folgende Beispiel zeigt ein überbestimmtes Gleichungssystem sowie die dazugehörige Geometrie zusammen mit der Ausgleichslösung. Beispiel 6.5 Ein überbestimmtes lineares Gleichungssystem 2x 1 = 3 4x 1 = 1 Dieses System hat zwei Gleichungen, aber nur eine Unbekannte. Hier gilt: m = 2 und n = 1. Das lineare System ist unlösbar. Wir können uns dies wie folgt geometrisch darstellen. Der Spaltenraum der Matrix ( ) 2 A = 4 ist eine Gerade im R 2. Die rechte Seite b = ( ) 3 1 liegt nicht im Spaltenraum von A bzw. auf der Geraden. Die Abbildung 6.7 zeigt dies. Da b nicht im Spaltenraum von A liegt, ist Ax = b inkonsistent. In diesem Fall ist der Fehlervektor (Residuenvektor oder Defekt) r = Ax b = (2,4) T x 1 (3, 1) T für kein x 1 der Nullvektor. Man kann nun x 1 so wählen, daß der Punkt (3 1) so nahe wie möglich an der Geraden liegt. Dies erreicht man durch die orthogonale Projektion des Vektors b = (3, 1) T auf die Gerade.

263 6.3 Zur Lösbarkeit linearer Ausgleichsaufgaben Kleinste Quadratelösung 5 Bild(A) 4 (2 4) y 3 2 (1 2) 1 b (3 1) x Abbildung 6.7: Kleinste Quadratelösung für ein überbestimmtes System 6.3 Zur Lösbarkeit linearer Ausgleichsaufgaben Da die Matrix A R m n n Spalten hat, ist die Dimension des Spaltenraumes (=Bildraum) von A höchstens n. Da m > n ist, liegt der m-vektor b im allgemeinen nicht im Spaltenraum von A und das (überbestimmte) lineare Gleichungssystem Ax = b hat keine Lösung. Statt dessen will man ja gerade die Ausgleichsaufgabe Ax b lösen, indem man nach einem Vektor x im Spaltenraum von A sucht, der so nahe wie möglich (im Sinne der EU- KLIDISCHEN Norm) an b liegt. Gelöst wird diese Forderung durch die orthogonale Projektion von b auf den Spaltenraum von A. Dies wiederum bedeutet, daß der Residuenvektor r = Ax b orthogonal auf dem Spaltenraum von A liegt 6 oder äquivalent im Nullraum von A T. Somit gilt: 0 = A T r = A T (Ax b) oder gleichbedeutend A T Ax = A T b. Dieses lineare Gleichungssystem heißt Normalgleichungssystem. Die Abbildung 6.8 zeigt die Situation für den Fall m = 3 und die Abbildung 6.9 für den Fall m = 2. Damit läßt sich auch die Existenz- und Eindeutigkeitsfrage beantworten. Warum hat die lineare Ausgleichsaufgabe immer eine Lösung? Das Lösen der linearen Ausgleichsaufgabe ist gleichbedeutend damit, das Normalgleichungssystem A T Ax = A T b zu lösen. Dieses hat aber immer eine Lösung, da die rechte Seite A T b im Bildraum von A T A liegt. Wann 6 Siehe: Die vier Fundamentalräume der linearen Algebra. Der Spaltenraum von A und der Nullraum von A T stehen senkrecht aufeinander.

264 264 6 Lineare Ausgleichsrechnung R m=3 b r Bild(A) Ax Abbildung 6.8: Ausgleichslösung im R 3 R m=2 Ax Bild(A) r b Abbildung 6.9: Ausgleichslösung im R 2

265 6.4 Normalgleichungsmethoden 265 gibt es eine eindeutige Lösung? Hat die orthogonale Projektion von b auf den Spaltenraum von A eine eindeutige Darstellung der Form Ax, so ist die Lösung eindeutig. Dies aber ist genau dann der Fall, wenn die Spalten von A linear unabhängig sind oder gleichbedeutend, wenn der Rang der Matrix A gleich n ist. In diesem Fall ist die eindeutige Lösung von Ax b durch x = (A T A) 1 A T b = A + b gegeben, wobei A + = (A T A) 1 A T die verallgemeinerte Inverse ist, auch Pseudoinverse oder MOORE-PENROSE-Inverse von A genannt. 6.4 Normalgleichungsmethoden Das Normalgleichungssystem A T Ax = A T b ist ein lineares n n-gleichungssystem. Daher ist es mit dem GAUSS-Verfahren lösbar, falls die Matrix A T A regulär ist. Da die Koeffizientenmatrix A T A symmetrisch und im regulären Fall positiv definit ist, kann man beim Lösen des Normalgleichungssystems durch Verwendung der CHOLESKY-Zerlegung Zeitund Speicherplatz sparen. Im allgemeinen ist das Lösen des linearen Ausgleichsproblems über die Normalgleichungen jedoch nicht empfehlenswert, da die anderen Orthogonalisierungsverfahren (QR- und SVD-Zerlegungen) bessere numerische Eigenschaften aufweisen. Trotzdem gibt es Situationen, in denen man die Normalgleichungsmethoden vorzieht. Hat man zum Beispiel viel mehr Beobachtungen (Gleichungen) als Parameter (Unbekannte) ist also m n, so sind die Normalgleichungsmethoden vorteilhaft; ist zum Beispiel m = und n = 2, so ist A T A eine 2 2-Matrix, während A eine Matrix ist. Zweifelsohne sind die numerischen Schwierigkeiten beim Verwenden der Normalgleichungsmethoden aber größer, obwohl sie leicht zu implementieren sind. Sei zum Beispiel A = 1 1 ǫ 0 0 ǫ wobei ǫ eine kleine positive Zahl ist, kleiner als die Quadratwurzel aus der Maschinengenauigkeit im gegebenen Gleitpunktsystem. Dann ist die Matrix ( ) A T 1 + ǫ 2 1 A = ǫ 2 in exakter Arithmetik regulär, aber in Gleitpunktarithmetik singulär: ( ) fl(a T 1 1 A) =. 1 1 Ein weiteres Argument ist, daß sich bei der Verwendung des Normalgleichungssystems die Sensitivität des linearen Ausgleichsproblems verschlechtert, da die Kondition von A T A schlechter als die der Ausgangsmatrix A wird. Es gilt nämlich:, cond 2 (A T A) = cond 2 (A) 2.

266 266 6 Lineare Ausgleichsrechnung Die Konditionszahl einer rechteckigen Matrix drückt aus, wie nahe diese an einer rangdefekten Matrix liegt. Hat die Matrix A vollen Rang, so ist die n n-matrix A T A regulär. Damit hat das Normalgleichungssystem A T Ax = A T b genau eine Lösung x, was gerade die Lösung des linearen Ausgleichsproblems Ax b ist. Darüber hinaus ist A T A symmetrisch und positiv definit. Somit gilt mit der CHOLESKY- Zerlegung A T A = R T R, wobei R eine obere Dreiecksmatrix ist. Die eindeutige Ausgleichslösung kann demnach durch folgenden Algorithmus gefunden werden: Lösungsalgorithmus für die lineare Ausgleichsaufgabe Ax b mit der Normalgleichungsmethode, falls A vollen Rang hat. 1. Berechne die CHOLESKY-Faktorisierung von A T A: A T A = R T R. 2. Löse R T y = A T b nach y. 3. Löse Rx = y nach x. Eine MATLAB-Implementierung zeigt der Function-File function [x] = LSNormal(A, b); 2 % % Zweck: Loest lineare Ausgleichsaufgabe mit den 4 % Normalengleichungen. A habe vollen Rang n. 5 % 6 % Eingabe: A mxn-matrix. 7 % b m-spaltenvektor. 8 % Ausgabe: x n-loesungsvektor. 9 % R = chol(a *A); 11 y = R \(A *b); 12 x = R\y; Function-File 6.1: Löst Ax b mit Normalgleichungssystem Die Normalgleichungsmethode ist ein Beispiel einer allgemeinen Strategie in der numerischen Mathematik bzw. im wissenschaftlichen Rechnen. Ein schwieriges Problem wird nacheinander unter Beibehaltung der Lösung in einfachere Probleme zerlegt. Hier gilt: rechteckig quadratisch dreiecksförmig

267 6.5 Orthogonalisierungsmethoden 267 Unglücklicherweise zeigt diese Methode aber auch, daß das, was theoretisch naheliegend ist, numerisch nicht ratsam sein muß. Beispiel 6.6 Ausgleichslösung mit Normalgleichungsmethode Wir lösen die lineare Ausgleichsaufgabe aus Beispiel 6.1 mit Hilfe der Normalgleichungsmethode A T A = = 2 6 8, A T b = = Die CHOLESKY-Faktorisierung der symmetrischen positiv definiten Matrix A T A ergibt: A T A = = Löst man nun das untere Dreieckssystem R T y = A T b durch Vorwärtssubstitution, so erhält man y = = RR T. Schließlich erhält man die Lösung, wenn man das obere Dreieckssystem Rx = y durch Rückwärtseinsetzen löst: x = Orthogonalisierungsmethoden Bevor wir nun Orthogonalisierungmethoden zur Lösung allgemeiner linearer Ausgleichsaufgaben besprechen, betrachten wir zunächst spezielle dreiecksförmige Ausgleichsprobleme 7. Dreiecksförmige lineare Ausgleichsprobleme Wie bei quadratischen linearen Gleichungssystemen so betrachten wir auch hier zunächst den Fall, daß eine lineare Ausgleichsaufgabe mit einer Dreiecksmatrix vorliegt. Diese Aufgabe schreibt sich wie folgt: Minimiere x R n ( R 0 ) ( b1 x b 2 wobei R eine n n obere Dreiecksmatrix ist. Dann gilt für ( ) ( ) R b1 r = x : 0 b 2 ) 2 7 Sie erinnern sich: Bevor wir allgemeine quadratische Gleichungssysteme gelöst haben, haben wir dreiecksförmige Systeme studiert.

268 268 6 Lineare Ausgleichsrechnung r 2 2 = Rx b b Über den zweiten Summanden b haben wir keine Kontrolle, das heißt, wir können diesen nicht kleiner machen. Der erste Summand Rx b aber kann zu Null gemacht werden, indem wir das lineare Dreieckssystem Rx = b 1 nach x auflösen (Rückwärtseinsetzen), falls die Hauptdiagonalelemente von R von Null verschieden sind. Somit haben wir die kleinste Quadratelösung gefunden und darüber hinaus gilt: r 2 2 = b Orthogonale Transformationen Man könnte nun auf den Gedanken kommen, GAUSS-Transformationen bzw. Eliminationsmatrizen einzusetzen, um eine allgemeine Ausgleichsaufgabe auf eine dreiecksförmige zu transformieren. Solche Transformationen aber bewahren die EUKLIDISCHE Norm nicht und erhalten daher nicht die Lösung des Ausgangsproblems. Transformationen, die die EUKLIDISCHE Norm beibehalten, sind orthogonale Transformationen, die durch orthogonale Matrizen beschrieben werden. Eine quadratische Matrix heißt orthogonal, falls QQ T = Q T Q = I gilt 8. Orthogonale Transformationen bewahren die EUKLIDISCHE Norm, denn es gilt: Qx 2 2 = (Qx)T Qx = x T x = x 2 2. Orthogonale Matrizen können Vektoren auf verschiedene Weise transformieren, zum Beispiel drehen oder spiegeln, aber stets bewahren sie die Länge des Vektors. Somit erhalten sie auch die Lösung einer linearen Ausgleichsaufgabe. Orthogonale Matrizen sind im numerischen Rechnen von besonderer Bedeutung, da die Invarianz gegenüber der 2-Norm bedeutet, daß Fehler nicht verstärkt werden können. Somit ist es zum Beispiel auch möglich, ein lineares Gleichungssystem mit orthogonalen Transformationen zu lösen, ohne eine Pivotisierung zur Gewährleistung der numerischen Stabilität machen zu müssen. Lösen der Ausgleichsaufgabe mit der QR-Zerlegung für den Fall, daß A vollen Rang hat Es gibt einen Algorithmus in der numerischen linearen Algebra, der wichtiger ist als die anderen: Der Algorithmus zur QR-Zerlegung einer Matrix. Gegeben ist eine beliebige m n-matrix A mit m > n. Dann gibt es eine orthogonale m m-matrix Q, so daß gilt ( R1 A = Q 0 8 Eine m n-matrix Q (m n) heißt isometrisch, wenn die Spalten orthonormal sind. )

269 6.5 Orthogonalisierungsmethoden 269 wobei R 1 eine n n obere Dreiecksmatrix ist, die regulär ist, falls A vollen Rang hat 9. Eine derartige QR-Faktorisierung transformiert ein allgemeines lineares Ausgleichsproblem Ax b in ein dreiecksförmiges System mit der gleichen Lösung, denn es ist: Ax b 2 = Q ( R1 0 ) ( R1 x b 2 = 0 Damit besteht die Aufgabe darin, das dreiecksförmige System ( ) R1 x Q T b 0 ) x Q T b 2. zu lösen. Wie dies geht, wissen wir bereits. Wir müssen R 1 x = b 1 nach x auflösen, wobei ( ) b1 = Q T b b 2 gesetzt wird. Teilen wir die Matrix Q in zwei Matrizen Q 1 und Q 2 auf, indem Q 1 aus den ersten n Spalten und Q 2 aus den verbleibenden m n Spalten besteht, dann folgt: A = ( ) ( ) R Q 1 Q 1 2 = Q 0 1 R 1. Dies nennt man die reduzierte QR-Zerlegung. Damit folgt: ( ) ( ) b1 = Q T Q T b = 1 b Q T 2 b. b 2 Dies führt auf folgendes Verfahren. Lösungsalgorithmus für die lineare Ausgleichsaufgabe Ax b mit QR-Zerlegung, falls A vollen Rang hat. 1. Berechne die reduzierte QR-Zerlegung von A: A = Q 1 R Löse das obere Dreieckssystem R 1 x = Q T 1 b nach x. 9 Alle wichtigen Matrixfaktorisierungen auch die QR-Zerlegung sind im Anhang B zusammengestellt.

270 270 6 Lineare Ausgleichsrechnung Eine MATLAB-Implementierung zeigt der Function-File function [x] = LSQR(A, b); 2 % % Zweck: Loest lineare Ausgleichsaufgabe mit QR 4 % Zerlegung. A habe vollen Rang n. 5 % 6 % Eingabe: A mxn-matrix. 7 % b m-spaltenvektor. 8 % Ausgabe: x n-loesungsvektor. 9 % [Q1,R1] = qr(a,0); 11 x = R1\(Q1 *b); Function-File 6.2: Löst Ax b mit QR-Zerlegung Beispiel 6.7 Ausgleichslösung mit QR-Methode Wir lösen die lineare Ausgleichsaufgabe aus Beispiel 6.1 mit Hilfe der QR-Zerlegung. Die reduzierte QR- Zerlegung von A ergibt: A = = = Q 1R 1 und es gilt Q T 1 b = = Man erhält die Lösung, wenn man das obere Dreieckssystem R 1x = Q T 1 b nach x durch Rückwärtseinsetzen löst: x = Bisher haben wir nur über die QR-Zerlegung gesprochen, nichts aber darüber gesagt, wie man sie berechnet. Es gibt mehrere Möglichkeiten, die QR-Zerlegung zu konstruieren. Die wichtigsten sind: Spiegelungen mit HOUSEHOLDER-Matrizen Drehungen mit GIVENS-Matrizen GRAM-SCHMIDTSCHE Orthogonalisierungen.

271 6.5 Orthogonalisierungsmethoden 271 Wir wollen die QR-Faktorisierung mit HOUSEHOLDER-Matrizen behandeln. Für andere Methoden verweisen wir auf die Literatur, siehe Abschnitt 6.9. QR-Zerlegungen sind außer beim Lösen von Ausgleichsaufgaben auch an anderen Stellen von besonderer Nützlichkeit. Die reduzierte QR-Zerlegung ergibt A = Q ( R1 0 ) = ( Q 1 Q 2 ) ( R 1 0 ) = Q 1 R 1, wobei Q 1 n orthonormale und Q 2 m n orthonormale Spalten besitzt. Hat die Matrix A vollen Rang n, dann bilden die Spalten von Q 1 eine orthonormale Basis des Bildraums von A und die Spalten von Q 2 eine orthonormale Basis vom orthogonalen Komplement, was gerade der Nullraum von A T ist 10. Solche orthonormalen Basen sind zum Beispiel bei Eigenwertberechnungen und in der Optimierung von besonderer Bedeutung. QR-Zerlegung mit HOUSEHOLDER-Matrizen Die Idee der HOUSEHOLDER-Methode besteht darin, orthogonale Matrizen Q k zu erzeugen, diese von links an A zu multiplizieren, so daß die resultierende Matrix R obere Dreiecksform hat: Q n Q 2 Q 1 A = R. Das Produkt Q = Q T 1 QT 2 QT n ist wieder orthogonal und damit ist A = QR eine volle QR-Zerlegung von A. Die Matrix Q k wird so gewählt, daß in der k-ten Spalte unterhalb der Diagonalen Nullen auftreten. Gleichzeitig aber muß darauf geachtet werden, daß die Nullen, die zuvor erzeugt wurden, erhalten bleiben. Wir zeigen dies symbolisch an folgendem 4 3- Fall. In diesen Matrizen symbolisiert irgendeinen Zahlenwert und x einen geänderten Zahlenwert. Kein Matrixeintrag bedeutet eine Null. x x x Q 1 0 x x Q 2 0 x x x x Q 3 0 x x 0 x x 0 x 0 A Q 1 A Q 2 Q 1 A Q 3 Q 2 Q 1 A Als erstes operiert Q 1 auf den Zeilen 1 bis 4 und erzeugt in den Positionen (2,1), (3,1) und (4,1) Nullen. Dann operiert Q 2 auf den Zeilen 2 bis 4 und erzeugt Nullen in den Positionen (3,2) und (4,2), zerstört aber nicht die Nullen, die durch Q 1 erzeugt worden sind. Schließlich agiert Q 3 auf den Zeile 3 und 4 und erzeugt eine Null an der Stelle (4,3). Im allgemeinen operiert Q k auf den Zeilen k bis m. Es stellt sich nun die Frage, wie die orthogonalen Matrizen Q k konstruiert werden können, damit sie, wie oben beschrieben, die Nullen erzeugen? Hierzu kann man wie folgt vorgehen. Jede Matrix Q k ist eine orthogonale Matrix der Form: ( ) I 0 Q k =, 0 H 10 Siehe: Die vier Fundamentalräume der linearen Algebra.

272 272 6 Lineare Ausgleichsrechnung wobei I die (k 1) (k 1)-Einheitsmatrix und H eine (m k +1) (m k +1) orthogonale Matrix ist. Während I sicherstellt, daß die ersten (k 1) Zeilen unberührt bleiben, muß nun H dafür sorgen, daß in der k-ten Spalte Nullen erzeugt werden. Der HOUSEHOL- DER-Algorithmus wählt H als eine spezielle Matrix, die HOUSEHOLDER-Matrix 11 genannt wird. Wie aber sieht eine HOUSEHOLDER-Matrix aus? Eine HOUSEHOLDER-Matrix ist eine Matrix der Form H = I 2 v T v vvt 0 v R n. Eine solche Matrix hat die Eigenschaften, daß sie symmetrisch und orthogonal ist und daher auch involutorisch (H 2 = I). Wendet man H auf einen Vektor x an, so gilt Hx = x ( 2vT x v T v )v. Die Abbildung 6.10 illustriert diese Formel und macht klar, warum man H manchmal auch x Span(v) v Hx Abbildung 6.10: HOUSEHOLDER-Matrix H mal Vektor x eine HOUSEHOLDER-Spiegelung nennt: H spiegelt x an der Hyperebene Span(v). HOUSEHOLDER-Matrizen sind mächtige Werkzeuge, um Nullen in einem Vektor zu erzeugen. Gegeben sind die Vektoren x und y. Gibt es eine HOUSEHOLDER-Matrix H mit Hx = y? Da H orthogonal ist, müssen wir natürlich x 2 = y 2 fordern. Nun gilt Hx = y x 2 vt x v T v v = y und die rechte Gleichung hat die Form αv = x y für ein α. Da aber H von einer Skalierung von v unabhängig ist, können wir α = 1 setzen. Mit v = x y gilt v T v = x T x + y T y 2x T y 11 Auch HOUSEHOLDER-Spiegelung bzw. HOUSEHOLDER-Transformation genannt. Manchmal wird auch Q k HOUSEHOLDER-Matrix genannt.

273 6.5 Orthogonalisierungsmethoden 273 und wegen x T x = y T y v T x = x T x y T x = 1 2 vt v. Damit ist Hx = x v = y wie gefordert. Normalerweise wird der Vektor y so gewählt, daß er eine spezielle Form von Nullkomponenten hat. Gewöhnlich setzt man y = σe 1, wobei σ = ± x 2 ist. Dies führt auf eine maximale Anzahl von Nullkomponenten in y. Dann gilt: v = x y = x σe 1. Wählt man sign(σ) = sign(x 1 ), dann wird eine Auslöschung beim Auswerten von v 1 vermieden. Beispiel 6.8 HOUSEHOLDER-Matrix Dieses Beispiel soll die eben beschriebene Konstruktion verdeutlichen. Wir bestimmen eine HOUSEHOLDER- Matrix H, die bis auf die erste alle anderen Komponenten des Vektors x = zu Null macht. Folgt man obiger Darstellung, so wählt man den Vektor v = x σe 1 = 1 σ 0 = wobei σ = ± x 2 = ±3 ist. Da x 1 positiv ist, vermeiden wir eine Auslöschung, wenn wir σ = 3 wählen. Damit gilt v = 1 0 = Um zu überprüfen, ob sich H wie erwartet verhält, berechnen wir 2 Hx = x 2 vt x v T v v = = was die gewünschten Nullkomponenten zeigt. Darüber hinaus bleibt die Länge bewahrt. Der Vektor v, der die HOUSEHOLDER-Matrix H bestimmt, heißt HOUSEHOLDER-Vektor. Der MATLAB Function-File 6.3 berechnet zu gegebenem Vektor x R n den HOUSEHOL- DER-Vektor v R n, so daß Hx ein Vielfaches des Einheitsvektor e 1 ist. Sowohl das Matrix-Vektor-Produkt Hx als auch das Matrix-Matrix-Produkt kann berechnet werden, ohne die Matrix H explizit speichern zu müssen. Man muß lediglich den Vektor v speichern, der H vollständig bestimmt. Sind H und x gegeben, so ist das Produkt nämlich Hx = x ( 2vT x v T v )v. Die MATLAB Function-Files 6.4 und 6.5 realisieren dies. σ ,

274 274 6 Lineare Ausgleichsrechnung 1 function [v] = HVektor(x) 2 % % Berechnet den Householder-Vektor v, so daß 4 % Hx = sigma*e_1. 5 % 6 % Eingabe: x 7 % Ausgabe: v (Householder-Matrix). 8 % n = length(x); 10 sigma = -sign(x(1))*norm(x,2); 11 v = x-sigma*eye(n,1); Function-File 6.3: Bestimmung des HOUSEHOLDER-Vektors v 1 function [y] = Hmalx(v,x) 2 % % Berechnet Matrix-Vektor-Produkt Hx, wobei H die 4 % Householder-Matrix ist. H wird nicht explizit 5 % gespeichert. 6 % 7 % Eingabe: v Bestimmt Householder-Matrix H. 8 % x Vektor. 9 % Ausgabe: y=hx. 10 % y = x - ( 2*(v *x)/(v *v) )*v; Function-File 6.4: HOUSEHOLDER-Matrix mal Vektor

275 6.5 Orthogonalisierungsmethoden function [B] = HmalA(v,A) 2 % % Berechnet B=HA. 4 % 5 % Eingabe: v Bestimmt Householder-Matrix. 6 % A nxm-matrix. 7 % Ausgabe: B=HA. 8 % [n,m] = size(a); 10 B = zeros(n,m); 11 for j=1:m 12 B(:,j) = Hmalx(v,A(:,j)); 13 end Function-File 6.5: HOUSEHOLDER-Matrix mal Matrix Beispiel 6.9 QR-Zerlegung mit HOUSEHOLDER-Matrizen Wir demonstrieren eine HOUSEHOLDER QR-Zerlegung an der Matrix A = Die Zahlen sind gegebenenfalls auf vier Nachkommastellen gerundet x = v = sign(x 1) x e 1 + x = 1 2 H 1 = I 4 2 v T v vvt = = Q 1 = H 1 Q 1A = =

276 276 6 Lineare Ausgleichsrechnung = Damit ist nach dem ersten Schritt die gewünschte Struktur in der ersten Spalte erreicht x = v = sign(x 1) x e 1 + x = = H 2 = I 3 2 v T v vvt = = ( ) I1 0 Q 2 = = H Q 2Q 1A = = Damit ist nach dem zweiten Schritt die gewünschte Struktur in der zweiten Spalte hergestellt und die zuvor erzeugten Nullen bleiben unberührt. ( ) x = ( ) ( ) ( ) v = sign(x 1) x e 1 + x = = ( ) ( ) ( ) H 3 = I 2 2 v T v vvt = 2 = ( ) I2 0 Q 3 = = H Q 3Q 2Q 1A =

277 6.5 Orthogonalisierungsmethoden 277 = Damit ist nach dem dritten Schritt die obere Dreiecksstruktur erreicht. Vergleichen Sie die obere Dreiecksmatrix mit der aus Beispiel 6.7. QR-Zerlegung in MATLAB Die QR-Zerlegung zerlegt jede rechteckige Matrix in ein Produkt einer orthogonalen Matrix und einer oberen Dreiecksmatrix. Eine Spaltenpermutation ist ebenfalls möglich. Man erhält somit folgende QR-Zerlegung: A = QR oder AP = QR wobei Q eine orthogonale Matrix, R eine obere Dreiecksmatrix und P eine Permutationsmatrix ist. In MATLAB wird eine QR-Zerlegung mit dem Befehl qr durchgeführt. Zur Faktorisierung werden HOUSEHOLDER-Matrizen benutzt. Es gibt vier Varianten der QR-Zerlegung: 1. Volle QR-Zerlegung ohne Spaltenpermutation 2. Reduzierte QR-Zerlegung ohne Spaltenpermutation 3. Volle QR-Zerlegung mit Spaltenpermutation 4. Reduzierte QR-Zerlegung mit Spaltenpermutation Das nachfolgende Beispiel zeigt die vier Varianten der QR-Zerlegung in MATLAB an der uns bereits vertrauten Matrix A aus Beispiel 6.1.» A = [1-1 1;1 0 0; 1 1 1;1 2 4] A = » [Q,R] = qr(a) Q = R =

278 278 6 Lineare Ausgleichsrechnung In vielen Fällen werden die m n (hier: 4 3 = 1) Spalten der Matrix Q nicht benötigt, da sie mit den unteren Null-Zeilen in R multipliziert werden. Deshalb gibt es eine reduzierte QR-Zerlegung, die eine gegebene m n-matrix A in eine m n-matrix Q mit orthonormalen Spalten und in eine n n obere Dreiecksmatrix R zerlegt. Für unser kleines Beispiel gewinnt man durch die reduzierte QR-Zerlegung 12 noch nicht sehr viel, aber für große rechteckige Matrizen kann die Speicher- und Zeitersparnis groß sein.» [Q1,R1] = qr(a,0) Q1 = R1 = Im Gegensatz zur LU-Zerlegung benötigt man bei einer QR-Faktorisierung weder Pivotisierungen noch Permutationen. Eine optionale Spaltenpermutation aber ist hilfreich, um Singularitäten bzw. einen Rangdefekt zu erkennen. Die erste Eingabe zeigt eine volle QR- Zerlegung und die zweite eine reduzierte QR-Zerlegung jeweils mit Spaltenpermutation.» [Q,R,P] = qr(a) Q = R = P = » [Q1,R1,P1] = qr(a,0) 12 Um die reduzierte QR-Zerlegung zu erhalten, muß das zweite Eingabeargument der qr-funktion 0 sein.

279 6.5 Orthogonalisierungsmethoden 279 Q1 = R1 = P1 = Weitere Bemerkungen Die QR-Zerlegung gehört zu den stabilsten Algorithmen in der numerischen linearen Algebra. Der Grund liegt darin, daß orthogonale Transformationen keine Fehlerverstärkung mit sich bringen: cond 2 (Q) = 1. Die abschließende Rücksubstitution hat die gleiche Kondition wie das Ausgangsproblem. Der QR-Algorithmus bricht zusammen, wenn der Rang von A nicht voll ist. In diesem Fall muß man Spalten von A permutieren (ähnlich zur Pivotsuche) und erhält eine Faktorisierung der Art: ( ) Q T R11 R AP = P R n n ist eine Permutationsmatrix, R 11 R k k eine obere Dreiecksmatrix und R 12 R k (n k) ist im allgemeinen voll besetzt. Diese Faktorisierung reicht allerdings nur aus, um eine Lösung zu bestimmen; im allgemeinen ist dies nicht die Lösung minimaler Norm. Für weitere Einzelheiten siehe Abschnitt 6.7. Lösen der Ausgleichsaufgabe mit der Singulärwertzerlegung für den Fall, daß A vollen Rang hat Gegeben ist eine beliebige m n-matrix A mit m > n. Dann gibt es eine orthogonale m m-matrix U, eine n n-diagonalmatrix S 1 und eine orthogonale n n-matrix V, so daß gilt: A = U ( S1 0 ) V T. Hat A vollen Rang n, so sind die Diagonalelemente von S 1 alle größer als Null und damit ist S 1 regulär. Die Diagonalelemente sind gerade die singulären Werte von A. Diese Singulärwertzerlegung transformiert ein allgemeines lineares Ausgleichsproblem Ax b in ein Diagonalsystem (spezielles Dreieckssystem) mit der gleichen Lösung, denn: Ax b 2 = U ( S1 0 ) ( V T S1 x b 2 = 0 ) ( V T x U T S1 b 2 = 0 ) y U T b 2,

280 280 6 Lineare Ausgleichsrechnung mit der Definition y = V T x. Damit besteht die Aufgabe darin, das Diagonalsystem ( ) S1 y U T b 0 zu lösen. Wie dies geht, wissen wir bereits. Wir müssen S 1 y = b 1 nach y auflösen, wobei wir ( ) b1 = U T b b 2 setzen. Teilen wir die Matrix U in zwei Matrizen U 1 und U 2 auf, wobei U 1 aus den ersten n Spalten und U 2 aus den verbleibenden m n Spalten besteht, dann gilt: A = ( ) ( ) S U 1 U 1 2 V T = U 0 1 S 1 V T. Für diese sogenannte reduzierte SV-Zerlegung gilt: ( ) ( b1 = U T U T b = 1 b U2 Tb b 2 Dies führt auf folgendes Verfahren. Lösungsalgorithmus für die lineare Ausgleichsaufgabe Ax b mit SVD-Zerlegung, falls A vollen Rang hat. ). 1. Berechne die reduzierte SVD-Zerlegung von A: A = U 1 S 1 V T. 2. Löse das Diagonalsystem S 1 y = U1 T b nach y. 3. Setze x = V y. Eine MATLAB-Implementierung zeigt der Function-File 6.6. Beispiel 6.10 Ausgleichslösung mit Singulärwertzerlegung Wir lösen die lineare Ausgleichsaufgabe aus Beispiel 6.1 mit der Singulärwertzerlegung. Die reduzierte Singulärwertzerlegung von A ist: A = = = U 1S 1V und es gilt U1 T b = =

281 6.6 Unterbestimmte lineare Gleichungssysteme function [x] = LSSVD(A, b); 2 % % Zweck: Loest lineare Ausgleichsaufgabe mit Singulaer- 4 % wertzerlegung. A habe vollen Rang n. 5 % 6 % Eingabe: A mxn-matrix. 7 % b m-spaltenvektor. 8 % Ausgabe: x n-loesungsvektor. 9 % [U1,S1,V] = svd(a,0); 11 y = S1\(U1 *b); 12 x = V*y; Function-File 6.6: Löst Ax b mit Singulärtwertzerlegung Löst man das Diagonalsystem S 1y = U1 T b nach y, so erhält man y = Die Lösung berechnet sich schließlich durch Matrix-Vektor-Multiplikation: x = V y = = Unterbestimmte lineare Gleichungssysteme Ein System von m linearen Gleichungen in n Unbekannten heißt unterbestimmt, wenn es weniger Gleichungen als Unbekannte gibt, das heißt, falls m < n ist. Welche Lösung soll man nun von einem Algorithmus berechnen lassen, wenn es unendlich viele gibt? Man kann eine kleinste Quadratmittellösung berechnen, das heißt, unter allen Lösungen x berechnet man diejenige mit kleinster Länge oder äquivalent man löst das Optimierungsproblem: Minimiere x R n x 2 unter der Nebenbedingung Ax = b Hat man aus anderen Quellen, etwa einer früheren Rechnung Informationen über die Lage der Lösung, so ist es unter Umständen zweckmäßig Minimiere x R n x x 0 2 unter der Nebenbedingung Ax = b

282 282 6 Lineare Ausgleichsrechnung zu lösen. Dieses Problem läßt sich aber auf den Fall x 0 = 0 zurückführen; daher beschränken wir uns auf diesen. R n=3 0 {x Ax = b} Abbildung 6.11: Zeilenraumdarstellung für m = 2 und n = 3; Lösung kleinster Länge Unglücklicherweise werden unterbestimmte Systeme in der Lehrbuchliteratur nicht oft diskutiert, obwohl sie in den Anwendungen häufig zum Beispiel als Nebenbedingungen in Optimierungsaufgaben vorkommen; hierzu verweisen wir auf [71]. Darüber hinaus lassen sich unterbestimmte Systeme wie auch überbestimmte elegant und numerisch stabil mit den hier besprochenen Orthogonalisierungsmethoden lösen. Das folgende Beispiel zeigt, daß unterbestimmte Systeme unendlich viele Lösungen oder keine haben können, je nachdem, ob die rechte Seite im Bild der Matrix liegt oder nicht. Beispiel 6.11 Unterbestimme lineare Gleichungssysteme 1. Das unterbestimmte System x 1 + x 2 = 6 hat unendlich viele Lösungen. x = (6,0) T, x = (3,3) T und x = (0, 6) T sind drei davon. Die Lösungsmenge beschreibt eine Gerade im R 2. Die Abbildung 6.12 zeigt dies. Die Matrix A hat vollen Rang 1. In MATLAB erhält man die Basislösung x = (6,0) T mit der Anweisung: x=a\b. Die Lösung x = (3, 3) T kleinster Länge erhält man mit x=pinv(a)*b oder mit x=a *inv(a*a )*b. Vergleichen Sie hierzu das Zitat von MOLER am Anfang dieses Kapitels. 2. Das unterbestimmte Gleichungssystem x 1 + 2x 2 + x 3 2x 4 = 1 4x 1 + 2x 2 + 3x 3 + x 4 = 1 hat unendlich viele Lösungen, da die Systemmatrix ( ) A = vollen Rang zwei hat und b daher im Bild von A liegt. Die Lösungen sind x x 2 x 3 = α β x ,

283 6.6 Unterbestimmte lineare Gleichungssysteme x 1 +x 2 6 = x x 1 Abbildung 6.12: Unterbestimmtes System mit unendlich vielen Lösungen wobei α und β reelle Parameter sind. Zwei spezielle Lösungen sind die Basislösung (0.3333, 0,0, ) T und die Lösung kleinster EUKLIDISCHER Länge (0.1448, , , ) T. Die beiden Lösungen erhält man in MATLAB mit A\ bzw. pinv(a)*b. 3. Das folgende unterbestimmte System hat keine Lösung x 1 + 2x 2 + x 3 = 1 2x 1 + 4x 2 + 2x 3 = 3. Das Gleichungssystem beschreibt zwei parallele Ebenen im R 3. A ist rangdefekt mit Rang(A) = 1. In MATLAB erhält man mit der Anweisung x=pinv(a)*b die Lösung x = (0.2333, , ) T kleinster Länge des Ersatzproblems Ax b. Mit x=a\b berechnet man die Basislösung x = (0, 0.7, 0) T des Ersatzproblems Ax b. Es gilt norm(a\b)=0.7 und norm(pinv(a*b))= Zur Lösbarkeit unterbestimmter Gleichungssysteme Obgleich es möglich ist, daß ein unterbestimmtes System keine Lösung hat, so gibt es in der Regel unendlich viele. Generisch gibt es bei einem unterbestimmten linearen Gleichungssystem unendlich viele Lösungen. Der für ein beliebiges lineares System mögliche Fall einer eindeutigen Lösung kann bei unterbestimmten Systemen nicht auftreten. Demnach hat ein unterbestimmtes System entweder keine Lösung oder aber unendlich viele.

284 284 6 Lineare Ausgleichsrechnung Lösungen Genau eine Lösung Keine Lösung Unendlich viele Lösungen Bedingungen dieser Fall kann nicht eintreten b / Bild(A) b Bild(A) Tabelle 6.2: Zur Lösbarkeit unterbestimmter linearer Systeme Die Tabelle 6.2 gibt Bedingungen für die Lösbarkeit unterbestimmter Systeme an. Für m = 1 und n = 2 kann man überbestimmte Systeme wie folgt geometrisch deuten. Eine Gleichung mit zwei unabhängigen Variablen stellt im R 2 eine Gerade dar. Da es nur eine Gleichung gibt, ist jeder Punkt auf der Geraden ein Lösungspunkt des unterbestimmten Systems und daher ist die Lösungsmenge unendlich. Für m = 2 und n = 3 beschreiben die Gleichungen Ebenen im Raum R 3. Je nach Lage gibt es dann unendlich viele Lösungspunkte, nämlich alle Punkte auf der gemeinsamen Geraden, oder keinen Lösungspunkt, wenn die Ebenen parallel verlaufen. Folgende Fragen müssen nun beantwortet werden. Wie geht man vor und welche Lösung wird berechnet, wenn das System unendlich viele Lösungen hat? Wie und was wird berechnet, wenn das System keine Lösung hat? Welche Ersatzaufgabe wird gelöst? Unterbestimmte lineare Systeme in MATLAB Liegt ein unterbestimmtes Gleichungssystem mit unendlich vielen Lösungen vor, so kann man dieses in MATLAB auf zwei Arten lösen: 1. x = A\b. Berechnet wird dann eine Basislösung. 2. x = pinv(a)*b. Berechnet wird dann die Lösung kleinster Länge. Ist das unterbestimmte System unlösbar, so wird die Ersatzaufgabe Minimiere x R n Ax b 2 gelöst. In MATLAB realisiert man das mit x = A\b oder x = pinv(a)*b. Methoden für unterbestimmte Systeme Hat die Matrix A des unterbestimmten Systems Ax = b vollen Rang, das heißt, ist Rang(A) = m, dann ist Ax = b universell lösbar. Für jede rechte Seite b hat das System unendlich viele Lösungen. Wir zeigen nun drei verschiedene Methoden, um die Lösung kleinster Länge zu berechnen. Sie ist die Lösung der Ersatzaufgabe: Minimiere x R n x 2 unter der Nebenbedingung Ax = b Die Abbildung 6.13 zeigt die geometrische Situation für m = 1 und n = 2.

285 6.6 Unterbestimmte lineare Gleichungssysteme 285 Bild(A T ) R n=2 Null(A) 0 x {x Ax = b} Abbildung 6.13: Lösung kleinster Länge Der dargestellte Lösungsvektor x des linearen Systems Ax = b hat die kleinste Länge. Jeder andere Lösungsvektor mit Pfeilspitze auf der Geraden ist länger. Der Lösungsvektor liegt im Bild von A T, das heißt x Bild(A T ). Somit gibt es einen Vektor y mit x = A T y. Außerdem ist x eine Lösung von Ax = b, so daß gilt AA T y = b. Da A vollen Rang hat, ist AA T regulär und damit ist x = A T y = A T (AA T ) 1 b die eindeutige Lösung von Ax = b kleinster Länge bzw. die eindeutige Lösung der Ersatzaufgabe. Die Matrix A + = A T (AA T ) 1 heißt verallgemeinerte Inverse oder Pseudoinverse von A. Da AA T darüber hinaus symmetrisch und positiv definit ist, können wir die CHO- LESKY-Zerlegung verwenden, um die Lösung mit folgendem Algorithmus zu berechnen.

286 286 6 Lineare Ausgleichsrechnung Lösungsalgorithmus für das unterbestimmte System Ax = b, falls A vollen Rang hat. 1. Berechne die CHOLESKY-Faktorisierung von AA T : AA T = R T R. 2. Löse R T z = b nach z. 3. Löse Ry = z nach y. 4. Setze x = A T y. Eine MATLAB-Implementierung zeigt der Function-File function [x] = UntNormal(A, b); 2 % % Zweck: Loest das unterbestimmte System Ax=b mit den 4 % Normalengleichungen. A habe vollen Rang m. 5 % Berechnet Loesung kleinster Laenge. 6 % 7 % Eingabe: A mxn-matrix. 8 % b m-spaltenvektor. 9 % Ausgabe: x n-loesungsvektor. 10 % R = chol(a*a ); 12 z = R \b; 13 y = R\z; 14 x = A *y; Function-File 6.7: Löst Ax = b mit Normalgleichungssystem Beispiel 6.12 Lösung kleinster Länge Wir berechnen die Lösung kleinster Länge des unterbestimmten Systems aus Beispiel AA T = ( ) Die CHOLESKY-Faktorisierung der Matrix AA T ist: ( ) ( AA T = = Löst man das untere Dreieckssystem R T z = b nach z, so erhält man z = ( = ( ) ( ). ). ) = R T R.

287 6.6 Unterbestimmte lineare Gleichungssysteme 287 Löst man das obere Dreieckssystem Ry = z nach y, so ist ( y = Schließlich erhält man die Lösung kleinster Länge durch Matrix-Vektor-Multiplikation x = A T y = ). Lösen eines unterbestimmten Gleichungssystems mit der QR-Zerlegung für den Fall, daß A vollen Rang hat Eine weitere Methode, die Lösung kleinster Länge von Ax = b zu berechnen, erhalten wir mit Hilfe der QR-Zerlegung. Hierzu berechnen wir die reduzierte QR-Zerlegung von A T A T = Q 1 R 1 und setzen diese in die Pseudoinverse ein. Wir erhalten Dies führt auf folgendes Verfahren: x = A + b = Q 1 R 1 ((Q 1 R 1 ) T Q 1 R 1 ) 1 b = Q 1 R T 1 b. Lösungsalgorithmus für das unterbestimmte System Ax = b mit QR-Zerlegung, falls A vollen Rang hat. 1. Berechne die reduzierte QR-Zerlegung von A T : A T = Q 1 R Löse das untere Dreieckssystem R1 T y = b nach y. 3. Setze x = Q 1 y. Eine MATLAB-Implementierung zeigt der Function-File 6.8. Obwohl der \-Operator bei unterbestimmten Systemen eine QR-Zerlegung durchführt, wird nicht die Lösung kleinster Länge berechnet, sondern eine Basislösung. Beispiel 6.13 Lösung kleinster Länge mit QR-Zerlegung Wir berechnen die Lösung kleinster Länge des unterbestimmten Systems aus Beispiel Die reduzierte QR-Zerlegung von A T nach HOUSEHOLDER ergibt: A T = = Lösen wir das untere Dreieckssystem R1 T y = b nach y, so erhalten wir ( ) y = ( ) = Q 1R 1.

288 288 6 Lineare Ausgleichsrechnung 1 function [x] = UntQR(A, b); 2 % % Zweck: Loest das unterbestimmte System Ax=b mit 4 % QR-Zerlegung. A habe vollen Rang m. 5 % Berechnet Loesung kleinster Laenge. 6 % 7 % Eingabe: A mxn-matrix. 8 % b m-spaltenvektor. 9 % Ausgabe: x n-loesungsvektor. 10 % [Q1,R1] = qr(a,0); 12 y = R1 \b; 13 x = Q1*y; Function-File 6.8: Löst Ax = b mit QR-Zerlegung und die Lösung schließlich durch Matrix-Vektor-Multiplikation x = Q 1y = Lösen eines unterbestimmten Gleichungssystems mit der SVD-Zerlegung für den Fall, daß A vollen Rang hat Mit der Singulärwertzerlegung von A A = USV T erhalten wir eine weitere Methode, um die Lösung kleinster Länge eines unterbestimmten Systems zu berechnen. Die Pseudoinverse von A ist Damit schreibt sich die Lösung als A + = V S + U T. x = A + b = V S + U T b. Die Lösung erhalten wir mit folgendem Verfahren.

289 6.6 Unterbestimmte lineare Gleichungssysteme 289 Lösungsalgorithmus für das unterbestimmte System Ax = b mit SVD-Zerlegung, falls A vollen Rang hat. 1. Berechne die SVD-Zerlegung von A: A = U 1 S 1 V T. 2. Löse das Diagonalsystem S 1 y = U1 T b nach y. 3. Setze x = V y. Eine MATLAB-Implementierung zeigt der Function-File 6.9. Mit dieser Methode lassen sich 1 function [x] = UntSVD(A, b); 2 % % Zweck: Loest das unterbestimmte System Ax=b mit 4 % SVD-Zerlegung. A habe vollen Rang m. 5 % Berechnet Loesung kleinster Laenge. 6 % 7 % Eingabe: A mxn-matrix. 8 % b m-spaltenvektor. 9 % Ausgabe: x n-loesungsvektor. 10 % [U1,S1,V] = svd(a,0); 12 y = S1\(U1 *b); 13 x = V*y; Function-File 6.9: Löst Ax = b mit SVD-Zerlegung auch quadratische Systeme lösen. Der Aufwand ist jedoch größer als beim QR-Verfahren und noch größer im Vergleich zum GAUSS-Verfahren. Beispiel 6.14 Lösung kleinster Länge mit Singulärwertzerlegung Wir berechnen die Lösung kleinster Länge des unterbestimmten Systems aus Beispiel Die reduzierte Singulärwertzerlegung von A ist: A = = ( ) ( ) ( ) und es ist U T b = ( ) ( 1 1 ) = ( ).

290 290 6 Lineare Ausgleichsrechnung Löst man das Diagonalsystem Sy = U T b nach y, so erhält man y = Die Lösung berechnet sich schließlich durch Matrix-Vektor-Multiplikation: x = V y = Rangdefekte Probleme = Haben wir ein überbestimmtes Gleichungssystem zugrunde gelegt und die dazugehörige Ausgleichsaufgabe betrachtet, so haben wir bisher stets vorausgesetzt, daß die Matrix A vollen Rang hat. In diesem Fall hat das überbestimmte System keine Lösung; die Lösung der Ersatzaufgabe ist jedoch eindeutig. Ist A nun rangdefekt, das heißt, die Spalten von A sind linear abhängig, dann existiert zwar die QR-Zerlegung, aber die obere Dreiecksmatrix R ist singulär, wie auch die Matrix A T A. Somit ist die lineare Ausgleichsaufgabe nicht mehr eindeutig lösbar; es gibt unendlich viele Lösungen x von Ax b. In der Praxis liegt dieser Fall vor, wenn das Experiment nur unzureichend geplant wurde, unvollständige Daten vorliegen oder kein gutes Modell entworfen worden ist. Will man etwa Daten an eine Funktion der Form f(t) = a exp(t)+b exp( b)+c cosh(t) anpassen, so tritt dieser Fall ein, da bekanntlich cosh(t) = 1/2 (exp(t) + exp( t)). Die Ansatzfunktionen sind nicht mehr sachgemäß gewählt. Liegt nun ein solcher rangdefekter Fall vor, so berechnet man aus den unendlich vielen Ausgleichslösungen denjenigen Vektor mit kleinster Länge. Dies kann man wie folgt ausdrücken: Minimiere x R n x 2 unter der Nebenbedingung A T Ax = A T b oder gleichbedeutend Minimiere x X R n x 2 mit X = {x min Ax b } Die Lösung obiger Aufgabenstellung kann durch eine QR-Zerlegung mit Spaltenpivotisierung oder durch eine Singulärwertzerlegung (SVD) gefunden werden. Beachten Sie, daß unterbestimmte Gleichungssysteme generisch unendlich viele Lösungen haben und somit analog behandelt werden können; man sucht nach dem Lösungsvektor kleinster Länge. In der Praxis ist der Rang einer Matrix nicht immer klar zu bestimmen. Man verwendet eine relative Toleranzgröße, um festzustellen, ob die lineare Ausgleichsaufgabe rangdefekt ist, analog dem Vorgehen bei quadratischen Gleichungssystemen zum Aufdecken der Fast- Singularität der Systemmatrix. Ist die lineare Ausgleichsaufgabe nahezu rangdefekt, so ist die Lösung sensitiv bezüglich Störungen in den Eingangsdaten..

291 6.7 Rangdefekte Probleme 291 Beispiel 6.15 Rangdefekte Probleme Aufgrund von Rundungs- und Datenfehlern stößt man in der Praxis fast nie auf lineare Gleichungssysteme mit singulären Matrizen, wohl aber auf fast-singuläre Matrizen, das heißt, solche, die in der Nähe einer singulären Matrix liegen. Der Abstand einer Matrix von der nächstgelegenen singulären Matrix bzgl. der EUKLIDschen Norm ist nichts anderes als der kleinste Singulärwert von A. Fast-singuläre Matrizen sind schlecht konditioniert, das heißt, kleine Störungen in den Daten führen zu unverhältnismäßig großen Änderungen im Resultat. Das Gleichungssystem hat bei exakter Rechnung unendlich viele Lösungen: = x 1 x 2 x 3 = t t t Die Lösung kleinster Länge ist Eine kleine Störung des Gleichungssystems bewirkt, daß dieses eine eindeutige Lösung besitzt: x x 2 = x 3 0 hat die Lösung Eine Störung ähnlicher Größenordnung in den Daten liefert dagegen ein völlig anderes Ergebnis: x 1 x 2 x die Singulärwertzerlegung berechnen: = UΣV T, U = V T = Σ = Die Lösung des Problems Ax = b + b läßt sich in der Form = Die Zusammenhänge werden klarer, wenn wir x = V Σ 1 U T (b + b) angeben; liegt die Störung b in Richtung des Links-Singulärvektors u 3 zum kleinsten Singulärwert, das heißt, gilt b = α u 3, so ändert sich das Ergebnis um x = α σ 3 v 3..

292 292 6 Lineare Ausgleichsrechnung Kleine Datenfehler führen zu großen Änderungen im Resultat; im vorliegenden Beispiel gilt b ± Daher ist mit Änderungen im Resultat ± x = = ± zu rechnen. Die Unsicherheit im Resultat läßt sich beseitigen, wenn man in der Singulärwertzerlegung von A die kleinen Singulärwerte Null setzt und anstelle des schlecht konditionierten linearen Gleichungssystems das gestörte Ausgleichsproblem löst. Also ist: x = V Σ + U T b = = Die Unsicherheit in dieser Lösung bedingt durch die Unterdrückung des kleinstens Singulärwertes ist in /5 Richtung von v 3 = ; dieser Vektor ist eine Näherung für den Einheitsvektor 3 1/5, der den Kern der ungestörten Matrix aufspannt. Die Lösung des schlecht konditionierten Gleichungssystems kann man daher in der Form t , t R, schreiben. Hat mein eine Vorinformation über die Lösung x, z.b., daß diese in der Nähe des Vektors liegen müßte, so kann man aus dieser Zusatzinformation den optimalen Parameter t bestimmen. Hat eine m n-matrix A den Rang k < n, dann ist die Matrix R singulär und obige QR-Methode zur Lösung einer linearen Ausgleichsaufgabe kann nicht verwendet werden. Glücklicherweise kann man aber eine QR-Zerlegung mit Spaltenpivotisierung durchführen, die es ermöglicht, die Ausgleichsaufgabe zu lösen. Die HOUSEHOLDER-Methode mit Spaltenpivotisierung ergibt Q T AP = ( R11 R wobei P eine Permutationsmatrix, R 11 eine k k reguläre obere Dreiecksmatrix und R 12 eine k (n k)-matrix ist. Diese Faktorisierung kann man nun verwenden, um rangdefekte Ausgleichsaufgaben mit Hilfe der QR-Zerlegung zu lösen. Hierzu setzen wir y = P T x ), 4 1 3

293 6.7 Rangdefekte Probleme 293 und Damit gilt: ( c d ) = Q T b. Ax b 2 2 = QT APP T x Q T b 2 2 ( )( R11 R = 12 y1 0 0 y 2 ) ( c d = R 11 y 1 + R 12 y 2 c d 2 2. Um nun Ax b 2 2 zu minimieren, müssen wir y so bestimmen, daß gilt. Dann erhalten wir für das Residuum: R 11 y 1 = c R 12 y 2 r 2 = Ax b 2 = d 2. Diese Beobachtungen führen uns auf folgenden Algorithmus: ) 2 2 Lösungsalgorithmus für die lineare Ausgleichsaufgabe Ax b mit QR-Zerlegung, falls A rangdefekt ist. 1. Berechne die QR-Zerlegung von A mit Spaltenpermutation: ( ) Q T R11 R AP = Setze ( c d ) = Q T b. 3. Wähle für y 2 einen beliebigen Vektor entsprechender Länge. 4. Löse das reguläre obere Dreieckssystem R 11 y 1 = c R 12 y 2 nach y Berechne x = Py. Daß die lineare Ausgleichsaufgabe unendlich viele Lösungen hat, äußert sich darin, daß der Vektor y 2 beliebig gewählt werden darf. Setzt man y 2 gleich dem Nullvektor, so spricht man von einer Basislösung. n k Komponenten des Lösungsvektors sind dann Null. So zu verfahren ist gerade bei Parameteridentifikationsproblemen vorteilhaft, denn dadurch werden Komponenten des Modells ignoriert, die überflüssig oder redundant sind 13. Im Fall R 12 = 0 liegt die Lösung kleinster Länge vor. 13 In MATLAB wird mit dem \-Operator eine Basislösung berechnet.

294 294 6 Lineare Ausgleichsrechnung Zur Berechnung des Ranges einer Matrix Der Rang einer Matrix ist gleich der Anzahl der von Null verschiedenen singulären Werte. Mit anderen Worten: Der Rang einer Matrix wird durch die Singulärwertzerlegung (SVD) aufgedeckt. Dies ist richtig, solange man ohne Rundungsfehler rechnet und die Matrix frei von Datenfehlern ist. Unglücklicherweise ist dies aber in der Praxis oftmals nicht erfüllt. Singuläre Werte müssen numerisch bestimmt werden und sind daher nur näherungsweise gegeben. Da die berechneten singulären Werte nur näherungsweise gegeben sind, tritt nun gegebenenfalls das Problem auf, zu entscheiden, ob ein kleiner singulärer Wert Null ist oder (noch) nicht. Es muß also eine Toleranzgröße ǫ > 0 gefunden werden, die die Entscheidung steuert. Daher sagt man, eine Matrix A habe den numerischen Rang k, wenn für ihre singulären Werte gilt: s 1 s 2 s k ǫ > s k+1 Demnach hat eine Matrix A den numerischen Rang k, wenn sie k große und sonst nur kleine singuläre Werte hat. Beispiel 6.16 Numerischer Rang, erkennbare Lücke Die Matrix 1/3 1/3 2/3 2/3 2/3 4/3 A = 1/3 2/3 3/3 2/5 2/5 4/5 3/5 1/5 4/5 hat den Rang 2, denn die dritte Spalte ist die Summe der beiden ersten. Wir berechnen die singulären Werte mit svd. Da die Zahlen mit ungefähr 16-stelliger Genauigkeit gespeichert werden können, ist die Größenordnung der Störung in den Daten ungefähr Hinzu kommen Rundungsfehler beim Berechnen mittels svd, so daß ǫ = gewählt werden kann. Für die singulären Werte ergibt sich» svd(a) ans = e e e-017 also s , s und s Da s 1 s 2 ǫ > s 3 hat A den numerischen Rang 2. Hat jedoch die Menge der singulären Werte zwischen großen und kleinen Werten keine erkennbare Lücke, so ist unmöglich, der Matrix einen sinnvollen numerischen Rang zuzuordnen. Für weitere Einzelheiten und mathematische Beweise verweisen wir den Leser auf [109]. 6.8 Nocheinmal: Der MATLAB-Operator \ Wir haben nun alle Problemstellungen besprochen, die man mit dem \-Operator in MATLAB berechnen kann. Dieser beinhaltet verschiedene Algorithmen zur Lösung linearer Systeme Ax = b. Folgende Fälle werden durch die automatische Diagnose der Koeffizientenmatrix A erkannt und deshalb effizient gelöst:

295 6.8 Nocheinmal: Der MATLAB-Operator \ 295 Quadratische reguläre Matrizen Rechteckige überbestimmte Systeme Rechteckige unterbestimmte Systeme Symmetrische positiv definite Matrizen Dreiecksmatrizen und Permutationen von Dreiecksmatrizen Am häufigsten ist eine quadratische Matrix A und ein Vektor b gegeben. Ist A regulär, dann findet MATLAB die Lösung x = A\b mit dem GAUSS-Verfahren. Ist A singulär, so liefert MATLAB eine Warnung bei fast Singularität und eine Fehlermeldung, wenn exakte Singularität erkannt wurde. Ist das System überbestimmt, so löst der \-Operator die lineare Ausgleichsaufgabe Minimiere x R n Ax b 2 mit Hilfe der QR-Zerlegung mit Spaltenpivotierung. Ist A rangdefekt, so gibt es keine eindeutige Lösung, MATLAB gibt eine Warnung aus und erzeugt eine Basislösung. Ist der Rang von A voll, so gilt: x=a\b=pinv(a)*b. Ist das System unterbestimmt, so berechnet der \-Operator eine Basislösung unter der Bedingung Ax = b oder Ax b, je nachdem, ob der Rang von A voll oder defekt ist. Im Fall vollen Ranges ist die Basislösung die Lösung kleinster Länge von x mit Ax = b, das heißt, es gilt: x=a\b=pinv(a)*b. Zusammenfassung: Überbestimmte lineare Gleichungssysteme Ist A R m n und ist m > n, so liegt ein überbestimmtes Gleichungssystem vor. 1. Hat A vollen Rang, das heißt Rang(A) = n und (a) ist b Bild(A), dann hat Ax = b genau eine Lösung. (b) ist b / Bild(A), dann hat Ax b genau eine Lösung. Weiterhin gilt im Fall, daß A vollen Rang n hat: (a) Ax = b ist nicht universell lösbar. (b) Die Ersatzaufgabe ist eindeutig lösbar. Minimiere Ax b 2 x R n (c) x = A + b = (A T A) 1 A T b ist die eindeutige Lösung der Ersatzaufgabe. (d) Die Spaltenvektoren von A bilden eine Basis des R n. (e) Bild(A T ) = R n und Null(A) = {0}. (f) Bild(A) = R n und Null(A T ) = R m n.

296 296 6 Lineare Ausgleichsrechnung (g) Der Spaltenraum von A hat die Dimension n. (h) Der Nullraum von A T hat die Dimension m n. (i) A = QR, wobei Q orthogonal und R regulär sind. 2. Ist A rangdefekt, das heißt Rang(A) < n und (a) ist b Bild(A), dann hat Ax = b unendlich viele Lösungen. MATLAB: x=a\b oder pinv(a)*b (b) ist b / Bild(A), dann hat Ax b unendlich viele Lösungen. MATLAB: x=pinv(a)*b ist Lösung von Ax b mit kleinster Länge und x=a\b ist Basislösung von Ax b. Weiterhin gilt im rangdefekten Fall: (a) Ax = b ist nicht universell lösbar. (b) Die Ersatzaufgabe hat unendlich viele Lösungen. Minimiere Ax b 2 x R n (c) x = A + b + y mit y Null(A) sind alle Lösungen der Ersatzaufgabe. Andere Schreibweise: Lösungsmenge = A + b + Null(A). (d) x = A + b ist die Lösung kleinster Länge der Ersatzaufgabe. ( ) R S (e) PA = Q. 0 0 (f) Über die QR-Zerlegung mit Spaltenpermutationen erhält man zum Beispiel eine Basislösung. Auch andere Lösungen sind möglich. Ax = b A\b pinv(a)*b inv(a *A)*A *b keine Lösung und voller Rang eindeutige Lösung eindeutige Lösung eindeutige Lösung keine Lösung und rangdefekt Basislösung kleinste Länge geht nicht eindeutige Lösung eindeutige Lösung eindeutige Lösung eindeutige Lösung unendlich viele Lösungen Basislösung kleinste Länge geht nicht Tabelle 6.3: Zusammenfassung: Überbestimmte Systeme Zusammenfassung: Unterbestimmte lineare Gleichungssysteme Ist A R m n und ist m < n, so liegt ein unterbestimmtes Gleichungssystem vor. 1. Hat A vollen Rang, das heißt Rang(A) = m, dann ist notwendigerweise b Bild(A) erfüllt und Ax = b hat unendlich viele Lösungen. 2. Ax = b ist universell lösbar.

297 6.9 Weitere Bemerkungen und Hinweise Ax = b kann nicht eindeutig lösbar sein und hat daher unendlich viele Lösungen. 4. x = A + b ist die Lösung kleinster Länge von Ax = b. 5. Die Pseudoinverse ist gegeben durch: A + = A T (AA T ) x = A + b+y mit y Null(A) sind alle Lösungen von Ax = b. Andere Schreibweise: Lösungsmenge = A + b + Null(A). 7. Es gilt auch: x = A + b + (I A + A)y mit beliebigem Vektor y R m. 8. Bild(A) = R m und Null(A T ) = {0}. 9. Die Zeilen von A bilden eine Basis des R m. 10. Die Ersatzaufgabe Minimiere x R n x 2 unter der Nebenbedingung Ax = b hat genau eine Lösung die Lösung kleinster EUKLIDISCHER Länge. Diese Ersatzaufgabe wird in MATLAB mit pinv(a)*b gelöst. 11. Die MATLAB-Anweisung x=a\b liefert eine Basislösung. 12. Ist A rangdefekt, das heißt Rang(A) < m und (a) ist b Bild(A), dann hat Ax = b unendlich viele Lösungen. (b) ist b / Bild(A), dann hat Ax b unendlich viele Lösungen. Ax = b A\b pinv(a)*b A *inv(a*a )*b unendlich viele Lösungen Basislösung von Ax = b kleinste Länge von Ax = b kleinste Länge von Ax = b keine Lösung Basislösung von Ax b kleinste Länge von Ax b geht nicht Tabelle 6.4: Zusammenfassung: Unterbestimmte Systeme 6.9 Weitere Bemerkungen und Hinweise Wem ist die Methode der kleinsten Quadrate zuzuschreiben? GAUSS erfand die Methode um 1790 und LEGENDRE veröffentlichte sie um HOUSEHOLDER-Transformationen gehen auf das Jahr 1950 zurück. Lineare Ausgleichsprobleme treten in erster Linie bei Parameteridentifikations- bzw. bei diskreten linearen Approximationsproblemen auf. In folgenden Büchern findet man Einführungen und weitere Hinweise über lineare Ausgleichsprobleme: [8], [12], [14], [37], [40], [101], [102], [110] und [116]. Die Kondition des linearen Ausgleichsproblems wird in [103] behandelt.

298 298 6 Lineare Ausgleichsrechnung Lineare Ausgleichsaufgaben sind bereits einfache Optimierungsaufgaben, was sich schon an der Schreibweise ablesen läßt. Aus Sicht der Optimierungstheorie handelt es sich um konvexe quadratische Optimierungsaufgaben, da die Zielfunktion konvex und quadratisch ist. Die Lösungen sind dann stets globale Minima. Den interessierten Leser verweisen wir auf [32] und [71], wo auch nichtlineare Ausgleichsaufgaben besprochen werden. Wir haben drei Methoden zur Lösung linearer Ausgleichsaufgaben kennengelernt: 1. Über die Normalgleichungen 2. Über QR-Faktorisierungen 3. Über die Singulärwertzerlegung Welche Methode soll man wählen? Falls die Ausführungszeit das einzige Kriterium ist, so empfiehlt sich die Normalgleichungsmethode. Man beachte aber, daß dieses Verfahren nicht immer stabil ist. Das Ausgleichsproblem über die QR-Methode zu lösen ist das Standardverfahren und zum täglichen Gebrauch zu empfehlen. Ist A rangdefekt, so ist auch dieses Verfahren nicht ideal stabil und es gibt gute Gründe zur Singulärwertzerlegung überzugehen. Wählt man zur Minimierung von Ax b eine andere Norm, so müssen zur Lösung andere Verfahren eingesetzt werden. Für die 1- und -Norm kann man die Äquivalenz zu einem linearen Optimierungsproblem nachweisen. Löst man das Problem Ax b in der 1- Norm, so zeigt sich, daß die Lösung gegenüber Ausreißern robust ist, während die -Norm aus der Reihe tanzende Meßpunkte sehr stark berücksichtigt. Eine QR-Faktorisierung läßt sich auch mittels GIVENS-Drehungen anstelle von HOU- SEHOLDER-Spiegelungen erzeugen. Mit ihnen kann eine spezielle Struktur von A wie etwa Bandgestalt oder allgemeine schwache Besetztheit besser ausgenutzt werden. Für weitere Einzelheiten verweisen wir auf [57]. GIVENS-Transformationen gehen auf das Jahr 1950 zurück. Wir haben zwar über die Existenz und Eigenschaften der Singulärwertzerlegung (SVD) einer Matrix geschrieben, aber nichts dazu, wie man sie berechnet. Vielmehr haben wir die MATLAB-Funktion svd verwendet. Die besten Methoden die Singulärwertzerlegung zu berechnen, sind Varianten der Algorithmen zur Eigenwertberechnung, siehe Kapitel 7. Für eine ausführliche Darstellung verweisen wir den Leser auf die Literatur zur numerischen linearen Algebra, insbesondere auf das Kapitel 31 in [103]. Wenn die Parameter x zusätzlich linearen Gleichungsbedingungen genügen müssen, enstehen lineare Ausgleichsaufgaben mit Gleichungsnebenbedingungen der Form Minimiere x R n Ax b 2 2 unter den Nebenbedingungen Cx = d Sowohl Normalgleichungs- als auch Orthogonalisierungsverfahren lassen sich auf solche Aufgaben erweitern. Komplizierter ist die Berücksichtigung von Ungleichungsnebenbedingungen. Hierzu verweisen wir auf [4] und [61]. Die MATLAB-Funktion lsqlin aus der Optimization Toolbox löst solche restringierten Probleme.

299 6.9 Weitere Bemerkungen und Hinweise 299 Wenn auch die Elemente der Matrix A nur als fehlerbehaftete Beobachtungen vorliegen, sucht man neben x auch gemittelte Werte für A. Solche Probleme bezeichnet man als totale Ausgleichsprobleme. Den interessierten Leser verweisen wir auf [52] und [34]. Angenommen wir approximieren Meßwerte durch eine Gerade und das Experiment produziert pro Zeiteinheit weitere Daten. Jeder neue Datenpunkt bedeutet dann eine Änderung der Ausgleichsgeraden. Um diese Realtime-Berechnungen effizient durchführen zu können, muß man sich Gedanken über rekursive Ausgleichsrechnung machen. Für weitere Einzelheiten verweisen wir auf [100]. FORTRAN-Implementierungen der linearen Ausgleichsaufgabe findet man zum Beispiel in LAPACK, siehe [2]. Wir haben die Singulärwertzerlegung mehrfach verwendet, aber nicht erläutert, wie man sie berechnet. Hierzu verweisen wir den Leser auf das Buch [34]. Rangdefekte Ausgleichsprobleme werden ausführlich im Buch [39] besprochen. Sensitivitätsuntersuchungen bei linearen Ausgleichsproblemen werden in den Büchern [96] und [103] durchgeführt. Warum wird ein quadratisches lineares Gleichungssystem meist mit einer LU-Zerlegung gelöst? Der Grund liegt im Rechenaufwand. Beim GAUSS-Verfahren hat man einen Aufwand von ungefähr 2 3 m3 flops, während man mit einer QR-Zerlegung ungefähr 4 3 m3 flops benötigt. Dieser Faktor 2 ist sicher ein Grund, weshalb man LU-Zerlegungen öfter als QR-Zerlegungen einsetzt, um lineare Gleichungssysteme zu lösen. Außerdem ist das GAUSS-Verfahren viel länger bekannt als das QR-Verfahren. Die MATLAB-Funktionen aus der Tabelle 6.5 sind in diesem Kapitel relevant. Funktion Beschreibung \ Löst lineare Systeme inv(a) Invertiert quadratische Matrix A pinv Berechnet die Pseudoinverse qr Berechnet QR-Zerlegung svd Berechnet Singulärwertzerlegung polyfit Datenausgleich mit Polynom lscov Löst Ausgleichsaufgabe Tabelle 6.5: Relevante Funktionen für dieses Kapitel Die generischen Fälle linearer Gleichungssysteme sind diejenigen, in denen die Matrix vollen Rang hat. Wir fassen die generischen Fälle linearer Gleichungssysteme zusammen: Ist das lineare Gleichungssystem quadratisch, dann hat Ax = b genau eine Lösung. Mathematische Notation: x = A 1 b. MATLAB: x=a\b=pinv(a)*b=inv(a)*b Ist das lineare Gleichungssystem überbestimmt, dann hat Ax = b keine Lösung, aber Ax b genau eine. Mathematische Notation: x = A + b = (A T A) 1 A T b. MATLAB: x=a\b=pinv(a)*b=inv(a *A)*A *b

300 300 6 Lineare Ausgleichsrechnung Ist das lineare Gleichungssystem unterbestimmt, dann hat Ax = b unendlich viele Lösungen. Mathematische Notation für die kleinste Quadratelösung: x = A + b = A T (AA T ) 1 b. MATLAB: x=a\b liefert Basislösung und x=pinv(a)*b kleinste Quadratelösung. Auf der beiliegenden CD befindet sich der Script-File Linsys.m. Dieser beinhaltet Beispiele, die in diesem Kapitel besprochen worden sind Übungsaufgaben 6.1 WAHR oder FALSCH: Sind vier oder mehr Datenpunkte gegeben, dann ist das Problem, diese durch eine Gerade auszugleichen, eine lineare Ausgleichsaufgabe; die Datenpunkte durch eine Parabel anzunähern dagegen ist eine nichtlineare Ausgleichsaufgabe. 6.2 WAHR oder FALSCH: Im Lösungspunkt der Ausgleichsaufgabe Ax b steht der Residuenvektor r = Ax b senkrecht auf dem Bildraum von A. 6.3 WAHR oder FALSCH: Eine (überbestimmte) lineare Ausgleichsaufgabe Ax b hat immer genau eine Lösung x, die den Residuenvektor r = Ax b in der EUKLI- DISCHEN Norm minimiert. 6.4 WAHR oder FALSCH: Falls b im Bildraum von A liegt, so ist der Residuenvektor r gleich dem Nullvektor. 6.5 WAHR oder FALSCH: Das Produkt einer HOUSEHOLDER-Matrix und einer GIVENS- Matrix ist immer orthogonal. 6.6 WAHR oder FALSCH: Ist Q eine n n- HOUSEHOLDER-Matrix und x ein n-vektor, so sind für ein k < n die letzten k- Komponenten des Vektors Qx gleich null. 6.7 Welche der nachfolgenden Situationen sind bei einer linearen Ausgleichsaufgabe Ax b möglich, wenn A eine m n-matrix und Rang(A) < n gilt? (a) Es gibt keine Lösung. (b) Es gibt genau eine Lösung. (c) Es gibt eine Lösung, die ist aber nicht eindeutig. 6.8 Zeigen Sie: Ist A R m n, dann gilt Bild(A T A) = Bild(A T ). Das Ergebnis zeigt, daß das Normalgleichungssystem A T Ax = A T b immer lösbar ist. 6.9 Berechnen Sie die Ausgleichslösung des folgenden Systems: x 1 + x 2 = 3 2x 1 3x 2 = 1 0x 1 + 0x 2 = Berechnen Sie alle Ausgleichslösungen des Systems Ax = b, mit A = 2 4,b = Berechnen Sie in MATLAB mit dem \- Operator die Lösung von Ax = b, mit A = ,b = Ändern Sie nun b in: b =

301 6.10 Übungsaufgaben 301 und lösen Sie mit dem \-Operator das System Ax = b. Was beobachten Sie? Begründen Sie! 6.12 Gegeben sind die Datenpaare { ( i 1 (t i,b i ) = 10,0) für i = 1,...,10 (1,1) für i = 11. Gesucht ist eine horizontale Gerade, welche die 11 Punkte bestmöglichst in den Normen 1,2 und approximiert Gegeben ist b = (b 1,...,b m ) T und A = (1,...,1) T in unserer Standardnotation. (a) Lösen Sie A T Ax = A T b und zeigen Sie, daß x der Mittelwert der Komponenten von b ist. (b) Berechnen Sie den Fehlervektor r, die Varianz r 2 und die Standardabweichung r. (c) Zeichnen Sie für b = (1,2,6) T die horizontale Ausgleichsgerade. Welche geometrische Bedeutung hat r? 6.14 Angenommen wir kennen den Mittelwert x 99 von 99 Zahlen b 1,,b 99. Wie kann man möglichst schnell den Mittelwert x 100 berechnen, wenn eine Zahl b 100 hinzukommt? Die Idee der rekursiven Ausgleichsrechnung besteht darin, das Aufsummieren der 100 Zahlen zu vermeiden. Wie lautet der Koeffizient α in der Gleichung b α x 99 = (b b 100 )? 6.15 Wir betrachten die beiden Gleichungen ax 1 = b und cx 1 = d, wobei der Parameter a von Null verschieden ist. Unter welcher Bedingung ist das Gleichungssystem konsistent? 6.16 Gegeben ist die Gleichung ax 1 +bx 2 = c, wobei a und b nicht Null sind. (a) Wie lautet die Gleichung der Geraden durch den Ursprung, die zur Geraden ax 1 + bx 2 = c senkrecht steht? (b) Wie lautet die Lösung kleinster Länge zu ax 1 + bx 2 = c? 6.17 Unter welcher Bedingung ist die Gleichung ax 1 + bx 2 = c inkonsistent? 6.18 Berechnen Sie zu folgenden Daten ein Ausgleichspolynom zweiten Grades. Berechnen Sie das Polynom auf drei Arten: Mit dem \-Operator, mit pinv und mit polyfit. Zeichen Sie die Lösungsparabel und die Datenpunkte. t i b i Das Lösungspolynom ist t + 1.4t 2. Die Lösung ist x = (0.5,1.9) T Es soll eine Gerade durch die vier Punkte der Tabelle f(t,x) = x 1 + x 2 t t i b i gelegt werden. Zeichnen Sie die Ausgleichsgerade und die Datenpunkte.

302 302 6 Lineare Ausgleichsrechnung 6.20 Es soll eine Ellipse x 1 t 2 + x 2 y 2 = 1 durch die vier Punkte t i b i gelegt werden. Formulieren Sie das überbestimmte System bzw. die Ausgleichsaufgabe und berechnen Sie x 1 und x 2. Die Lösung ist x = (0.6364,0.1818) T. Zeichnen Sie die Datenpunkte und die Ellipse Die Messung des zeitlichen Verlaufs der Abkühlung einer Flüssigkeit ergebe folgende Meßpunkte: t i in min T i in C Als Näherung soll eine Gerade durch die Meßpunkte gelegt werden. Zeichnen Sie die Daten und die Näherungsgerade! Die Lösungsgerade hat die Darstellung t Die Datenpunkte sollen an eine Funktion der Form t i b i f(t,x) = x 1 + x 2 t + x 3 cos(t) angepaßt werden. Die Lösungsparameter sind x 1 = , x 2 = und x 3 = Aus den gemessenen Molekulargewichten NO N 2 O NO 2 N 2 O 3 N 2 O 5 N 2 O sollen die Atomgewichte von Stickstoff und Sauerstoff bestimmt werden Aus einer Tabelle der Gewichtszunahme von Säuglingen Woche kg soll eine möglichst gute Schätzung für die mittlere Gewichtszunahme je Woche berechnet werden.

303 6.10 Übungsaufgaben Aus verschiedenen Messungen des spezifischen Widerstandes von NaCl-Lösungen unterschiedlicher Konzentration bei jeweils 18 [C] Mol/cm Ω cm soll die Gesetzmäßigkeit bestimmt werden Die Abnahme einer radioaktiven Substanz kann durch eine Gesetzmäßigkeit der Art y(t) = y(0)e αt beschrieben werden; die Halbwertzeit ist diejenige Zeit T, bei der y(t) = 1 2y(0) gilt. Bestimmen Sie die Halbwertzeit eines Elements aus den Daten t i b i Lösungshinweis: Die logarithmierten Daten genügen der linearen Beziehung ln(y i ) = ln(y 0 ) + αt i. Anmerkung: Die hier vorgeschlagene Vorgehensweise gleicht die logarithmierten Fehler aus; das eigentlich zu lösende Ausgleichsproblem ist aber nichtlinear in den gesuchten Parametern: min α,γ 5 ( yi γ e αt ) 2 i. k=1 Solche nichtlinearen Minimierungsaufgaben müssen in der Regel iterativ gelöst werden; die hier vorgeschlagene Methode ist z.b. nützlich, um einen Startwert für diese Iterationsverfahren zu erhalten Mehrere Bodenstationen empfangen bei einer bestimmten Ausrichtung die Signale eines Satelliten, der sich auf einer annähernd elliptischen Bahn um die Erde bewegt. In einem geeignet skalierten Koordinatensystem wird die Position des Satelliten durch die folgenden Winkel/Abstandsdaten gemessen: φ r [LE] Zu bestimmen ist aus diesen Daten die Gleichung der Ellipse r = p 1 ecos(φ), welche die Bahn des Satelliten in erster Näherung beschreibt.

304 304 6 Lineare Ausgleichsrechnung 6.28 Bestimmen Sie unter allen Lösungsvektoren des linearen Gleichungssystems x 1 + 2x 2 + x 4 = 3 x 1 + 7x 2 + 4x 3 + 2x 4 = 18 3x x 2 + 4x 3 + x 4 = 30 denjenigen, der die kleinste Länge hat, und denjenigen, der am nächsten beim Vektor liegt Das Gleichungssystem 1.01x 1 + 2x 2 + x 4 = 3 x 1 + 7x x 3 + 2x 4 = x x 2 + 4x 3 + x 4 = x x x 3 + 3x 4 = ist inkonsistent, das heißt, es hat keine Lösung. Es gibt jedoch ein lineares Gleichungssystem mit unendlich vielen Lösungen, das in der Nähe dieses Gleichungssystems liegt. Verwenden Sie die Singulärwertzerlegung, um die Lösung minimaler Länge dieses Gleichungssystems zu berechnen Berechnen Sie einen Kreis in der Ebene, der möglichst nahe an den Punkten (1, 1), (4,0), (0,4), (5,6), (2,6), (5,1) und (3,0.5) liegt Die Datenpunkte t i b i sollen durch eine Regressionsgerade ausgeglichen werden. Man vergleiche verschiedene Berechnungsmethoden.

305 7 Eigenwertprobleme Mathematics is not formulas, or computations, or even proofs, but ideas. GILBERT STRANG 7.1 Eigenwerte und Eigenvektoren Die Standardeigenwertaufgabe ist folgende: Die Eigenwertaufgabe Gegeben ist eine n n-matrix A. Finde eine Zahl λ und einen Vektor x 0, so daß gilt: Ax = λx Solch eine Zahl λ nennt man Eigenwert und x ist ein dazugehöriger Eigenvektor 1. Zusätzlich zu einem rechten Eigenvektor wie eben definiert spricht man von einem linken Eigenvektor y, wenn y T A = λy T gilt. Da ein linker Eigenvektor von A ein rechter Eigenvektor von A T ist, genügt es, obige Aufgabe zu untersuchen. Die Menge aller Eigenwerte einer Matrix A heißt das Spektrum von A, und wir wollen es mit λ(a) bezeichnen. Der Betrag des betragsmäßig größten Eigenwerts max{ λ : λ λ(a)} heißt der Spektralradius von A und wird mit ρ(a) bezeichnet. Ein Eigenvektor einer Matrix bestimmt eine Richtung, in der die Wirkung der Matrix besonders einfach ist: Jeder Vektor, der in Eigenvektorrichtung zeigt, wird von der Matrix gedehnt oder gestaucht und der Dehnungs- bzw. Stauchungsfaktor ist durch den dazugehörigen Eigenwert λ gegeben. Damit stellen Eigenwerte und Eigenvektoren eine Möglichkeit bereit, um allgemeine lineare Transformationen beschrieben durch eine Matrix in einfachere zu zerlegen. Eigenwertaufgaben treten in vielen Bereichen der Technik und Wissenschaft auf. Viele interessante physikalische Phänomene wie zum Beispiel Schwingung, Resonanz, Stabilität, quantenmechanische Energiezustände haben etwas mit Eigenwerten und Eigenvektoren zu tun. Auch bei der Analyse numerischer Methoden und bei Stabilitätsuntersuchungen von Differentialgleichungen sind Eigenwerte von besonderer Bedeutung. In den hier vorgestellten Beispielen handelt es sich fast ausschließlich um reelle Matrizen, das heißt A R n n. Sowohl die Theorie als auch die Lösungsmethoden sind auf komplexe Matrizen übertragbar. Der einzige Unterschied besteht darin, daß man beim Rechnen 1 Manchmal nennt man Eigenwerte und Eigenvektoren auch charakteristische Werte bzw. charakteristische Vektoren. Beide Sprechweisen haben sich jedoch nie durchgesetzt. 305

306 306 7 Eigenwertprobleme mit komplexen Matrizen die konjugiert transponierte Matrix bezeichnet mit A H anstatt der transponierten Matrix A T benutzen muß 2. Beispiel 7.1 Eigenwerte und Eigenvektoren Im folgenden sind verschiedene Matrizen angegeben mit ihren Eigenwerten und Eigenvektoren. ( ) ( ) ( ) A = : λ = 1, x = und λ = 2, x =. ( 0 2 ) ( 0 ) ( 1 ) B = : λ = 1, x = und λ = 2, x =. ( 0 2 ) ( 0 ) ( 1 ) C = : λ = 2, x = und λ = 4, x =. ( 1 3 ) ( 1 ) ( 1 ) D = : λ = 2, x = und λ = 1, x =. ( ) ( 1 ) ( 1 ) i E = : λ = i, x = und λ = i, x =, wobei i = i 1 Die Eigenwerte der ersten beiden Matrizen A und B sind die Diagonalelemente und die Eigenvektoren der Matrix B sind die Spalten der Einheitsmatrix. Die Matrizen C und D sind symmetrisch und die Eigenwerte sind reell. Das letzte Beispiel zeigt, daß eine reelle Matrix auch komplexe Eigenwerte und Eigenvektoren haben kann. Zur Nichteindeutigkeit Eigenwerte und Eigenvektoren sind im folgenden Sinn nicht eindeutig: Eigenwerte. Eigenwerte einer Matrix sind nicht immer verschieden. Geometrisch bedeutet dies: Es können mehrere Eigenvektorrichtungen existieren mit dem gleichen Dehnungs- bzw. Stauchungsfaktor. In diesem Fall sagt man, die Matrix habe einen mehrfachen Eigenwert. Zum Beispiel ist 1 ein Eigenwert der n n-einheitsmatrix I n mit der Vielfachheit n. Eigenvektoren. Ist x ein Eigenvektor von A, dann ist auch ein Vielfaches αx, α 0, ein Eigenvektor von A: Ist Ax = λx, dann ist A(αx) = λ(αx) für jede Zahl α richtig, so daß αx auch ein Eigenvektor zum Eigenwert λ ist. Das charakteristische Polynom Die Eigenwertgleichung Ax = λx ist zu (A λi)x = 0 äquivalent. Dieses homogene lineare Gleichungssystem hat genau dann eine Lösung x 0, wenn die Matrix A λi singulär ist. Damit sind die Eigenwerte von A diejenigen Werte λ, die der Gleichung det(a λi) = 0 genügen. Nun ist die linke Seite der Gleichung ein Polynom in λ vom Grad n. Man nennt dieses Polynom das charakteristische Polynom von A und die Nullstellen sind genau die Eigenwerte von A. 2 A H = (A) T = (A T ) wird manchmal auch mit A bezeichnet.

307 7.1 Eigenwerte und Eigenvektoren 307 Beispiel 7.2 Charakteristisches Polynom Als Beispiel betrachten wir das charakteristische Polynom der Matrix C aus Beispiel 7.1: ( ( 3 1 det 1 3 ) ( 1 0 λ 0 1 ) ) ( 3 λ 1 = det 1 3 λ = (3 λ)(3 λ) ( 1)( 1) = λ 2 6λ + 8. Die Eigenwerte sind nun gerade die Nullstellen dieses Polynoms und somit gegeben durch: λ = 6 ± = 6 ± 2 2 = 2 und 4. Da die Eigenwerte einer Matrix die Nullstellen des charakteristischen Polynoms der Matrix sind, folgt aus dem Fundamentalsatz der Algebra, daß eine n n-matrix A immer n Eigenwerte hat, die nicht notwendig voneinander verschieden sind und zudem auch komplex sein können. Die algebraische Vielfachheit eines Eigenwertes ist die Vielfachheit der Nullstelle des charakteristischen Polynoms. Ein Eigenwert mit der Vielfachheit 1 heißt einfach. Die geometrische Vielfachheit eines Eigenwertes ist die Anzahl der linear unabhängigen Eigenvektoren zu diesem Eigenwert. Die geometrische Vielfachheit kann nie größer als die algebraische Vielfachheit sein, aber kleiner. Ist sie kleiner, dann heißt der Eigenwert defekt. Analog sagt man, daß eine n n-matrix defekt ist, wenn sie weniger als n linear unabhängige Eigenvektoren hat. Reelle Matrizen können komplexe Eigenwerte haben. Hat eine reelle Matrix einen komplexen Eigenwert, dann ist aber auch die komplex konjugierte Zahl ein Eigenwert. Das heißt: Ist α + iβ ein Eigenwert einer reellen Matrix, dann ist auch α iβ ein Eigenwert. ) Eigenschaften von Eigenwertaufgaben Die nachfolgenden Fragen beeinflussen die Wahl des Algorithmus und der Software zur Lösung einer Eigenwertaufgabe: Werden alle Eigenwerte benötigt oder nur ein Teil? Werden nur die Eigenwerte gebraucht oder auch die dazugehörigen Eigenvektoren? Ist die Matrix reell oder komplex? Ist die Matrix relativ klein und dicht oder groß und dünn besetzt? Hat die Matrix irgendwelche Eigenschaften? Ist sie zum Beispiel symmetrisch? Die Tabelle 7.2 zeigt ein paar Eigenschaften von Matrizen, die für Eigenwertaufgaben relevant sind. Beispiel 7.3 Eigenschaften von Matrizen Die folgenden Matrizen sind Beispiele aus jeweils einer Matrixklasse, die für Eigenwertaufgaben besonders relevant sind.

308 308 7 Eigenwertprobleme Eigenschaft symmetrisch HERMITESCH orthogonal unitär normal Definition A = A T A = A H A T A = AA T = I A H A = AA H = I A H A = AA H Tabelle 7.1: Eigenschaften von Matrizen ( ) 1 2 symmetrisch: S = ( 2 3 ) i HERMITESCH: H = ( 1 i ) orthogonal: Q = 1 ( 0 unitär: U = i 3 ( 1 + i ) normal: N = i 3 + 2i ) nicht symmetrisch nicht HERMITESCH nicht orthogonal nicht unitär nicht normal ( ) 1 2 ( i ( 1 + i ) ( 0 2 ) 1 1 ( 0 1 ) ) Ähnlichkeitstransformationen Viele numerische Methoden zum Berechnen von Eigenwerten und Eigenvektoren beruhen darauf, die gegebene Matrix auf eine Matrix einfacherer Form zu transformieren, deren Eigenwerte und Eigenvektoren leichter zu berechnen sind. Aus diesem Grund ist es nützlich, zu wissen, welche Transformationen Eigenwerte bewahren und für welche Matrizen Eigenwerte leicht zu bestimmen sind. Eine Matrix B ist ähnlich zu einer Matrix A, wenn es eine reguläre Matrix T gibt, so daß gilt: B = T 1 AT. Ist nun λ ein Eigenwert von B, dann auch von A, denn es gilt: By = λy T 1 ATy = λy A(Ty) = λ(ty). Außerdem zeigen diese Folgerungen: Ist y ist ein Eigenvektor von B, dann ist x = Ty ein Eigenvektor von A. Damit ist gezeigt, daß Ähnlichkeitstransformationen Eigenwerte bewahren und Eigenvektoren zwar nicht erhalten bleiben, aber leicht wiederzugewinnen sind. Achtung! Die umgekehrte Schlußweise ist nicht richtig: Zwei ähnliche Matrizen haben die gleichen Eigenwerte, haben aber zwei Matrizen die gleichen Eigenwerte, so müssen sie nicht ähnlich sein. Zum Beispiel haben die Matrizen ( ) und ( jeweils den doppelten Eigenwert 1, sind jedoch nicht ähnlich. )

309 7.1 Eigenwerte und Eigenvektoren 309 Beispiel 7.4 Ähnlichkeitstransformation Aufgrund der Eigenwerte und Eigenvektoren der Matrix C aus Beispiel 7.1 gilt: ( ) ( ) ( ) ( CT = = ) = TΛ, und somit T 1 CT = ( ) ( ) ( ) = ( ) = Λ. Dies bedeutet, daß die Originalmatrix C ähnlich zur Diagonalmatrix Λ ist und die Spalten der Tranformationsmatrix T Eigenvektoren sind. Die Eigenwerte einer Diagonalmatrix sind die Diagonalelemente und die zugehörigen Eigenvektoren sind die entsprechenden Einheitsvektoren bzw. die Spalten der Einheitsmatrix. Somit hat man ein ideales Ziel erreicht, wenn man eine beliebige Matrix durch eine Ähnlichkeitstransformation auf Diagonalgestalt bringen kann. Unglücklicherweise gibt es aber Matrizen, für die das nicht möglich ist. Mit anderen Worten: Nicht jede Matrix kann durch eine Ähnlichkeitstransformation auf Diagonalgestalt gebracht werden. Das Beste, das man im allgemeinen tun kann, ist die Transformation in eine JORDAN-Form, was einer Diagonalform nahe kommt. In der oberen Nebendiagonale können von Null verschiedene Einträge stehen, die zu mehrfachen Eigenwerten gehören. Die Berechnung der JORDAN-Form ist numerisch ein instabiler Prozeß und wird daher kaum verwendet. Eine kleine Störung an der Ausgangsmatrix A bewirkt, daß die mehrfachen Eigenwerte getrennt werden und dadurch die wahre JORDAN-Form zerstört wird. Dies ist der Grund, weshalb man in MATLAB keine Funktion jordan kennt 3. Glücklicherweise kann man aber jede Matrix durch eine Ähnlichkeitstransformation auf Dreiecksform bringen. Man nennt sie SCHUR-Form. Die Eigenwerte einer Dreiecksmatrix sind aber gerade die Diagonalelemente. Sowohl das Ergebnis einer Ähnlichkeitstransformation als auch der Typ der Ähnlichkeitstransformation hängt von den Eigenschaften der gegebenen Matrix ab. Selbstverständlich wird man sowohl aus theoretischen als auch aus numerischen Gründen als Ergebnis die einfachere Diagonalform und als Ähnlichkeitstransformation eine orthogonale (unitäre) Matrix bevorzugen, wann immer dies möglich ist. Unglücklicherweise aber sind nicht alle Matrizen unitär diagonalisierbar, manche sogar sind nicht einmal diagonalisierbar. Die Tabelle 7.2 gibt eine Übersicht. Ist A eine gegebene Matrix, so existieren Matrizen B und T mit B = T 1 AT und den jeweils angegebenen Eigenschaften. In allen Fällen sind die Diagonalelemente von B die Eigenwerte und in den ersten vier Fällen sind die Spalten von T Eigenvektoren. Zur Kondition von Eigenwertaufgaben Unter der Kondition einer Eigenwertaufgabe versteht man das Verhalten der Eigenwerte und Eigenvektoren bei kleinen Störungen der Matrix. Die Kondition einer Eigenwertaufgabe ist nicht das gleiche wie die Kondition einer Matrix für ein lineares Gleichungssystem. 3 In der Symbolic Math Toolbox gibt es zur Berechnung der JORDAN-Form die Funktion jordan.

310 310 7 Eigenwertprobleme A T B = T 1 AT paarweise verschiedene Eigenwerte regulär diagonal symmetrisch orthogonal reell diagonal HERMITESCH unitär reell diagonal normal unitär diagonal beliebig unitär SCHUR-Form (obere Dreiecksform) beliebig regulär JORDAN-Form (fast diagonal) Tabelle 7.2: Ähnlichkeitstransformationen Unterschiedliche Eigenwerte und Eigenvektoren einer gegebenen Matrix sind nicht gleich sensitiv zu Störungen in der Matrix. Die Kondition eines einfachen Eigenwertes λ einer Matrix A ist durch 1/ y H x gegeben 4, wobei x und y normierte rechte bzw. linke Eigenvektoren sind, das heißt: x H x = y H y = 1. Mit anderen Worten: Die Sensitivität eines einfachen Eigenwertes ist umgekehrt proportional zum Kosinus des Winkels, den der linke und rechte Eigenvektor bildet. Ist diese Zahl groß, dann ist λ ein schlecht konditionierter Eigenwert. Beispiel 7.5 Zur Kondition von Eigenwerten Die Matrix A = besitzt die normierten (rechten) Eigenvektoren 5 x 1 = 1 0 0, x 2 = Die dazugehörigen linken Eigenvektoren sind: y 1 = , y 2 = Die Eigenwerte sind die Diagonalelemente Für die Kondition der Eigenwerte ergibt sich: und x 3 = und y 3 = λ 1 = 1, λ 2 = und λ 3 = 2. Kondition(λ 1) = Kondition(λ 2) = Kondition(λ 3) = y T 1 y T 2 y T 3 1 = x1 1 = x2 1 = x Das Symbol H steht für HERMITESCH und bedeutet: transponiert und konjugiert komplex. 5 bis auf vier Dezimalen

311 7.1 Eigenwerte und Eigenvektoren 311 Diese Berechnungen zeigen, daß λ 1 = 1 und λ 2 = vergleichsweise schlecht, λ 3 = 2 dagegen gut konditioniert sind. Tatsächlich, ändern wir A(3, 1) zu und berechnen die Eigenwerte der gestörten Matrix, so erhalten wir λ 1 = i, λ2 = i und λ3 = 2. Das heißt: Die beiden sensitiven Eigenwerte λ 1 = 1 und λ 2 = sind nun komplex, wohingegen sich der dritte Eigenwert λ 3 = 2 nicht geändert hat. Mit der MATLAB-Funktion condeig können Sie die Kondition von Eigenwerten berechnen. Die hier gewonnenen Ergebnisse lassen sich somit in MATLAB leicht nachvollziehen. Bei einer symmetrischen oder HERMITESCHEN Matrix sind die linken und rechten Eigenvektoren zu dem jeweils entsprechenden Eigenwert gleich. Damit sind ihre Eigenwerte stets gut konditioniert, da y H x = x H x = 1 ist. Allgemeiner gilt, daß die Eigenwerte einer normalen Matrix gut konditioniert sind, für nicht normale Matrizen muß dies aber nicht richtig sein. Die Kondition eines Eigenvektors hängt von der Kondition des dazugehörigen Eigenwerts und dessen Abstand zu den anderen Eigenwerten ab. Beispiel 7.6 Zur Kondition von Eigenvektoren Die Eigenwerte der Diagonalmatrix A = sind λ 1 = 1, λ 2 = 0.99 und λ 3 = 2. Da die Matrix symmetrisch ist und alle Eigenwerte einfach sind, sind die Eigenwerte gut konditioniert. Die Eigenwerte der gestörten Matrix A + A = sind wieder 1, 0.99 und 2. Die Eigenvektoren von A + A sind x 1 = 0.01, x 2 = 1 und x 3 = 0 0 wohingegen die Eigenvektoren von A 1 x 1 = 0, x 2 = und x 3 = sind. Der Eigenvektor zu λ 3 = 2 hat sich nicht geändert, die beiden anderen sehr wohl. Der Grund liegt darin, daß die beiden Eigenwerte λ 1 = 1 und λ 2 = 0.99 dicht beieinander liegen. Mehrfache oder dicht beieinanderliegende Eigenwerte können schlecht konditioniert und damit schwierig zu berechnen sein, insbesondere dann, wenn die Matrix defekt ist. In diesem Fall kann man versuchen, durch Skalierung mit einer diagonalen Ähnlichkeitstransformation die Kondition eines Eigenwertproblems zu verbessern. Für weitere Einzelheiten verweisen wir zum Beispiel auf [12] und [109]. In MATLAB kan man hierzu die eingebaute Funktion balance verwenden ,

312 312 7 Eigenwertprobleme Wir fassen zusammen: Die Eigenwerte einer normalen (symmetrischen, HERMITESCHEN) Matrix sind immer gut konditioniert. Ein mehrfacher Eigenwert oder ein Eigenwert, der in der Nähe eines anderen liegt, impliziert, daß es schlecht konditionierte Eigenvektoren gibt. Liegen die Eigenwerte jedoch gut getrennt und sind sie gut konditioniert, so sind auch die Eigenvektoren gut konditioniert. 7.2 Methoden, um alle Eigenwerte zu berechnen Das charakteristische Polynom Die naheliegendste Methode, die Eigenwerte einer Matrix A zu berechnen, besteht darin, die Nullstellen des charakteristischen Polynoms det(a λi) = 0 zu bestimmen. Dies ist jedoch nur für kleine Matrizen per Hand mit Bleistift und Papier sinnvoll. Für große Matrizen am Computer ist dieses Vorgehen nicht angebracht. Ein Grund liegt darin, daß die Nullstellen eines Polynoms sehr sensitiv von den Polynomkoeffizienten abhängen können. Somit können Fehler zum Beispiel Rundungsfehler in den Koeffizienten zu großen Ungenauigkeiten in den numerisch zu bestimmenden Nullstellen führen. Ein klassische Beispiel ist das WILKINSON-Polynom, wenn man dieses um die Stelle Null entwickelt: p(λ) = (λ 1)(λ 2) (λ 20) = λ λ λ λ Die Nullstellen dieses Polynoms sind 1, 2,..., 20 und alle sind voneinander verschieden. Wir stören nun den Koeffizienten von λ 19 von 210 zu ǫ mit ǫ = Wie wirkt sich diese kleine Störung auf die Nullstellen des Polynoms aus? Die Antwort auf diese Frage hat WILKINSON durch das Berechnen der Nullstellen der Gleichung p(λ) + ǫλ 19 = 0 gegeben. Die Tabelle 7.3 zeigt die Nullstellen. Man erkennt, daß manche Nullstellen sehr sensitiv auf die Störung reagiert haben. Zehn der zwanzig Nullstellen sind nun komplex und darüber hinaus haben sich zwei um mehr als 2.81 von der reellen Achse entfernt. Die Abbildung 7.1 zeigt die Eigenwerte des Polynoms p(λ) und des gestörten Polynoms p(λ) λ 19. Das Problem, weshalb sich die Nullstellen so weit weg bewegt haben, ist weder ein Rundungs-, noch ein algorithmisches Problem. Das Nullstellenproblem ist bezüglich der verwendeten Darstellung in sich sensitiv bzw. schlecht konditioniert. Für weiter Einzelheiten verweisen wir auf [27].

313 7.2 Methoden, um alle Eigenwerte zu berechnen ± i ± i ± i ± i ± i Tabelle 7.3: Nullstellen von p(λ) λ 19 nach WILKINSON 3 2 Nullstellen von p(λ)+2 23 λ Nullstellen von p(λ) Abbildung 7.1: Nullstellen von p(λ) und p(λ) λ 19 nach WILKINSON

314 314 7 Eigenwertprobleme Dieses Beispiel zeigt: Es ist in der Regel keine gute Idee, die Eigenwerte einer Matrix numerisch dadurch zu bestimmen, daß man das charakteristische Polynom in der üblichen Entwicklung nach Potenzen von λ aufstellt und dessen Nullstellen berechnet, weil bereits kleine Störungen in den Koeffizienten des charakteristischen Polynoms zu großen Änderungen in den Nullstellen führen können. Die so numerisch berechneten Eigenwerte sind dann zu ungenau. Bei Verwendung geeigneter Polynomdarstellungen lassen sich jedoch Eigenwerte als Polynomnullstellen numerisch stabil berechnen. Beispiel 7.7 Berechnung der Nullstellen mit dem Computer Dieses Beispiel zeigt, welche numerischen Schwierigkeiten auftreten können, wenn man die Eigenwerte über das charakteristische Polynom berechnet. Hierzu betrachten wir die Matrix ( ) 1 ǫ A = ǫ 1 mit ǫ > 0 und etwas kleiner als die Wurzel der Maschinengenauigkeit des zugrundeliegenden Gleitpunktsystems. Die exakten Eigenwerte der Matrix A sind 1 + ǫ und 1 ǫ. Berechnen wir die Entwicklung des charakteristischen Polynoms von A um Null in Gleitpunktarithmetik, so erhalten wir det(a λi) = λ 2 2λ + (1 ǫ 2 ) = λ 2 2λ + 1, was 1 als doppelte Nullstelle hat. Mit dieser Methode können wir die beiden Eigenwerte nicht berechnen. Obgleich es numerisch nicht angebracht ist, die Eigenwerte über das charakteristische Polynom zu berechnen, so kann man daraus jedoch eine theoretische Folgerung schließen. Da NIELS H. ABEL 6 gezeigt hat, daß die Nullstellen eines Polynoms vom Grad größer als vier im allgemeinen nicht als Radikale geschrieben werden können, müssen die Eigenwerte von Matrizen der Ordnung größer als vier im allgemeinen durch einen auch theoretisch unendlichen iterativen Prozeß berechnet werden. Jedes universelle Lösungsverfahren für Eigenwerte muß iterativ sein. Die QR-Methode Die QR-Methode zur Berechnung von Eigenwerten und Eigenvektoren besteht darin, wiederholt die QR-Faktorisierung einzusetzen, um die gegebene Matrix durch unitäre Ähnlichkeitstransformationen auf Diagonal- oder Dreiecksgestalt zu bringen. Hierzu wählt man A 0 = A und berechnet in der k-ten Iteration die QR-Zerlegung von A k, das heißt A k = Q k R k. bei A k+1 wird die Reihenfolge des Produkts vertauscht; es ist also Damit ist A k+1 = R k Q k. R k Q k = Q H A k Q k und somit A k+1 zu A k ähnlich. Man kann nun zeigen, daß die Matrizenfolge A k gegen eine Dreiecksmatrix konvergiert, falls die Eigenwerte voneinander verschieden sind; für eine symmetrische Anfangsmatrix sogar gegen eine Diagonalmatrix. hat. 6 NIELS H. ABEL ( ), norwegischer Mathematiker, der viele Beiträge zur Gruppentheorie geleistet

315 7.2 Methoden, um alle Eigenwerte zu berechnen 315 Beispiel 7.8 Die QR-Methode Es sei A 0 = ( Damit berechnen wir zuerst die QR-Zerlegung A 0 = Q 0R 0 und erhalten ( ) ( Q 0 = und R = Als nächstes berechnen wir das Produkt A 1 = R 0Q 0 = ). ( Wir sehen, daß die Nebendiagonalelemente bereits kleiner sind, das heißt, die Matrix näher an einer Diagonalmatrix liegt und die Diagonalelemente näher an den Eigenwerten 8 und 3 liegen. Wiederholt man diesen Prozeß nun bis Diagonalgestalt erreicht ist, so liefern die Diagonalelemente eine Näherung an die Eigenwerte der Ausgangsmatrix. Das Produkt der orthogonalen Matrizen Q k liefert eine Näherung für die Eigenvektoren. Das folgende Script realisiert diese einfache Version der QR-Methode für die Matrix A = ( A = [7 2;2 4]; V = eye(2,2); while input( Weiterer Schritt? (ja=1, nein=0) ) [Q,R] = qr(a); A = R*Q V = V*Q end Nach mehreren Schritten steht in A die Diagonalmatrix der Eigenwerte und in V die dazugehörigen Eigenvektoren. Mit der eingebauten MATLAB-Funktion eig lassen sich diese Ergebnisse leicht überprüfen. Die Konvergenzgeschwindigkeit der QR-Methode kann erhöht werden, wenn man Shifts folgender Form zuläßt: ). ). ). A k σ k I = Q k R k A k+1 = R k Q k + σ k I, wobei σ k eine Näherung für einen Eigenwert ist. Eine Wahl für den Shift-Parameter σ k ist das rechte untere Matrixelement a nn, falls die Eigenwerte von A reell sind. Eine im allgemeinen sinnvollere Parameterwahl sind die Eigenwerte der rechten unteren 2 2 Submatrix von A. Das folgende MATLAB-Script realisiert die QR-Methode mit Shift. A = [7 2;2 4]; sigma = A(2,2); PQ = eye(2,2);

316 316 7 Eigenwertprobleme while input( Weiterer Schritt? (ja=1, nein=0) ) [Q,R] = qr(a-sigma*eye(2)); A = R*Q + sigma*eye(2) PQ = PQ*Q end Führt man einen Schritt dieses Scripts durch, so erhält man ( ) A 1 =, was im Vergleich zum ungeshifteten Algorithmus bereits kleinere Nebendiagonalelemente und genauere Eigenwertschätzungen zeigt. Diese einfache QR-Methode benötigt pro Iteration O(n 3 ) Gleitpunktoperationen. Wir können diesen Aufwand reduzieren, wenn wir die Matrix zuvor auf eine einfachere Form transformieren. Insbesondere wäre es vorteilhaft, wenn die Matrix so nahe wie möglich Dreiecksform (oder für eine symmetrische Matrix Diagonalform) hätte, bevor man mit der QR-Iteration beginnt. Eine obere HESSENBERG-Matrix H ist eine Matrix, die unterhalb der unteren Nebendiagonale nur Nullen enthält; entsprechendes gilt für eine untere HESSEN- BERG-Matrix. obere HESSENBERG-Matrix untere HESSENBERG-Matrix Eine symmetrische HESSENBERG-Matrix ist folglich tridiagonal. symmetrische HESSENBERG-Matrix Jede Matrix kann in endlich vielen Schritten durch orthogonale Ähnlichkeitstransformationen auf HESSENBERG-Form gebracht werden, zum Beispiel durch geeignete HOUSE- HOLDER-Transformationen, das heißt Ähnlichkeitstransformationen mit Matrizen der Form I 2vv T, wobei v ein Einheitsvektor ist. Die anschließenden QR-Iterationen bewahren dann die obere HESSENBERG- bzw. Tridiagonalform. Der Vorteil dieser Anfangsreduktion auf HESSENBERG- bzw. Tridiagonalform ist: Ein Schritt der QR-Iteration wird auf O(n 2 ) Gleitpunktoperationen reduziert.

317 7.3 Methoden, um ausgewählte Eigenwerte zu berechnen 317 Somit wird die QR-Methode in zwei Phasen implementiert: Phase 1 Phase 2 allgemeine Matrix obere HESSENBERG-Matrix obere Dreiecksmatrix Für den symmetrischen Fall gilt: Phase 1 Phase 2 symmetrische Matrix Tridiagonalmatrix Diagonalmatrix Phase 1 des QR-Algorithmus ist ein endlicher, Phase 2 ein iterativer Algorithmus. 7.3 Methoden, um ausgewählte Eigenwerte zu berechnen Potenzmethode In der Praxis ist man oft nicht an allen Eigenwerten und Eigenvektoren interessiert, sondern nur an einem oder ein paar Eigenwerten und Eigenvektoren. Eine einfache Methode, einen Eigenwert und einen dazugehörigen Eigenvektor zu berechnen, ist die Potenzmethode 7, welche ausgehend von einem Startvektor immer größer werdende Matrixpotenzen mit diesem Vektor bildet. Nehmen wir an, daß es nur einen betragsgrößten Eigenwert gibt, der einfach ist. Ausgehend von einem Startvektor x 0 0 erzeugt dann die Iterationsvorschrift x k = Ax k 1, eine Folge von Vektoren, deren Richtung gegen die Richtung des Eigenvektors u 1 konvergiert. Inverse Potenzmethode In manchen Anwendungen sucht man nicht primär den größten, sondern den betragsmäßig kleinsten Eigenwert. Ist A regulär, dann existiert A 1 und alle Eigenwerte sind von Null verschieden. Dann folgt aus Ax = λx und damit x = A 1 (λx) = λa 1 x λ 1 x = λ 1 λa 1 x = A 1 x. 7 Die Potenzmethode wird auch als Vektoriteration nach VON MISES bezeichnet.

318 318 7 Eigenwertprobleme Das heißt: Ist x ein Eigenvektor von A mit Eigenwert λ, so ist x auch Eigenvektor von A 1 zum Eigenwert λ 1. Damit ist der betragskleinste Eigenwert von A der Kehrwert des betragsgrößten Eigenwertes von A 1, falls dieser eindeutig ist. Damit hat die Inverse Potenzmethode folgendes Grundformat: 1. Ay k = x k 2. x k = y k / y k, was äquivalent zur Potenzmethode angewendet auf A 1 ist 8. Natürlich berechnet man A 1 nicht explizit, sondern verwendet zur Lösung dieses linearen Gleichungssystems zum Beispiel eine LU-Faktorisierung. Darüber hinaus muß diese Faktorisierung nur einmal und keinesfalls in jedem Iterationsschritt durchgeführt werden. Wie bei der Potenzmethode läßt sich durch eine Eigenwertverschiebung man arbeitet mit der Matrix A σi eine Konvergenzverbesserung erzielen. Aus diesem Grund ist die inverse Iteration insbesondere nützlich, um einen Eigenvektor zu einem näherungsweise bekannten Eigenwert der etwa durch ein anderes Verfahren gewonnen wurde zu berechnen. In diesem Fall verwendet man die Matrix A λi, wobei λ der näherungsweise bekannte Eigenwert ist. Die inverse Iteration ist ebenfalls nützlich, wenn es darum geht, Eigenvektoren zu berechnen, da die Folge der berechneten Vektoren x k im Fall eines einfachen Eigenwertes gegen den zugehörigen Eigenvektor konvergiert. Matrix A A 1 Eigenwert λ A σi λ σ (A σi) 1 1 λ σ Tabelle 7.4: Matrizen und dazugehörige Eigenwerte Durch die erwähnte Shift-Strategie, nämlich die Wahl σ als Eigenwertnäherung, wird die Kondition des zu lösenden linearen Gleichungssystems immer schlechter, je genauer der Eigenwert bekannt ist. Wie wir im Kapitel über lineare Gleichungssysteme gesehen haben, bedeutet schlechte Kondition der Matrix, daß die resultierende Lösung wegen der unvermeidlichen Rundungsfehler sehr stark gestört oder gar unbrauchbar sein kann. Man ist daher bei oberflächlicher Betrachtung leicht geneigt, die Verwendbarkeit der inversen Iteration anzuzweifeln. Tatsächlich verhält es sich aber anders: Ist der zu berechnende Eigenwert λ einfach, so spannt der zugehörige Eigenvektor den Kern von A λi auf. Die Fast-Singularität und die damit verbundene schlechte Kondition der Matrix A λi bewirkt aber bei der Lösung des linearen Gleichungssystems einen großen Fehler im wesentlichen in Richtung dieses eindimensionalen Raumes, das heißt, der Fehler, der durch die schlechte Kondition des Problems auftritt, zeigt in Richtung des zu berechnenden Eigenvektors! Durch die jeweils anschließende Normierung tritt er dann nicht mehr in Erscheinung. Tatsächlich bewirkt die schlechte Kondition hier eine Konvergenzbeschleunigung des Verfahrens! Hier handelt es 8 Die inverse Potenzmethode wird auch inverse Iteration nach WIELANDT genannt. 1 λ

319 7.4 Verallgemeinerte Eigenwertprobleme 319 sich wahrscheinlich um die einzige Situation innerhalb der numerischen Mathematik, wo sich Rundungsfehler und schlechte Kondition positiv auf ein numerisches Verfahren auswirken. Zusammenfassung Methode Gleichung Berechnung Potenzmethode x k+1 = Ax k λ max Inverse Potenzmethode Ax k+1 = x k λ min Shift-Potenzmethode x k+1 = (A σi)x k Eigenwert von σ am weitesten entfernt Shift-Inverse-Potenzmethode (A σi)x k+1 = x k Eigenwert σ am nächsten Tabelle 7.5: Potenzmethoden 7.4 Verallgemeinerte Eigenwertprobleme Viele in der Praxis auftretenden Eigenwertprobleme haben die Form eines verallgemeinerten Eigenwertproblems 9 : Die verallgemeinerte Eigenwertaufgabe Gegeben sind zwei quadratische Matrizen A und B. Finde eine Zahl λ und einen Vektor x, so daß gilt: Ax = λbx Für B I ist diese Aufgabenstellung eine Verallgemeinerung der herkömmlichen Eigenwertaufgabe; für B = I reduziert sich das verallgemeinerte Eigenwertproblem auf das Standardeigenwertproblem. Verallgemeinerte Eigenwertprobleme treten zum Beispiel in mechanischen Schwingungssystemen auf; dort ist A die Steifigkeitsmatrix und B die Massenmatrix. Ist A oder B eine reguläre Matrix, dann kann man das verallgemeinerte Eigenwertproblem auf ein gewöhnliches reduzieren, entweder so (B 1 A)x = λx oder in dieser Form (A 1 B)x = 1 λ x. Aus folgenden Gründen sind aber im allgemeinen solche Transformationen nicht empfehlenswert: Aufgrund von Rundungsfehlern verliert man an Genauigkeit, wenn man das Matrixprodukt bildet, insbesondere dann, wenn A oder B schlecht konditioniert sind. 9 Auch allgemeines Eigenwertproblem genannt.

320 320 7 Eigenwertprobleme Sind A und/oder B symmetrisch, so haben die Matrizen A 1 B bzw. B 1 A im allgemeinen keine Symmetrieeigenschaften. Sind A und B symmetrisch und eine davon positiv definit, dann ist es möglich, die Symmetrie aufrecht zu erhalten, indem man von der CHOLESKY-Zerlegung Gebrauch macht. Ist zum Beispiel B = LL T, so kann das verallgemeinerte Eigenwertproblem als symmetrisches Standardeigenwertproblem (L 1 AL T )y = λy geschrieben und x aus L T x = y berechnet werden. Transformationen auf Standardeigenwertprobleme beinhalten meist unnötige Rundungsfehler und können nicht durchgeführt werden, wenn A und B singulär sind. Sind A und B n n-matrizen und ist B singulär, so kann es sein, daß es weniger als n Eigenwerte gibt 10 oder alle komplexen Zahlen Eigenwerte sind. Wenn es nur endlich viele Eigenwerte gibt, so ist ihre Anzahl jedoch nie größer als n. Dies zeigt folgendes Beispiel: Beispiel 7.9 B ist singulär A = ( ) und B = hat nur den einzigen verallgemeinerten Eigenwert 2. Für ( ) 1 0 A = und B = 0 0 ist jede komplexe Zahl ein verallgemeinerter Eigenwert. ( ) ( ) Sind die Matrizen singulär oder indefinit, dann ist die QZ-Methode geeignet. Die Motivation für den QZ-Algorithmus ist folgende: Angenommen A und B sind beide von gleicher Dreiecksgestalt, dann sind die Eigenwerte durch λ i = a ii /b ii gegeben (b ii 0). Aus diesem Grund werden im QZ-Algorithmus die Matrizen A und B durch orthogonale Transformationen auf obere Dreiecksform gebracht. Zunächst berechnet man die QR-Zerlegung von B: B = Q 0 R 0 und ersetzt A durch Q T 0 A und B durch R 0. Dann wird A auf obere HESSEN- BERG-Form gebracht, indem von links mit orthogonalen Matrizen Q k sowohl an A als auch an B multipliziert wird. Gleichzeitig werden beide Matrizen von rechts mit orthogonalen Matrizen Z k multipliziert, damit die obere Dreiecksform von B erhalten bleibt. In einer dem QR-Verfahren für gewöhnliche Eigenwertaufgaben analogen- zweiten Phase werden nun abwechselnd von links und rechts weitere orthogonale Matrizen hinzumultipliziert, bis A gegen eine obere Dreiecksmatrix konvergiert, während B gleichzeitig die obere Dreiecksgestalt bewahrt. Das Produkt aller Transformationen von links bezeichnet man mit Q und das von rechts mit Z, woher der Name QZ-Algorithmus stammt. Die Eigenwerte berechnet man schließlich aus der jeweiligen Dreiecksform und die Eigenvektoren erhält man aus Q und Z. Die verallgemeinerte Eigenwertaufgabe kann in MATLAB mit der Funktion eig(a,b) gelöst werden. Ist man an der QZ-Faktorisierung explizit interessiert, so hilft die Funktion qz. 10 Mit Vielfachheit gezählt.

321 7.5 Eigenwertaufgaben mit MATLAB Eigenwertaufgaben mit MATLAB In MATLAB können Eigenwerte und Eigenvektoren mit der Funktion eig berechnet werden. Der Funktionsaufruf [V,D] = eig(a) liefert eine Matrix V, in deren Spalten Eigenvektoren stehen und eine Diagonalmatrix D, in der die Diagonalelemente die Eigenwerte von A sind. Die Eigenvektoren haben alle die Länge 1. Ruft man nur eig(a) auf, so erhält man einen Spaltenvektor zurück, dessen Komponenten die Eigenwerte der Matrix A sind. Intern werden die Eigenwerte und Eigenvektoren durch Reduktion der Matrix auf HES- SENBERG-Gestalt und anschließender QR-Iteration berechnet. Will man die HESSENBERGoder SCHUR-Form explizit berechnen, so gibt es dazu die Funktionen hess bzw. schur. Die Tabelle 7.6 faßt diese und weitere in diesem Zusammenhang nützliche Funktionen zusammen. Insbesondere mit der Funktion eigs ist es möglich, ausgewählte Eigenwerte zu erhalten, siehe doc eigs. Funktion eig hess schur eigs condeig qz Beschreibung Alle Eigenwerte und Eigenvektoren HESSENBERG-Form SCHUR-Form Ein paar Eigenwerte und Eigenvektoren Konditionszahl der Eigenwerte QZ-Faktorisierung Tabelle 7.6: Eigenwerte und Eigenvektoren Darüber hinaus kann man mit der Funktion poly das charakteristische Polynom einer Matrix berechnen. Ist zum Beispiel ( ) 3 1 C = 1 3 so liefern die Anweisungen» C=[3-1;-1 3] C = » poly(c) ans = einen Zeilenvektor, dessen Komponenten die Koeffizienten des charakteristischen Polynoms sind. Mit der Anweisung» roots(ans) ans = 4 2 erhält man die Eigenwerte. Die Tabelle 7.7 faßt die beiden Funktionen zusammen Eine Bemerkung zur Funktion roots: Diese berechnet die Nullstellen eines Polynoms, indem sie die

322 322 7 Eigenwertprobleme Funktion poly roots Beschreibung charakteristisches Polynom Nullstellen eines Polynoms Tabelle 7.7: Charakteristisches Polynom und Nullstellen eigshow In MATLAB gibt es eine Funktion eigshow, die das Eigenwertproblem für eine 2 2- Matrix visualisiert. Beim Aufruf sieht man den Einheitsvektor x = (1,0) T und mit der Maus kann man diesen auf dem Einheitskreis bewegen. Zur gleichen Zeit wird Ax angezeigt und bewegt. Manchmal ist Ax vor x, manchmal aber auch hinter x. Ax kann zu x auch parallel sein. In diesem Augenblick gilt Ax = λx und x ist ein Eigenvektor. Der Eigenwert λ bestimmt sich aus der Länge und Richtung von Ax. Die zur Verfügung stehenden Matrizen illustrieren folgende Möglichkeiten: 1. Es gibt keine (reellen) Eigenvektoren. x und Ax sind nie parallel. Die Eigenwerte und Eigenvektoren sind komplex. 2. Es gibt nur eine Linie von Eigenvektoren. 3. Es gibt Eigenvektoren mit zwei unabhängigen Richtungen. Dies ist typisch! Die Abbildung 7.2 zeigt das Tool. Abbildung 7.2: Zur Geometrie der Eigenwertaufgabe Eigenwerte der dazugehörigen Begleitmatrix ausrechnet.

323 7.6 Weitere Bemerkungen und Hinweise Weitere Bemerkungen und Hinweise Eigenwertaufgaben sind bekannt aus Vorlesungen und Büchern über lineare Algebra, siehe zum Beispiel [24], [53] und [58]. Vom algorithmischen Standpunkt aus, werden Eigenwertaufgaben in Vorlesungen der numerischen Mathematik bzw. numerischen linearen Algebra behandelt, hierzu verweisen wir auf [12], [14], [34], [40], [57], [84], [92], [102] und [111]. Für weitergehende Untersuchungen muß auf die Spezialliteratur hingewiesen werden. Dies sind insbesondere die Bücher [117] und [76]. Störungstheorie für Eigenwerte wird ausführlich im Buch [96] behandelt. FORTRAN-Programme für Eigenwertaufgaben findet man in LAPACK, siehe [2]. Eine Einführung in das inverse Eigenwertproblem gibt das Buch [118]. Eigenwertprobleme für High-Performance Computer werden in [18] behandelt. Insbesondere für den praktisch wichtigen Fall des symmetrischen Eigenwertproblems gibt es noch weitere, hier nicht angesprochene, leistungsfähige numerische Methoden, zum Beispiel das JACOBI-Verfahren, siehe zum Beispiel [34]. 7.7 Übungsaufgaben 7.1 WAHR oder FALSCH: Die Eigenwerte einer Matrix sind nicht notwendig alle verschieden. 7.2 WAHR oder FALSCH: Die Eigenwerte einer reellen Matrix sind alle reell. 7.3 WAHR oder FALSCH: Ein Eigenvektor zu einem gegebenen Eigenwert ist eindeutig. 7.4 WAHR oder FALSCH: Jede n n-matrix hat n linear unabhängige Eigenvektoren. 7.5 WAHR oder FALSCH: Ist eine n n- Matrix singulär, so kann sie keine n linear unabhängigen Eigenvektoren haben. 7.6 WAHR oder FALSCH: Eine quadratische Matrix A ist genau dann singulär, wenn ein Eigenwert 0 ist. 7.7 WAHR oder FALSCH: Ist λ = 0 für alle Eigenwerte einer Matrix A, dann ist A = WAHR oder FALSCH: Die Diagonalelemente einer komplexen HERMITESCHEN Matrix müssen reell sein. 7.9 WAHR oder FALSCH: Die Eigenwerte einer komplexen HERMITESCHEN Matrix sind reell WAHR oder FALSCH: Haben zwei Matrizen die gleichen Eigenwerte, dann sind sie ähnlich WAHR oder FALSCH: Sind zwei Matrizen ähnlich, dann haben sie die gleichen Eigenwerte WAHR oder FALSCH: Gegeben sei eine beliebige quadratische Matrix, dann ist diese ähnlich zu einer Diagonalmatrix WAHR oder FALSCH: Gegeben sei eine beliebige quadratische Matrix, dann ist diese unitär ähnlich zu einer Dreiecksmatrix WAHR oder FALSCH: Die Konditionszahl einer Matrix, die die Sensitivität der Lösung eines linearen Gleichungssystems beschreibt, bestimmt auch die Sensitivität der Eigenwerte und Eigenvektoren bei Störungen gegenüber der Matrix.

324 324 7 Eigenwertprobleme 7.15 WAHR oder FALSCH: Eine symmetrische HESSENBERG-Matrix ist tridiagonal WAHR oder FALSCH: Falls eine n n- Matrix A paarweise verschiedene Eigenwerte besitzt, dann konvergiert die QR-Methode notwendigerweise gegen eine Diagonalmatrix Ist es möglich, daß der gleiche Eigenwert zwei verschiedene Eigenvektoren hat? 7.18 Ist es möglich, daß der gleiche Eigenvektor zu zwei verschiedenen Eigenwerten gehört? 7.19 Geben Sie die Eigenwerte und Eigenvektoren einer Diagonalmatrix an! 7.20 Welche der folgenden Bedingungen implizieren die Diagonalisierbarkeit einer reellen quadratischen Matrix A? Anders gefragt: Wann ist A ähnlich zu einer Diagonalmatrix? (a) A hat n verschiedene Eigenwerte. (b) A hat nur reelle Eigenwerte. (c) A ist regulär. (d) A = A T. (e) AA T = A T A Welche der folgenden Matrixklassen haben nur reelle Eigenwerte? (a) Symmetrische Matrizen. (b) Reelle Dreiecksmatrizen. (c) Beliebige reelle Matrizen. (d) HERMITESCHE Matrizen. (e) Beliebige komplexe Matrizen Die Eigenwerte einer Matrix sind die Nullstellen ihres charakteristischen Polynoms. Ist das also eine vernünftige numerische Methode, die Eigenwerte zu berechnen? Warum? 7.23 Bevor man die QR-Iteration anwendet, um die Eigenwerte einer Matrix zu berechnen, wird die Matrix vorher in eine einfachere Form transfomiert. Geben Sie die Form an: (a) Für eine reelle Matrix. (b) Für eine reelle symmetrische Matrix Multiplizieren Sie das WILKINSON- Polynom p(λ) = (λ 1)(λ 2) (λ 20) aus. Benutzen Sie dazu die Symbolic Math Toolbox (a) Berechnen Sie mit der MATLAB- Funktion eig die Eigenwerte der Matrix A = (b) Ändern Sie das Matrixelement a 22 zu und berechnen Sie die Eigenwerte der neuen Matrix. (c) Ändern Sie a 22 zu und berechnen Sie erneut die Eigenwerte. (d) Welche Folgerung können Sie bezüglich der Konditionen der Eigenwerte von A machen? 7.26 Berechnen Sie in MATLAB die Eigenwerte und Eigenvektoren des verallgemeinerten Eigenwertproblems mit und Ax = λbx A = B =

325 7.7 Übungsaufgaben Es sei A die folgende Matrix: A = Benutzen Sie MATLAB, um die folgenden Aufgaben zu lösen: (a) Bestimmen Sie λ 1, λ 2, λ 3, die drei Eigenwerte der Matrix A. (b) Bestimmen Sie orthonormale Eigenvektoren. (c) Berechnen Sie det(a λi) und zeigen Sie, daß dies für die Eigenwerte null ist. (d) Zeigen Sie die Gültigkeit von AQ = QD, wobei Q diejenige Matrix ist, in deren Spalten die Eigenvektoren stehen, und D die Diagonalmatrix mit den Eigenwerten in der Diagonalen Finden Sie die Eigenwerte und Eigenvektoren folgender Matrizen. Sie können zur Berechnung irgendeine Methode verwenden. Geben Sie für jeden Eigenwert die algebraische und geometrische Vielfachheit an. ( ) 6 0 (a) 7 1 ( ) 0 1 (b) (c) Wie sieht die JORDANSCHE Normalform von A = aus? 2 A = A = A = Überprüfen Sie Ihr Resultat mit der Symbolic Math Toolbox Welcher der folgenden drei Vektoren ist Eigenvektor von ( ) 2 1 ( ) 1 1 ( ) 2 2 ( )?

326 326 7 Eigenwertprobleme

327 8 Interpolation Es kann nicht geleugnet werden, daß ein großer Teil der elementaren Mathematik von erheblichem praktischen Nutzen ist. G.H. HARDY Die Aufgabenstellung, zu einer gegebenen Liste von Punkten (t i,y i ),i = 0,1,...,n, eine Funktion f eines bestimmten Typs zu finden, die in den gegebenen Stützstellen t i die Werte y i annimmt, heißt Interpolation. Ist f ein Polynom, so spricht man von Polynominterpolation, ist f eine gebrochen rationale Funktion, nennt man die Aufgabenstellung rationale Interpolation. Im Fall stückweiser polynomialer Funktionen, bei denen in den Stützstellen, an denen verschiedene Polynome zusammentreffen, noch zusätzliche Differenzierbarkeitsbedingungen gelten müssen, spricht man von Spline-Interpolation. Die Art der zur Interpolation verwendeten Funktionen hängt vom Einsatzgebiet ab. 8.1 Interpolation durch Polynome Polynominterpolation gehört zu den Standardaufgaben der numerischen Mathematik; Hauptanwendungen liegen bei der Entwicklung von numerischen Approximationen, z.b. bei der numerischen Differentiation und Integration oder der numerischen Lösung von Differentialgleichungen. Für die kontinuierliche Darstellung diskreter Daten ist Polynominterpolation in der Regel ungeeignet; die dort eher verwendete Spline-Approximation beruht allerdings auch auf Polynominterpolation. Existenz und Eindeutigkeit des Interpolationspolynoms sieht man durch folgende Überlegung ein. Mit dem Ansatz n p (t) = a k t k lauten die Interpolationsbedingungen k=0 n a k t k i = y i, k=0 i = 0,1,2,...,n. Dies ist ein lineares Gleichungssystem für die gesuchten Koeffizienten a k, dessen Matrix 327

328 328 8 Interpolation vom VANDERMONDE-Typ ist: 1 t 0 t 2 0 t n 0 1 t 1 t 2 1 t n t n t 2 n t n n a 0 a 1. a n = y 0 y 1. y n Bekanntlich gilt für die Determinante dieser Matrix 1 t 0 t 2 0 t n 0 1 t 1 t 2 1 t n 1 det.... = (t i t j ), 1 t n t 2 n t n i>j n so daß das obige lineare Gleichungssystem eine eindeutige Lösung besitzt, wenn die Stützstellen paarweise verschieden sind. In diesem Fall gibt es demnach genau ein Polynom p 0n vom Höchstgrad n, das die Interpolationsbedingungen erfüllt; ist q ein beliebiges von Null verschiedenes Polynom, so interpoliert p (t) = p 0n (t) + q (t) n (t t j ) offensichtlich ebenfalls die gegebenen Daten, der Grad von p ist jedoch größer als n. Sei nun p ik das (eindeutig bestimmte) Interpolationspolynom zu den Datenpunkten (t j,y j ), j = i,...,k. Dann gilt: j=0 p ik (t) = p i,k 1 (t) t t k + p i+1,k (t) t t i t i t k t k t ( i ) pi+1,k (t) p i,k 1 (t) = p i,k 1 (t) + (t t i ) t k t i wie man leicht durch Nachprüfen der Interpolationsbedingungen beweist: Für j = i + 1,...,k 1 ist p ik (t j ) = p i,k 1 (t j ) t j t k t i t k + p i+1,k (t j ) t j t i t k t i t j t k t j t i = y j + y j t i t k t k t i = y j. Für j = i bzw. j = k ist die Interpolationseigenschaft ebenfalls erfüllt: p ik (t i ) = p i,k 1 (t i ) t i t k t i t k + p i+1,k (t i ) t i t i t k t i = p i,k 1 (t i ) = y i p ik (t k ) = p i,k 1 (t k ) t k t k t i t k + p i+1,k (t k ) t k t i t k t i = p i+1,k (t k ) = y k

329 8.1 Interpolation durch Polynome 329 Prinzipiell kann man daher das Interpolationspolynom p 0n rekursiv aus den Polynomen p ik berechnen: p 00 (t) p 01 (t) p 02 (t) p 11 (t) p 12 (t) p 22 (t)... Die Pfeile deuten an, welche Polynome jeweils benötigt werden; die Berechnung erfolgt spaltenweise von unten beginnend; dies erlaubt bei der Realisierung in einem Programm eine kompakte Speicherung. Der resultierende Algorithmus ist: Initialisierung : p kk (t) = y k, k = 0,1,2,...,n p ik (t) = p i,k 1 (t) + p i+1,k (t) p i,k 1 (t) t k t i (t t i ) i = k 1,k 2,...,0; k = 1,2,...,n. Für die Datenpunkte (1, 1),(2, 2),(4, 3),(8, 4) ergibt sich beispielsweise spaltenweise t i k=0 k=1 k=2 k=3 1 p 00 (t) = 1 p 01 (t) = t p 02 (t) = 3 2 t t2 p 03 (t) = 7 4 t p 11 (t) = 2 p 12 (t) = t p 13 (t) = t 1 24 t2 4 p 22 (t) = 3 p 23 (t) = t 8 p 33 (t) = 4 24 t t3 Das Interpolationspolynom ist dann p 03 (t) = t 7 24 t t3. Beim numerischen Rechnen verwendet man den angegebenen Algorithmus nicht in dieser Form; er ist jedoch die Grundlage für zwei wichtige numerische Verfahren: die NEWTON-Interpolation und den NEVILLE-Algorithmus, auf die wir noch näher eingehen werden. Für das Verständnis der numerischen Eigenschaften der Polynominterpolation ist es notwendig, den Interpolationsfehler zu studieren; den Beweis für die folgende Fehlerformel können wir erst im nächsten Abschnitt führen: Ist p das eindeutig bestimmte Interpolationspolynom zu den Datenpunkten (t i,f (t i )), i = 0,1,...,n, und ist f mindestens n + 1-mal stetig differenzierbar auf dem kleinsten Intervall I, das t und die Stützstellen t i enthält, so gilt für (mindestens) eine Stelle ξ I die Gleichung f (t) p (t) = 1 (n + 1)! f(n+1) (ξ) n (t t k ). Diese Restgliedformel ist eine Verallgemeinerung des Mittelwertsatzes der Differentialrechnung; sie ist von theoretischer Bedeutung, da sie eine Erklärung für das Verhalten von Interpolationspolynomen ermöglicht: Beispiel 8.1 Interpolation durch Polynome k=0

330 330 8 Interpolation 1. Bei äquidistanter Interpolation in den äquidistanten Stützstellen t i = a + ih, i = 0, 1,2,..., n, kann man den Faktor n k=0 (t t k) in der Restgliedformel für t = a + sh, I = [a, a + nh], wie folgt schätzen: n n ) ) max t I k=0 (t t k ) k=0 (a + h 2 t k) = h n+1 n k=0 ( 1 2 k ( hn+1 n 2 e Die letztere aus der STIRLINGSCHEN Formel resultierende Asymptotik liefert den Term n ( ) h n k k=0 ) n ( n für alle n mit einem relativen Fehler von weniger als 1%. Bei äqudistanter Interpolation muß man daher mit einem sehr großen maximalen Interpolationsfehler rechnen. 2. Das Standardbeispiel, das dieses ungünstige Verhalten tatsächlich aufweist, stammt von CARL RUNGE ( ), der in der numerischen Mathematik insbesondere durch das RUNGE-KUTTA-Verfahren zur numerischen Lösung von Differentialgleichungen bekannt ist; interpoliert man die Funktion f (t) = 1 25t äquidistant auf dem Intervall [ 1, 1], so kommt es in Randnähe für wachsendes n zu immer größer werdenden Oszillationen des Interpolationspolynoms: Für n=12 ergibt sich beispielsweise p(t) = t t t t t t Durch eine geschicktere Wahl der Stützstellen läßt sich der Oszillationseffekt reduzieren; so gilt beispielsweise für die TSCHEBYSCHEFF-Knoten ( i + 1 ) 2 t i = cos n + 1 π, i = 0, 1,2,..., n, auf dem Intervall [ 1,1] die Gleichung max t [ 1,1] n (t t k ) = 1 2, n k=0 so daß für diese Stützstellenwahl die Fehlerschätzung 1 f (t) p(t) max 2 n (n + 1)! t [ 1,1] f (n+1) (t) richtig ist. Die TSCHEBYSCHEFF-Knoten sind die Nullstellen der TSCHEBYSCHEFF-Polynome n ( ( i + 1 )) T n+1 (t) = cos ((n + 1) arccos (t)) = 2 n 2 t cos n + 1 π. NEVILLE-Algorithmus Für eine vorgegebene feste Stelle t liefert der Algorithmus in Function-File 8.1 unmittelbar den Wert des Interpolationspolynoms p nn an der Stelle t; diese Vorgehensweise bezeichnet man auch als NEVILLE-Algorithmus. Er spielt eine zentrale Rolle bei den sogenannten Extrapolationsverfahren, z.b. dem ROMBERG-Verfahren zur numerischen Integration. In diesen Anwendungen ist meist t = 0 und t i 0,i = 0,1,...,n, was auf folgenden Algorithmus führt: p kk (0) = y k i=0 p ik (0) = p i,k 1 (0) + p i+1,k (0) p i,k 1 (0) 1 t k ti i = k 1,k 2,...,0, k = 1,2,...,n.

331 8.1 Interpolation durch Polynome 331 Von besonderer praktischer Bedeutung ist auch die Interpolation von Datenpunkten, die achsensymmetrisch zur Ordinate liegen, durch ein gerades Polynom: Durch Interpolation der n + 1 Datenpunkte ( t 2 i,y i),i = 0,1,2,...,n, und Auswertung dieses Polynoms an der Stelle t 2 erhält man den Wert des Interpolationspolynoms zu den 2n + 2 Datenpunkten ( t i,y i ),i = 0,1,2,...,n,(t i,y i ),i = 0,1,2,...,n, an der Stelle t. In diesem Fall muß man (im Fall t = 0) lediglich im vorher angegebenen Algorithmus den Term t k /t i durch (t k /t i ) 2 ersetzen. Der NEVILLE-Algorithmus liefert den Wert des Interpolationspolynoms an einer vorgegebenen Stelle t 0 : Eingabe: Stützstellen t 0,...,t n, Stützwerte y 0,...,y n ; Stelle x 0 Ausgabe: Wert des Interpolationspolynoms an der Stelle x 0 1 function p=neville(t,y,x0) 2 % % NEVILLE berechnet den Wert des Interpolationspolynoms 4 % n-ten Grades zu den Punkten (t[i],y[i]),i=1..n+1, an 5 % der Stelle x0 mit Hilfe des Neville-Algorithmus. 6 % n = length(y)-1; 8 for k=2:n+1 9 for i=k-1:-1:1 10 y(i)=y(i)+(y(i+1)-y(i))*(x0-t(i))/(t(k)-t(i)); 11 end 12 end 13 p=y(1); Function-File 8.1: NEVILLE-Verfahren Beispiel 8.2 NEVILLE-Verfahren 1. Das Interpolationspolynom zu den Datenpunkten P 0 = (1, 4), P 1 = (2,2), P 2 = (3, 6), P 3 = (5,17) kann an der Stelle t = 0 mit dem NEVILLE-Algorithmus ausgewertet werden, ohne daß das Interpolationspolynom als Funktion berechnet werden muß. Das nachfolgende Schema zeigt die Zwischenergebnisse der Prozedur NEVILLE: / / Der Speicherplatz, der zu Beginn den Wert y 0 = 4 enthielt, ist am Ende der Prozedur mit dem gesuchten Wert p 04 (0) = 63 4 belegt. sin(x) 2. Der Grenzwert lim soll näherungsweise aus den Daten x 0 x t i sin(t i ) t i

332 332 8 Interpolation durch Interpolation berechnet werden; als Näherung für den Grenzwert nimmt man den Wert des Interpolationspolynoms an der Stelle 0. Der NEVILLE-Algorithmus liefert als beste Näherung den Wert Berücksichtigt man bei der Durchführung des NEVILLE- Algorithmus, daß die interpolierte Funktion sin (x)/x eine gerade Funktion ist, so resultiert eine erheblich bessere Approximation des Grenzwerts; man führt den NEVILLE-Algorithmus für die quadrierten Stützstellen durch: Beim ROMBERG-Verfahren zur numerischen Integration berechnet man anstelle des Integrals 1 1 f (t)dt zu den Schrittweiten h k = 1 2 k 1, k = 0, 1,2,..., n, zunächst die Trapezsummen T k = 1 2 f ( 1) k 1 k 2 k 1 j=1 ( f 1 + j ) k 1 2 f (1). k Aus der sogenannnten EULER-MACLAURINschen Summenformel folgt für hinreichend glatte Integranden, daß T k der Wert einer geraden Funktion an der Stelle h = h k ist: T k = 1 1 f (t)dt + α 2h 2 k + α 4h 4 k + Die hierbei auftretenden Konstanten α j sind von h k unabhängig. Wegen lim T k = k 1 1 f (t)dt ist es naheliegend, den Grenzwert näherungsweise durch gerade! Interpolation der Datenpunkte (h 0, T 0),(h 1, T 1),..., (h n, T n) zu berechnen. Da man den Wert der Grenzfunktion nur im Punkt 0 berechnen will, realisiert man den Grenzübergang durch den NEVILLE-Algorithmus in der erwähnten Variante zur Interpolation gerader Funktionen: p kk (0) = T k, k = 0, 1, 2,..., n. p ik (0) = p i,k 1 (0) + p i,k 1 (0) p i+1,k (0) 4 i k 1 i = k 1, k 2,..., 0, k = 1,2,..., n. Für das Integral 1 cos(t)dt erhält man auf diese Weise die folgenden Näherungen:

333 8.1 Interpolation durch Polynome 333 Die aus den 4 Trapeznäherungen durch Interpolation gewonnene Schätzung des Integrals ist ; der exakte Wert ist Die zeilenweise Realisierung des NEVILLE-Algorithmus erlaubt im Falle des ROMBERG-Verfahrens eine adaptive Strategie: Man vergleicht aufeinander folgende Näherungen und beendet den Algorithmus, wenn der relative Unterschied eine vorgegebene Genauigkeitsschranke unterschreitet. Das Hinzufügen einer weiteren Zeile erfordert lediglich die Neuberechnung einer Trapezsumme und die NEVILLE-Schritte. Der m-file romberg.m, der sich auf der beiliegenden CD befindet, realisiert das ROMBERG-Verfahren für das Integrationsintervall [ 1, 1]; das Verfahren bricht nach Erreichen einer vorgegebenen Genauigkeit eps oder einer maximalen Anzahl max von Schritten ab. Anmerkung: Gegebenenfalls muß man mit Hilfe der Substitutionsregel ein Integral b a Gestalt 1 f (t)dt bringen: 1 b a g (t)dt = 1 1 ( 1 1 (b a)g 2 2 (a + b) + 1 ) (b a)t dt. 2 g (t) dt auf die NEWTONSCHE Darstellung des Interpolationspolynoms Polynome können bekanntlich bezüglich unterschiedlicher Basen dargestellt werden; die bekannteste Darstellung ist die TAYLOR-Entwicklung eines Polynoms n-ten Grades um 0: p (t) = n a k t k, k=0 die jedoch in der Regel nur für theoretische Zwecke, wie z.b. im obigen Existenzbeweis, günstig ist; andere Darstellungen benutzen als Basis sogenannte Orthogonalpolynome. Für die Interpolation spielen nur jene Darstellungen eine wichtige Rolle, die einen direkten Bezug zu den vorgegebenen Daten haben, z.b. das NEWTONSCHE Interpolationspolynom: p 0n (t) = n k=0 (t t j ) γ 0k k 1 Stellt man das Interpolationspolynom p ij zu den Datenpunkten P l := (t l,y l ), l = i,i + 1,..., j in dieser NEWTONSCHER Form dar p ij (t) = j k=i j=0 k 1 γ ik j=i (t t j ), so nennt man die Koeffizienten γ ik dividierte Differenzen; wir bezeichnen sie auch durch γ ik = [P i,...,p k ] bzw. γ ik = f [t i,...,t k ], wenn f (t i ) = y i. Aus der Eindeutigkeit des Interpolationspolynoms folgt, daß [P i,...,p k ] als Höchstkoeffizient des Interpolationspolynoms zu den entsprechenden Datenpunkten invariant ist gegen Vertauschungen: Für jede Permutation π ist [P i,...,p k ] = [ P π(i),...,p π(k) ]. Die dividierten Differenzen γik lassen sich rekursiv be-

334 334 8 Interpolation rechnen: γ kk = [P k ] = y k, k = 0,1,2,...,n γ ik = [P i,...,p k ] = [P i+1,...,p k ] [P i,...,p k 1 ] t k t i = γ i+1,k γ i,k 1 t k t i. γ ik nämlich ist der Höchstkoeffizient des Interpolationspolynoms p ik (t) zu den Punkten P j = (t j,y j ), j = i,i + 1,...,k : p ik (t) = k j=i j 1 γ ij l=m (t t l ) Die Rekursion zur Berechnung der dividierten Differenzen ergibt sich daher einfach dadurch, daß man in der Rekursionsformel 8.1 p ik (t) = p i,k 1 (t) + p i+1,k (t) p i,k 1 (t) t k t i (t t i ) die Höchstkoeffizienten vergleicht. Algorithmus der dividierten Differenzen: Initialisierung : γ kk = y k, k = 0,1,...,n γ ik = γ i+1,k γ i,k 1 t k t i i = k 1,k 2,...,0, k = 0,1,2,...,n. Im Fall n = 3 wird spaltenweise, jeweils bei der Diagonale beginnend, also von unten nach oben, folgendes Schema berechnet; es bedeute [P k ] = y k. t 0 [P 0 ] [P 0,P 1 ] [P 0,P 1,P 2 ] [P 0,P 1,P 2,P 3 ] t 1 [P 1 ] [P 1,P 2 ] [P 1,P 2,P 3 ] t 2 [P 2 ] [P 2,P 3 ] t 3 [P 3 ] Bei der Realisierung dieses Algorithmus in einem Programm beachte man, daß man die Rechnung vollständig in einem eindimensionalen Array durchführen kann; die jeweils in einer Zeile des obigen Schemas stehenden Größen überschreiben nacheinander denselben Speicherplatz. Zu Beginn enthält dieses Array die Daten y 0,y 1,...,y n, nach Beendigung des Algorithmus γ nn,γ n 1,n,...,γ 0n. Der nachfolgende Function-File 8.2 berechnet die dividierten Differenzen; die Prozedur liefert die dividierten Differenzen als Array von Zahlen: u k = γ kn, k = 0,1,...,n.

335 8.1 Interpolation durch Polynome function dd=divdiff(t,y) 2 % % DIVDIFF berechnet die dividierten Differenzen, 4 % d.h. die Koeffizienten des Newtonschen 5 % Interpolationspolynoms n-ten Grades zu den n+1 6 % Datenpunkten (t(1),y(1)),...,(t(n+1),y(n+1)). 7 % n = length(t)-1; 9 for k=2:n+1 10 for i=k-1:-1:1 11 y(i)=(y(i+1)-y(i))/(t(k)-t(i)); 12 end 13 end 14 dd = y; Function-File 8.2: Algorithmus der dividierten Differenzen Eingabe: Stützstellen t 0,...,t n ; Stützwerte y 0,...,y n. Ausgabe: Dividierte Differenzen γ kn von n k=0 γ kn k 1 j=0 (t t n j). Gibt man die Datenpunkte (t i,y i ),i = 0,1,...,n, in umgekehrter Reihenfolge beim Aufruf der Prozedur divdiff ein, so erhält man die Koeffizienten des NEWTONSCHEN Interpolationspolynoms p 0n (t) = n k=0 (t t j ). γ 0k k 1 Beispiel 8.3 NEWTONSCHE Darstellung Für die Datenpunkte P 0 = (1, 4), P 1 = (2,2), P 2 = (3, 6), P 3 = (5,17) liefert divdiff die dividierten Differenzen Das Interpolationspolynom ist daher j=0 u 0 = [P 3, P 2, P 1, P 0] = 5/8 u 1 = [P 3, P 2, P 1] = 1/2 u 2 = [P 3, P 2] = 11/2 u 3 = [P 3] = 17. p 03 (t) = (t 5) (t 5) (t 3) 5 (t 5) (t 3) (t 2). 8 Das Rechnen mit Polynomen, die NEWTONSCHER Darstellung gegeben sind, erfolgt ähnlich wie im Fall von Polynomen der Art n k=0 a kt k mit dem vollständigen HORNER- Schema: Sei p (t) = n k=0 a k 1 k j=0 (t t j) ; dann berechnen sich die Koeffizienten b k des Po-

336 336 8 Interpolation lynoms p bzgl. der Entwicklungspunkte τ 0,τ 1,...,τ n gemäß a (i+1) n a (i+1) k b i := a n := a (i) k + a(i+1) k+1 (τ i t k i ) := a (i+1) i a (0) k : = a k,k = 0,1,2,...,n k = n 1,n 2...,i, i = 0,1,2,...,n. das heißt, es ist p (t) = n k=0 b k 1 k j=0 (t τ j). Der Beweis resultiert aus folgender Überlegung: Man berechnet zunächst den Wert p (τ 0 ) durch das einfache HORNER-Schema n k=0 ( ) (τ 0 t j ) = a (1) n (τ 0 t n 1 ) + a (0) n 1 (τ 0 t n 2 ) + a (0) n 2 } {{ } a (0) k 1 k j=0 =a (1) n 1 Dann gilt für das Polynom p [τ 0,t] = p(t) p(τ 0) t τ 0 analog fortfahrend ergibt sich } {{ } =a (1) n 2 p (t) = p [τ 0,t](t τ 0 ) + p (τ 0 ) p [τ 0,t] = n 1 k=0 (t t j ); a (1) k 1 k j=0 p (t) = p [τ 0,τ 1,t] (t τ 0 ) + p [τ 0,τ 1 ](t τ 0 ) + p (τ 0 ) p [τ 0,τ 1,t] = p [τ 0,t] p [τ 0,τ 1 ] t τ 1 = n 2 k=0 (t t j ), a (2) k 1 k j=0 (τ 0 t n 3 )+a (0) n 3 usw. Im Fall τ 0 = τ 1 = = τ n gilt für die Koeffizienten b k nach dem TAYLORSCHEN Lehrsatz: b k = 1 k! p(k) (τ 0 ), das heißt das vollständige HORNERschema ist auch zweckmäßig zur Differentiation von Polynomen in NEWTONSCHER Darstellung. Eingabe: Koeffizienten α k und Stützstellen t j von n k=0 α k 1 k j=0 (t t j), neue Entwicklungspunkte τ j Ausgabe: Koeffizienten a k von n k=0 a k 1 k j=0 (t τ j) Die Angabe des Parameters l bewirkt, daß nur die ersten l + 1 dividierten Differenzen berechnet werden; l = 0 entspricht daher dem einfachen HORNER-Schema, das p an der Stelle τ 1 auswertet.

337 8.1 Interpolation durch Polynome function vh=vhorner(alpha,t,tau,l) 2 % % VHORNER entwickelt ein Polynom, das in Newtonscher 4 % Darstellung um t(i),i=1:n, gegeben ist, um die 5 % Entwicklungspunkte tau(i), i=1:n, um. 6 % Gibt man einen 4. Parameter l an, so werden nur l 7 % Zeilen des vollständigen Hornerschemas durchgeführt. 8 % a=alpha 10 n=length(a)-1; 11 m=min(n,l) 12 for i=0:m 13 for k=n-1:-1:i 14 a(k+1)=a(k+1)+a(k+2)*(tau(i+1)-t(k-i+1)); 15 end 16 end 17 vh=a(1:l); Function-File 8.3: Das vollständige HORNER-Schema Beispiel 8.4 NEWTONSCHE Darstellung 1. Durch Anwendung des vollständigen HORNER-Schemas auf das Polynom p (t) = 1 + 2(t 1) + 3 (t 1) (t 2) + 4(t 1) (t 2) (t 3) + 5(t 1) (t 2) (t 3) 2 erhält man die Umentwicklung p(t) = (t 5) (t 5) (t 5) 2 (t 7) + 5(t 5) 2 (t 7) 2 Der Ablauf des HORNER-Schemas t i τ i = 5 (5 3) = 14 (5 3) = 31 (5 2) = 95 (5 1) = 5 (5 3) = 24 (5 2) = 103 (5 1) = 5 (7 2) = 49 (7 1) = 5 (7 1) läßt sich wie folgt deuten: Es werden sukzessiv die Koeffizienten und Werte der nachfolgenden Polynome berechnet: p(t) = 1 + 2(t 1) + 3 (t 1) (t 2) + 4(t 1) (t 2) (t 3) + 5 (t 1) (t 2) (t 3) 2 p[5, t] = p[5,5, t] = p[7,5, 5, t] = p[7,7,5, 5, t] = p (t) p(5) = (t 1) + 14(t 1) (t 2) + 5 (t 1) (t 2) (t 3) t 5 p [t,5] p [5, 5] = (t 1) + 5(t 1) (t 2) t 5 p [t,5,5] p[7,5, 5] = (t 1) t 7 p [t,5,5, 7] p [5, 5,7, 7] = 5 t 7

338 338 8 Interpolation Aus der Gleichung folgt p(t) p(5) t 5 = (t 1) + 14 (t 1) (t 2) + 5(t 1) (t 2) (t 3) p (t) = (t 5)+31(t 5) (t 1)+14 (t 5) (t 1) (t 2)+5(t 5) (t 1) (t 2) (t 3) das heißt, durch das HORNER-Schema werden in der NEWTONSCHEN Darstellung die Entwicklungspunkte [1, 2, 3, 3] gegen [5, 1, 2, 3] ausgetauscht. Das wiederholte Austauschen der Entwicklungspunkte liefert demzufolge die gewünschte Umentwicklung. 2. Für die Durchführung des NEWTON-Verfahrens zur Berechnung einer Polynomnullstelle x k+1 = x k p(x k), k = 0, 1,2, 3,... p (x k ) berechnet man evtl. auch in komplexer Arithmetik in jedem Iterationsschritt zwei Zeilen des vollständigen HORNER-Schemas: Die erste Zeile des HORNER-Schemas liefert p(x k ), die zweite mit demselben Entwicklungspunkt x k die Ableitung p (x k ). Hat man eine Nullstelle τ 0 gefunden, so liefert die erste Zeile des HORNER-Schemas die Koeffizienten des Polynoms p[τ 0, t] = p(t) p(τ 0) t τ 0. Auf dieses kann man erneut das NEWTON-Verfahren anwenden usw. Rundungs- und Abbruchfehler bei der Berechnung der Nullstellen bewirken, daß die wiederholte Abdivision zu evtl. immer stärker verfälschten Nullstellennäherungen führt. Aus Gründen der numerischen Stabilität ist es wichtig, die Nullstellen in einer bestimmten Reihenfolge zu berechnen und abzudividieren: Ist z.b. p (t) = n k=0 k 1 a k j=0 (t t j), so sollte man zunächst die am nächsten bei t 0 liegende Nullstelle berechnen und abdividieren, danach die am nächsten bei t 1 liegende usw. Die Berechnung von Polynomnullstellen ist schwieriger als es aufgrund der einfachen Struktur von Polynomen erscheinen mag; eine Alternative zu Nullstellenverfahren, wie dem NEWTON-Verfahren, sind in diesem Fall Eigenwertmethoden: Interpretiert man nämlich p (t) = n k=0 a k k 1 j=0 (t tj), an = 1, als charakteristisches Polynom det(ti F) der Begleitmatrix t a 0. 1 t a1 F = , tn 2 a n t n 1 a n 1 so kann man die Nullstellen von p z.b. mit Hilfe des QR-Algorithmus zur Eigenwertberechnung bestimmen. Zum Schluß dieses Abschnitts soll noch die Restgliedformel für die Interpolation bewiesen werden. Dazu nehmen wir an, daß die gegebenen Daten y i die Werte einer hinreichend oft differenzierbaren Funktion f sind: (t i,f (t i )), i = 0,1,...,n. Sei nun q das eindeutig bestimmte Interpolationspolynom vom Höchstgrad n + 1, das die n + 2 Datenpunkte (t i,f (t i )), i = 0,1,...,n, und f (τ,f (τ)) interpoliert, p das Interpolationspolynom zu den Datenpunkten (t i,f (t i )), i = 0,1,...,n. Die Funktion f q hat aufgrund der Interpolationsbedingungen offensichtlich Nullstellen bei t i, i = 0,1,...,n, und τ; daher hat sie (zwischen den Nullstellen) nach dem Satz von ROLLE mindestens n + 1 Extremwerte, die wir mit ξ (1) i bezeichnen. Für diese gilt: f (1) ( ξ (1) i ) q (1) ( ξ (1) i ) = 0, i = 0,1,...,n.

339 8.1 Interpolation durch Polynome 339 Die Funktion f (1) q (1) hat demzufolge mindestens n + 1 Nullstellen; also gibt es mindestens n Extremalstellen ξ (2) i,i = 0,1,...,n 1, daher ist ( ) ( ) f (2) ξ (2) i q (2) ξ (2) i = 0, i = 0,1,...,n 1. Setzt man diese Überlegung fort, so folgt schließlich die Existenz einer Stelle ξ (n+1) 0 mit der Eigenschaft ( ) f (n+1) ξ (n+1) 0 Da p ein Polynom n+1-ten Grades ist, ist 1 ( ) q (n+1) ξ (n+1) 0 = 0. ( (n+1)! q(n+1) ξ (n+1) 0 ) der Höchstkoeffizient von q; wegen der Eindeutigkeit des Interpolationspolynoms kann dieser Höchstkoeffizient auch als dividierte Differenz geschrieben werden. Daher ist [P 0,...,P n,(τ,f (τ))] = Die Interpolationsbedingung f (τ) = q (τ) f (τ) = n k=0 läßt sich auch in der Form 1 ( ) (n + 1)! f(n+1) ξ (n+1) 0. k 1 [P 0,,P k ] (τ t j ) + [P 0,...,P n,(τ,f (τ))] j=0 f (τ) = p (τ) + [P 0,...,P n,(τ,f (τ))] schreiben; weil τ beliebig war, ist damit die Restgliedformel f (t) p (t) = für eine geeignete Stelle ξ bewiesen. 1 (n + 1)! f(n+1) (ξ) n (τ t j ) j=0 n (t t j ) j=0 n (τ t j ) Beispiel 8.5 Abschätzung Interpoliert man die Funktion f (t) = sin (t) auf dem Intervall [ π, ] π 2 2 in den Punkten π, π,0, π, π durch ein Polynom vom Höchstgrad 4, so gilt für die Abweichung zwischen dem Interpolationspolynom p 3 (t) = 32 ( 1 + ) 2 t ( ) 2 t 3π 3 3π und der Sinusfunktion: sin (t) p 3 (t) 1 ) ) 4! (t 2 (t π2 2 π2 t Nachfolgend geben wir zwei wichtige Anwendungen der Polynominterpolation an. Beispiel 8.6 Anwendungen j=0

340 340 8 Interpolation 1. Interpolation verwendet man auch zur Konstruktion von numerischen Differentiationsformeln: Für die Daten (a + kh, f (a + kh)), k = ±1, ±2,..., ±m, ergibt sich z.b. für m=1 das Schema der dividierten Differenzen: f(a+h) f(a) h a + h f (a + h) a f (a) a h f (a h) f(a+h) 2f(a)+f(a h) 2h 2 f(a) f(a h) h Entwickelt man das Interpolationspolynom zu den Datenpunkten (a + ih, f(a + ih)), i = 1,0, 1 mit dem HORNER-Schema um die Stelle t = a, f (a) f (a h) f (a + h) 2f (a) + f (a h) f (a h) + (t a + h) + (t a + h) (t a) h 2h 2 f (a + h) f (a h) f (a + h) 2f (a) + f (a h) = f (a) + (t a) + (t a) 2 2h 2h 2 so erhält man Näherungen für die Ableitungen, deren Approximationsgüte man mit Hilfe von TAYLOR Entwicklung beurteilt: f (a + h) f (a h) 2h = f (a) f(3) (a)h 2 + O ( h 4) f (a + h) 2f (a) + f (a h) 2h 2 = 1 2 f (a) f(4) (a)h 2 + O ( h 3) Durch Wahl von Lage und Anzahl der Stützstellen kann man auf diese Weise verschiedene numerische Differentiationsformeln herleiten. 2. Die sogenannten NEWTON-COTES-Formeln zur numerischen Integration entstehen durch äquidistante Interpolation der Datenpunkte (a + ih, f (a + ih)), i = 0, 1,2,..., n, h = b a, und anschließender Integration des Interpolationspolynoms. Der jeweilige n Restgliedterm b a f (t) dt Q f beschreibt die asymptotische Genauigkeit der Formeln; die auftretende Stelle ξ liegt jeweils im Intervall [a,b] : n h NEWTON-COTES-Formel Q f Fehler 2 h = b a 3 h = b a 2 4 h = b a 3 h 2 (f (a) + f (a + h)) f (ξ)h 3 Trapezregel h 3 (f (a) + 4f (a + h) + f (a + 2h)) f(iv) (ξ) h 5 SIMPSON-Regel 3h 2 (f (a) + 3f (a + h) + 3f (a + 2h) + f (a + 3h)) f(iv) (ξ) h Regel Aus der Restgliedformel folgt beispielsweise, daß die SIMPSON-Regel kubische Polynome exakt integriert. Für n 8 entstehen Formeln mit teilweise negativen Koeffizienten ( Gewichte ), die numerisch instabil sind und daher nicht verwendet werden. Bei den GAUSSSCHEN Quadraturformeln verwendet man als Stützstellen die Nullstellen der sogenannten LEGENDRE-Polynome; diese besondere Stützstellenwahl führt bei gleicher Knotenzahl zu sehr viel genaueren Formeln, als es die NEWTON-COTES-Formeln sind. 8.2 LAGRANGE-Interpolation Die LAGRANGESCHE Darstellung des Interpolationspolynoms lautet p 0n (t) = n k=0 n j=0,j k y k n j=0,j k (t t j ). (t k t j )

341 8.2 LAGRANGE-Interpolation 341 Die Polynome L k (t) := n j=0,j k n j=0,j k (t t j ), k = 0,1,2,...,n (t k t j ) bezeichnet man auch als LAGRANGESCHE Grundpolynome. Sie erfüllen die Gleichung n L k (t) = 1, k=0 was man unmittelbar einsieht, wenn man das Interpolationspolynom zu den Daten (t 0,1),(t 1,1),...,(t n,1) in der LAGRANGESCHEN Form darstellt. Mit der Bezeichnung 1 λ kn :=, k = 0,1,...,n n (t k t j ) j=0,j k folgt durch Kürzen von n (t t j ) aus j=0 p 0n (t) = n k=0 y kl k (t) n k=0 L k (t) die baryzentrische Darstellung des LAGRANGESCHEN Interpolationspolynoms: n k=0 y λ kn n k k=0 t t (y k y) λ kn p 0n (t) = k t t = y + k n λ kn n λ kn k=0 k=0 t t k t t k Dabei ist y = 1 n n+1 k=0 y k der Mittelwert der Stützwerte. Die Gleichung n k=0 L k (t) = 1 läßt sich auch in der Form 1 n λ kn = n t t (t t j ) k k=0 j=0 schreiben; insbesondere ist daher λ n+1,n+1 = 1 n (t n+1 t j ) j=0 = n k=0 λ kn t n+1 t k = n k=0 λ k,n+1. Diese Gleichung bedeutet insbesondere auch, daß für n 1 die Summe der Koeffizienten n+1 k=0 λ 1 k,n+1 = 0 ist. Die Berechnung der Koeffizienten λ kn := n erfolgt ähnlich wie beim Algorithmus der dividierten Differenzen rekursiv: (t k t j ) j=0,j k λ 00 = 1 λ 01 = 1 = λ 00,λ 11 = 1 = λ 01 t 0 t 1 t 0 t 1 t 1 t 0 λ 02 = 1 (t 0 t 1 ) (t 0 t 2 ) = λ 01 1,λ 12 = t 0 t 2 (t 1 t 0 ) (t 1 t 2 ) = λ 11,λ 22 = λ 02 λ 12 t 1 t 2

342 342 8 Interpolation Allgemein ist λ kk := 0 λ ik := λ i,k 1 t i t k λ kk := λ kk λ ik λ 00 := 1 i = 0,1,...,k 1 k = 1,2,...,n. Eingabe: Stützstellen t 0,...,t n ; n; Ausgabe: Koeffizienten λ kn der baryzentrischen Darstellung des LAGRANGESCHEN Interpolationspolynoms 1 function b=baryz(t) 2 % % BARYZ berechnet die Koeffizienten des Lagrangeschen 4 % Interpolationspolynoms in baryzentrischer Darstellung 5 % n=length(t); 7 lambda=zeros(1,n); 8 lambda(1)=1; 9 for k=2:n 10 for i=1:k-1 11 lambda(i)=lambda(i)/(t(i)-t(k)); 12 lambda(k)=lambda(k)-lambda(i); 13 end 14 end 15 b=lambda; Function-File 8.4: Berechnung der baryzentrischen Form des Interpolationspolynoms

343 8.2 LAGRANGE-Interpolation 343 Bemerkung: 1. Im Unterschied zu den dividierten Differenzen, die von Stützstellen t i und Stützwerten y i abhängen, gehen bei der Berechnung der Koeffizienten λ ik nur die Stützstellen ein. Die Verwendung der baryzentrischen Darstellung des LAGRANGESCHEN Interpolationspolynoms ist daher z.b. dann zweckmäßig, wenn mehrere Datensätze mit gleichen Stützstellen zu interpolieren sind. Darüber hinaus sind die Koeffizienten λ kn invariant gegen Translation der Stützstellen. 2. Für äquidistante Stützstellen t i = t 0 +ih,i = 0,1,2,...,n, lassen sich die Koeffizienten λ kn explizit angeben: λ kn = n j=0,j k 1 (kh jh) = 1 ( ) 1 h n k!( 1) k n (n k)! = ( 1)k n n n!h n k Daher läßt sich das Interpolationspolynom für äquidistante Stützstellen in der Form mit t = t 0 + s h schreiben. p 0n (t 0 + s h) = y + ( n k=0 (y k y) ( 1)k n) k s k n ( 1) k ( n) k k=0 s k ( i+ 1 ) 2 3. Auch bei Verwendung der TSCHEBYSCHEFF-Knoten t i = cos n+1 π, i = 0,1,...,n, lassen sich die Koeffizienten λ kn direkt angeben; wegen d dt n (t t j ) = t=tk j=0 n j=0,j k (t k t j ) berechnen sich die Koeffizienten λ kn als Kehrwert von ( ( )) d k + 1 dt T 2 n+1 cos n + 1 π λ kn = d dt t=cos cos ((n + 1) arccos (t)) ( ) k+ 1 2 n+1 π = ( 1) k n + 1 ( k+ 1 ) : 2 sin n+1 π ( sin k+ 1 ) 2 = ( 1) k n+1 π,k = 0,1,...,n. n + 1

344 344 8 Interpolation Das LAGRANGESCHE Interpolationspolynom lautet in diesem Fall also ( ( 1) k k+ 1 ) 2 sin n k=0 (y n+1 π k y) ( k+ 1 ) 2 t cos n+1 π p 0n (t) = y + ( ( 1) k k+ 1 ) 2 sin n n+1 π k=0 ( k+ 1 ) 2 t cos n+1 π Das numerische Verhalten des NEWTONSCHEN und LAGRANGESCHEN Interpolationspolynoms (in baryzentrischer Darstellung) ist grundlegend verschieden: Rundungsfehler bei der Berechnung der dividierten Differenzen bewirken, daß beim NEWTONSCHEN Interpolationspolynom die Interpolationseigenschaft verloren geht; Fehler bei der Berechnung der Koeffizienten λ kn haben (zumindest solange λ kn 0 bleibt) keinen Einfluß auf die Interpolationseigenschaft. Allerdings handelt es sich dann bei p 0n (t) im allgemeinen nicht mehr um ein Polynom, sondern um eine interpolierende gebrochen rationale Funktion. Da die dividierte Differenz γ 0n der Höchstkoeffizient des Interpolationspolynoms p 0n ist, gilt der Zusammenhang n γ 0n = y k λ kn k=0 zwischen den dividierten Differenzen und den Koeffizienten des LAGRANGESCHEN Interpolationspolynoms. 8.3 HERMITE-Interpolation Gibt man neben Funktionswerten auch Werte von Ableitungen vor, welche das Interpolationspolynom annehmen soll, so spricht man von HERMITE-Interpolation. Sowohl das NEW- TONSCHE wie auch das LAGRANGESCHE Interpolationspolynom haben Verallgemeinerungen auf diesen Fall. Wir behandeln hier nur die NEWTONSCHE Form des HERMITESCHEN Interpolationspolynoms; zur LAGRANGESCHEN Form vgl. zum Beispiel [81]. ( Seien also die Daten t i,y (j) i ), j = 0,1,...,v i, i = 0,1,...,n, gegeben. Die Berechnung der Koeffizienten geschieht mittels des Schemas der dividierten Differenzen, das in geeigneter Weise mit den gegebenen Daten initialisiert wird; wir deuten dies für den Fall k 0 = 1, k 1 = 2, k 2 = 3 an: t 0 y 0 * * * * * 1 t 1 y 1 1! y(1) 1 * * * t 1 y 1 * * * 1 t 2 y 2 1! y(1) 2 1 t 2 y 2 t 2 y 2 1 2! y(2) 2 1! y(1) 2

345 8.3 HERMITE-Interpolation 345 Die durch * angedeuteten Größen werden spaltenweise von unten beginnend als dividierte Differenzen berechnet; die resultierende Prozedur unterscheidet sich nur unwesentlich von der gewöhnlichen NEWTON-Interpolation, wenn man die gegebenen Stützstellen und Stützwerte in der Form y 0,...,y (v 0 1) 0,y 1,...,y (v 1 1) 1,...,y n,...,y n (vn 1) anordnet. Der Function-File hermite.m, der sich auf der beiliegenden CD befindet, erwartet als [ Eingabe die Stützstellen [t 0,...,t n ], die Vielfachheiten ] [v 0,...,v n ] und den Datenvektor y 0,...,y (v 0 1) 0,y 1,...,y (v 1 1) 1,...,y n,...,y n (vn 1). Eingabe: Stützstellen t 0,t 0,...,t } {{ 0,...,t } n,...,t n, die Vielfachheiten [v } {{ } 0,...,v n ], Stütz- v 0 v n werte y 0,y 0,...,y } {{ 0,...,y } n,...,y n ; n } {{ } v 0 v n Ausgabe: Dividierte Differenzen γ 0k der NEWTONSCHEN Darstellung des HERMITE- SCHEN Interpolationspolynomes m k=0 γ k 1 0k j=0 (t τ j), wobei τ j = t 0, j = 1,...,v 0, τ v0 +j = t 1, j = 1,...,v 1, usw. Als Resultat liefert der Function File hermite.m die Koeffizienten des HERMITE- SCHEN Interpolationspolynoms p (t) = m k=0 k 1 γ 0k j=0 (t τ j ) ; dabei ist m = n k=0 v k,τ = t n,...,t } {{ n,t } n 1,...,t n 1,...,t } {{ } 0,...,t } {{ 0 }. Insbesondere ist v n v n 1 v 0 also τ 0 = t n. Mit Hilfe des vollständigen HORNER-Schemas läßt sich diese Form des Interpolationspolynoms gegebenenfalls in eine andere umwandeln. Beispiel 8.7 HERMITE-Interpolation 1. Zu bestimmen sei ein Polynom p, das folgende Bedingungen erfüllt: p(1) = 1 p (1) = 0 p (1) = 1.5 p(2) = 4 p (2) = 2 p(4) = 0.5 p (4) = 1 p (4) = 2 p (3) (4) = 1 Es ist t = [1, 2,4], v = [3, 2,4], y = [ 1, 0,1.5, 4,2, 1 2, 1,2, 1]. Das HERMITESCHE Interpolationspolynom ist p (x) = 1 2 (x 4) + (x 4) (x 4)3 + [ +(x 4) [ (x 2) + (x 2) ]] 1913 (x 1) (x 1)

346 346 8 Interpolation 2. Das kubische HERMITE-Interpolationspolynom zu den Daten (t i, y i),(t i, y i),(t i+1, y i+1),(t i+1, y i+1) spielt in vielen Anwendungen eine besonders wichtige Rolle: p(t) = y i + y i (t t i) + y i+1 y i t i+1 t i y i t i+1 t i (t t i) 2 + y i+1 2 y i+1 y i t i+1 t i + y i (t i+1 t i) 2 (t t i) 2 (t t i+1). Stückweise Interpolation mit Polynomen dieser Art ist beispielsweise die Grundlage der Darstellung von Kurven in gängigen Grafikprogrammen; die erforderlichen Ableitungswerte werden hier interaktiv vom Benutzer so festgelegt, daß die resultierende Kurve dem ästhetischen Empfinden des Anwenders am nächsten kommt. 3. Das kubische HERMITESCHE Interpolationspolynom ist auch geeignet, Näherungslösungen von numerischen Verfahren zur Lösung von gewöhnlichen Differentialgleichungen zu interpolieren. Diese Verfahren berechnen zur Differentialgleichung y (t) = f (t,y (t)), y (t 0) = y 0 durch eine geeignete Verfahrensvorschrift Näherungswerte (t k, y k ), k = 0, 1,..., n auf einem Gitter. Durch stückweise HERMITE-Interpolation der Datenpunkte (t k, y k, f (t k, y k )),k = 0,1,..., n erhält man dann eine auf dem gesamten Intervall stetig differenzierbare Näherungslösung für die Differentialgleichung. 8.4 Interpolation durch Spline-Funktionen Sei a = t 0 < t 1 < t 2 < < t n = b eine Zerlegung des Intervalls [a,b]; eine zweimal stetig differenzierbare Funktion s heißt interpolierende kubische Spline-Funktion zu den Datenpunkten (t i,y i ), i = 0,1,2,...,n, wenn folgende Bedingungen erfüllt sind: 1. s (t i ) = y i,i = 0,1,...,n, das heißt, s interpoliert die Datenpunkte (t i,y i ), i = 0,1,2,...,n. 2. s ist auf jedem Teilintervall [t i,t i+1 ], i = 0,1,...,n 1, ein kubisches Polynom. Zur Berechnung der Spline-Funktion macht man auf dem Teilintervall [t i,t i+1 ] den Ansatz als kubisches HERMITESCHES Interpolationspolynom; die nicht gegebenen Ableitungen an den Stützstellen t i bezeichnen wir mit λ i : y i+1 y i t s i (t) = y i +λ i (t t i )+ i+1 t i λ i (t t i ) 2 + λ y i+1 2 i+1 y i t i+1 t i + λ i t i+1 t i (t i+1 t i ) 2 (t t i ) 2 (t t i+1 ) ; der Ansatz als HERMITESCHES Interpolationspolynom stellt schon sicher, daß die resultierende Spline-Funktion auf dem Intervall [a, b] einmal stetig differenzierbar ist. Die Größen λ i müssen noch so bestimmt werden, daß s sogar zweimal stetig differenzierbar ist: s i (t i+1 ) = s i+1 (t i+1 ),i = 0,1,...,n 2. Diese n 1 Gleichungen lauten explizit wie folgt: y i+1 y i t 2 i+1 t i λ i + 4 λ y i+1 2 i+1 y i y t i+1 t i + λ i+2 y i+1 i t = 2 i+2 t i+1 λ i+1 2 λ y i+2 2 i+2 y i+1 t i+2 t i+1 + λ i+1 t i+1 t i t i+1 t i t i+2 t i+1 t i+2 t i+1 i = 0,1,...,n 2.

347 8.4 Interpolation durch Spline-Funktionen 347 Jede dieser Gleichungen enthält genau drei Unbekannte λ i,λ i+1,λ i+2 ; das resultierende lineare Gleichungssystem besitzt daher Tridiagonalgestalt. Zur Abkürzung setzen wir h i+1 = t i+1 t i, i+1 = y i+1 y i t i+1 t i : 0 = 2 i+1 λ i + 4 λ i+1 2 i+1 + λ i t i+1 t i t i+1 t i ( 2 4 = λ i h i+1 h i+1 h i+2 ( 2 i+2 λ i+1 2 λ ) i+2 2 i+2 + λ i+1 t i+2 t i+1 t i+2 t i+1 ) λ i h i+2 λ i+2 6 i+2 h i+2 6 i+1 h i+1 In Matrixform lauten diese Gleichungen dann 2 h h 2 h h 2 h h 3 h h 3 h h h n = 3 2 h n 1 h n h n h 2 h 1 3 h h 2 n 1. + n 2 h n 1 h n 2 n + n 1 h n h n 1 + λ 0 λ 1 λ 2. λ n 2 λ n 1 1 h = + λ n h n Die Parameter λ 0 und λ n sind frei wählbar. Die Matrix dieses linearen Gleichungssystems ist offensichtlich symmetrisch und positiv definit; zu jedem λ 0 und λ n ist die Lösung daher eindeutig bestimmt. Je nach Wahl der freien Parameter λ 0 und λ n erhält man verschiedene wichtige Typen von Spline-Funktionen: 1. Die natürlichen Splines haben die Eigenschaft, daß s (a) = s (b) = 0 ist; unter allen zweimal stetig differenzierbaren, die Datenpunkte (t i,y i ),i = 0,1,..,n interpolierenden Funktionen f minimieren sie b a f (t) 2 dt. Diese Splines kommen dem mechanischen Analogon, einem in verschiedenen Punkten fixierten flexiblen Lineal, am nächsten; außerhalb des ersten und letzten Stützpunktes verläuft das Lineal linear. 2. Bei periodischen Splines fordert man s (a) = s (b), s (a) = s (b), falls die Daten die Periodizitätsbedingung y 0 = y n erfüllen. Splines dieser Art finden beispielsweise bei der Darstellung geschlossener Kurven Anwendung. 3. Legt man den Spline durch die Forderung fest, daß s in den Punkten t 1 und t n 1 dreimal stetig differenzierbar ist, so spricht man von einem Not-a-knot-Spline. In diesem

348 348 8 Interpolation Fall ist s auf [t 0,t 2 ] und [t n 2,t n ] ein kubisches Polynom. Not-a-knot-Splines verwendet man, wenn keine weiteren qualitativen Informationen über die zu interpolierenden Daten vorliegen; soll z.b. aus einer diskreten Wertetabelle (t i,f (t i )), i = 0,1,...,n, a = t 0 < t 1 < < t n = b, eine Näherung für b a f (t) dt berechnet werden, so wendet man die SIMPSON-Regel auf jedem Teilintervall auf den Not-a-knot-Spline zu dieser Wertetabelle an: b a n 1 f (t) dt i=0 n 1 [( ) yi+1 + y i s i (t)dt = λ ] i+1 λ i (t i+1 t i ) (t i+1 t i ) t i 2 12 ti+1 i=0 4. Besonders einfach ist die Berechnung des Splines, wenn die Ableitungen s (a) = λ 0 und s (b) = λ n gegeben oder sinnvoll approximierbar sind. In diesem Fall nutzt man zweckmäßigerweise diese Zusatzinformation. Zur Berechnung kubischer Splines löst man zunächst simultan das obige lineare Gleichungssystem mit den drei beteiligten Inhomogenitäten. Bezeichnen wir mit u 1,u 2,u 3 die drei Lösungsvektoren, so sind die Spline-Koeffizienten in Abhängigkeit von λ 0,λ n λ 1 λ 2. λ n 2 λ n 1 = u 1 + λ 0 u 2 + λ n u 3 berechenbar; im Fall gegebener Randableitungen läßt sich die Vorgehensweise offensichtlich vereinfachen. Für die verschiedenen Spline-Typen muß jeweils noch ein 2 2-Gleichungssystem gelöst werden: 1. Natürliche Splines. Die Bedingung s (a) = 0 = s (b) führt auf das Gleichungssystem ( 2 + u21 u 31 u 2,n u 3,n 1 )( λ0 Hieraus läßt sich λ 0 und λ n ausrechnen. λ n ) 3 y 1 y 0 u 11 = h 1 3 y n y n 1 u 1,n 1 h n 2. Periodische Splines. Die Zusatzbedingungen lauten s 1 (a) = s n (b),s 1 (a) = s n (b), das heißt, es ist λ 0 = λ n = 3 y 1 y 0 u 11 h 1 + h u 21 + u 31 h 1 3 y n y n 1 u 1,n 1 h n h n u. 2,n 1 + u 3,n 1 h n

349 8.4 Interpolation durch Spline-Funktionen Not-a-knot-Splines führen auf die Bedingungen s 0 (t 1 ) = s 1 (t 1 ) bzw. s n (t n 1 ) = s n 1 (t n 1 ); die gesuchten Werte λ 0 und λ n sind Lösungen des Gleichungssystems ( 1+u 21 h 2 1 u 2,n 1 h 2 n = u 22+u 21 h 2 2 u 2,n 1+u 2,n 2 h 2 n 1 u 31 h u 3,n 1 h 2 n u 12 2 y 2 y 1 h 2 +u 11 h 2 2 u 1,n 1 2 y n 1 y n 2 +u h 1,n 2 n 1 h 2 n 1 u 32+u 31 h 2 2 u 3,n 1+u 3,n 2 h 2 n 1 u11 2 y1 y 0 h 1 h 2 1 u1,n 1 2 yn y n 1 hn h 2 n ) ( λ0 λ n ) Die folgenden Prozeduren realisieren die Spline-Interpolation in zwei Schritten: Die Routine GenSpline löst den Teil des Problems, der bei allen kubischen Spline-Interpolierenden gleich ist; die Prozedur RandBdg schließlich berechnet die Ableitungen λ k, k = 0, 1,..., n, der Spline-Funktion in den Knoten. Beide Function-Files befinden sich auf der beiliegenden CD. Eingabe: Als Eingabe erwartet GenSpline die Stützstellen und Stützwerte in einem jeweils von 0 bis n indizierten Array. Ausgabe: Als Ausgabe liefert die Routine die drei Lösungsvektoren des linearen Gleichungssystems spaltenweise in einer n 3-Matrix A: Der Function-File RandBdg berechnet die Ableitungen der Spline-Funktion in den Stützstellen entsprechend der Zusatzbedingung; Stützstellen und Stützwerte sind als von 0 bis n indiziertes Feld einzugeben, m=n+1. A ist die Matrix, die von der Prozedur GenSpline generiert wird. Der Eingabeparametertyp kann die Werte 1,2,3 und 4 annehmen. 1. typ=1: Natürliche Randbedingungen 2. typ=2: Periodische Randbedingungen 3. typ=3: Not-a-knot-Randbedingungen; m 4 4. typ=4: Vorgabe der Randableitungen λ 0 und λ n Sind die Ableitungen des Splines in den Knoten berechnet, so kann man jedes Teilpolynom durch kubische HERMITE-Interpolation der Daten (t i,y i,λ i ), i = 0,1,2,...,n, berechnen. Beispiel 8.8 Interpolation durch Splines Die Datenpunkte t i y i sollen durch die verschiedenen kubischen Splines interpoliert werden. Der Aufruf >> GenSpline([1,3,4,5,8,9],[5,1,2,6,4,4])

350 350 8 Interpolation liefert die Matrix, das heißt die Vektoren u 1, u 2 und u 3: A := Für die verschiedenen Randbedingungen ergeben sich verschiedene Ableitungen an den Knoten: 1. Natürliche Randbedingungen. Aufruf >>R = RandBdg(1,t,y,u1,u2,u3,0,0) Auf dem Intervall [5, 8] erhält man die gesuchte natürliche Spline-Funktion durch kubische HERMITE- Interpolation: p (t) = 6 + ( ) (t 5) (t 5) (t 5) 2 (t 8) 8 5 (8 5) 2 = t t t 3 Die Spline-Funktion ist: t t t 3 falls t < t t t 3 falls t < 4 s (t) = t t t 3 falls t < t t t 3 falls t < t t t 3 falls t 9 Man bestätigt leicht die Eigenschaften des kubischen natürlichen Splines, z.b. ist 2. Periodischer Spline. Aufruf: >> R=RandBdg(2,t,y,A,n,0,0) s (9) = = 0 Dieser Spline-Typ ist bei den vorliegenden Daten nicht sinnvoll, da diese selbst nicht periodisch sind. 3. Not-a-knot-Spline. Aufruf: >> R=RandBdg(3,t,y,A,n,0,0) Die Vorgehensweise ist entsprechend derjenigen bei natürlichen Splines. Es ergibt sich die Spline-Funktion t t t 3, t < t t t 3, t < 4 s (t) = t t t 3, t < t t t 3, t < t t t 3, t 9 Die für die Not-a-knot-Splines typische Eigenschaft, daß die entsprechenden Teilpolynome auf den ersten und letzten beiden Intervallen übereinstimmen, ist deutlich erkennbar. Das MATLAB-Kommando spline führt Interpolation mit diesem Spline-Typ durch. 4. Vorgegebene Randableitungen. Der Aufruf:

351 8.4 Interpolation durch Spline-Funktionen Verschiedene interpolierende kubische Splines 7 natürlicher Spline not a knot Spline beide Randableitungen Abbildung 8.1: Verschiedene interpolierende kubische Splines >>R = RandBdg(4,t,y,A,n,5,7) liefert die Daten für einen Spline, dessen Randableitungen die Werte 5 bzw. 7 haben. Beispiel 8.9 Interpolation von Kurven durch Splines Durch die Punkte (1,3),(4, 2),(3,6),(5, 7),(1,4), (1, 3) soll eine glatte, geschlossene Kurve gelegt werden. Dazu führt man die Bogenlänge ausgehend von dem ersten Datenpunkt des zugehörigen Polygonzugs als Parameter t ein und interpoliert die Koordinaten durch jeweils einen kubischen periodischen Spline: t i x i y i (4 1) 2 + (2 3) 2 = (3 4) 2 + (6 2) 2 = = Bemerkung: MATLAB stellt zur eindimensionalen Interpolation das Kommando interp1 zur Verfügung; der Aufruf yi = interp1(x,y,xi,methode) erlaubt die Auswahl

352 352 8 Interpolation 8 7 Streckenzug periodische interpolierende Splinefunktion Abbildung 8.2: Interpolation einer geschlossenen Kurve durch Splines folgender Interpolationsmethoden: Methode nearest linear spline cubic Ergebnis: liefert den nächstliegenden y-wert» interp1([ ],[ ],3.5, nearest ) 1 stückweise lineare Interpolation» interp1([ ],[ ],3.5, linear ) 1 kubische Spline-Interpolation» interp1([ ],[ ],3.5, spline ) stückweise kubische Interpolation interp1([ ],[ ],3.5, cubic ) 0.75 Zur Art der hier durchgeführten Spline- und kubischen Interpolation vergleiche man die Literaturhinweise im m-file interp1.m. Das spline-kommando realisiert die Not-aknot-Bedingungen; der entsprechende Aufruf lautet: >> spline([ ],[ ],2.5) Mit dem polyfit-kommando erhält man die Koeffizienten des Interpolationspolynoms, wenn man den dritten Parameter entsprechend angibt; das Polynom wird bzgl. der Basis 1,x,x 2,x 3,... dargestellt: >> polyfit([ ],[ ],4) ans =

353 8.5 Weitere Bemerkungen und Hinweise 353 Das Interpolationspolynom ist also p (t) = 0.375t t t t Weitere Bemerkungen und Hinweise 1. Trigonometrische Interpolation. Sei n = 2m + 1. Das trigonometrische Polynom p (t) = a m ( ( ) ( )) 2π 2π a k cos T kt + b k sin T kt k=1 mit den Koeffizienten a k = 2 n b k = 2 n i=0 y i cos ( ) 2πki n i=0 y i sin ( ) 2πki n n 1 n 1 } k = 0,1,...,m interpoliert die Daten ( i n T, y i),i = 0,1,2,...,2m. Man bezeichnet p auch als diskrete FOURIER-Approximation der Daten; eine ähnliche Formel gibt es im Fall einer geraden Anzahl von Datenpunkten. Die Berechnung der Koeffizienten realisiert man zweckmäßig mit der schnellen FOURIER-Transformation FFT, auf die hier jedoch nicht eingegangen werden kann. Der interessierte Leser sei z.b. auf [116] verwiesen. 2. Rationale Interpolation. Die Berechnung von Polynomen p und q mit der Eigenschaft y i = p (t i),i = 0,1,...,n q (t i ) Grad(p) + Grad(q) n führt auf eine gebrochen rationale Funktion r (t) = p(t) q(t), die die gegebenen Datenpunkte interpoliert. Die Verallgemeinerung dieser Aufgabenstellung, bei der Ableitungswerte vorgegeben sind, bezeichnet man als rationale HERMITE-Interpolation. Es gibt verschiedene Algorithmen zur Berechnung von rationalen Interpolierenden; eine Methode, die auf einer Verallgemeinerung der LAGRANGESCHEN Interpolation in baryzentrischer Form beruht, wird in [81] beschrieben. Weitere MATLAB-Funktionen zur Interpolation und Approximation sind in der Spline Toolbox vorhanden. Die theoretischen Grundlagen hierzu findet der Leser in [13]. FORTRAN- Programme zur Spline-Interpolation sind in [89], [90] und [91] enthalten. Darunter befindet sich auch Software zur mehrdimensionalen Interpolation. Im einfachsten Fall ist eine zweidimensionale Funktion f : R 2 R zu interpolieren (bzw. zu approximieren). Allerdings ist jetzt sowohl die Wahl der Ansatzfunktionen als auch der Stützstellen wesentlich komplexer, und auch die Frage nach Existenz und Eindeutigkeit der Interpolierenden ist schwieriger zu beantworten. Für weitere Hinweise verweisen wir den Leser auf [78].

354 354 8 Interpolation 8.6 Übungsaufgaben 8.1 WAHR oder FALSCH: Es gibt beliebig viele mathematische Funktionen, die eine Menge von Datenpunkten interpolieren. 8.2 WAHR oder FALSCH: Die Darstellung eines Polynoms, das eine gegebene Menge von Datenpunkten interpoliert, ist eindeutig. 8.3 WAHR oder FALSCH: Es gibt genau ein Polynom, das n gegebene Datenpunkte interpoliert. 8.4 WAHR oder FALSCH: Zu n gegebenen Datenpunkten gibt es ein Interpolationspolynom vom Grad exakt n WAHR oder FALSCH: Sind Meßwerte durch eine Funktion darzustellen, so ist Polynominterpolation die zweckmäßige Rechentechnik. 8.6 WAHR oder FALSCH: Das NEWTON- SCHE Interpolationspolynom interpoliert exakt, auch wenn die dividierten Differenzen durch (Rundungs-)Fehler verfälscht sind. 8.7 WAHR oder FALSCH: Die baryzentrische Form des Interpolationspolynoms interpoliert exakt, auch wenn die dividierten Differenzen durch Rundungsfehler verfälscht sind. 8.8 WAHR oder FALSCH: Den NEVILLE- Algorithmus kann man zur Berechnung des Interpolationspolynoms verwenden. 8.9 WAHR oder FALSCH: Den NEVILLE- Algorithmus benutzt man zur Auswertung des Interpolationspolynoms an einer Stelle WAHR oder FALSCH: Interpoliert man gerade Datenpunkte, das heißt, zu jedem Datenpunkt (t i,y i ) existiert unter den Datenpunkten einer der Form ( t i,y i ), so entsteht ein gerades Interpolationspolynom WAHR oder FALSCH: Der Interpolationsfehler wird kleiner je mehr Datenpunkte man verwendet WAHR oder FALSCH: n Datenpunkte, die auf einem Polynom vom Höchstgrad n liegen, werden durch das Interpolationspolynom vom Höchstgrad n-1 exakt interpoliert WAHR oder FALSCH: Die Berechnung des NEWTONSCHEN Interpolationspolynoms erfordert weniger Rechenoperationen als die Berechnung der baryzentrischen Form WAHR oder FALSCH: n Datenpunkte (n > 3), die auf einer kubischen Parabel liegen, werden von natürlichen kubischen Splines stets exakt interpoliert WAHR oder FALSCH: n Datenpunkte (n > 3), die auf einer kubischen Parabel liegen, werden von kubischen Not-a-knot- Splines stets exakt interpoliert WAHR oder FALSCH: n Datenpunkte (n > 3), die auf einer kubischen Parabel liegen, werden von kubischen Splines bei Angabe der exakten Randableitungen stets exakt interpoliert WAHR oder FALSCH: n Datenpunkte (n > 3), die auf einer kubischen Parabel liegen, werden von periodischen kubischen Splines stets exakt interpoliert, wenn die Daten selbst periodisch sind Was ist der grundlegende Unterschied zwischen Interpolation und Approximation? 8.19 Nennen Sie mindestens zwei Anwendungen der Interpolation.

355 8.6 Übungsaufgaben Drücken Sie das folgende Polynom in der Form aus, die für das HORNER-Schema verwendet wird: p(t) = 5t 3 3t 2 + 7t Die Zahlen t 1,...,t n seien paarweise verschieden. Zeigen Sie, daß die VANDER- MONDE-Matrix A mit a ij = t j 1 i regulär ist Berechnen Sie eine Spline-Funktion, welche die Punkte (cos(π/8k), sin(π/8k)), k = 0,1,... 16, durch eine geschlossene Kurve verbindet. Welcher Spline Type ist der geeignete? 8.23 Sei L k (x) = n i=0,i k (x x i ) / n i=0,i k (x k x i ), x i paarweise verschieden. Beweisen oder widerlegen Sie: (a) Die Summe der LAGRANGESCHEN Grundpolynome ist stets 1: n L k (x) = 1. k=0 (b) Für n 2 gilt n x k L k (x) = x. k=0 (c) Für n 2, m n, gilt n x m k L k (x) = x m. k= (a) Berechnen Sie das Interpolationspolynom ( p zu den Daten i n,sin ( )) 2πi n,i = 0 : n, für n=4 und 9 in NEWTONSCHER und baryzentrischer Darstellung. (b) Berechnen Sie p (1.7) mit Hilfe des NE- VILLE-Algorithmus. (c) Schätzen Sie den Fehler sin (x) p (x) auf dem Intervall [0, 2π]. (d) Untersuchen Sie, ob die Folge der Interpolationspolynome ( zu den Daten i n,sin ( )) 2πi n, i = 0 : n, auf dem Intervall [0, 2π] für n gleichmäßig gegen die Sinusfunktion konvergiert Untersuchen Sie, ob es zu beliebigen Werten a, b, c, d ein Polynom gibt, das die Bedingungen p (0) = a, p (0) = b, p ( 1 2) = c, p (1) = d erfüllt Berechnen Sie das HERMITESCHE Interpolationspolynom zu den Daten t i f i f i Entwickeln Sie einen Algorithmus, der alle Ableitungen des Polynoms n k 1 p (x) = a k (x x i ) k=0 i=0 an einer beliebigen Stelle x = α berechnet ( Berechnen Sie aus den Werten 1 n,n( n e 1) ), n = 5,7,9,11, mit Hilfe des NEVILLE-Algorithmus eine Näherung für lim x 0 e x 1. x 8.29 Sei f (x) = 3xe x e 2x. Berechnen Sie eine Näherung für f (1.03) durch kubische HERMITE-Interpolation der Daten f (1),f (1) und f (1.1), f (1.1) Interpolieren Sie die Datenpunkte ( i,i 4 ),i = 0 : 6, durch einen natürlichen und einen Not-a-knot-Spline Berechnen Sie durch Spline- Interpolation eine geschlossene Kurve durch die Punkte (1,1),(0,2),(2,4),(3, 1),(1, 1). Worin unterscheiden sich natürlicher, periodischer und Not-a-knot-Spline?

356 356 8 Interpolation 8.32 Berechnen Sie die Koeffizienten der Darstellung x n = a 0 + a 1 (x 1) + a 2 (x 1) a n (x 1) n Benutzen Sie das vollständige HORNER-Schema, um das Polynom p (x) = 1 + 2(x 1) + 4(x 1) (x 3) + 2(x 1) (x 3) 2 in der Form p (x) = a + bx + cx 2 + dx 3 bzw. p (x) = a + b(x 3) + c(x 3) (x 2) + d(x 3) (x 2) (x 1) darzustellen Berechnen Sie die Koeffizienten der Darstellung x n = a 0 + a 1 (x 1) + a 2 (x 1) (x 2) + + a n (x 1) (x 2) (x n) Berechnen Sie die Koeffizienten der Darstellung (x 1) (x 2) (x n) = a 0 + a 1 x + a 2 x a n x n.

357 9 Nichtlineare Gleichungen Mathematics can be learned by talking and writing it is a human activity. GILBERT STRANG In diesem Kapitel besprechen wir Methoden, um nichtlineare Gleichungen zu lösen. Ist eine nichtlineare Funktion f : R n R n gegeben, so suchen wir nach einem Vektor x, für den gilt: f(x) = 0. Ist x eine Lösung, so nennt man sie Nullstelle des nichtlinearen Gleichungssystems bzw. der vektoriellen Gleichung. Beispiel 9.1 Nichtlineare Gleichungen Ein Beispiel einer nichtlinearen Gleichung in einer Variablen ist x 2 4sin(x) = 0. Ein Beispiel für ein nichtlineares Gleichungssystem in zwei Variablen x 1 und x 2 ist Die Abbildung 9.1 zeigt die dazugehörige Geometrie. x 2 1 x = 0 x 1 + x = 0. Naheliegende Fragen bei der Untersuchung nichtlinearer Gleichungssysteme sind: Existiert eine Lösung x von f(x) = 0? Unter welchen Bedingungen gibt es eine eindeutige Lösung? Wie bestimmt man eine Lösung x? Zur Lösbarkeit nichtlinearer Gleichungen Ein lineares Gleichungssystem hat immer eine eindeutige Lösung, wenn die Systemmatrix regulär ist. Die Fragen nach der Existenz und Eindeutigkeit nichtlinearer Gleichungssysteme sind viel schwerer zu beantworten. Geometrisch gesprochen bedeutet dies: Gekrümmte Linien und Flächen können sich nicht oder aber auf verschiedene Art und Weise schneiden. Linien können sich z.b. berühren, was bei Geraden nicht möglich ist. Bei linearen Systemen gibt es keine, genau eine oder unendlich viele Lösungen. Nichtlineare Systeme dagegen können jede Anzahl von Lösungen haben. Im folgenden interessieren wir uns nur für reelle Lösungen nichtlinearer Gleichungen. 357

358 358 9 Nichtlineare Gleichungen 10 Eindimensionales System 1.4 Zweidimensionales System Graph von f 1 f 1 (x)=0 f(x)=x 2 4sin(x) f 2 (x)= x Abbildung 9.1: Nichtlineare Gleichungen Beispiel 9.2 Reelle Lösungen nichtlinearer Gleichungen exp(x) + 1 = 0 hat keine Lösung. exp( x) x = 0 hat eine Lösung. x 2 4sin(x) = 0 hat zwei Lösungen. x 3 + 6x 2 11x 6 = 0 hat drei Lösungen. sin(x) = 0 hat unendlich viele Lösungen. Die Abbildung 9.2 zeigt dies geometrisch, wobei eine Lösung Schnittpunkt des Graphen der jeweiligen Funktion mit der x Achse ist. Darüber hinaus können nichtlineare Gleichungen mehrfache Nullstellen besitzen. Im eindimensionalen Fall (n = 1) sind das solche Lösungen x, bei denen sowohl die Funktion f als auch deren Ableitung(en) Null sind, das heißt zum Beispiel f(x) = 0 und f (x) = 0. Geometrisch bedeutet dies, daß der Graph der Funktion f zu der Nullstelle eine horizontale Tangente besitzt. Ist f(x) = 0, aber f (x) 0, so nennt man x eine einfache Nullstelle. Die Abbildung 9.3 zeigt mehrfache Nullstellen. Finden von Nullstellen Im Gegensatz zu linearen Gleichungssystemen können nichtlineare Systeme im allgemeinen nicht in endlich vielen Schritten gelöst werden. Algorithmen auf diesem Gebiet sind gewöhnlich iterativ, das heißt, man erzeugt eine Folge von Näherungen an die Lösung und beendet das Verfahren, wenn man nahe genug an der Lösung ist. Die Implementierung eines iterativen Verfahrens erfordert die Beantwortung folgender Fragen:

359 9 Nichtlineare Gleichungen Keine Nullstelle 1 Eine Nullstelle f(x)=e x f(x)=e x x f(x)=x 3 +6x 2 11x x 0 Drei Nullstellen x f(x)=sin(x) x Unendlich viele Nullstellen x Abbildung 9.2: Lösungen nichtlinearer Gleichungen 1 Doppelte Nullstelle bei x=3 2 Dreifache Nullstelle bei x= f(x) 0.5 f(x) x x Abbildung 9.3: Mehrfache Nullstellen

360 360 9 Nichtlineare Gleichungen Mit welchem Punkt beginnt man das Verfahren? (Startpunkt) Konvergiert die Iterationsfolge? (Konvergenz) Falls die Folge konvergiert, wie schnell? (Konvergenzgeschwindigkeit) Wie werden die Abbruchkriterien festgelegt? (Termination) Iterative Verfahren erzeugen eine Folge von Näherungen {x k } R, so daß gilt lim x k = x k für eine Nullstelle x der nichtlinearen Gleichung. Im Fall eines Systems von Gleichungen sind x k und x Vektoren entsprechender Dimension und Konvergenz bedeutet komponentenweise Konvergenz 1. Zur Konvergenzgeschwindigkeit von iterativen Methoden Iterative Methoden erzeugen immer genauere Näherungen an die Lösung und sie werden gestoppt, wenn das Ergebnis hinreichend genau ist. Der Aufwand eines iterativen Verfahrens hängt demnach von zwei Faktoren ab: 1. Den Kosten pro Iterationsschritt. 2. Der Anzahl der Iterationen. Meistens stehen diese beiden Faktoren im Gegensatz zueinander. Um die Effizienz von iterativen Methoden vergleichen zu können, müssen wir ihre Konvergenzgeschwindigkeiten 2 charakterisieren. Hierzu nehmen wir an, x 0,x 1,x 2,... sei die vom iterativen Verfahren erzeugte Folge von Vektoren, die gegen die Lösung x konvergiert. Gibt es eine Konstante c mit 0 c < 1, so daß gilt lim sup x k+1 x k x k x = c, dann sagt man, die Folge x k konvergiert 3 linear mit Rate c. Gibt es eine Zahl p > 1 und eine Konstante c, so daß x k+1 x lim sup k x k x p c, dann sagt man, die Folge konvergiert mindestens mit der Ordnung p. Ist p = 2, so ist die Ordnung mindestens quadratisch; ist p = 3, so ist die Konvergenzordnung mindestens kubisch, usw. Gilt sogar x k+1 x lim k x k x p = c 0, 1 Der Leser beachte die Notation: x k ist die k te Iteration des Vektors x. Ist x ein Skalar, so erkennt man aus dem Zusammenhang, ob x k die k te Komponente oder die k te Iteration von x ist. 2 Auch Konvergenzraten oder Konvergenzordnung genannt. 3 Es ist notwendig, lim sup in der Definition zu verwenden, weil der Grenzwert nicht notwendig existieren muß.

361 9 Nichtlineare Gleichungen 361 so konvergiert die Folge genau mit der Ordnung p. Ist c = 0 so nennt man die Konvergenz superlinear (p = 1), superquadratisch (p = 2) etc. Bei den nachstehend diskutierten Nullstellenverfahren hängt die Konstante c eng mit den Ableitungen der Funktion, deren Nullstelle berechnet wird, zusammen; daher können numerische Verfahren bei manchen Problemen eine höhere Konvergenzordnung haben als im Normalfall. Beispiel 9.3 Lineare Konvergenz Die Folge x k = 1/2 k konvergiert linear gegen Null mit c = 1/2, denn es gilt: x k+1 = 0.5x k. Die Tabelle 9.1 zeigt die ersten zehn Folgenglieder. k x k = 1/2 k Tabelle 9.1: Lineare Konvergenz k x k = e k Tabelle 9.2: Superlineare Konvergenz Beispiel 9.4 Superlineare Konvergenz Die Folge x k = e k2 konvergiert superlinear gegen Null. Die Tabelle 9.2 zeigt die ersten zehn Folgenglieder. Beispiel 9.5 Quadratische Konvergenz Die Folge x k = 1/(2 2k ) konvergiert quadratisch gegen Null. Die Tabelle 9.3 zeigt die ersten neun Folgenglieder. k x k = e k Tabelle 9.3: Quadratische Konvergenz

362 362 9 Nichtlineare Gleichungen Die Konvergenzgeschwindigkeit hängt von der Ordnung p und (im allgemeinen viel schwächer) von der Konstanten c ab; die Werte selbst hängen nicht nur von der Methode, sondern auch vom Problem ab. Je größer p ist, desto schneller ist die Konvergenz. Aber auch die Konstante c kann die Geschwindigkeit entscheidend beeinflussen. Eine linear konvergente Methode mit c 0 kann anfangs schneller konvergieren als ein quadratisch konvergentes Verfahren. Die Tabelle 9.4 zeigt dies in der idealen Situation x k+1 x = c x k x + p für verschiedene Konstanten c und Ordnungszahlen p. In allen Fällen gilt x 0 x = 1. Die Nulleinträge in der Tabelle stellen Zahlen dar, die kleiner als sind. p = 1 p = 1 p = 1 p = 1.3 p = 1.6 p = 2 k c = 0.1 c = 0.5 c = 0.95 c = 0.95 c = 0.95 c = Tabelle 9.4: Vergleich von Konvergenzgeschwindigkeiten In der Praxis treten ideale Konvergenzgeschwindigkeiten selten auf. Die Konvergenzgeschwindigkeit wird nur im Grenzfall beobachtet. Zu Beginn der Iteration ist noch nicht einmal garantiert, daß die Norm des Fehlers kleiner wird. Tatsächlich ist nicht ungewöhnlich, daß erst die letzten Iterationen die Geschwindigkeit offenbaren. Quadratische, superlineare und lineare Konvergenzgeschwindigkeiten sind für die Praxis die wichtigsten Fälle; höhere Konvergenzgeschwindigkeiten, zum Beispiel kubische, kommen seltener vor. Im allgemeinen ist eine quadratische Konvergenz einer superlinearen oder gar einer linearen Konvergenz vorzuziehen, wenn der Aufwand pro Iteration der gleiche ist. Oft aber sind Methoden mit kleinerer Geschwindigkeit effizienter, da ihr Aufwand pro Iteration geringer ist.

363 9 Nichtlineare Gleichungen 363 Ist ein Verfahren von p ter Ordnung, so vergrößert sich die Anzahl von korrekten Ziffern von Iterationsschritt zu Iterationsschritt ungefähr um den Faktor p. p muß dabei keinesfalls eine ganze Zahl sein. Es wird sich später zeigen, daß das sogenannte Sekantenverfahren von der Ordnung p = ist. Eine quadratisch konvergente Methode verdoppelt daher die Anzahl der korrekten Ziffern mit jedem Iterationsschritt. Bei Iterationsverfahren, die im k-ten Schritt zur Berechnung von x k+1 m frühere Näherungen x k,x k 1,...,x k m+1 verwenden, leitet man zur Berechnung der Konvergenzordnung meist durch TAYLOR Entwicklung zunächst eine Ungleichung der Form x k+1 x c x k x α 1 x k 1 x α2 x k m+1 x αm mit in der Regel nichtnegativen ganzzahligen Exponenten α i her. Unter bestimmten Voraussetzungen, die wir nachfolgend für den besonders wichtigen Fall m = 2 genauer ausführen, läßt sich die Konvergenzordnung p als positive Lösung der Gleichung x m = α 1 x m 1 + α 2 x m α m 1 x + α m berechnen. Zum Fall m = 2: Ist {ε k } eine positive Nullfolge, die mit geeigneten nichtnegativen Konstanten c, α, β der Ungleichung ε k+1 cε α k εβ k 1 genügt, so gilt unter der Voraussetzung β 1 < α : ε k+1 lim sup k ε p c (p 1)/(α+β 1), k das heißt, die Folge {ε k } k konvergiert mindestens mit der Ordnung p. Dabei bezeichnet p = α 2 + α β die positive Nullstelle der Gleichung x 2 = αx + β. Zum Beweis kann man ohne Beschränkung der Allgemeinheit annehmen, daß c = 1 ist, da die Nullfolge {ϑ k } k 1 ϑ k := c α+β 1ε k offenbar der Ungleichung ϑ k+1 ϑ α k ϑβ k 1 genügt. Wegen p (α p) + β = 0 gilt dann: ε k+1 ε p k ε α p k ε β k 1 ( ) α p ε p(α p)+β = = = ( ( ε k ε p k 1 ε k ε p k 1 ε k ε p k 1 k 1 ) α p ε 0 k 1 ) α p.

364 364 9 Nichtlineare Gleichungen Durch Induktion folgt: ε k+1 ε p k ( ) (α p) k ε1 Unter den hier getroffenen Voraussetzungen über α und β ist ε p 0 0 α p = α 2 α 2 Für das Polynom q (x) = x 2 αx β gilt nämlich: q. 4 + β > 1 : q ( 1) = 1 + α β > 0 ( ) α α β = 0 q (0) = β 0. = 1 die Unglei- { Also ist (α p) k} ( eine Nullfolge, so daß wegen lim ε1 k k ε p 0 chung ε k+1 lim sup k ε p 1 k gilt. Im allgemeinen Fall, in dem c 1 ist, erhält man demzufolge: ) (α p) k ε k+1 lim sup k ε p cα+β 1. k { } εk+1 Insbesondere ist unter den getroffenen Voraussetzungen ε für r < p eine Nullfolge; r k k wir bemerken noch, daß diese Aussage auch für den Grenzfall β 1 = α gilt. p 1 Beispiel 9.6 Konvergenzordnung von Iterationsverfahren 1. Für ein Iterationsverfahren x k+1 = G (x k,x k 1 ) gelte für den Fixpunkt x = G (x,x ) die Fehlerschätzung x k+1 x c x k x 2. Mit den Bezeichnungen ε k = x k x α = 2, β = 0 ist offenbar: ε k+1 cε α kε β k 1 Die Konvergenzordnung p ist daher die positive Nullstelle des Polynoms x 2 2x = 0.

365 9 Nichtlineare Gleichungen Für ein Iterationsverfahren x k+1 = G (x k,x k 1 ) gelte für den Fixpunkt x = G (x,x ) die Fehlerschätzung x k+1 x c x k x x k 1 x. Dann berechnet sich die Konvergenzordnung p als positive Nullstelle der Gleichung ( ) Es ist p = Für ein Iterationsverfahren x 2 = x + 1. x k+1 = G (x k,x k 1 ) gelte für den Fixpunkt x = G (x,x ) die Fehlerschätzung x k+1 x c x k x 2 x k 1 x. Dann berechnet sich die Konvergenzordnung p als positive Nullstelle der Gleichung Es ist p = x 2 = 2x + 1. Lokal, das heißt hinreichend nahe der Lösung, ist ein Verfahren höherer Ordnung stets einem Verfahren niedriger Ordnung überlegen, wenn der Rechenaufwand je Schritt vergleichbar groß ist. Bei einem Verfahren p-ter Ordnung vergrößert sich die Anzahl der gültigen Ziffern lokal in jedem Schritt im wesentlichen um den Faktor p; je nachdem, welchen Wert die Konstante c besitzt, kann diese Faustregel etwas über- oder unterschritten werden. Der Begriff Konvergenzordnung versucht, die Geschwindigkeit der Konvergenz durch eine Maßzahl zu messen. Die hier dargestellte Definition, die in [75] als Q-Ordnung 4 bezeichnet wird, ist in manchen Fällen jedoch zu pessimistisch. Die Q-Ordnung beschreibt gewissermaßen nur die Mindestgeschwindigkeit. Einen realistischeren Eindruck von der tatsächlichen asymptotischen Geschwindigkeit einer Folge gibt die sogenannte R-Ordnung 5. Betrachtet man z.b. die Nullfolge ε 0 < 1, { ε 2 ε k+1 = k, wenn k gerade ε 8 k, wenn k ungerade, so ist deren Q-Ordnung, das heißt die Konvergenzordnung im bisherigen Sinn, mindestens 2. Über zwei Schritte gesehen wird sich asymptotisch die Anzahl der gültigen Ziffern in den Näherungen jedoch versechzehnfachen, das heißt, im Mittel vervierfacht sich die Anzahl der gültigen Ziffern je Schritt. Dies ist die Idee der R-Ordnung einer positiven Nullfolge {ε k }; man definiert sie wie folgt: Existiert lim supε 1/pk k < k 4 Q steht für Quotient. 5 R steht für das englische Wort root, das heißt Wurzel.

366 366 9 Nichtlineare Gleichungen für eine Zahl p > 1, so bezeichnet man diese Zahl als R-Ordnung der Nullfolge {ε k }. Die R-Ordnung der Folge im vorangehenden Beispiel ist daher offensichtlich 4: Daher ist ε k = { ε 2 2k 0, wenn k gerade ε 22k 1 0, wenn k ungerade lim sup k ε 1/4k k = ε 0. Hat die von einem Iterationsverfahren erzeugte Folge die R-Ordnung p, so kann man im allgemeinen nicht darauf schließen, daß sich die Anzahl der gültigen Ziffern in jedem Schritt des Iterationsverfahrens ver-p-facht; im Mittel über viele Iterationsschritte stimmt dies dagegen. Die R-Ordnung ist stets mindestens so groß wie die Q-Ordnung eines Iterationsverfahrens. Insbesondere bei Iterationsverfahren, die aus mehreren Stufen unterschiedlicher Art bestehen, gibt man häufig nur die R-Ordnung an. Bemerkungen zum Abbruchkriterium Bei praktischen Verfahren wird ein Abbruchkriterium gebraucht, um die Iteration zu beenden, wenn die gewünschte Genauigkeit erreicht ist. Man stoppt, sobald die Norm des Fehlers x k x kleiner als eine vorgegebene Fehlertoleranz ist. Da die Lösung x unbekannt ist, ersetzt man x k x durch x k x k 1 und fordert wobei x k x k 1 tol, tol = x k ǫ r + ǫ a mit vorgegebenen Toleranzen ǫ r und ǫ a ist. Zur Sicherkeit fordert man x k x k 1 tol nicht nur für ein k, sondern für mehrere aufeinanderfolgende k Werte. Wählt man ǫ r = 0 oder ǫ a = 0, so macht man tol zu einer absoluten bzw. relativen Fehlertoleranz. Umsichtiger ist es jedoch, eine gewünschte Fehlertoleranz wie zum Beispiel ǫ r = ǫ a = ǫ zu wählen. Ist x n nämlich klein oder mittelgroß, so kontrolliert man dadurch den absoluten Fehler, wohingegen für große x n der relative Fehler kontrolliert wird. 9.1 Nichtlineare Gleichungen in einer Variablen Zuerst wollen wir nichtlineare Gleichungen in einer Variablen studieren. Danach betrachten wir nichtlineare Gleichungen und Methoden in mehreren Variablen. Das Problem in einer Variablen stellt sich wie folgt: Die Intervallhalbierungs- oder Bisektionsmethode Wechselt eine stetige Funktion f(x) auf einem Intervall ihr Vorzeichen, so muß sie in diesem Intervall mindestens eine Nullstelle haben. Dies ist der Zwischenwertsatz der Analysis.

367 9.1 Nichtlineare Gleichungen in einer Variablen 367 Lösen einer nichtlinearen Gleichung in einer Variablen Gegeben ist eine nichtlineare Funktion f : R R. Finde ein x R, so daß gilt: f(x) = 0. Diese Tatsache kann ausgenutzt werden, um eine Folge von immer kleiner werdenden Intervallen zu bestimmen, die eine Nullstelle von f enthalten. Um dies einzusehen, nehmen wir an, daß f(a)f(b) 0 ist und m = a+b 2 sei der Mittelpunkt des Intervalls [a, b]. Es folgt, daß entweder f(a)f(m) 0 oder f(m)f(b) 0 gilt, das heißt, entweder liegt eine Nullstelle in der linken Hälfte [a, m] oder rechten Hälfte [m, b] des Intervalls [a, b]. Die Abbildung 9.4 zeigt die ersten drei Iterationschritte. Einschließung der Nullstelle durch Intervallhalbierung Graph der Funktion a b a b a b a b Abbildung 9.4: Die Bisektionsmethode Diesen Halbierungsprozeß setzen wir so lange fort, bis das erreichte Intervall kleiner ist als eine vorgegebene Toleranz delta: while abs(a-b) > delta if f(a)*f((a+b)/2) <= 0 b = (a+b)/2; else a = (a+b)/2; end end Nullstelle = (a+b)/2;

368 368 9 Nichtlineare Gleichungen Dies ist eine Nullversion der Intervallhalbierungsmethode 6. Die MATLAB-Zeilen müssen in zwei Punkten überarbeitet werden. Erstens kann es sein, daß das Abbruchkriterium nicht erfüllt werden kann: in diesem Fall ist die while-schleife eine Endlosschleife. Dies ist der Fall, wenn delta kleiner ist als der Abstand der beiden Gleitpunktzahlen a und b. Um dies zu beheben, ersetzen wir die while Schleife durch while abs(a-b) > delta+eps*max(abs(a),abs(b)). Dies garantiert Konvergenz auch dann, wenn delta zu klein ist. Der zweite Mißstand besteht darin, daß pro Iteration zwei Funktionsauswertungen benötigt werden. Durch geschicktes Anordnen kann man aber erreichen, daß nur eine f-auswertung pro Schritt nötig ist. Schließlich erhalten wir die MATLAB-Funktion 9.1 als eine Implementierung der Bisektionsmethode. 1 function Nullstelle = Bisektion(fName,a,b,delta) 2 % % Input: fname: String fuer den Funktionsnamen. 4 % a,b : Intervallgrenzen. 5 % delta: Toleranz. 6 % Output: Nullstelle: Naeherung fuer Nullstelle. 7 % fa = feval(fname,a); 9 while abs(a-b) > delta+eps*max(abs(a),abs(b)) 10 m = (a+b)/2; 11 fm = feval(fname,m); 12 if fa*fm <= 0 13 %-Nullstelle in [a,m] 14 b = m; 15 else 16 %-Nullstelle in [m,b] 17 a = m; 18 fa = fm; 19 end 20 end 21 Nullstelle = (a+b)/2; Function-File 9.1: Intervallhalbierungsmethode Darüber hinaus haben wir zu Visualisierungszwecken einen Script-File ShowBisektion geschrieben 7. 6 Auch Bisektionsmethode genannt. 7 Dieser befindet sich auf der beiliegenden CD.

369 9.1 Nichtlineare Gleichungen in einer Variablen 369 Diesen benutzen wir, um die Intervallhalbierungsmethode an der nichtlinearen Gleichung x 2 4sin(x) = 0 zu demonstrieren. Das Abbruchkriterium ist durch eine while-schleife mit interaktiver Abfrage ersetzt worden. Die Tabelle 9.5 zeigt die Werte der Intervallgrenzen sowie die Intervallängen für diese 21 Iterationen. Iteration a b b a Tabelle 9.5: Intervallhalbierungsmethode für x 2 4sin(x) = 0 Nach 6 Iterationen mit ShowBisektion erhält man die Ausgabe wie in Abbildung 9.5 zu sehen. Man nennt Algorithmen, welche die Nullstelle in einem immer kleiner werdenden Intervall einschließen, auch Einschließungsalgorithmen. Es sollte erwähnt werden, daß der Zeitaufwand bei einem Nullstellen Algorithmus wie der Intervallhalbierungsmethode proportional zur Anzahl der Funktionsauswertungen ist. Die arithmetischen Operationen außerhalb der Funktionsauswertungen sind vernachlässigbar. Die Intervallhalbierungsmethode liefert natürlich nur dann eine Nullstelle, wenn das Anfangsintervall auch eine enthält. Sie kann dort aber auch mehrere Nullstellen haben, liefert aber nur eine als Ergebnis. Damit besteht die Hauptaufgabe im Bisektionsalgorithmus

370 370 9 Nichtlineare Gleichungen 10 Ausgewältes Intervall 8 Iterationen: 6 a = b = b a = Nullstelle: Abbildung 9.5: Nach 6 Iterationen darin, ein Startintervall zu finden, das eine Nullstelle enthält. Ist ein solches gefunden, dann ist die Konvergenz gewährleistet, vorausgesetzt f ist stetig. Die Konvergenz der Intervallhalbierungsmethode ist zwar gewährleistet, deren Konvergenzgeschwindigkeit aber ist nur linear mit p = 1 und c = 0.5. In jeder Iteration wird die Länge des Intervalls, in der sich die Lösung x befindet und damit eine obere Schranke für den möglichen Fehler halbiert, das heißt x k+1 x 0.5 x k x. Es gibt einen anderen Weg, die Konvergenzgeschwindigkeit des Intervallhalbierungsverfahrens zu beschreiben. Gegeben ist das Startintervall [a, b], dann ist die Länge des betrachteten Intervalls nach k Iterationen (b a)/2 k. Da der Algorithmus stoppt, wenn dieser Quotient kleiner als delta ist, werden log 2 ( b a delta ) Iterationen 8 bis zum Abbruch benötigt, unabhängig von der Funktion f. Somit läßt sich bereits vor der Rechnung die Anzahl der benötigten Iterationsschritte angeben. Beispiel 9.7 Konvergenzgeschwindigkeit der Intervallhalbierungsmethode Ist zum Beispiel b a = 2 und delta = 10 6, dann benötigt die Intervallhalbierungsmethode 21 Iterationsschritte, denn es gilt: >> ceil(log2(2/10^-6)) ans = 21 8 bedeutet: Runde auf nächste ganze Zahl.

371 9.1 Nichtlineare Gleichungen in einer Variablen 371 Dies sind genau die 21 Iterationsschritte aus Tabelle 9.5. Um die Genauigkeit beim Intervallhalbierungsverfahren um eine Dezimale zu erhöhen, 1 müssen wir die Länge des Intervalls um den Faktor 10 reduzieren. Ein Bisektionsschritt reduziert die Länge um 1 2, zwei Schritte um 1 4 und ungefähr 3.3 Iterationen um den Faktor Diese Beobachtung findet sich in Tabelle 9.5 wieder. Nach drei oder vier Iterationsschritten ist die Genauigkeit um eine Dezimale erhöht. Solch ein Verhalten ist typisch für lineare Konvergenz mit c = 0.5. Vorteile und Nachteile der Intervallhalbierungsmethode Vorteile Global konvergent (robust) Nachteile Nur lineare Konvergenzgeschwindigkeit Die NEWTON Methode Die Intervallhalbierungsmethode macht keinen Gebrauch von Funktionswerten; lediglich ihre Vorzeichen werden benutzt. Das Resultat ist, daß das Intervallhalbierungsverfahren langsam konvergiert. Benutzt man jedoch Funktionswerte 9, so läßt sich die Konvergenzgeschwindigkeit steigern, weil man so in jedem Iterationsschritt die Approximation an die Lösung erhöht. Dies realisieren wir jetzt mit der NEWTON-Methode 10. Die NEWTON-Methode ist wie die Intervallhalbierungsmethode eine iterative Methode zur Lösung nichtlinearer Gleichungen f(x) = 0. Wie bei den meisten iterativen Methoden so beginnt man mit einem Startpunkt x 0 und erzeugt eine Folge von Näherungen x 1,x 2,... Liegt x 0 bereits hinreichend nahe an einer Nullstelle x von f, so wird die Folge der Näherungen gegen x konvergieren. Gewöhnlich ist die Konvergenz schnell, so daß nur wenige Iterationen ausreichen, um eine genaue Näherung an die Nullstelle x zu erhalten. Die (analytische) Herleitung der NEWTON Methode beginnt mit dem TAYLOR Polynom f(x) = f(x 0 ) + f (x 0 )(x x 0 ) f (ξ 0 )(x x 0 ) 2, wobei ξ 0 zwischen x und x 0 liegt. Liegt x 0 nun nahe bei der Nullstelle x von f und ist f (ξ 0 ) nicht zu groß, dann stellt die lineare Funktion 9 und gegebenenfalls auch Ableitungswerte. 10 Auch NEWTON-RAPHSON-Methode genannt. l(x) = f(x 0 ) + f (x 0 )(x x 0 )

372 372 9 Nichtlineare Gleichungen eine gute Näherung an die Funktion f(x) in der Nähe von x dar 11. Deshalb ersetzen wir die nichtlineare Funktion f durch die lineare Funktion l und bestimmen deren Nullstelle, die einfach zu berechnen ist: x 1 = x 0 f(x 0) f (x 0 ), falls f (x 0 ) 0 ist. Natürlich ist x 1 im allgemeinen nicht die gesuchte Nullstelle x, aber bei hinreichend guter Startnäherung x 0 bereits eine bessere Näherung als x 0. Beispiel 9.8 Lineares Modell für f Ist zum Beispiel f (x) 1 und x x , dann gilt: l(x) f(x) In diesem Fall ist die Lösung der Gleichung l(x) = 0 bereits eine gute Näherung an die Nullstelle x. Wiederholen wir nun diesen Prozeß, indem wir ein neues lineares Modell im Punkt x 1 bilden und die Nullstelle x 2 berechnen, so erhalten wir schließlich die Iterationsformel x k+1 = x k f(x k) f (x k ) k = 0,1,... Geometrisch ist der Graph der linearen Funktion l die Tangente an den Graph von f im Punkt x k 12. Die Abbildung 9.6 zeigt dies geometrisch. Newton Methode zur Lösung nichtlinearer Gleichungen x k x k+1 Abbildung 9.6: NEWTON-Methode zur Lösung nichtlinearer Gleichungen Die folgenden MATLAB-Zeilen sind der Kern der NEWTON-Methode. Dabei steht xc(urrent) für x k, das heißt für den gegenwärtigen Iterationspunkt, und s steht für Schritt (step). 11 Man sagt auch l ist ein gutes lineares Modell an die nichtlineare Funktion f. 12 Statt vom NEWTON-Verfahren spricht man daher auch vom Tangentenverfahren.

373 9.1 Nichtlineare Gleichungen in einer Variablen 373 xc = input( Gib einen Startwert ein: ); fc = feval(fname,xc); dfc = feval(dfname,xc); while input( Weiterer Newton-Schritt? (0=nein,1=ja) ); s = -fc/dfc; xc = xc + s; fc = feval(fname,xc) dfc = feval(dfname,xc); end Diese Zeilen haben wir zu dem MATLAB Script-File ShowNewton.m ausgebaut, an dem das NEWTON-Verfahren interaktiv ausprobiert werden kann. Dieser File befindet sich auf der beiliegenden CD. Um dieses Script ausführen zu können, müssen Sie die Funktion f und deren Ableitung f als MATLAB-Funktionen definieren. Die Namen dieser MATLAB- Funktionen müssen dann als String den Variablen fname bzw. dfname zugewiesen werden. Für die Funktion f(x) = x 2 4sin(x) = 0 liefert die NEWTON-Methode mit 3 als Startpunkt die Werte der Tabelle 9.6. Die Ableitungsfunktion ist: f (x) = 2x 4cos(x). Iteration x f(x) s Tabelle 9.6: NEWTON-Methode für x 2 4sin(x) = 0 Für dieses Beispiel befinden sich die entsprechenden m-files fbeispiel.m und dfbeispiel.m für f bzw. f auf der beiliegenden CD. Alternativ dazu kann der Script-File NewtonSym.m herangezogen werden. Dieser befindet sich ebenfalls auf der beiliegenden CD. Im Unterschied zum Script File ShowNewton.m wird die Ableitungsfunktion f symbolisch berechnet. Hierzu ist die Symbolic Math Toolbox erforderlich. Wir verweisen den Leser auf den Anhang A über Symbolisches Rechnen mit MATLAB. Tatsächlich konvergiert das NEWTON-Verfahren lokal quadratisch gegen einfache Nullstellen x von f. Es gilt nämlich: x k+1 x = x k f (x k) f (x k ) x = f (x k )(x k x ) f (x k ) f (x k )

374 374 9 Nichtlineare Gleichungen Wegen ist f (x k ) = 1 0 f (x + t (x k x )) dt (x k x ) x k+1 x = f (x k )(x k x ) f (x k ) f (x k ) ( f (x k ) ) 1 0 f (x + t (x k x ))dt (x k x ) = f (x k ) 1 0 = (f (x k ) f (x + t (x k x ))) dt (x k x ) f (x k ) = 1 f (η) 2 f (x k ) (x k x ) 2,η zwischen x und x k. Also gilt für einfache Nullstellen die Beziehung x k+1 x lim k (x k x ) 2 = 1 f (x ) 2 f (x ), falls das Verfahren nicht zufällig bereits nach endlich vielen Schritten abbricht. Im Fall mehrfacher Nullstellen einer hinreichend oft differenzierbaren Funktion f schreiben wir f (x) = (x x ) m g (x) mit einer geeigneten Funktion g, für die g (x ) 0 ist. Dann ist (x k x ) m g (x k ) x k+1 x = x k m (x k x ) m 1 g (x k ) + (x k x ) m g (x k ) x (x k x )g (x k ) = x k mg (x k ) + (x k x ) g (x k ) x = (m 1) g (x k) + (x k x )g (x k ) mg (x k ) + (x k x )g (x k ) (x k x ). Daher ist das NEWTON-Verfahren im Fall einer m-fachen Nullstelle lokal nur noch linear konvergent: x n+1 x lim = 1 1 n x n x m. Durch eine einfache Modifikation kann man vorausgesetzt man kennt die Vielfachheit der Nullstelle auch bei einer m-fachen Nullstelle quadratische Konvergenz erzielen: Das Verfahren x n+1 = x n m f (x n) f (x n ), n = 0,1,2,3,... ist lokal wieder quadratisch konvergent; kennt man m nicht, so kann man mit Hilfe der x Asymptotik lim n+1 x n x n x = 1 1 m aus drei aufeinanderfolgenden NEWTON-Näherungen eine Schätzung für m berechnen: x n 1 x n x n 2 x n 1 1 m = m = x n x n 2 x n 1 x n 2.

375 9.1 Nichtlineare Gleichungen in einer Variablen 375 Die quadratische Konvergenzgeschwindigkeit der NEWTON-Methode für eine einfache Nullstelle bedeutet, daß sich asymptotisch in jedem Iterationsschritt die Anzahl der korrekten Ziffern der Lösung verdoppelt. Für mehrfache Nullstellen ist die NEWTON-Methode nur linear konvergent mit c = 1 1 m, wobei m die Vielfachheit der Nullstelle ist. Die Tabelle 9.7 zeigt die Anzahl der nötigen Iterationen, um die jeweilige Nullstelle der vom Parameter a abhängigen Funktion f(x) = x 2 a 2 zu bestimmen. Als Startwert wurde 2 gewählt. Man erkennt, daß die Konvergenzgeschwindigkeit von quadratisch zu linear abnimmt, wenn a von 1 nach 0 abfällt. Parameter a Anzahl der Iterationen Tabelle 9.7: Änderung der Konvergenzgeschwindigkeit Ein anderes Problem liegt darin, daß die NEWTON-Methode nicht notwendig konvergiert. Ist z.b. f (x k ) klein im Vergleich zu f(x k ), dann kann der nächste NEWTON-Schritt dafür sorgen, daß sich das Verfahren von der Nullstelle wegbewegt. Beispiel 9.9 Divergenz des NEWTON-Verfahrens Ist f(x) = arctan(x) und liegt der Startpunkt x 0 außerhalb des Intervalls [ , ], so divergiert das NEWTON-Verfahren. Vorteile und Nachteile der NEWTON-Methode Vorteile Bei einfacher Nullstelle lokal quadratisch konvergent. Nachteile Benötigt Ableitungswerte. Nur lokal konvergent. Erwähnt sei, daß sich die Effizienz des NEWTON-Verfahrens verbessern läßt. Die Zweischrittmethode f(x k ) x k+1 = x k f ((x k + y k )/2) f(x k+1 ) y k+1 = x k+1 f ((x k + y k )/2)

376 376 9 Nichtlineare Gleichungen erfordert wie das gewöhnliche NEWTON-Verfahren je Iterationsschritt eine Auswertung von f und f. Es gilt x k+1 x c x k x 2 x k 1 x. Hieraus folgt die Konvergenzordnung = ; asymptotisch bedeutet dies, daß zirka 4 Iterationsschritte dieses Verfahrens dieselbe Genauigkeit liefern wie 5 Schritte des NEWTON-Verfahrens. Man kann das Verfahren mit einem einzigen Startwert x 0 = y 0 beginnen [112]. Quasi-NEWTON-Methoden Ein Nachteil der NEWTON-Methode besteht darin, daß in jedem Iterationsschritt die Ableitung f (x k ) berechnet werden muß. Dies kann in folgenden Fällen zu Problemen führen: Das Berechnen der Ableitung auf dem Computer ist sehr aufwendig. Die Funktion f ist eine so umfangreiche Formel, daß das analytische Berechnen der Ableitung f und das Aufstellen des dazugehörigen Programmcodes fehleranfällig ist. Die Funktionswerte von f stammen aus numerischen Berechnungen. In diesem Fall ist die Ableitung als Formel nicht verfügbar. Um diesen Schwierigkeiten aus dem Weg zu gehen, kann die NEWTON-Iterationsformel durch x k+1 = x k f(x k) g k ersetzt werden, wobei g k eine einfache zu berechnende Näherung an f (x k ) ist. Man nennt dies dann eine Quasi-NEWTON-Methode. Es gibt viele Quasi-NEWTON-Methoden, die sich durch unterschiedliche Approximationen der Ableitung unterscheiden. Zum Beispiel wird in der Sekantenmethode, die wir ausführlich besprechen werden, die Ableitung durch den Differenzenquotient g k = f(x k) f(x k 1 ) x k x k 1 angenähert. Eine andere Möglichkeit ist, g k konstant zu wählen. In diesem Fall lautet die Iterationsformel: x k+1 = x k f(x k). g Diese Methode nennt man vereinfachtes NEWTON-Verfahren. Die benutzte Steigung ist immer konstant. Zum Beispiel kann man g = f (x 0 ) wählen. Eine weitere Möglichkeit besteht darin, eine Schrittweite h k zu wählen und f (x k ) durch den Differenzenquotient g k = f(x k + h k ) f(x k ) h k zu approximieren. Dieser Ansatz hat jedoch zwei Probleme. Erstens darf h k nicht zu groß sein, weil sonst die Ableitung ungenau wird und eventuell die Konvergenz stört. Auch darf

377 9.1 Nichtlineare Gleichungen in einer Variablen 377 h k nicht zu klein sein, weil sonst aufgrund von Rundungsfehlern die Ableitung ungenau wird. Zweitens erfordert dieser Quasi-NEWTON-Ansatz pro Iterationsschritt eine Funktionsauswertung mehr als die Sekanten-Methode, was wieder dann problematisch ist, wenn Funktionsauswertungen zeitaufwendig sind. Die Sekantenmethode Der Kernpunkt der Sekantenmethode ist die Beobachtung, daß uns zwei Punkte x k und x k 1 zur Verfügung stehen, in denen die Funktionswerte f(x k ) und f(x k 1 ) bereits vor dem Start der Iteration berechnet wurden. Dies suggeriert, die Ableitung f durch die Differenzenformel g k = f(x k) f(x k 1 ) x k x k 1 zu approximieren. Damit erhält man folgende Iterationsformel: x k x k 1 x k+1 = x k f(x k ) f(x k ) f(x k 1 ). Diese Iteration heißt Sekantenmethode. Die Sekantenmethode kann als Approximation an die Funktion f durch die Sekante der beiden Iterierten x k und x k 1 interpretiert werden. Die Nullstelle der resultierenden linearen Funktion wird als nächste approximierende Lösung genommen. Die folgenden MATLAB-Zeilen realisieren den Kern der Sekantenmethode: while input( Weiterer Sekantenschritt? gc = (fc-f_)/(xc-x_); xnew = xc-fc/dfc; x_ = xc; f_ = fc; xc = xnew; fc = feval(fname,xc); end (0=nein, 1=ja) ); Die Sekantenmethode erfordert zwei Startwerte. In jedem Iterationsschritt ist aber nur eine Funktionsauswertung feval nötig. Falls die Iterationsfolge x k konvergiert, so gilt im Fall einer einfachen Nullstelle für alle hinreichend große k: wobei x k+1 x c x k x p, p = Falls die Werte x k und x k 1 nahe genug an der Lösung x liegen, so gilt nämlich im Fall einer einfachen Nullstelle x : x k+1 x = x f (x k ) k x f(x k ) f(x k 1 ) x k x k 1 f(x k ) f(x k 1 ) = x k x k 1 (x k x ) f (x k ) f(x k ) f(x k 1 ) x k x k 1

378 378 9 Nichtlineare Gleichungen Nun ist für zweimal stetig differenzierbare Funktionen f f (x k ) = f (x ) f (x + t (x k x )) dt (x k x ), so daß mit c 2 = max f (t) gilt das Maximum wird über eine Umgebung von x gebildet, die x k und x k 1 enthält: f (x k ) f (x k 1 ) (x k x ) f (x k ) x k x k 1 1 [ = f (x k 1 + t (x k x k 1 )) f (x + t (x k x )) ] dt (x k x ) c 2 x k x x x k 1. Da x eine einfache Nullstelle ist, ist f (x ) 0; also gibt es eine ganze Umgebung um x, in der f (η) c 1 = 1 f (x ) > 0 2 ist. Aus diesen Überlegungen folgt in der Nähe der gesuchten Nullstelle die Ungleichung f(x k ) f(x k 1 ) x k+1 x = x k x k 1 (x k x ) f (x k ) f(x k ) f(x k 1 ) x k x k 1 f(x k ) f(x k 1 ) = x k x k 1 (x k x ) f (x k ) f (η) 1 c 2 x k x x k 1 x. 2 c 1 Die Konvergenzordnung p des Sekantenverfahrens ergibt sich daher als positive Nullstelle der quadratischen Gleichung p 2 = p + 1, das heißt, es ist p = 1 ( ) Also bricht die Folge der Iterierten nach endlich vielen Schritten ab oder es ist lim k x k+1 x (x k x ) (x k 1 x ) = f (x ) 2f (x ) und lim sup k x k+1 x f (x ) x k x (1+ 5)/2 2f (x ) ( 5 1)/2 Somit ist die Sekantenmethode bei einfachen Nullstellen superlinear konvergent, aber man muß wie beim NEWTON-Verfahren bereits hinreichend nahe an der Lösung sein, damit Konvergenz eintritt..

379 9.1 Nichtlineare Gleichungen in einer Variablen 379 Iteration x f(x) s Tabelle 9.8: Sekantenmethode für x 2 4sin(x) = 0 Wir demonstrieren die Sekantenmethode am Beispiel f(x) = x 2 4sin(x) = 0 mit den Startwerten x 0 = 1 und x 1 = 3. Die Tabelle 9.8 zeigt die Iterationen. Im Vergleich zur NEWTON-Methode hat die Sekantenmethode den Vorteil, daß pro Iteration nur eine neue Funktionsauswertung benötigt wird. Allerdings hat die Sekantenmethode die Nachteile, daß zwei Startwerte erforderlich sind und das Verfahren langsamer konvergiert, obgleich superlinear. Der niedrigere Aufwand der Sekantenmethode pro Iteration fällt meist mehr ins Gewicht als deren größere Iterationsanzahl, so daß der Gesamtaufwand beim Lösen einer nichtlinearen Gleichung für die Sekantenmethode oft geringer ist als für das NEWTON-Verfahren. Mit Hilfe des Script-Files ShowSekant.m, der sich auf der beiliegenden CD befindet, kann man mit dem Sekantenverfahren experimentieren. Vorteile und Nachteile der Sekantenmethode Vorteile Benötigt keine Ableitung Bei einfacher Nullstelle lokal superlinear konvergent Nachteile Nur lokal konvergent Inverse Interpolation In der Sekantenmethode wird die Funktion durch eine Gerade interpoliert, deren Nullstelle als nächster Iterationspunkt verwendet wird. Eine höhere Konvergenzgeschwindigkeit aber nicht höher als p = 2 läßt sich erzielen, wenn man mit einem Polynom höheren Grades die zuvor berechneten Punkte interpoliert. Interpoliert man zum Beispiel mit einem

380 380 9 Nichtlineare Gleichungen quadratischen Polynom drei zuvor berechnete Punkte, so kann man eine Nullstelle als nächste Iterierte wählen. Diese Idee beinhaltet jedoch mehrere Schwierigkeiten: Es ist möglich, daß das quadratische Polynom keine reelle Nullstelle hat; besitzt es dagegen zwei reelle Nullstellen, so ist es nicht von vornherein klar, welche als nächste Iterierte gewählt werden soll. Einen Ausweg aus diesen Schwierigkeiten liefert die inverse Interpolation. Diese berechnet zum Beispiel zu den Punkten (f(x n 2 ),x n 2 ), (f(x n 1 ),x n 1 ), (f(x n ),x n ) das quadratische Interpolationspolynom q und wählt als neue Näherung x n+1 = q(0) den Wert dieses Interpolationspolynoms bei Null. Untersucht man dieses Verfahren mit denselben Techniken wie wir es für das Sekantenverfahren durchgeführt haben, so ergibt sich eine Ungleichung der Form x k+1 x c x k x x k 1 x x k 2 x. Die Konvergenzordnung erhält man daher als positive Lösung der Gleichung x 3 = x 2 + x + 1; es ist: p Diese Konvergenzordnung ist aber in der Praxis erst erkennbar, wenn die zur Berechnung von x k+1 verwendeten Iterierten x k,x k 1,x k 2 schon sehr nahe an der gesuchten Lösung liegen. Man beachte, daß q lokal eine Approximation an die Umkehrfunktion f 1 von f in der Nähe von 0 ist. Auch das Sekantenverfahren kann als lineare inverse Interpolation gedeutet werden. Das NEWTON-Verfahren entsteht durch lineare HERMITE-Interpolation von f 1. Hybride Methoden Die NEWTON-Methode, die Sekantenmethode oder andere auf Interpolation beruhende Verfahren konvergieren nicht notwendig, wenn man nicht hinreichend nahe an der Lösung startet. Auf der anderen Seite ist die Intervallhalbierungsmethode langsam und daher rechenaufwendig. Welche Methode sollte man also wählen? Eine mögliche Lösung aus diesem Dilemma ist es, die positiven Eigenschaften jeder Methode zu nutzen und diese zu einem Verfahren zusammenzusetzen. Man spricht dann von einem hybriden Verfahren 13. Zum Beispiel verwendet man eine schnell konvergente Methode innerhalb eines Intervalls, in dem sich eine Nullstelle befindet. Liegt jedoch die nächste Iterierte des schnellen Verfahrens außerhalb des Konvergenzbereichs, so muß man für eine Iteration auf ein sicheres Verfahren, wie zum Beispiel das Intervallhalbierungsverfahren umschalten. Danach setzt man wieder das schnellere Verfahren ein und versucht einen neuen Schritt auf einem nun kleineren Intervall, was die Chance nach einem erfolgreichen Schritt erhöht. Eine populäre Implementierung dieser Idee geht zurück auf DEKKER, VAN WIJNGAAR- DEN und BRENT und ist in vielen numerischen Bibliotheken realisiert, so auch in MATLAB. Eine sorgfältige Implementierung muß die folgenden Gefahren einer Gleitpunktarithmetik berücksichtigen: Underflow, Overflow und Toleranzgrößen. Eine MAPLE-Implementierung dieses Verfahrens findet man in [115]. 13 Gemischtes Verfahren

381 9.1 Nichtlineare Gleichungen in einer Variablen 381 Nichtlineare Gleichungen in MATLAB In MATLAB gibt es die eingebaute Funktion fzero zur Lösung einer nichtlinearen Gleichung in einer Variablen. Der Algorithmus ist eine Kombination aus dem Intervallhalbierungsverfahren, der Sekantenmethode und der inversen quadratischen Interpolation. Dieses hybride Verfahren hat eine lange und interessante Geschichte. Weitere Informationen findet man in den Büchern [7] bzw. [54], im Vorgänger [27], [85] und [92]. Eine ALGOL 60- und eine FORTRAN-Implementierung findet man in [7] bzw. [27] und [54]. Es ist ein guter Algorithmus, aber leider nur für skalarwertige Funktionen mit einer skalaren Variablen einsetzbar. Den m-file fzero findet man im Verzeichnis Toolbox/MATLAB/funfun. Wir wollen die eingebaute MATLAB-Funktion fzero an unserer nichtlinearen Gleichung x 2 4sin(x) = 0 illustrieren. Hierzu haben den File 9.2 geschrieben, in dem die Funktion f(x) = x 2 4sin(x) definiert ist, die die nichtlineare Gleichung beschreibt. 1 function f = fbeispiel(x) 2 % % Input: x Funktionsargument(e). 4 % Output: f Funktionswert(e). 5 % f = x^2-4*sin(x); Function-File 9.2: fbeispiel.m Der Graph der Funktion f ist im linken Plot der Abbildung 9.1 zu sehen. Die Funktion hat die beiden Nullstellen x 1 = 0 und x Der folgende Aufruf der eingebauten MATLAB-Funktion fzero mit der Funktion fbeispiel und dem Startpunkt x 0 = 3 als Argumente liefert einen genauen Wert der Nullstelle x 2. >> format long >> x2=fzero( fbeispiel,3) x2 = Der Aufruf >> x1=fzero( fbeispiel,1) dagegen liefert als Ergebnis die Nullstelle x 1. Wie zu erwarten, ist das Auffinden einer Nullstelle vom Anfangswert abhängig. Will man über den Iterationsverlauf mehr Informationen haben, so muß man im vierten Argument der Funktion fzero eine von Null verschiedene Zahl übergeben. >> x2=fzero( fbeispiel,6,[],1) Func evals x f(x) Procedure

382 382 9 Nichtlineare Gleichungen initial search search search search search search search search search search search search search search search search search search search search search Looking for a zero in the interval [ , 9.84] interpolation bisection interpolation bisection interpolation bisection interpolation interpolation interpolation e-05 interpolation e-10 interpolation e-15 interpolation e-15 interpolation x2 = Dieses Beispiel zeigt, daß ausgehend vom Startpunkt x 0 = 6 nach 35 Funktionsauswertungen die Nullstelle x 2 gefunden wurde. Zusätzlich zum jeweiligen Funktionswert wird auch die Methode angezeigt, die im entsprechenden Iterationsschritt verwendet wurde.

383 9.2 Nichtlineare Gleichungen in mehreren Variablen 383 Als drittes Argument im obigen Beispiel die leere Matrix [] kann man eine relative Fehlertoleranz übergeben. Standardeinstellung ist die Maschinengenauigkeit eps. Das fünfte, sechste usw. Argument kann benutzt werden, um zusätzliche Parameter p 1,p 2,... zu übergeben. Damit ist es möglich, parameterabhängige nichtlineare Gleichungen zu lösen. Die dazugehörige MATLAB-Funktion muß dann wie folgt spezifiziert werden: function f = Funktion(x,p1,p2) f = ausser von x auch von p1 und p2 abhaengig Insgesamt hat die Funktion fzero folgende Syntax: x = fzero( Funktion,x0) oder x = fzero( Funktion,x0,tol) oder x = fzero( Funktion,x0,tol,Ausgabe) Die Funktion fzero findet eine Nullstelle, wenn der Graph der Funktion die x-achse schneidet. Berührt der Graph die x-achse nur mehrfache Nullstelle, so findet fzero die Nullstelle in der Regel nicht. Der Aufruf >> fzero( fbsp,1) liefert für die Funktion f(x) = x 2 NaN or Inf function value encountered during search for an interval containing a sign change. Function value at e+154 is Inf Aborting since no such interval was found. Check function or try again with a different starting value. ans = NaN wobei in fbsp die Funktion x 2 definiert ist. 9.2 Nichtlineare Gleichungen in mehreren Variablen Wir besprechen nun nichtlineare Gleichungen in mehr als einer Dimension. Das Problem stellt sich wie folgt: Lösen nichtlinearer Gleichungen in mehreren Variablen Gegeben ist eine nichtlineare Funktion f : R n R n. Finde einen Vektor x R n, so daß gilt: f(x) = 0. Der mehrdimensionale Fall ist komplizierter als der eindimensionale. Dies hat folgende Gründe: Das mögliche Verhalten ist umfangreicher, so daß sowohl eine Existenzanalysis als auch die Bestimmung der Anzahl der Lösungen viel komplizierter ist.

384 384 9 Nichtlineare Gleichungen Es ist schwierig, Konvergenz gegen eine korrekte Lösung zu sichern, oder eine Lösung derart einzuschließen, daß man mit einer sicheren Methode eine Lösung erhält. Der Rechenaufwand steigt mit der Dimension des Problems. Beispiel 9.10 Lösungen nichtlinearer Gleichungssysteme Betrachte das folgende Gleichungssystem mit zwei nichtlinearen Gleichungen und zwei Unbekannten: x 2 1 x 2 + a = 0 x 1 + x a = 0, wobei x 1 und x 2 die Unbekannten sind und a ein gegebener Parameter. Die Nullstellenmenge jeder Gleichung ist eine Parabel und jede Stelle, an denen sie sich schneiden, ist eine Lösung des Gleichungssystems. In Abhängigkeit des Wertes von a hat dieses System keine, eine, zwei oder vier Lösungen, wie die Abbildung 9.7 zeigt. 5 Keine Nullstelle: a=0.5 5 Eine Nullstelle: a= Zwei Nullstellen: a= Vier Nullstellen: a= Abbildung 9.7: Lösungen nichtlinearer Gleichungssysteme Die NEWTON-Methode Viele eindimensionale Verfahren lassen sich nicht auf n Dimensionen verallgemeinern. Die NEWTON-Methode jedoch ist eine erfreuliche Ausnahme. Die Iterationsformel der NEW- TON-Methode in n Dimensionen hat die Form x k+1 = x k J f (x k ) 1 f(x k ), wobei J f (x) die JACOBI-Matrix von f ist, das heißt (J f (x)) ij = f i x j.

385 9.2 Nichtlineare Gleichungen in mehreren Variablen 385 In der Praxis wird J f (x k ) nicht explizit invertiert. Statt dessen löst man das lineare Gleichungssystem J f (x k )s k = f(x k ), nach der Unbekannten s k und nimmt x k+1 = x k + s k als nächste Näherung. Dies bedeutet also, daß man ein System nichtlinearer Gleichungen durch eine Folge von Systemen linearer Gleichungen ersetzt. Da jedoch die Lösungen der linearen Probleme im allgemeinen keine Lösung des ursprünglichen nichtlinearen Problems sind, muß der Prozeß so lange wiederholt werden, bis die Näherung hinreichend genau ist. Man kann zeigen, daß die Konvergenzgeschwindigkeit der NEWTON-Methode quadratisch ist, falls die JACOBI-Matrix im Lösungspunkt J f (x ) regulär ist. Die Iteration muß aber im allgemeinen hinreichend nahe an der Lösung beginnen, damit das Verfahren konvergiert. Die arithmetischen Operationen pro Iterationsschritt können nun aber wesentlich sein: Das Berechnen der JACOBI-Matrix erfordert n 2 skalare Funktionsauswertungen, nämlich für jede Komponentenfunktion f i jeder Variablen x i. Ist die JACOBI-Matrix dünn besetzt oder hat sie spezielle Struktur, dann spart man Berechnungen. Löst man das lineare Gleichungssystem mit GAUSS-Elimination, so sind O(n 3 ) arithmetische Operationen nötig, wenn die JACOBI-Matrix voll besetzt ist. Vorteile und Nachteile der NEWTON-Methode für ein Gleichungssystem Vorteile Bei regulärer JACOBI-Matrix lokal quadratisch konvergent. Nachteile Benötigt in jedem Iterationsschritt die Berechnung der JACOBI-Matrix J f (x k ). In jedem Iterationsschritt muß ein lineares Gleichungssystem gelöst werden, das singulär oder schlecht konditioniert sein kann. Nur lokal konvergent, das heißt, der Startpunkt x 0 muß hinreichend nahe an der Lösung x liegen. Die schon im eindimensionalen Fall erwähnte verbesserte Variante des NEWTON-Verfahrens läßt sich auch auf mehrere Dimensionen verallgemeinern: J f ((x k + y k )/2)s k = f(x k ) x k+1 = x k + s k

386 386 9 Nichtlineare Gleichungen J f ((x k + y k )/2)t k = f(x k+1 ) y k+1 = y k + t k Das Verfahren erfordert die Lösung zweier linearer Gleichungssysteme mit der gleichen Matrix; daher ist es zweckmäßig die LU-Zerlegung dieser Matrix zwischenzuspeichern und bei der Lösung zu benutzen. Wie im eindimensionalen Fall hat diese Variante des NEWTON- Verfahrens die Konvergenzordnung 1 + 2, wenn J f (x ) regulär ist. Auf der beiliegenden CD befindet sich der Script-File ShowNewtonN.m, der die NEW- TON-Methode interaktiv zeigt. Quasi-NEWTON-Methode: Das BROYDEN-Verfahren Das auf BROYDEN zurückgehende Quasi-NEWTON-Verfahren ist ein Kompromiß zwischen Neuberechnung der JACOBI- Matrix in jedem Iterationsschritt (wie beim NEWTON-Verfahren) und der Verwendung einer festen Matrix im Lauf der gesamten Iteration (wie beim vereinfachten NEWTON-Verfahren). Ausgehend von einer Näherung an die JACOBI-Matrix werden die Matrizen in jedem Schritt so aktualisiert, daß sie möglichst ähnliche Abbildungseigenschaften haben wie die exakte Funktionalmatrix. Gleichzeitig achtet man darauf, daß diese Aktualisierung möglichst wenig zusätzlichen Rechenaufwand erfordert. Sie erfolgt daher mittels Rang-1-Korrekturmatrizen, die sich aus Termen berechnen lassen, die ohnehin während der Iteration bestimmt werden müssen. Darüber hinaus gibt es durch die sogenannte SHERMAN-MORRISON-Formel (vgl. [83]) eine Möglichkeit, wie man lineare Gleichungssysteme einfach lösen kann, deren Matrizen sich nur um Rang-1-Matrizen unterscheiden. Die Schritte des Algorithmus sind: 1. Löse B k s k = f(x k ) für s k. 2. x k+1 = x k + s k. 3. y k = f(x k+1 ) f(x k ). 4. B k+1 = B k + (y k B k s k )s T k s T k s k. Im ersten Schritt ist ein lineares Gleichungssystem zu lösen. Der vierte Schritt aktualisiert die Matrix B k durch Addition einer Rang-1-Matrix. Die Konstruktion von B k+1 stellt sicher, daß die Matrix B k+1 in Richtung von s k ähnliche Ergebnisse liefert wie die Funktionalmatrix J f (x k+1 ): B k+1 s k = y k J f (x k+1 )s k = J f (x k+1 )(x k+1 x k ) f(x k+1 ) f(x k ) = y k Die folgenden MATLAB-Zeilen realisieren den Kern der BROYDEN-Methode: while input( Broyden-Schritt? (0=nein, 1=ja) ); s = -Bc\fc; xc = xc+s;

387 9.3 Weitere Bemerkungen und Hinweise 387 f_ = fc; fc = feval(fname,xc); yc = fc-f_; Bc = Bc+((yc-Bc*s)*s )/(s *s); iter = iter+1; end Mit Hilfe des Script-Files ShowBroyden.m, der sich auf der beiliegenden CD befindet, illustrieren wir die BROYDEN-Methode an dem Gleichungssystem x x 2 2 = 0 x x = 0. Das BROYDEN-Verfahren konvergiert lokal superlinear gegen eine Lösung des nichtlinearen Gleichungssystems, wenn die Funktionalmatrix J f (x ) regulär ist und die Matrix B 0 eine hinreichend gute Näherung von J f (x ) ist. Bei linearen n n-systemen Ax b = 0 mit regulärer Matrix liefert der Algorithmus nach höchstens 2n Schritten die exakte Lösung, wenn B 0 eine hinreichend gute Näherung von A ist; diese Aussage ist natürlich nur von theoretischem Interesse, da man durch die Wahl B 0 = A sogar schon nach einem einzigen Schritt die Lösung des Gleichungssystems erhält. Nichtlineare Gleichungssysteme in MATLAB Es gibt in Standard-MATLAB keine eingebaute Funktion zur Lösung nichtlinearer Gleichungssysteme. Verfügt man jedoch über die MATLAB Optimization Toolbox, so kann man mit der Funktion fsolve nichtlineare Gleichungssysteme lösen. Zusammenfassung der MATLAB-Funktionen Die Tabelle 9.9 faßt die für die Lösung nichtlinearer Gleichungen vorhandenen MATLAB- Funktionen zusammen. Funktion fzero fsolve roots Beschreibung Sucht Nullstelle im eindimenionalen Fall Sucht Nullstelle im mehrdimensionalen Fall (Optimization Toolbox) Sucht Nullstellen eines Polynoms Tabelle 9.9: MATLAB-Funktionen zum Lösen nichtlinearer Gleichungen 9.3 Weitere Bemerkungen und Hinweise Die grundlegenden Methoden zur Lösung nichtlinearer Gleichungen werden in nahezu jedem Buch über numerische Methoden der Mathematik diskutiert, siehe zum Beispiel [46],

388 388 9 Nichtlineare Gleichungen [74], [82], [92] und [110]. Ausführliche Darstellungen sind [15], [59], [75] und [83]. Aktuelle Entwicklungen zum Thema nichtlineare Gleichungen findet man bei [56] und Softwarehinweise bei [40] und [70]. Die in diesem Kapitel beschriebenen Verfahren sind meist nur lokal konvergent. Um Konvergenz für eine größere Menge von Startwerten x 0 zu erreichen, müssen diese globalisiert werden. Eine erste Möglickeit dazu bieten Abstiegsverfahren, wie zum Beispiel GAUSS-NEWTON ähnliche Verfahren. Eine alternative Globalisierungsmöglichkeit stellen Einbettungs- oder Fortsetzungsverfahren dar, im Englischen Homotopy oder Continuation Methods. Bei diesen wird die nichtlineare Gleichung f(x) = 0 zum Beispiel in die durch t R parametrisierte Schar F(x,t) := f(x) (1 t)f(x 0 ) = 0 eingebettet. Durch sogenannte Kurvenverfolgungsalgorithmen wird das neue Problem gelöst. Für weitere Einzelheiten verweisen wir auf [1] und [83]. Konvergiert eine Folge {x k } bezüglich irgendeiner Norm, so konvergiert sie im endlichdimensionalen Fall, der ausschließlich in diesem Buch behandelt wird, auch bezüglich jeder anderen Norm. Ist die Konvergenzgeschwindigkeit bezüglich einer Norm Q-linear, so muß dies jedoch nicht notwendig auf andere Normen zutreffen, da die Konstante c, die in der Definition der linearen Konvergenz auftritt, normabhängig ist. c kann bezüglich einer Norm kleiner Eins, bezüglich der anderen aber größer oder gleich Eins sein. Die Q-quadratische Konvergenzgeschwindigkeit ist von der Wahl einer Norm unabhängig. Eine sorgfältige und umfassende Diskussion des Begriffes Konvergenzgeschwindigkeit bzw. Konvergenzordnung von Folgen findet der Leser in [75] und [83]. Quasi-NEWTON-Methoden auch Update Methoden genannt werden ausführlich in [15], [59], [75] und [83] behandelt. Iterative Methoden spielen in der Optimierung eine große Rolle. Die dort vorkommenden Verfahren wie NEWTON- und Quasi-NEWTON-Methoden sind typischerweise quadratisch bzw. superlinear konvergent. Verfahren des steilsten Abstiegs erweisen sich dagegen als linear konvergent mit c 1 bei schlechter Kondition und c 0, wenn die Kondition besser ist. Für weitere Einzelheiten verweisen wir auf [71] und [73]. 9.4 Übungsaufgaben 9.1 WAHR oder FALSCH: Ein kleines Residuum garantiert eine genaue Lösung eines nichtlinearen Gleichungssystems. 9.2 Wie würden Sie die Konvergenzordnung eines iterativen Verfahrens kennzeichnen, wenn die Fehler folgendes Aussehen hätten: (a) 10 2, 10 4, 10 8, 10 16,... (b) 10 2, 10 4, 10 6, 10 8, Unter welchen Bedingungen findet die Intervallhalbierungsmethode eine Nullstelle einer stetigen nichtlinearen Funktion f im Intervall [a, b]? 9.4 Was vesteht man unter einer quadratischen Konvergenzordnung eines iterativen Verfahrens?

389 9.4 Übungsaufgaben Welche der nachfolgenden Möglichkeiten bestehen, wenn man die NEWTON- Methode zur Lösung einer nichtlinearen Gleichung einsetzt? (a) Das Verfahren konvergiert linear. (b) Das Verfahren konvergiert quadratisch. (c) Das Verfahren konvergiert überhaupt nicht. 9.6 Ordnen Sie die nachfolgenden Methoden von der langsamsten zur schnellsten Konvergenzgeschwindigkeit, wenn es darum geht, eine einfache Nullstelle einer nichtlinearen Gleichung zu finden: (a) Bisektionsmethode. (b) NEWTON-Methode. (c) Sekantenmethode. 9.7 Wir betrachten die nichtlineare Gleichung f(x) = x 2 2 = 0. (a) Was ist x 1 bei der NEWTON-Methode, wenn x 0 = 1 der Startpunkt ist? (b) Was ist x 2 bei der Sekantenmethode, wenn x 0 = 1 und x 1 = 2 die Startpunkte sind? 9.8 Wir betrachten das nichtlineare Gleichungssystem x 1 1 = 0 x 1 x 2 1 = 0. Für welchen Startpunkt oder -punkte divergiert das NEWTON-Verfahren? Warum? 9.9 Schreiben Sie ein MATLAB-Programm, um das nichtlineare Gleichungssystem 16x y 4 + z 4 = 16 x 2 + y 2 + z 2 = 3 x 3 y = 0 mit der NEWTON-Methode zu lösen. Als Startpunkt setzen Sie alle Variablen auf Lösen Sie das folgende nichtlineare Gleichungssystem sin(x) + y 2 + ln(z) = 3 3x + 2 y z 3 = 0 x 2 + y 2 + z 3 = 6. Finden Sie so viele Nullstellen wie möglich, mindestens aber vier Zeigen Sie, daß die Folge x k = 1/k zwar gegen Null, nicht aber Q-linear konvergiert Zeigen Sie, daß die Folge x k = (0.5) 2k Q-quadratisch gegen 1 konvergiert Konvergiert die Folge 1/(k!) Q- superlinear? Konvergiert sie Q-quadratisch? 9.14 Die nachfolgenden Folgen konvergieren alle gegen Null, falls k gegen unendlich geht: v k = k 10 w k = 10 k x k = 10 k2 y k = k 10 3 k z k = k. Finden Sie heraus, zu welchem Konvergenztyp jede Folge gehört und markieren Sie in der nachfolgenden Tabelle die entsprechende Position. Konvergenztyp v w x y z sublinear linear superlinear quadratisch kubisch keiner von diesen

390 390 9 Nichtlineare Gleichungen 9.15 Eine Folge {ε n } n N sei charakterisiert durch ε 0 = 1 2,ε 1 = 1 3, ε n+1 = 4ε α nε β n 1. Prüfen Sie für die Fälle α = 1,β = 1 und α = 2,β = 1 mit Hilfe von MATLAB die Beziehung ε n+1 lim sup n ε p n c p 1 α+β 1 nach. Hierbei sei c = 4 und p bezeichne die positive Lösung der Gleichung x 2 = αx+β Untersuchen Sie die Konvergenzordnung des NEWTON-Verfahrens und des Sekantenverfahrens zur Lösung der Gleichung arctan(x) = 0; benutzen Sie Startwerte, die betragsmäßig kleiner als 1 sind (a) Benutzen Sie das Verfahren von NEWTON, um alle Nullstellen des Polynoms x 10 55x x x x x x x x x zu berechnen. (b) Verwenden Sie zur Auswertung des Polynoms und seiner Ableitung jeweils ein zweizeiliges HORNER-Schema. Überlegen Sie sich, wie man eine gefundene Nullstelle ohne Rechenaufwand abdividiert (Hinweis: Betrachten Sie die Koeffizienten im HORNER-Schema genauer.). (c) Experimentieren Sie mit verschiedenen Startwerten und studieren Sie die erzielbare Genauigkeit der Nullstellen in Abhängigkeit von der Reihenfolge, in der man sie findet. (d) Nach dem VIETASCHEN Wurzelsatz ist 55 die Summe aller Nullstellen dieses Polynoms. Entwickeln Sie das Polynom um den Mittelwert 11/2 der Nullstellen, das heißt, nach Potenzen von (x 5.5). Begründen Sie, warum diese Entwicklung keinen Term der Form (x 5.5) 9 enthält Führen Sie das NEWTON-Verfahren zur Berechnung der komplexen Nullstellen von x 4 6x x 2 34x + 26 durch. Warum kann man mit einem reellen Startwert mit dem NEWTON-Verfahren hier keine komplexe Lösung finden? 9.19 Die Funktion f (x) = sin(x3 )arctan(x) 1+x 2 hat im Nullpunkt eine mehrfache Nullstelle. (a) Studieren Sie die Eigenschaften des NEWTON-Verfahrens, wenn man mit dem Startwert x 0 = 0.1 beginnt. (b) Versuchen Sie, aus den Iterierten des NEWTON-Verfahrens eine Schätzung für die Vielfachheit der Nullstelle zu berechnen und verwenden Sie diese, um die NEWTON-Iteration zu beschleunigen. (c) Studieren Sie das Konvergenzverhalten des Sekantenverfahrens in diesem Beispiel, wenn man als Startwerte x 0 = 0.2 und x 1 = 0.1 wählt Untersuchen Sie die Konvergenzordnung des NEWTON-Verfahrens zur Berechnung der Nullstelle 0 von f (x) = x + x α ; dabei sei α > 1 eine beliebige reelle Zahl Beweisen Sie: Startet man das NEW- TON-Verfahren in einer Umgebung der Nullstelle x von f, in der die Funktion f konvex ist, so konvergiert das NEWTON-Verfahren monoton, falls x 0 > x ist (a) Formulieren Sie das NEWTON- Verfahren zur Berechnung von n a, a > 0, n N.

391 9.4 Übungsaufgaben 391 (b) Untersuchen Sie, für welche Startwerte das Verfahren in diesem Beispiel konvergiert. (c) Untersuchen Sie, für welche Startwerte das Verfahren in diesem Beispiel monoton konvergiert (a) Beweisen Sie, daß das NEWTON- Verfahren zur Berechnung der Nullstelle 0 der Funktion { x 2 + x, wenn x 0 f (x) = x x 3, wenn x > 0 die R-Ordnung 6 hat. (b) Zeigen Sie an diesem Beispiel, daß man im allgemeinen in der Definition der R-Ordnung, den Limes superior nicht durch einen Limes ersetzen kann (a) Zeigen Sie, daß das NEWTON- Verfahren zur Berechnung der Nullstelle im Punkt x = 0 der Funktion { x(1 x) wenn x 0 f(x) = x(1 + 2x) wenn x < 0 lokal quadratisch konvergent ist, das heißt lim sup x k+1 k x 2 k existiert. (b) Zeigen Sie, daß x k+1 lim k x 2 k auch für hinreichend gute Startwerte x 0 nicht existiert Die KEPLER-Gleichung zur Berechnung von E M = E εsin (E) spielt in der Himmelsmechanik eine wichtige Rolle; dabei bezeichnet E die sogenannte exzentrische Anomalie und M die mittlere Anomalie einer Planetenbahn. Die Exzentrizität ε der Bahn ist ein Maß für deren Kreisförmigkeit; es ist 0 ε < 1. Bei einer Kreisbahn ist ε = 0, stark elliptische Bahnen haben ε Werte nahe 1. (a) Verwenden Sie für M = 2 und ε = 0.8 das NEWTON-Verfahren zur Berechnung von E. (b) Verwenden Sie die im Text erwähnte Variante des NEWTON-Verfahrens der Ordnung zur Lösung derselben Aufgabenstellung; benutzen Sie als Startwerte y 0 = x 0. (c) Vergleichen Sie den Rechenaufwand beider Methoden zur Lösung der KEP- LER-Gleichung Eine Kreditvereinbarung mit Bank A sieht vor, daß der jährliche Zinssatz beginnend bei 5% in jedem Jahr um 0.3% steigt. Der zugrundeliegende Kredit (und dessen Zinsen) soll beginnend nach dem ersten Jahr in acht gleichbleibenden Raten vollständig getilgt werden. Die B-Bank bietet Ihnen dieselbe Kreditsumme zu einem festen Zinssatz von 6.2% an, wenn Sie diese ebenfalls im selben Zeitraum in acht gleichbleibenden Raten tilgen. Welche Raten sind jeweils zu zahlen? Welcher Modus ist für Sie günstiger? Hinweis: Formulieren Sie die Aufgabe als ein Nullstellenproblem für ein Polynom 8. Grades und berechnen Sie jeweils die für die Aufgabenstellung relevante Nullstelle mit einem Iterationsverfahren Beweisen Sie: Wendet man das NEW- TON-Verfahren auf ein nichtlineares Glei-

392 392 9 Nichtlineare Gleichungen chungssystem f 1 (x 1,x 2,...,x n ) = 0 f 2 (x 1,x 2,...,x n ) = 0 f n (x 1,x 2,...,x n ) = 0 an und ist eine der Gleichungen, z.b. f 1 (x 1,x 2,...,x n ) = 0, linear in den Unbekannten x 1,x 2,...,x n : f 1 (x 1,x 2,...,x n ) = a 1 x 1 + a 2 x a n x n + b 1, so erfüllen alle Iterierte mit Ausnahme evtl. des Startvektors diese lineare Gleichung exakt. Formulieren Sie eine entsprechende Aussage, wenn mehrere der zu lösenden Gleichungen linear sind (a) Formulieren Sie das NEWTON- Verfahren zur Lösung der Gleichung 1 x a = 0. Hierbei sei a 0. Für welche Startwerte konvergiert das Verfahren? Welche Rechenoperationen erfordert ein Schritt des NEWTON-Verfahrens? (b) Zeigen Sie, daß man das NEWTON- Verfahren zur Lösung der Matrixgleichung X 1 A = 0. in der Form X n+1 = X n (2I AX n ),n = 0,1,2,... schreiben kann. Hierbei sei A eine invertierbare m m Matrix, I bezeichne die Einheitsmatrix. Beachten Sie die Reihenfolge der Matrixmultiplikationen! Hinweis: Wenn Ihnen das Differenzieren matrizenwertiger Funktionen nicht bekannt ist, beschränken Sie sich für die Herleitung auf den Fall von 2 2 Matrizen; dieser entspricht einem nichtlinearen Gleichungssystem mit 4 Unbekannten. (c) Führen Sie einige Schritte des Iterationsverfahrens aus b) aus, um die Matrix A = zu invertieren. Schlagen Sie einen sinnvollen Startwert (=Startmatrix) vor! (d) Der Vektor x 0 sei eine Lösung des linearen Gleichungssystems A 0 x 0 = b. Berechnen Sie mit Hilfe des NEWTON- Verfahrens aus b) eine Näherung für die Lösung von A 1 x 1 = b. Dabei unterscheide sich A 1 nur geringfügig von A 0, das heißt, A 1 = A 0 + A 0. (e) Berechnen Sie unter der Annahme, daß Sie bereits das System x 0 = durch LU-Zerlegung gelöst haben, eine Näherungslösung für x 1 = Hinweis: x 1 x 0 u 0 ; hierbei ist A 0 u 0 = ( A 0 )x 0. Begründen Sie dies mit Hilfe des NEWTON-Verfahrens aus b). Warum ist es zweckmäßig, die LU- Zerlegung von A 0 zu speichern?

393 10 Nichtlineare Ausgleichsrechnung The typical parameter estimation problem may be summerized as: Given values of a solution, what was the problem? C. BAKER Die nichtlineare Ausgleichsrechnung ist die Verallgemeinerung der linearen Ausgleichsrechnung für den nichtlinearen Fall. Sie kann als Methode zur Behandlung überbestimmter nichtlinearer Gleichungssysteme aufgefaßt werden; analog dem linearen Fall, wo man von einem überbestimmten System zur Quadratmittelersatzaufgabe übergeht. Wie im linearen Fall, so kann die nichtlineare Quadratmittelaufgabe als nichtlineare Optimierungsaufgabe aufgefaßt werden 1. Wir betrachten nichtlineare Gleichungssysteme, die in der Regel in der sogenannten Nullstellenform r 1 (x 1,...,x n ) = 0 r m (x 1,...,x n ) = 0. bzw. kurz r(x) = 0 gegeben sind, wobei x = (x 1,...,x n ) T den n-dimensionalen Vektor der Unbekannten x j und r(x) = (r 1 (x),...,r m (x)) T die das Gleichungssystem definierende m-dimensionale Vektorfunktion bezeichnet. Im Fall m > n treten mehr Gleichungen als Unbekannte auf und das System wird überbestimmt genannt. Ein überbestimmtes System hat in der Regel keine Lösung, ist also inkonsistent. Wie im Fall linearer Gleichungssysteme ist es sinnvoll, zum Ersatzproblem dem nichtlinearen Quadratmittelproblem überzugehen. Man minimiert die Summe der Fehlerquadrate: Minimiere den Ausdruck bezüglich x. m r i (x) 2 = r(x) 2 2 i=1 1 In manchen Büchern wird die nichtlineare Ausgleichsaufgabe daher unter Optimierungsaufgaben behandelt. 393

394 Nichtlineare Ausgleichsrechnung Nichtlineare Ausgleichsaufgabe Gegeben ist eine nichtlineare Funktion r : R n R m mit m n. Gesucht ist ein Vektor x R n, der die folgende Aufgabe löst: Minimiere x R n r(x) 2 2 Ähnlich wie im linearen Fall schreibt man die nichtlineare Ausgleichsaufgabe kurz r(x) 0. Nichtlineare Quadratmittelaufgaben entstehen oft dadurch, daß Parameter in nichtlinearen Gleichungen oder Differentialgleichungen nach dem Prinzip der kleinsten Fehlerquadrate zu schätzen sind. Beispiel 10.1 Datenapproximation Gegeben sind m Datenpunkte (t i, y i). Gesucht ist ein n-vektorwertiger Parameter x, der dafür sorgt, daß die Modellfunktion f(t, x) die Daten im Sinne kleinster Quadrate bestmöglich approximiert. Definieren wir die Komponenten der Residuumfunktion r(x) wie folgt: r i(x) = y i f(t i,x) i = 1,..., m, dann besteht die Aufgabe darin, die Funktion r T (x)r(x) = r(x) 2 2 zu minimeren. Ist die Modellfunktion zum Beispiel f(t,x) = x 1e x 2t dann sind die Parameter x 1 und x 2 zu bestimmen. Beispiel 10.2 Parameteridentifikation bei Differentialgleichungen Ein realer zeitabhängiger Prozeß werde durch das l-dimensionale System y = f(t,y,x) von gewöhnlichen Differentialgleichungen für die Vektorfunktion y(t) = (y 1(t),..., y l (t)) T beschrieben. Die Vektorfunktion f(t, y, x) der rechten Seite hängt dabei außer von t und y noch von n unbekannten Parametern x = (x 1,..., x n) T ab. Gegeben sind außerdem l Anfangsbedingungen y(0) = y 0. Die Lösung der Anfangswertaufgabe hängt dann außer von t auch noch von den Parametern x ab: y = y(t, x). Bekannt sind weiter mit zufälligen Fehlern behaftete Messungen ỹ i = (ỹ i 1,..., ỹ i l) T und der wahren Werte y(t i,x) = (y 1(t i,x),..., y l (t i,x)) T zu Zeiten t i (i = 1,..., M) mit t 1 < t 2 < t M, aus denen eine Schätzung für den unbekannten Parametervektor x gewonnen werden soll. Man bezeichnet dieses Problem als Parameteridentifikation in Differentialgleichungen. Wird die Quadratsumme der Fehler ỹ i j y j(t i,x) minimiert, ergibt sich die Aufgabe Minimiere x R n M i=1 ỹi y(t i,x) 2 2, also ein nichtlineares Quadratmittelproblem mit der m l-dimensionalen Vektorfunktion ỹ 1 y(t 1,x) r(x) =. ỹ M y(t M,x) und den Unbekannten x. Die Berechnung von r(x) für gegebene Parameter x erfordert die Berechnung der Werte y(t i,x) der Lösungsfunktion an den Stellen t i, was in der Regel nur durch numerische Integration der Anfangswertaufgabe mittels eines numerischen Verfahrens möglich ist. Der Aufwand für eine Funktionswertberechnung r(x) ist hier also ungleich höher als bei einer Parameterschätzung in normalen nichtlinearen Gleichungen.

395 10.1 Die GAUSS-NEWTON-Methode 395 Aufgabenstellungen dieses Typs trifft man zum Beispiel bei der Bahnbestimmung von Satelliten. Die Differentialgleichungen sind die Bewegungsgleichungen, die jedoch die reale Satellitenbewegung wegen vielfältiger nichtmodellierbarer Einflüsse nur näherungsweise korrekt beschreiben. Diese Effekte gleicht man mit Hilfe von Bahndaten, zum Beispiel Winkelbeobachtungen oder Abstandsmessungen, aus. Ziel der nichtlinearen Ausgleichsaufgabe ist es, die Funktion g(x) := (1/2)r T (x)r(x) zu minimieren 2. Der Gradientenvektor und die HESSE-Matrix sind gegeben durch und g(x) = J T (x)r(x) H g (x) = J T (x)j(x) + m r i (x)h i (x), wobei J(x) die JACOBI-Matrix der Vektorfunktion r(x) und H i (x) die HESSE-Matrix der Komponentenfunktion r i (x) ist. Ist nun x k eine Näherungslösung, dann ergibt sich die NEWTON-Korrektur s k als Lösung des linearen Gleichungssystems: (J T (x k )J(x k ) + i=1 m r i (x k )H i (x k ))s k = J T (x k )r(x k ). i= Die GAUSS-NEWTON-Methode Die m HESSE-Matrizen H i sind aufwendig zu berechnen. Darüber hinaus wird in H g jede der HESSESCHEN Matrizen H i mit der Residuumkomponentenfunktion r i multipliziert, welche in der Nähe einer Lösung klein sein sollte, wenn die Modellfunktion eine gute Approximation an die Daten ist. Diese Eigenschaften motivieren das GAUSS-NEWTON- Verfahren für nichtlineare Ausgleichsaufgaben, den zweiten Term 3 in der Summe zu vernachlässigen und das lineare System J T (x k )J(x k )s k = J T (x k )r(x k ) nach s k zu lösen, um so in jeder Iteration einen genäherten NEWTON-Schritt zu erhalten. Betrachtet man dieses lineare System genauer, so stellt man fest, daß es sich um die Normalgleichungen des linearen Quadratmittelproblems J(x k )s k r(x k ) welches zum Beispiel mit einer Orthogonalisierungstrategie wie in Kapitel 6 beschrieben gelöst werden kann. Der nächste Iterationspunkt ist dann durch x k+1 = x k + s k 2 Der Faktor 1/2 dient lediglich dazu, um einfachere Ableitungsterme zu erhalten. 3 Term zweiter Ordnung

396 Nichtlineare Ausgleichsrechnung bestimmt und der Prozeß wird so lange wiederholt, bis Konvergenz eintritt. Die GAUSS- NEWTON-Methode ersetzt somit ein nichtlineares Quadratmittelproblem durch eine Folge von linearen Ausgleichsaufgaben. Es läßt sich daher zusammenfassend wie folgt beschreiben: Lösungsalgorithmus für die nichtlineare Ausgleichsaufgabe r(x) 0 mit dem GAUSS- NEWTON-Verfahren. 1. Wähle einen Startpunkt x 0 R n. 2. Für k = 0, 1, 2,... führe, bis Konvergenz eintritt, folgende Schritte durch: (a) Löse J(x k )s k r(x k ) nach s k. (b) Setze x k+1 = x k + s k. Beispiel 10.3 GAUSS-NEWTON-Verfahren Wir zeigen die GAUSS-NEWTON-Methode für eine nichtlineare Quadratmittelaufgabe. Gegeben sind die Datenpunkte und die nichtlineare Modellfunktion t y f(t,x) = x 1e x 2t. Die Aufgabe besteht nun darin, die Parameter x = (x 1, x 2) T so zu bestimmen, daß die Funktion f die Datenpunkte im Sinne kleinster Quadrate bestmöglich approximiert. Das linke Bilder der Abbildung 10.1 zeigt die Datenpunkte und die Modellfunktion für den Startpunkt x 0 = (1,0) T. Die vektorwertige Residuenfunktion ist r 1(x) y 1 f(t 1,x) 2.0 x 1e x 2 0 r(x) = r 2(x) r 3(x) = y 2 y 3 f(t 2,x) f(t 3,x) = x 1e x 2 1 x 1e x 2 2, r 4(x) y 4 f(t 4,x) 0.1 x 1e x 2 3 und die JACOBI-Matrix J(x) der Vektorfunktion r(x) ist somit e x 2t x 1te x 2t J(x) = e x 2t x 1te x 2t e x 2t x 1te x 2t. e x 2t x 1te x 2t Mit Hilfe des Script-Files 10.1 berechnen wir nun die ersten Iterationspunkte des GAUSS-NEWTON-Verfahrens. Hierzu müssen wir zwei Function-Files bereitstellen, die die Residuenfunktion r(x) = y f(t, x) bzw. die JACOBI-Matrix J(x) zur Verfügung stellen. Führt man den Script-File aus und gibt die beiden Function-Files, sowie den Startpunkt x 0 = (1,0) T ein, so erhält man die Iterationspunkte bzw. die Norm der Residuenfunktion, wie in der folgenden Tabelle zu sehen. x k r(x k )

397 10.1 Die GAUSS-NEWTON-Methode Approximation im Startpunkt 2 Approximation im Lösungspunkt Abbildung 10.1: Datenapproximation Nach fünf Iterationen ist die Näherungslösung x = (1.9950, ) T gefunden. Das rechte Bild der Abbildung 10.1 zeigt die Modellfunktion im Lösungspunkt, das heißt f(t,(1.9950, ) T ). Wie alle Methoden, die auf dem NEWTON-Verfahren basieren, so ist auch das GAUSS- NEWTON-Verfahren nur lokal konvergent, das heißt, startet man zu weit entfernt von einer Lösung, so muß das Verfahren nicht notwendig konvergieren. Mit Hilfe einer Schrittweitensteuerung 4 kann man den Konvergenzbereich gegebenfalls vergrößern. Hierzu sind aber zusätzliche Modifikationen notwendig, damit man auch eine Abstiegsrichtung erhält, wenn man von der Lösung weiter entfernt ist. Ist die Residuenfunktion im Lösungspunkt groß, dann war es nicht gut, den Term zweiter Ordnung in der HESSE-Matrix nicht zu berücksichtigen. Als Folge davon ist die GAUSS- NEWTON-Näherung nicht genau genug, und das Verfahren konvergiert nur sehr langsam oder überhaupt nicht. In solchen Fällen große Residuen ist es besser, nichtlineare Optimierungsalgorithmen einzusetzen, da diese die komplette HESSE-Matrix verwenden. Vorteile und Nachteile der GAUSS-NEWTON-Methode Vorteile Lokal quadratisch konvergent, wenn die Residuen null sind. Linear konvergent 5, wenn das Problem nicht zu nichtlinear ist und die Residuen klein genug sind. 4 Im Englischen line search. 5 Für eine genaue Definition dieses Begriffs verweisen wir auf [15].

398 Nichtlineare Ausgleichsrechnung 1 % % Script-File: ShowGaussNewton 3 % 4 % Gauss-Newton-Methode. 5 % close all 7 clear 8 9 %--Die Datenpunkte t = [ ] ; 12 y = [ ] ; %--Einlesen der Funktion und des Intervalls fname = input( Gebe den Funktionsnamen ein: ); 17 dfname = input( Gebe den Ableitungsnamen ein: ); %--Waehle Startpunkt iter = 0; 22 xc = input( Startpunkt: ) 23 fc = feval(fname,t,xc,y); 24 rnorm = norm(fc)^2 25 dfc = feval(dfname,t,xc); %--Iterationen while input( Gauss-Newton-Schritt? (0=nein, 1=ja) ); 30 iter = iter+1; 31 s = -dfc\fc; % Naechster Schritt. 32 xc = xc+s % aktueller Punkt. 33 fc = feval(fname,t,xc,y); 34 rnorm = norm(fc)^2 35 dfc = feval(dfname,t,xc); 36 end Script-File 10.1: GAUSS-NEWTON-Methode

399 10.2 Nichtlineare Ausgleichsrechnung in MATLAB 399 Lineare Probleme werden in einem Schritt gelöst. Nachteile Ist das Problem stark nichtlinear oder sind die Residuen zu groß, so ist die lokale lineare Konvergenz sehr langsam. Keine lokale Konvergenz für sehr stark nichtlineare Probleme und für sehr große Residuen. Schlecht konditioniert, wenn J(x k ) keinen vollen Rang hat. Nicht notwendig global konvergent Nichtlineare Ausgleichsrechnung in MATLAB Wenn Sie Zugang zur Optimization Toolbox haben, können Sie die eingebaute MATLAB- Funktion lsqnonlin verwenden, um Quadratmittelaufgaben zu lösen. Diese Funktion realisiert verschiedene Algorithmen, die durch eine Parameterwahl ansprechbar sind; unter anderem steht das GAUSS-NEWTON- und LEVENBERG-MARQUARDT-Verfahren zur Verfügung. Speziell zur Lösung von Datenapproximationsproblemen ist die MATLAB-Funktion lsqcurvefit geeignet. Das folgende Beispiel zeigt, wie man mit dieser eingebauten Funktion obiges Beispiel löst. Beispiel 10.4 Datenapproximation mit der Optimization Toolbox Zunächst schreibt man einen Function-File, in dem die Modellfunktion f(t,x) definiert wird. function fxt = modelfun(x,t); fxt = x(1)*exp(x(2)*t); Dann definiert man die Datenpunkte, setzt den Startpunkt x 0 und ruft die Funktion auf. t = [ ] ; y = [ ] ; x0 = [1;0] ; [x,resnorm] = lsqcurvefit( modelfun,x0,t,y)

400 Nichtlineare Ausgleichsrechnung Die Antwort ist Optimization terminated successfully: Relative function value changing by less than OPTIONS.TolFun x = resnorm = Darüber hinaus können Sie mit der Funktion optimset verschiedene Parameter wählen, die es gestatten, das Abbruchkriterium zu wählen, die einzelnen Iterationsschritte auszugeben, die JACOBI-Matrix zur Verfügung zu stellen und vieles mehr. Für weitere Informationen verweisen wir auf die Online-Hilfen der Optimization Toolbox Weitere Bemerkungen und Hinweise Die LEVENBERG-MARQUARDT-Methode zur Lösung nichtlinearer Ausgleichsprobleme wurde von LEVENBERG im Jahr 1944 entwickelt und durch MARQUARDT 1963 modifiziert. Nichtlineare Quadratmittelaufgaben treten in erster Linie bei Parameteridentifikationsaufgaben in nichtlinearen Gleichungen bzw. in Differentialgleichungen auf, siehe [3]. Die definitiven Literaturhinweise für lineare und nichtlineare Ausgleichsaufgaben sind [4], [15] und [61]. Nichtlineare Ausgleichrechnung wird auch in dem Buch [73] behandelt. Deutschsprachige Bücher zu diesem Thema sind zum Beispiel [59], [84] und [111]. Software für nichtlineare Ausgleichsprobleme ist aufgrund der großen Nachfrage weit verbreitet. Eine Übersicht erhält man aus dem NEOS-Guide unter folgender Adresse und im Buch [70] Übungsaufgaben 10.1 Wir betrachten das Ausgleichsmodell y x 1 e x 2t + x 3 + x 4 t. Berechnen Sie zu gegebenen Daten (t i,y i ), i = 1,... m die Terme r(x), g(x), J(x), g(x), J T (x)j(x) und H g (x) Für welche Typen nichtlinearer Quadratmittelprobleme konvergiert die GAUSS- NEWTON-Methode nur sehr langsam oder überhaupt nicht? Warum? 10.3 Für welche Typen nichtlinearer Quadratmittelprobleme konvergiert die GAUSS- NEWTON-Methode quadratisch? 10.4 Zeigen Sie, daß die GAUSS-NEWTON- Methode auf das gleiche hinausläuft wie die NEWTON-Methode, wenn ein lineares Ausgleichsproblem vorliegt Es sei J eine m n-matrix mit m n. Zeigen Sie, daß J genau dann vollen Rang hat, wenn die Matrix J T J regulär ist.

401 A Symbolisches Rechnen mit MATLAB Symbolisches Rechnen, das heißt das Rechnen mit Formeln, und numerisches Rechnen, das heißt das Rechnen mit reellen oder komplexen Zahlen, sind die zwei Säulen, auf denen das wissenschaftliche Rechnen ( scientific computing ) basiert. Beide Arbeitstechniken haben in ihren jeweiligen Anwendungsfeldern große Bedeutung; die jüngere Disziplin, die Computeralgebra, findet in den letzten Jahren immer stärkeren Eingang in die naturwissenschaftlichen Anwendungen. Auch wenn es vielleicht den Anschein hat, daß eine symbolische Lösung, das heißt eine Lösungsformel, nützlicher ist als eine numerische Näherungslösung, trifft dies nicht notwendigerweise zu. Der Nutzen einer Formel, deren Umfang eine oder gar mehrere Bildschirmseite(n) umfaßt, ist in aller Regel gering. Noch schwerwiegender ist die Einsicht, daß Formeln, auch wenn sie theoretisch korrekt sind, beim Einsetzen von Zahlenwerten völlig unbrauchbare Ergebnisse liefern können: Die numerische Stabilität hängt wesentlich an der Form eines Ausdrucks. Durch Einsetzen konkreter Werte in eine symbolische Lösung können beliebig falsche Resultate entstehen: Beispiel A.1 Vorsicht bei symbolischen Lösungen Die drei Lösungen der Gleichung x 3 + ax 2 + bx + c = 0 sind durch gegeben. Die auftretenden Hilfsgrößen γ und δ sind x 1 = 1 6 γ 2δ 1 3 a x 2 = 1 12 γ + δ 1 ( ) 1 3 a + j 3 12 γ + δ x 3 = 1 12 γ + δ 1 ( ) 1 3 a j 3 12 γ + δ γ = 3 36ba 108c 8a b 3 3b 2 a 2 54bac + 81c ca 3 δ = b 1 3 a2. γ Bei 10 stelliger dezimaler Gleitpunktarithmetik ergeben sich aus diesen Formeln für die Gleichung ( x π ) ( x π ) ( x ) = x x x : π mit den Hilfsgrößen p(x) = x x x = 0 γ = j δ = j 401

402 402 A Symbolisches Rechnen mit MATLAB die drei Lösungen x 1 = j x 2 = j x 3 = j. π Die betragsmäßig kleinste Lösung exakter Wert: = ist relativ ungenau, nur eine Ziffer ist korrekt: p(x 2) = j; sie läßt sich jedoch durch einen Schritt des NEWTON-Verfahrens also durch ein numerisches Verfahren signifikant verbessern: Es ist x 2 = ( j ) = j. p( x 2) = j; j j ein weiterer NEWTON-Schritt würde die gesuchte Nullstelle in voller Genauigkeit liefern. Fazit dieses Beispiels ist, daß exakte, symbolische Lösungen ( Formeln ) eines Problems bei numerischen Aufgabenstellungen von geringerem Nutzen sein können als numerische Näherungsverfahren. Symbolisches Rechnen ist der Versuch, die Methoden, die man beim Rechnen mit Papier und Bleistift kennt, auf Rechnern abzubilden und dort schließlich durchzuführen. Symbolische Rechnungen basieren auf Variablen, denen nicht unbedingt Zahlen zugewiesen sind. Man rechnet mit Symbolen und Termen, wie man es vom Rechnen mit Papier und Bleistift kennt. Arithmetische Operationen können exakt durchgeführt werden. Zum Beispiel ist 3 geteilt durch 7 exakt 3/7 und nicht Außerdem kann man Näherungen bis auf eine beliebig vorgegebene gewünschte Anzahl von Stellen finden. Es ist beispielsweise möglich, π bis auf 200 Stellen genau zu berechnen. Man kann Polynome oder rationale Ausdrücke symbolisch addieren, subtrahieren und dividieren. Ausdrücke können differenziert werden und man erhält die gleichen Ergebnisse, die bisher nur mit Bleistift und Papier zu erzielen waren. Ausdrücke können sogar unbestimmt integriert werden, sofern sie Integrale in geschlossener Form besitzen. Diese Möglichkeiten erleichtern das ermüdende und fehlerbedrohte Manipulieren komplizierter Ausdrücke, das auch häufig das Vorspiel numerischer Behandlung bildet. Mit symbolischem Rechnen lassen sich auch kleinere lineare Gleichungssysteme ohne Rundungsfehler lösen. Auf jeden Fall ist symbolisches Rechnen ein sich ständig entwickelndes Gebiet, dessen Bedeutung für das wissenschaftliche Rechnen zunehmen wird. Betrachten wir die Zahl 0.1. Dies ist der Punkt 1/10 auf der reellen Zahlengerade von 0 nach 1. Gibt man nach dem MATLAB-Prompt 1/10 ein, so antwortet MATLAB mit Das bedeutet, MATLAB führt eine Gleitpunktdivision durch und gibt als Ergebnis zurück. Tatsächlich aber kann der Rechner das Resultat 1/10 = 0.1 nicht exakt im Rechner darstellen, da 1/10 im Dualsystem eine unendliche Reihe ist: 1 10 =

403 A Symbolisches Rechnen mit MATLAB 403 Rechnet man nun mit dem Gleitpunktergebnis weiter, so rechnet man in Wirklichkeit nicht mit 0.1, sondern mit einer Zahl, die zwar sehr nahe, aber eben nicht exakt 0.1 ist. Mit Hilfe der Symbolic Math Toolbox ist es möglich, exakt mit 1/10 = 0.1 zu rechnen. Hierzu muß man 1/10 als symbolische Zahl erzeugen. Dies geht mit dem Befehl sym:» sym( 1/10 ) ans = 1/10 In den vorausgegangenen Kapiteln haben wir Berechnungen numerisch durchgeführt; in diesem Kapitel wollen wir nun symbolisch rechnen. Wie wir wissen, hat das numerische Rechnen einige entscheidende Nachteile: Rundungsfehler beeinflussen die Ergebnisse der numerischen Berechnungen. Aufgaben, die analytisch lösbar sind, werden durch numerische Verfahren nur näherungsweise gelöst. Daher ist die Struktur der numerischen Lösung oft nicht so klar zu erkennen. Wir haben MATLAB kennengelernt als ein mächtiges numerisches Werkzeug. MATLAB benötigt und operiert mit Zahlen. Sind Zahlen wie zum Beispiel 0.35 oder Variablen wie zum Beispiel x=[2 3] gegeben, so kann man auf diesen mit MATLAB-Funktionen oder MATLAB-Kommandos operieren und wieder Zahlen (numerische Resultate) erzeugen. Zum Beispiel: >> x = [2 3]; >> sin(x) ans = Bisher war es nicht möglich, mit mathematischen Termen zu rechnen. Variablen mußten immer mit Zahlen belegt sein. Hat man einer Variablen keinen Wert zugewiesen, so erhielt man eine Fehlermeldung, wie etwa die folgende: >> a??? Undefined function or variable a. Alle Kommandos und Funktionen, die wir jetzt besprechen wollen, ändern dies. Mit Hilfe der Symbolic Math Toolbox ist es möglich wie bei anderen Computeralgebra-Systemen 1 auch symbolisch zu rechnen, das heißt, anstatt mit Zahlen mit symbolischen Termen. Hier ein paar Beispiele symbolischer Terme: sin(x 2 ) 3x 2 5x 1 1 CA-System = Computeralgebra-System.

404 404 A Symbolisches Rechnen mit MATLAB d dx (x3 2x) 1 1+x 2 dx Wir beschränken uns hier auf einige wichtige Beispiele. Von besonderer Bedeutung ist die Regel, wie MATLAB Variablen, die nicht explizit angegeben sind, wählt: Sind in einem Ausdruck mehrere Parameter vorhanden und gibt man in dem entsprechenden Kommando keine Variable an, so nimmt MATLAB an, daß die im Alphabet am nächsten bei x liegende Größe die Variable ist. Beachten Sie auch, daß die Symbolic Math Toolbox nicht zu Basis- MATLAB gehört. Sie muß als zusätzliche Toolbox installiert sein. In der Studentenversion sind die symbolischen Fähigkeiten dagegen vorhanden. MATLAB s Symbolic Math Toolbox basiert auf dem CA-System MAPLE. A.1 Analysis Differentiation Die Funktion diff berechnet die symbolische Ableitung eines Funktionsterms. Um einen symbolischen Ausdruck zu erzeugen, muß man zuerst die verwendeten symbolischen Variablen definieren, und dann den gewünschten Ausdruck bilden, unnd zwar genauso, wie man es mathematisch tun würde. Die folgenden Anweisungen» syms x» f = x^2*exp(x);» diff(f) erzeugen eine symbolische Variable x, bilden den symbolischen Ausdruck x 2 exp(x) und berechnen die Ableitung von f nach x. Das Ergebnis ist: ans = 2*x*exp(x)+x^2*exp(x) Die Anweisungen» syms t» diff(sin(pi*t)) berechnen die Ableitung von sin(πt) nach t. Es können auch partielle Ableitungen berechnet werden: >> syms w x y >> diff(sin(w*x*y)) berechnet die Ableitung von sin(wxy) nach x. Das Ergebnis ist cos(wxy)wy. Das Ergebnis von >> diff(sin(w*y))

405 A.1 Analysis 405 ist cos(wy)w. Selbstverständlich kann man auch steuern, nach welcher Variablen differenziert werden soll: >> diff(sin(w*y),w) liefert das Ergebnis ans = cos(w*y)*y Es ist auch möglich, Ableitungen höherer Ordnung zu berechnen. Die Tabelle A.1 faßt das Differenzieren mit diff nochmals zusammen. Mathematische Syntax f(x)/dx f(a)/da d 2 f/db 2 MATLAB-Syntax diff(f,x) oder diff(f) diff(f,a) diff(f,b,2) Tabelle A.1: Differenzieren Auf der beiliegenden CD befindet sich der Script-File NewtonSym.m. Dieser stellt eine Implementierung der eindimensionalen NEWTON-Methode dar. Die dazu erforderliche Ableitung wird dabei mit der Funktion diff symbolisch berechnet. Als Beispiel wird eine Nullstelle der Funktion f(x) = x 2 4sin(x) mit Startwert 3 berechnet. Den Leser verweisen wir hierzu auf Kapitel 9. Dieses Beispiel zeigt eine sinnvolle Verknüpfung von symbolischen und numerischen Rechnungen. Integration Die Funktion int erlaubt symbolische Integration. Die Tabelle A.2 zeigt verschiedene Möglichkeiten mit int. Mathematische Syntax MATLAB-Syntax f(x)dx int(f,x) oder int(f) f(k)dk int(f,k) 1 0 f(x)dx int(f,x,0,1) oder int(f,0,1) f(y)dy int(f,y,-inf,inf) b a f(x)dx int(f,x,a,b) Tabelle A.2: Integrieren Der pretty-befehl Mit dem pretty-befehl kann man Formeln in etwas lesbarerer Form ausgeben. Vergleichen Sie >> pretty(int(sqrt(x)))

406 406 A Symbolisches Rechnen mit MATLAB mit >> int(sqrt(x)) ans = 2/3*x^(3/2) Grenzwerte 3/2 2/3 x Die folgenden MATLAB-Anweisungen berechnen den Grenzwert» syms x» limit(cos(x)) ans = 1 lim cos(x) = 1 x 0 Die Tabelle A.3 zeigt weitere Möglichkeiten mit limit. Mathematische Syntax lim x 0 f(x) lim x a f(x) lim x a f(x) lim x a + f(x) MATLAB-Syntax limit(f) limit(f,x,a) oder limit(f,a) limit(f,x,a, left ) limit(f,x,a, right ) Tabelle A.3: Grenzwerte berechnen TAYLOR-Polynome Die Funktion taylor erlaubt das symbolische Berechnen des TAYLOR-Polynoms einer Funktion. Zum Beispiel liefert >> taylor(sin(x)) das TAYLOR-Polynom bis zur fünften Ordnung: ans = x-1/6*x^3+1/120*x^5

407 A.1 Analysis 407 Die Anweisung >> taylor(exp(-x),8) berechnet das TAYLOR-Polynom bis zur Ordnung acht: ans = 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5+1/720*x^6-1/5040*x^7 JACOBI-Matrizen Bei Funktionen mehrerer Veränderlicher berechnet man die Funktionalmatrix oder JACOBI- Matrix mittels jacobian. Will man die JACOBI-Matrix der Funktion berechnen, so geht das wie folgt: f : R 3 R 3 (x,y,z) (xy,x,z) >> syms x y z >> J = jacobian([x*y;x;z],[x;y;z]) J = [ y, x, 0] [ 1, 0, 0] [ 0, 0, 1] Symbolisches Summieren In der Analysis beweist man 2 : n=1 1 n 2 = π2 6. Mit dem Kommando symsum kann man dies überprüfen:» symsum(1/n^2,1,inf) ans = 1/6*pi^2 Graphen zeichnen Die Anweisungen» syms x» f = 1/(5+4*cos(x)); 2 Zum Beispiel mit Hilfe der Theorie der FOURIER-Reihen.

408 408 A Symbolisches Rechnen mit MATLAB definieren die Funktion f(x) = cos(x) und speichern den symbolischen Ausdruck in der Variablen f. Der Aufruf» ezplot(f,[-5,5]) zeichnet die Funktion f im Intervall [ 5, 5]. Die Abbildung A.1 zeigt den Graph. 1/(5+4 cos(x)) x Abbildung A.1: Graph der Funktion f(x) = cos(x) A.2 Die Funktionen funtool und taylortool Die Funktionen funtool und taylortool stellen pädagogische Hilfsmittel zur Verfügung. Die Funktion funtool ist eine Art grafischer Taschenrechner, der wichtige Operationen und einfache Visualisierungen bei Funktionen einer Veränderlichen ermöglicht. Die Abbildung A.2 zeigt die drei MATLAB-Fenster, die standardmäßig geöffnet werden, wenn man das Kommando funtool eingibt. Mit Hilfe des Kommandos taylortool können Sie TAYLOR-Approximationen studieren. Rufen Sie hierzu taylortool auf, siehe Abbildung A.3. A.3 Variable Rechengenauigkeit MATLAB rechnet standardmäßig mit einer sechzehnstelligen Gleitpunktarithmetik. Die Standardausgabe sind vier Dezimalen. Mit der Funktion vpa ist eine beliebige Genauigkeit

409 A.3 Variable Rechengenauigkeit 409 Abbildung A.2: Die Funktion funtool Abbildung A.3: Die Funktion taylortool

410 410 A Symbolisches Rechnen mit MATLAB möglich. Zeit- und Speicherbeschränkungen müssen dabei allerdings berücksichtigt werden. Die Kreiszahl π mit 32 Ziffern: >> vpa(pi); Die Kreiszahl π mit 50 Ziffern: >> vpa(pi,50); A.4 Vereinfachungen Mit der Funktion simplify können symbolische Terme vereinfacht werden. In der Mathematik lernt man die Gültigkeit von sin(x) 2 +cos(x) 2 = 1. Mit der Funktion simplify kann man dies bestätigen: >> syms x >> simplify( sin(x)^2+cos(x)^2 ) ans = 1 A.5 Substituieren Substitutionen können mit der Funktion subs durchgeführt werden. Die folgenden Anweisungen substituieren cos(x) anstelle von x. >> syms x >> subs( sqrt(1-x^2),x,cos(x) ) ans = (1-cos(x)^2)^(1/2) A.6 Lineare Algebra Die folgenden Anweisungen erzeugen zwei symbolische Matrizen K und G. >> syms a b t >> K = [a+b,a-b ; b-a,a+b] K = [ a+b, a-b] [ b-a, a+b] >> G = [cos(t),sin(t) ; -sin(t),cos(t)]

411 A.6 Lineare Algebra 411 G = [cos(t), sin(t)] [-sin(t), cos(t)] Damit lassen sich verträgliche Matrixoperationen durchführen. Die Tabelle A.4 zeigt Möglichkeiten. Mathematische Syntax MATLAB-Syntax Bedeutung K + G K+G Matrixaddition K G K-G Matrixsubtraktion KG K*G Matrixmultiplikation Tabelle A.4: Symbolische Matrixoperationen Auch Matrixoperationen auf symbolischen Matrizen sind möglich. Die Tabelle A.5 zeigt symbolische Matrixfunktionen. MATLAB-Syntax det inv null colspace eig poly svd jordan Bedeutung Determinante Inverse Nullraum (Kern) Spaltenraum Eigenwerte und Eigenvektoren Charakteristisches Polynom Singulärwertzerlegung JORDAN-Zerlegung Tabelle A.5: Symbolische Matrixfunktionen Um die Inverse der Matrix A = ( ) zu berechnen, kann man wie folgt vorgehen:» A=[3-1;-1 3] A = » inv(sym(a)) ans = [ 3/8, 1/8] [ 1/8, 3/8] Mit der Funktion poly läßt sich das charakteristische Polynom aufstellen:

412 412 A Symbolisches Rechnen mit MATLAB» poly(sym(a)) ans = x^2-6*x+8 Basen und die vier Fundamentalräume Ist A eine Matrix, so kann man mit den Funktionen colspace und null eine Basis für den Bildraum und für den Nullraum von A berechnen.» A=sym([1 2;2 4]);» null(a) ans = [ -2] [ 1]» colspace(a) ans = [ 1] [ 2]» colspace(a) *null(a) ans = 0 Die Matrix A hat einen eindimensionalen Nullraum und einen eindimensionalen Bildraum. Der Vektor ( 2,1) T ist eine Basis für den Nullraum und (1,2) T ist eine Basis für den Bildraum von A. Die letzte Anweisung bestätigt, daß diese senkrecht aufeinander stehen. Im folgenden Beispiel hat die Matrix B einen zweidimensionalen Nullraum und einen eindimensionalen Bildraum.» B=sym([1 2 3;2 4 6;3 6 9]);» null(b) ans = [ -2, -3] [ 1, 0] [ 0, 1]» colspace(b) ans = [ 1] [ 2] [ 3] Damit hat man die Möglichkeit, Basen aller vier Fundamentalräume zu berechnen. Ist ( ) A = so ist m = 2, n = 3 und Rang(A) = 1. Die beiden Vektoren ( 2,1,0) T und ( 4,0,1) T bilden eine Basis des Nullraums von A, denn:

413 A.6 Lineare Algebra 413» null(a) ans = [ -2, -4] [ 1, 0] [ 0, 1] (1,2,4) T ist eine Basis des Zeilenraums von A, denn:» colspace(a ) ans = [ 1] [ 2] [ 4] (1,2) T ist eine Basis des Spaltenraums, da:» colspace(a) ans = [ 1] [ 2] und ( 2,1) T ist eine Basis des Nullraums von A T, denn:» null(a ) ans = [ -2] [ 1] Matrizen diagonalisieren Es sei A = gegeben. Wir wollen MATLAB verwenden, um folgende Frage zu beantworten: Ist A reell diagonalisierbar, das heißt, können wir eine Matrix T finden, so daß T 1 AT diagonalisierbar ist? Die Eigenwerte von A finden wir mit eig(sym(a)). MATLAB antwortet mit: ans = [ 3] [ -2] [ -1] Da die Eigenwerte von A alle reell und voneinander verschieden sind, kann A diagonalisiert werden, das heißt, es gibt eine Matrix T mit T 1 AT =

414 414 A Symbolisches Rechnen mit MATLAB Wie findet man T? Die Spalten von T können als Eigenvektoren zu den Eigenwerten -1,-2 und 3 gewählt werden. Gibt man» [T,D]=eig(sym(A)) ein, so gibt MATLAB in der Diagonalmatrix D die Eigenwerte zurück und die Spalten von T sind dazugehörige Eigenvektoren: T = [ 1, 0, -4] [ 0, 1, -2] [ 1, -3, 1] D = [ -2, 0, 0] [ 0, 3, 0] [ 0, 0, -1] Schließlich kann man mit inv(t)*a*t überprüfen, ob T 1 AT die gewünschte Diagonalmatrix ist. Wir erhalten das gewünschte Ergebnis 3 : ans = [ -2, 0, 0] [ 0, 3, 0] [ 0, 0, -1] Übungsaufgabe Gegeben ist die 4 4 Matrix A = Zeigen Sie mit MATLAB, daß die Eigenwerte von A reell und voneinander verschieden sind. Finden Sie eine Matrix T, so daß T 1 AT diagonal ist.. Die JORDANSCHE-Normalform oder der große Satz über ähnliche Matrizen Die JORDANSCHE Normalform ist das Ergebnis des Versuchs, eine beliebige quadratische Matrix durch eine Ähnlichkeitstransformation möglichst auf Diagonalform zu bringen. Mit anderen Worten: Zu einer gegebenen Matrix A finde man eine reguläre Matrix V, so daß J := V 1 AV so nahe wie möglich diagonal ist. Für nahezu alle Matrizen ist die JOR- DAN-Matrix J diagonal, wobei die Diagonalelemente von J die Eigenwerte von A sind, und die Spalten der Transformationsmatrix V enthalten die Eigen- und Hauptvektoren der Matrix A. In jedem Fall ist J eine Diagonalmatrix, wenn A symmetrisch ist oder paarweise verschiedene Eigenwerte hat. Es gibt jedoch nichtsymmetrische Matrizen mit mehrfachen 3 Beachten Sie, daß A vom Typ double, das Ergebnis aber eine symbolische Matrix ist.

415 A.7 Algebraische Gleichungen 415 Eigenwerten, die nicht diagonalisierbar sind. Dann enthält die JORDAN-Matrix alle Eigenwerte, aber einige Elemente der oberen Nebendiagonale sind 1 anstatt 0. Die Anweisung J=jordan(A) berechnet die JORDAN-Matrix von A und [V,J]=jordan(A) zusätzlich die Ähnlichkeitstransformation V. Die Spalten von V sind die verallgemeinerten Eigenvektoren von A.» A=sym([3/2 1;-1/4 1/2]);» [V,J] = jordan(a) V = [ 1/2, 1] [ -1/4, 0] J = [ 1, 1] [ 0, 1] Das numerische Berechnen der JORDANSCHEN Normalform ist ein instabiler Prozeß. Jede noch so kleine Störung in A trennt im allgemeinen die mehrfachen Eigenwerte in einfache, so daß aus J die Diagonalmatrix aus der Eigenwertzerlegung wird. Aus diesem Grund gibt es den Befehl jordan nur in der Symbolic Math Toolbox, nicht aber im Standard-MATLAB. Bei Matrizen höherer als dritter Ordnung versagt der Befehl häufig, was unter anderem daran liegt, daß sich die Eigenwerte von Matrizen höherer als vierter Ordnung im allgemeinen nicht geschlossen als Radikale der Matrizenelemente darstellen lassen. A.7 Algebraische Gleichungen Unter algebraischen Gleichungen verstehen wir Gleichungen, die keine Differentialgleichungen sind 4. Wir wollen nun Möglichkeiten aufzeigen, wie man algebraische Gleichungen symbolisch (analytisch) 5 löst. Von nichtlinearen Gleichungen ist bekannt, daß sie viel komplexer sind als lineare. Mit Hilfe des Kommandos solve ist es möglich, algebraische Gleichungen symbolisch zu lösen. Wir wollen anhand von Beispielen zeigen, wie dies geht und wo Grenzen liegen. Hierbei zeigt sich folgendes: Hat man genügend Speicherplatz und viel Zeit, so lassen sich lineare Gleichungen mit solve analytisch lösen. Polynomiale Gleichungen vom Grad kleiner gleich vier und einige Polynome höheren Grades lassen sich mit solve exakt lösen. Es ist möglich, daß man nicht alle Lösungen mit solve erhält. Es ist möglich, daß man keine Lösung erhält, obwohl es eine gibt. Das nachfolgende Beispiel löst x 2 x = 0. 4 Algebraische Gleichungen können linear und nichtlinear sein. 5 Gleichungen symbolisch lösen, bedeutet für uns das gleiche, wie Gleichungen analytisch lösen, und steht im Gegensatz zur numerischen Lösung.

416 416 A Symbolisches Rechnen mit MATLAB >> solve( x^2-x=0 ) ans = [0] [1] Findet man keine exakte symbolische Lösung, so wird die Lösung in variabler Genauigkeit ausgegeben. >> solve( cos(x)=x ) ans = Es können auch Gleichungssysteme gelöst werden. >> S = solve( x^2+y^2=1, x-y=0 ) S.x 1/2*2^(1/2) -1/2*2^(1/2) Wir wollen diejenigen Werte von t bestimmen, für die die Matrix t t t singulär wird. Die folgenden symbolischen Berechnungen zeigen, daß dies für t = 0, 2 und 2 der Fall ist. Wir definieren die symbolische Matrix A. >> syms t >> A = [t 1 0; 1 t 1; 0 1 t]; Wir berechnen die Determinante. >> det(a) ans = t^3-2*t Die Nullstellen der Determinante besagen, daß dort die Matrix singulär ist. Dies ist genau für die Werte t = 0, 2 und 2 der Fall: >> solve(det(a)) ans = [0] [2^(1/2)] [-2^(1/2)]

417 A.8 Gewöhnliche Differentialgleichungen 417 Angenommen wir wollen die parametrische lineare Gleichung ax + b = 0 mit der Variablen x und den Parametern a und b lösen. Dazu müssen wir die Variable x und die Parameter a und b als symbolische Objekte definieren. Zusätzlich muß angegeben werden, daß nach der Variablen x aufgelöst werden soll. Dazu wird dem Befehl solve durch Komma getrennt die Lösungsvariable x übergeben. >>syms x a b >>l = solve(a*x+b,x) l = -b/a Das nachfolgende Beispiel zeigt das Lösen der parametrischen quadratischen Gleichung ax 2 + bx + c = 0. Hierbei ist die Antwort ein symbolischer Vektor, dessen Komponenten die beiden Lösungen sind. >>syms x a b c >>l = solve(a*x^2+b*x+c) l = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] Das folgende Beispiel liefert komplexe Zahlen als Lösungen.» l=solve( x^2=-1 ) l = [ i] [ -i] Mit solve kann man auch andere Gleichungstypen, wie Potenzgleichungen, Polynomgleichungen, Wurzelgleichungen, Betragsgleichungen, Trigonometrische Gleichungen, Exponentialgleichungen und Logarithmusgleichungen lösen. Wir überlassen es dem Leser, sich eigene Beispiele auszudenken und zu rechnen. A.8 Gewöhnliche Differentialgleichungen Mit Hilfe der Funktion dsolve ist es möglich, gewöhnliche Differentialgleichungen symbolisch zu lösen. y = ay hat die allgemeine Lösung y(t) = ce at. In MATLAB erhält man diese wie folgt:

418 418 A Symbolisches Rechnen mit MATLAB >> dsolve( Dy=a*y ) ans = exp(a*t)*c1 Hierzu folgende Bemerkungen: Der Buchstabe D bezeichnet die Differentiation. D2 bedeutet die zweite Ableitung, D3 die dritte usw. Demnach bedeutet D2y d 2 y/dt 2. Die abhängige Variable ist die, die nach D folgt. Die unabhängige Variable ist standardmäßig t. Anfangswerte können spezifiziert werden. Wenn nicht, sind C1, C2 usw. die Integrationskonstanten. Die Tabelle A.6 zeigt, wie man eine gewöhnliche Differentialgleichung, eine Anfangswertaufgabe, eine Randwertaufgabe und ein Differentialgleichungssystem löst. Mathematische Syntax y = y y = y y(0) = 2 y + 4y = 0 y(0) = 0, y(π) = 0 y = 3y + 4z z = 4y + 3z MATLAB-Syntax y=dsolve( Dy=y ) y=dsolve( Dy=y, y(0)=2 ) y=dsolve( D2y=-4*y, y(0)=0, y(pi)=0 ) [y,z]=dsolve( Dy=3*y+4*z, Dz=-4*y+3*z ) Tabelle A.6: Differentialgleichungen symbolisch lösen A.9 Funktionen der Symbolic Math Toolbox Die nachfolgenden Tabellen A.7, A.8, A.9, A.10, A.11, A.12, A.13, A.14, A.15, A.16, A.17 und A.18 zeigen in Gruppen eingeteilt alle direkt zugänglichen Funktionen der Symbolic Math Toolbox.

419 A.9 Funktionen der Symbolic Math Toolbox 419 diff int jacobian limit symsum taylor Analysis Differentiation Integration JACOBI-Matrix Grenzwert eines Ausdrucks Summation einer Reihe TAYLOR-Reihen Tabelle A.7: Analysis colspace det diag eig expm inv jordan null poly rank rref svd tril triu Lineare Algebra Basis für den Spaltenraum Determinante Erzeugt Diagonalmatrix oder extrahiert Diagonale Eigenwerte und Eigenvektoren Exponentialfunktion einer Matrix Inverse einer Matrix JORDAN-Form Basis für den Nullraum Charakteristisches Polynom Rang Reduzierte Zeilenstufenform Singulärwertzerlegung Untere Dreiecksmatrix Obere Dreiecksmatrix Tabelle A.8: Lineare Algebra collect expand factor horner numden simple simplify subexpr subs Vereinfachungen Terme zusammenfassen Ausmultiplizieren Faktorisiert Darstellung eines Polynoms nach HORNER Zähler und Nenner Sucht nach kürzester Form Terme vereinfachen Terme in weitere Terme aufspalten Symbolische Substitution Tabelle A.9: Vereinfachungen

420 420 A Symbolisches Rechnen mit MATLAB compose dsolve finverse solve Lösen von Gleichungen Verknüpft Funktionen Löst Differentialgleichungen symbolisch Inverse einer Funktion Löst Gleichungen symbolisch Tabelle A.10: Lösen von Gleichungen Variable Genauigkeitsarithmetik digits Setzt Genauigkeitsgröße vpa Variable Genauigkeitsarithmetik Tabelle A.11: Variable Genauigkeitsarithmetik Arithmetische Operationen + Addition - Subtraktion * Multiplikation.* Multiplikation (Feld) / rechte Division./ rechte Division (Feld) \ linke Division.\ linke Division (Feld) ˆ Potenzieren.ˆ Potenzieren (Feld) Konjugiert transponiert. Transponiert Tabelle A.12: Arithmetische Operationen cosint hypergeom lambertw sinint zeta Spezielle Funktionen Ci(x) = γ + ln(x) + x cos(t) 1 0 t dt Verallgemeinerte hypergeometrische Funktion Lösung von λ(x)e λ(x) = x Si(x) = x sin(t) dt 0 t RIEMANNSCHE ζ-funktion Tabelle A.13: Spezielle Funktionen

421 A.9 Funktionen der Symbolic Math Toolbox 421 maple mapleinit mfun mhelp mfunlist procread MAPLE-Zugriffe Zugriff auf den MAPLE-Kern Initialisiert MAPLE Numerisches Berechnen von MAPLE-Funktionen MAPLE-Hilfe Liste von Funktionen für mfun Installiert eine MAPLE-Prozedur Tabelle A.14: MAPLE-Zugriffe Pädagogische und Grafische Anwendungen ezcontour Zeichnet Höhenlinien ezcontourf Zeichnet Höhenlinien ausgefüllt ezmesh Gitterzeichung ezmeshc Gitterzeichnung mit Höhenlinien ezplot Zeichnet eine Funktion ezplot3 Zeichnet 3D ezpolar Zeichnet in Polarkoordinaten ezsurf Flächenzeichnung ezsurfc Flächenzeichnung mit Höhenlinien funtool Kleiner Rechner rsums RIEMANNSCHE Summen taylortool Tool für TAYLOR Reihen Tabelle A.15: Pädagogische und grafische Anwendungen char double poly2sym sym2poly Konvertierungen Konvertiert sym-objekt in char Konvertiert sym-objekt in double Koeffizientenvektor nach symbolischem Polynom Symbolisches Polynom nach Koeffizientenvektor Tabelle A.16: Konvertierungen

422 422 A Symbolisches Rechnen mit MATLAB ccode conj findsym fortran imag latex pretty real sym syms Grundlegende Operationen FORTRAN-Code für einen symbolischen Ausdruck Konjugiert komplex Findet symbolische Variablen FORTRAN-Code für einen symbolischen Ausdruck Imaginärer Teil einer komplexen Variablen LATEX-Code für einen symbolischen Ausdruck Schönere Ausgabe für einen symbolischen Ausdruck Reeller Teil einer komplexen Variablen Erzeugt ein symbolisches Objekt Erzeugt mehrere symbolische Objekte Tabelle A.17: Grundlegende Operationen Integral-Transformationen fourier FOURIER-Transformation ifourier Inverse FOURIER-Transformation ilaplace Inverse LAPLACE-Transformation iztrans Inverse z-transformation laplace LAPLACE-Transformation ztrans z-transformation Tabelle A.18: Integraltransformationen A.10 Wie man MAPLE-Funktionen verwendet Die Funktion maple erlaubt es, jede MAPLE-Funktion direkt zu verwenden. Kennt man den Namen der gewünschten MAPLE-Funktion, so kann man mit mhelp <Name> MAPLE-Online-Informationen erhalten. Mit dem Aufruf» mhelp gcd erhält man zum Beispiel folgende Informationen über die MAPLE-Funktion gcd gcd - greatest common divisor of polynomials lcm - least common multiple of polynomials Calling Sequence: gcd(a,b, cofa, cofb ) lcm(a,b,...) Parameters:

423 A.10 Wie man MAPLE-Funktionen verwendet 423 a, b - multivariate polynomials over an algebraic number field or an algebraic function field. cofa,cofb - (optional) unevaluated names Description: - The gcd function computes the greatest common divisor of two polynomials a and b.... usw. Da man auf diese Art die Syntax der MAPLE-Funktion gcd erfahren hat, kann man nun die Funktion maple benutzen, um gcd zu verwenden. Die nachfolgenden Zeilen zeigen, wie man den größten gemeinsamen Teiler der Polynome x 2 y 2 und x 3 y 3 berechnet:» syms x y» p1 = x^2-y^2;» p2 = x^3-y^3;» maple( gcd,p1,p2) ans = -y+x Die Anweisungen» maple( gcd,225,725) ans = 25 bestimmen den größten gemeinsamen Teiler von 225 und 725. Mit dem Aufruf» mhelp index[function] erhält man eine Liste aller MAPLE-Funktionen. Partielle Differentialgleichungen Mit der MAPLE-Funktion pdesolve kann man einfache partielle Differentialgleichungen lösen. Als Beispiel betrachten wir die eindimensionale homogene Wellengleichung u tt c 2 u xx = 0 (c 0). Dies ist eine lineare partielle Differentialgleichung zweiter Ordnung. Um diese symbolisch zu lösen, definieren wir zunächst die symbolischen Variablen x, t, c und die Funktion u(x,t):» syms x t c» u = sym( u(x,t) ); Danach berechnen wir die Ableitungen zweiter Ordnung» uxx = diff(u,x,2); utt = diff(u,t,2); und schließlich die allgemeine Lösung

424 424 A Symbolisches Rechnen mit MATLAB» maple( pdesolve,utt-c^2*uxx,u) u(x,t) = _F1(t*c+x)+_F2(t*c-x) Hierbei sind _F1 und _F2 zwei beliebige (differenzierbare) Funktionen. Wählt man für diese beiden Funktionen e z2 und c = 1, so erhält man den Graph der dadurch gewonnenen Lösungsfunktion u(x,t) = e (t+x)2 + e (t x)2 durch» ezsurf( exp(-(t+x)^2)+exp(-(t-x)^2) ) In der Abbildung A.4 ist dieser gezeichnet, und man erkennt, daß die allgemeine Lösung der homogenen Wellengleichung eine Überlagerung zweier gegenläufiger Wellen darstellt. Abbildung A.4: Lösung u = e (t+x)2 + e (t x)2 der eindimensionalen Wellengleichung A.11 Weitere Bemerkungen und Hinweise Die Symbolic Math Toolbox ist eine Sammlung von MATLAB-Funktionen und Kommandos zum Rechnen mit symbolischen Termen. Es gibt Funktionen, mit denen man algebraische Gleichungen und Differentialgleichungen lösen, differenzieren und integrieren, Terme vereinfachen,

http://www.mathematik.uni-kl.de/ gramlich

http://www.mathematik.uni-kl.de/ gramlich Vorwort MATLAB ist inzwischen in vielen Hochschulen, Universitäten und Fachhochschulen gleichermaßen ein etabliertes Programmsystem, das sowohl im Fach Mathematik selbst als auch in noch stärkerem Maße

Mehr

Einführung in MATLAB

Einführung in MATLAB Kapitel 4 Einführung in MATLAB 41 Allgemeines MATLAB ist eine kommerzielle mathematische Software zur Lösung mathematischer Probleme und zur graphischen Darstellung der Ergebnisse Die Verfahren in MATLAB

Mehr

MATLAB Grundlagen MATLAB. Grundlagen. Vorlesung Matlab/Simulink Dipl.-Ing. U. Wohlfarth

MATLAB Grundlagen MATLAB. Grundlagen. Vorlesung Matlab/Simulink Dipl.-Ing. U. Wohlfarth MATLAB Grundlagen Dipl.-Ing. U. Wohlfarth Was ist MATLAB? Softwarepaket zur numerischen Mathematik Speziell für Vektoren & Matrizen: MATrix LABoratory Basismodul für allgemeine Mathematik, Ein/Ausgabe,

Mehr

Einführung in die Vektor- und Matrizenrechnung. Matrizen

Einführung in die Vektor- und Matrizenrechnung. Matrizen Einführung in die Vektor- und Matrizenrechnung Matrizen Definition einer Matrix Unter einer (reellen) m x n Matrix A versteht man ein rechteckiges Schema aus reellen Zahlen, die wie folgt angeordnet sind:

Mehr

ax 2 + bx + c = 0, (4.1)

ax 2 + bx + c = 0, (4.1) Kapitel 4 Komplexe Zahlen Wenn wir uns auf die reellen Zahlen beschränken, ist die Operation des Wurzelziehens (also die Umkehrung der Potenzierung) nicht immer möglich. Zum Beispiel können wir nicht die

Mehr

Elemente der Analysis II

Elemente der Analysis II Elemente der Analysis II Kapitel 3: Lineare Abbildungen und Gleichungssysteme Informationen zur Vorlesung: http://www.mathematik.uni-trier.de/ wengenroth/ J. Wengenroth () 15. Mai 2009 1 / 35 3.1 Beispiel

Mehr

Computerarithmetik ( )

Computerarithmetik ( ) Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur

Mehr

klar. Um die zweite Bedingung zu zeigen, betrachte u i U i mit u i = 0. Das mittlere -Zeichen liefert s

klar. Um die zweite Bedingung zu zeigen, betrachte u i U i mit u i = 0. Das mittlere -Zeichen liefert s Nachtrag zur allgemeinen Vektorraum-Theorie. 1.5.15. Direkte Summen. Sei V ein Vektorraum, seien U 1,..., U t Unterräume, wir schreiben V = U 1 U 2 U t = t i=1 U i falls die folgenden beiden Bedingungen

Mehr

Ein Schnellkurs in Matlab

Ein Schnellkurs in Matlab Ein Schnellkurs in Matlab Oliver Stein Lehrstuhl C für Mathematik RWTH Aachen E-Mail: stein@mathc.rwth-aachen.de Überarbeitete Version, Oktober 2001 1 Einführung Diese Kurzeinführung in grundlegende Elemente

Mehr

Numerisches Programmieren

Numerisches Programmieren Technische Universität München SS 2012 Institut für Informatik Prof Dr Thomas Huckle Dipl-Inf Christoph Riesinger Dipl-Math Alexander Breuer Dipl-Math Dipl-Inf Jürgen Bräckle Dr-Ing Markus Kowarschik Numerisches

Mehr

Vorlesung. Komplexe Zahlen

Vorlesung. Komplexe Zahlen Vorlesung Komplexe Zahlen Motivation Am Anfang der Entwicklung der komplexen Zahlen stand ein algebraisches Problem: die Bestimmung der Lösung der Gleichung x 2 + 1 = 0. 1 Mit der Lösung dieses Problems

Mehr

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle CAS-Ansicht Computer Algebra System & Cas spezifische Befehle GeoGebra Workshop Handout 10 1 1. Einführung in die GeoGebra CAS-Ansicht Die CAS-Ansicht ermöglicht die Verwendung eines CAS (Computer Algebra

Mehr

2 Lineare Gleichungssysteme

2 Lineare Gleichungssysteme Beispiel.5: Funktion von Runge (V) Beispiel Martin-Luther-Universität Halle-Wittenberg, NWF III, Institut für Mathematik Martin Arnold: Grundkurs Numerische Mathematik (WiS 27/8) Abbildung.3: Interpolation

Mehr

Tipps und Tricks für Matlab

Tipps und Tricks für Matlab Tipps und Tricks für Matlab J. Schweitzer Sommersemester 2012 Inhalt Matlab als Taschenrechner Datenformate M-files Schleifen und Abfragen 2D Plots Matlab als Taschenrechner Prompt Elementare Rechnungen

Mehr

Information in einem Computer ist ein

Information in einem Computer ist ein 4 Arithmetik Die in den vorhergehenden Kapiteln vorgestellten Schaltungen haben ausschließlich einfache, Boole sche Signale verarbeitet. In diesem Kapitel wird nun erklärt, wie Prozessoren mit Zahlen umgehen.

Mehr

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB.

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen. while-schleifen. Zahlarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen In der letzten Sitzung haben wir kennengelernt, wie wir Zahlen mit Operationen

Mehr

3 Berechnungen und Variablen

3 Berechnungen und Variablen 3 Berechnungen und Variablen Du hast Python installiert und weißt, wie man die Python-Shell startet. Jetzt kannst Du etwas damit machen. Wir fangen mit ein paar einfachen Berechnungen an und wenden uns

Mehr

Eine Einführung in Matlab

Eine Einführung in Matlab Eine Einführung in Matlab Prof. Dr. Günter Gramlich Fachhochschule Ulm Fachbereich Grundlagen http://www.rz.fh-ulm.de/ gramlich Ulm, 17. März 2003 Inhaltsverzeichnis 1 Matlab 3 2 Starten und beenden 3

Mehr

Leseprobe. Angelika Bosl. Einführung in MATLAB/Simulink. Berechnung, Programmierung, Simulation. ISBN (Buch): 978-3-446-42589-7

Leseprobe. Angelika Bosl. Einführung in MATLAB/Simulink. Berechnung, Programmierung, Simulation. ISBN (Buch): 978-3-446-42589-7 Leseprobe Angelika Bosl Einführung in MATLAB/Simulink Berechnung, Programmierung, Simulation ISBN (Buch): 978-3-446-42589-7 ISBN (E-Book): 978-3-446-42894-2 Weitere Informationen oder Bestellungen unter

Mehr

Einführungskus MATLAB

Einführungskus MATLAB Start Inhalt 1(11) Einführungskus MATLAB Wintersemester 2015/16 3. BGIP www.math.tu-freiberg.de/ queck/lehre/math/matlab/kurs15/ TU Bergakademie Freiberg W. Queck Start Inhalt Einleitung 2(11) Literatur

Mehr

1 Dein TI nspire CAS kann fast alles

1 Dein TI nspire CAS kann fast alles INHALT 1 Dein kann fast alles... 1 2 Erste Schritte... 1 2.1 Systemeinstellungen vornehmen... 1 2.2 Ein Problem... 1 3 Menü b... 3 4 Symbolisches Rechnen... 3 5 Physik... 4 6 Algebra... 5 7 Anbindung an

Mehr

10 Lesen und Schreiben von Dateien

10 Lesen und Schreiben von Dateien 10 Lesen und Schreiben von Dateien 10 Lesen und Schreiben von Dateien 135 10.1 Mit load und save Binäre Dateien Mit save können Variableninhalte binär im Matlab-Format abgespeichert werden. Syntax: save

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen Austausch- bzw. Übergangsrozesse und Gleichgewichtsverteilungen Wir betrachten ein System mit verschiedenen Zuständen, zwischen denen ein Austausch stattfinden kann. Etwa soziale Schichten in einer Gesellschaft:

Mehr

Notizen zum Taschenrechner TI-ηspire CX CAS

Notizen zum Taschenrechner TI-ηspire CX CAS Notizen zum Taschenrechner TI-ηspire CX CAS Dies ist kein Handbuch, sondern nur eine Sammlung von Notizen zum TI-ηspire CX CAS! Einige Zeichen sehen hier leicht anders aus als im TR. Tastatur Abbruch Wechsel

Mehr

Computerorientiertes Problemlösen

Computerorientiertes Problemlösen 1 / 13 Computerorientiertes Problemlösen 22. 26. September 2014 Steffen Basting WS 2014-2015 2 / 13 Organisatorisches 22.09. 26.09. Zeit Mo Di Mi Do Fr 11:00 bis 13:00 13:00 bis 15:30 15:30 bis 18:00 Vorlesung:

Mehr

Computergrundlagen Boolesche Logik, Zahlensysteme und Arithmetik

Computergrundlagen Boolesche Logik, Zahlensysteme und Arithmetik Computergrundlagen Boolesche Logik, Zahlensysteme und Arithmetik Institut für Computerphysik Universität Stuttgart Wintersemester 2012/13 Wie rechnet ein Computer? Ein Mikroprozessor ist ein Netz von Transistoren,

Mehr

Lösung des Kleinste-Quadrate-Problems

Lösung des Kleinste-Quadrate-Problems Lösung des Kleinste-Quadrate-Problems Computergestützte Statistik Lisakowski, Christof 15.05.2009 Lisakowski, Christof ()Lösung des Kleinste-Quadrate-Problems 15.05.2009 1 / 34 Themen 1 Problemstellung

Mehr

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen Kapitel 4: Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen Einführung in die Informatik Wintersemester 2007/08 Prof. Bernhard Jung Übersicht Codierung von rationalen Zahlen Konvertierung

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

cs106 Informatiklabor Teil 1: Java-Installation

cs106 Informatiklabor Teil 1: Java-Installation Herbstsemester 2009 cs106 Informatiklabor Teil 1: Java-Installation Florian Zeller Vorgehen und Ziele Wöchentlich eine Übung Unterstützte Bearbeitung während den Übungsstunden Austausch mit älteren Semestern

Mehr

2. Grundlagen der technischen Software - Beispiel: MathCAD 2.1 Einführung 2.2 Grundlagen an Beispielen

2. Grundlagen der technischen Software - Beispiel: MathCAD 2.1 Einführung 2.2 Grundlagen an Beispielen Gliederung 2. Grundlagen der technischen Software - Beispiel: MathCAD 2.1 Einführung 2.2 Grundlagen an Beispielen 2.1 Einführung 2-01 MathCAD im Überblick Taschenrechner für numerische Berechnungen Industriestandard-Rechensoftware

Mehr

aus Sicht eines Mathematikers.

aus Sicht eines Mathematikers. aus Sicht eines Mathematikers. Günter M. Gramlich Professor für Mathematik an der Hochschule Ulm http://www.hs-ulm.de/gramlich Ulm, 16. August 2012 Vorwort Matlab1 ist ein sehr leistungsfähiges Softwaresystem

Mehr

Anwendungssoftware III (MATLAB)

Anwendungssoftware III (MATLAB) Anwendungssoftware III (MATLAB) Testvorbereitung Michael Liedlgruber Fachbereich Computerwissenschaften Universität Salzburg Sommersemester 2014 M. Liedlgruber Anwendungssoftware III (MATLAB) SS 2014 1

Mehr

Lineare Algebra - alles was man wissen muß

Lineare Algebra - alles was man wissen muß Statistik für Bioinformatiker SoSe 3 Rainer Spang Lineare Algebra - alles was man wissen muß Der Titel ist natürlich gelogen, aber was wir hier zusammengetragen haben ist zumindest ein Anfang. Weniger

Mehr

Kapitel 6,»Objektorientierte Programmierung«, widmet sich der objektorientierten Programmierung mit Python.

Kapitel 6,»Objektorientierte Programmierung«, widmet sich der objektorientierten Programmierung mit Python. 1.3 Aufbau des Buchs lichkeiten offen. Auf die Unterschiede der beiden Versionen gehe ich besonders ein, sodass ein späterer Umstieg von der einen zur anderen Version leichtfällt. Erste Zusammenhänge werden

Mehr

WIRIS quizzes Datenbank, Mathematik für Moodle Quiz

WIRIS quizzes Datenbank, Mathematik für Moodle Quiz WIRIS quizzes Datenbank, Mathematik für Moodle Quiz Carles Aguiló Maths for More WIRIS quizzes verbessert die Funktionalität von Moodle Quiz in der Mathematik und in anderen wissenschaftlichen Themengebieten.

Mehr

> Soft.ZIV. Matlab Programmiersystem für mathematische Berechnungen

> Soft.ZIV. Matlab Programmiersystem für mathematische Berechnungen > Soft.ZIV Matlab Programmiersystem für mathematische Berechnungen Inhaltsverzeichnis Organisation... 3 Hersteller... 3 Produkte... 3 MATLAB... 3 Simulink... 3 Parallel Computing... 3 Math, Statistics

Mehr

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 12: Numerik der Standardbibliothek

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 12: Numerik der Standardbibliothek Computergrundkenntnisse und Programmieren, WS 07/08, Übung 12: Numerik der Standardbibliothek Bei der Behandlung von physikalischen Problemen spielen numerische Rechnungen eine wichtige Rolle. Die C ++

Mehr

MATLAB. Autor: Marcus Rabe. Modul 2991 2 TWS/ 2 ECTS. PD Dr.-Ing. Gerhard Staude WT 2011. Institut für Informationstechnik

MATLAB. Autor: Marcus Rabe. Modul 2991 2 TWS/ 2 ECTS. PD Dr.-Ing. Gerhard Staude WT 2011. Institut für Informationstechnik Modul 2991 MATLAB PD Dr.-Ing. Gerhard Staude 2 TWS/ 2 ECTS WT 2011 Autor: Marcus Rabe Professur für Informationsverarbeitung Prof. G. Bauch Institut für Informationstechnik Fakultät für Elektrotechnik

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

L6. Operatoren und Ausdrücke

L6. Operatoren und Ausdrücke L6. Operatoren und Ausdrücke 1. Arithmetische Operatoren: +, -, *, /, %, --, ++ 2. Zuweisung-Operatoren: =, +=, -=, *=, /= 3. Vergleichsoperatoren: =, ==,!= 4. Logische Operatoren:!, &&, 5.

Mehr

Mathematica. H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32

Mathematica. H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32 Mathematica H. Todt, M. Wendt (UP) Computational Physics - Einführung WiSe 2014/15 1 / 32 Mathematica I Mathematica ist ein Mathematik-Programm zum numerischen und symbolischen Lösen von Gleichungen Gleichungssystemen

Mehr

Informatik 12 Datenbanken SQL-Einführung

Informatik 12 Datenbanken SQL-Einführung Informatik 12 Datenbanken SQL-Einführung Gierhardt Vorbemerkungen Bisher haben wir Datenbanken nur über einzelne Tabellen kennen gelernt. Stehen mehrere Tabellen in gewissen Beziehungen zur Beschreibung

Mehr

Einführung in die Programmierung mit MATLAB

Einführung in die Programmierung mit MATLAB Skript zum Kompaktkurs Einführung in die Programmierung mit MATLAB Bahne Christiansen WS 08/09 Stand: 3. April 2009 Inhaltsverzeichnis 1 Allgemeines 4 1.1 Über dieses Skript...............................

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

11.3 Komplexe Potenzreihen und weitere komplexe Funktionen

11.3 Komplexe Potenzreihen und weitere komplexe Funktionen .3 Komplexe Potenzreihen und weitere komplexe Funktionen Definition.) komplexe Folgen: z n = x n + j. y n mit zwei reellen Folgen x n und y n.) Konvergenz: Eine komplexe Folge z n = x n + j. y n heißt

Mehr

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4 Arbeiten mit s Eine effiziente Programmierung mit PHP ohne seine s ist kaum vorstellbar. Diese Datenstruktur muss man verstanden haben, sonst brauchen wir mit weitergehenden Programmiertechniken wie der

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

6 Symmetrische Matrizen und quadratische Formen

6 Symmetrische Matrizen und quadratische Formen Mathematik für Ingenieure II, SS 9 Freitag. $Id: quadrat.tex,v.5 9//5 ::59 hk Exp $ $Id: orthogonal.tex,v.4 9// ::54 hk Exp $ $Id: fourier.tex,v. 9// :: hk Exp $ Symmetrische Matrizen und quadratische

Mehr

Aufgabe 2: Anzahl Erdbeben als Funktion der Zeit

Aufgabe 2: Anzahl Erdbeben als Funktion der Zeit Übung 2 Analyse von Zeitreihen in der Umweltphysik und Geophysik 1 Aufgabe 2: Anzahl Erdbeben als Funktion der Zeit In dieser Übung wollen wir der Frage nachgehen, was war die Anzahl Erdbeben mit M>1 pro

Mehr

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java Grundlagen von Java Aufgabe 1: Typen und Zuweisungen in Java Welche der folgenden Java-Anweisungen sind fehlerhaft? Handelt es sich um einen Compiler- oder einen Laufzeitfehler? Anmerkung: Folgefehler

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

Handbuch zum Mensurenprogramm

Handbuch zum Mensurenprogramm Handbuch zum Mensurenprogramm Von Reiner Janke March-Buchheim (bei Freiburg) Reiner Janke 1996 Was kann das Programm? Das Programm schreibt Mensurlisten (Weiten-, Längen-, Aufschnittmensuren etc.) von

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Fehler in numerischen Rechnungen

Fehler in numerischen Rechnungen Kapitel 1 Fehler in numerischen Rechnungen Analyse numerischer Rechnungen: - Welche möglichen Fehler? - Einfluss auf Endergebnis? - Nicht alles in der Comp.Phys./Numerical Analysis dreht sich um Fehler

Mehr

Technische Informatik I

Technische Informatik I Technische Informatik I Vorlesung 2: Zahldarstellung Joachim Schmidt jschmidt@techfak.uni-bielefeld.de Übersicht Geschichte der Zahlen Zahlensysteme Basis / Basis-Umwandlung Zahlsysteme im Computer Binärsystem,

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

Numerische Datentypen. Simon Weidmann

Numerische Datentypen. Simon Weidmann Numerische Datentypen Simon Weidmann 08.05.2014 1 Ganzzahlige Typen 1.1 Generelles Bei Datentypen muss man immer zwei elementare Eigenschaften unterscheiden: Zuerst gibt es den Wertebereich, zweitens die

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr. ls [optionen] [namen]: ls zeigt den Inhalt von Verzeichnissen. Sind keine namen angegeben, werden die Dateien im aktuellen Verzeichnis aufgelistet. Sind eine oder mehrere namen angegeben, werden entweder

Mehr

ohne Semikolon erhält man eine bestätigende Ausgabe von MATLAB

ohne Semikolon erhält man eine bestätigende Ausgabe von MATLAB 1 Einleitung Bei MATLAB handelt es sich um ein interaktives Programm zur besonders effizienten Durchführung von Matrixoperationen wie z.b. dem Lösen von Gleichungssystemen. Wenn man MATLAB gestartet hat,

Mehr

1. Grundlegende Konzepte der Informatik

1. Grundlegende Konzepte der Informatik 1. Grundlegende Konzepte der Informatik Inhalt Algorithmen Darstellung von Algorithmen mit Programmablaufplänen Beispiele für Algorithmen Aussagenlogik Zahlensysteme Kodierung Peter Sobe 1 Algorithmen

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

Übungen zur Ingenieur-Mathematik III WS 2009/10 Blatt 10 21.12.2009

Übungen zur Ingenieur-Mathematik III WS 2009/10 Blatt 10 21.12.2009 Übungen zur Ingenieur-Mathematik III WS 2009/10 Blatt 10 21.12.2009 Aufgabe 35: Thema: Singulärwertzerlegung und assoziierte Unterräume Sei A eine m n Matrix mit Rang r und A = UDV T ihre Singulärwertzerlegung.

Mehr

Bewertung der wissenschaftlichen Disziplinen mit Moodle 2

Bewertung der wissenschaftlichen Disziplinen mit Moodle 2 Bewertung der wissenschaftlichen Disziplinen mit Moodle 2 Carles Aguiló WIRIS team @ Maths for More Die Plattform Moodle besitzt verschiedene Elemente, um die Randomisierung von Fragen zu ermöglichen und

Mehr

Aufgaben des MSG-Zirkels 10b Schuljahr 2007/2008

Aufgaben des MSG-Zirkels 10b Schuljahr 2007/2008 Aufgaben des MSG-Zirkels 10b Schuljahr 2007/2008 Alexander Bobenko und Ivan Izmestiev Technische Universität Berlin 1 Hausaufgaben vom 12.09.2007 Zahlentheorie 1 Aufgabe 1.1 Berechne die (quadratischen)

Mehr

Berechnung von Eigenwerten und Eigenvektoren

Berechnung von Eigenwerten und Eigenvektoren Kapitel 5 Berechnung von Eigenwerten und Eigenvektoren 5.1 Einführung Bemerkung 5.1 Aufgabenstellung. Diese Kapitel behandelt numerische Verfahren zur Lösung des Eigenwertproblems. Gegeben sei A R n n.

Mehr

FB Informatik. Fehler. Testplan

FB Informatik. Fehler. Testplan Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout

Mehr

7. Numerik mit MATLAB

7. Numerik mit MATLAB Start Inhalt Numerik mit MATLAB 1(24) 7. Numerik mit MATLAB 7.1 Lineare Algebra Normen. Matrixzerlegungen. Gleichungssysteme. 7.2 Lineare Ausgleichsrechnung qr, svd, pinv, \. 7.3 Interpolation interp1,

Mehr

5. Programmieren mit Pascal

5. Programmieren mit Pascal 5. Programmieren mit Pascal 5.0. Einführung 5.0.1. Die Datenorganisation Das Betriebssystem auf unserer vernetzten Rechneranlage heißt Windows XP. Ein Betriebssystem versetzt als Basisprogramm den Rechner

Mehr

A) Durchsuchen von Datenbanken im Internet durch Endnote

A) Durchsuchen von Datenbanken im Internet durch Endnote EINLEITUNG/ANWEISUNGEN ZU DIESEM TEXT Wir werden die obere Liste (File/ Edit usw.) benutzen, obwohl die meisten Funktionen auch möglich mit rechtem Mausklick, mit Kombinationen der Tastatur oder mit den

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

KAPITEL 4. Lineare Ausgleichsrechnung Beispiel 4.1. Das Ohmsche Gesetz: U = RI. Eine Meßreihe von Daten:

KAPITEL 4. Lineare Ausgleichsrechnung Beispiel 4.1. Das Ohmsche Gesetz: U = RI. Eine Meßreihe von Daten: KAPITEL 4 Lineare Ausgleichsrechnung Beispiel 41 Das Ohmsche Gesetz: Eine Meßreihe von Daten: U = RI (U i, I i ) (Spannung, Stromstärke), i = 1,, m Aufgabe: man bestimme aus diesen Meßdaten den Widerstand

Mehr

Jens Kappei. Vorlesung Numerische Basisverfahren 21./22.04.2010

Jens Kappei. Vorlesung Numerische Basisverfahren 21./22.04.2010 FB 12 Mathematik und Informatik Philipps-Universität Marburg Vorlesung Numerische Basisverfahren 21./22.04.2010 ... ist eine höhere Programmiersparche, ist eine Interpretersprache, kann interaktiv (wie

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

Zur Universalität der Informatik. Gott ist ein Informatiker. Die Grundordnung der Welt läßt sich mathematisch formulieren:

Zur Universalität der Informatik. Gott ist ein Informatiker. Die Grundordnung der Welt läßt sich mathematisch formulieren: Daten und ihre Codierung Seite: 1 Zur Universalität der Informatik Gott ist ein Informatiker Die Grundordnung der Welt läßt sich mathematisch formulieren: Naturgesetze, wie wir sie in der Physik, Chemie

Mehr

Microsoft Excel 2010 Matrix-Funktionen

Microsoft Excel 2010 Matrix-Funktionen Hochschulrechenzentrum Justus-Liebig-Universität Gießen Microsoft Excel 2010 Matrix-Funktionen Matrix-Funktionen in Excel 2010 Seite 1 von 7 Inhaltsverzeichnis Einleitung... 2 Integrierte Matrixfunktionen...

Mehr

Vorlesung. Funktionen/Abbildungen 1

Vorlesung. Funktionen/Abbildungen 1 Vorlesung Funktionen/Abbildungen 1 1 Grundlagen Hinweis: In dieser Vorlesung werden Funktionen und Abbildungen synonym verwendet. In der Schule wird eine Funktion häufig als eindeutige Zuordnung definiert.

Mehr

Sructred Query Language

Sructred Query Language Sructred Query Language Michael Dienert 11. November 2010 Inhaltsverzeichnis 1 Ein kurzer Versionsüberblick 1 2 SQL-1 mit einigen Erweiterungen aus SQL-92 2 3 Eine Sprache zur Beschreibung anderer Sprachen

Mehr

Übung 4: Schreiben eines Shell-Skripts

Übung 4: Schreiben eines Shell-Skripts Aufgabenteil 1 Ziel der Übung Übung 4: Schreiben eines Shell-Skripts Anhand eines einfachen Linux-Skripts sollen die Grundlagen der Shell-Programmierung vermittelt werden. Das für die Bash-Shell zu erstellende

Mehr

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

Installation Anleitung für JTheseus und MS SQL Server 2000

Installation Anleitung für JTheseus und MS SQL Server 2000 Installation Anleitung für JTheseus und MS SQL Server 2000 Inhaltsverzeichnis 1 Installation der Datenbank 3 1.1 Erstellen der Datenbank 3 1.2 Tabellen und Minimal Daten einlesen 4 1.3 Benutzer JTheseus

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) Aufgabe 3 Bankkonto Schreiben Sie eine Klasse, die ein Bankkonto realisiert. Attribute für das Bankkonto sind der Name und Vorname des Kontoinhabers,

Mehr

Mathematik am Computer 7. Vorlesung: Matlab, Teil II

Mathematik am Computer 7. Vorlesung: Matlab, Teil II Mathematik am Computer 7. Vorlesung: Matlab, Teil II Helmut Harbrecht Universität Stuttgart 27. Januar 2011 Helmut Harbrecht (Universität Stuttgart) Mathematik am Computer 27. Januar 2011 1 / 35 Übersicht

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Das Rechnen in Zahlensystemen zur Basis b=2, 8, 10 und 16 Prof. Dr. Nikolaus Wulff Zahlensysteme Neben dem üblichen dezimalen Zahlensystem zur Basis 10 sind in der Informatik

Mehr

syntax.tex Eine Übersicht

syntax.tex Eine Übersicht syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen

Mehr

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean 01.11.05 1 Noch für heute: 01.11.05 3 primitie Datentypen in JAVA Primitie Datentypen Pseudocode Name Speichergröße Wertgrenzen boolean 1 Byte false true char 2 Byte 0 65535 byte 1 Byte 128 127 short 2

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

Computergrafik 2: Übung 1. Eclipse, PyDev, NumPy, Matplotlib

Computergrafik 2: Übung 1. Eclipse, PyDev, NumPy, Matplotlib Computergrafik 2: Übung 1 Eclipse, PyDev, NumPy, Matplotlib Überblick 1. Einrichten der Entwicklungsumgebung 2. Python-Techniken 3. Bildverarbeitung Numpy und Matplotlib Übung Computergrafik 2 SS2012 2

Mehr

Numerisches Programmieren, Übungen

Numerisches Programmieren, Übungen Technische Universität München SoSe 0 Institut für Informatik Prof Dr Thomas Huckle Dipl-Math Jürgen Bräckle Nikola Tchipev, MSc Numerisches Programmieren, Übungen Musterlösung Übungsblatt: Zahlendarstellung,

Mehr

3.3 Eigenwerte und Eigenräume, Diagonalisierung

3.3 Eigenwerte und Eigenräume, Diagonalisierung 3.3 Eigenwerte und Eigenräume, Diagonalisierung Definition und Lemma 3.3.1. Sei V ein K-Vektorraum, φ End K (V ), λ K. Wir defnieren den zu λ gehörigen Eigenraum von φ als Dies ist ein Unterraum von V.

Mehr

UMGANG MIT MICROSOFT WORD ~DER EINSTIEG~

UMGANG MIT MICROSOFT WORD ~DER EINSTIEG~ UMGANG MIT MICROSOFT WORD ~DER EINSTIEG~ INHALT Inhalt... 1 1. Titelblatt... 1 1.1 Inhalt... 1 1.2 Gestaltung... 2 1.3 Kopf-und Fußzeile... 3 2. Seitenlayout... 4 2.1 Typografie... 4 2.2 Seitenränder...

Mehr

Mögliche Prüfungsfragen zu VO Mathematische Software

Mögliche Prüfungsfragen zu VO Mathematische Software Mögliche Prüfungsfragen zu VO Mathematische Software SS 2009 Der Prüfungsstoff umfasst alles, was in der Vorlesung vorgetragen wurde. Die folgende Liste soll Ihnen bei der Vorbereitung helfen. Bei der

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Zahldarstellung und Rundungsfehler Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Überblick 2 Darstellung ganzer Zahlen,

Mehr

Material zum Grundlagenpraktikum ITS. eine kleine Linux-Befehlsreferenz. Stand: Oktober 2007 zusammengestellt von: Cornelia Menzel Version 1.

Material zum Grundlagenpraktikum ITS. eine kleine Linux-Befehlsreferenz. Stand: Oktober 2007 zusammengestellt von: Cornelia Menzel Version 1. Material zum Grundlagenpraktikum ITS eine kleine Linux-Befehlsreferenz Stand: Oktober 2007 zusammengestellt von: Cornelia Menzel Version 1.0 Lehrstuhl für Netz- und Datensicherheit Ruhr-Universität Bochum

Mehr

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik Einleitung, Anwendungsfälle, Programmierung MKT Systemtechnik Autor: Stand: Ablage: Wolfgang Büscher Dipl.-Ing. Soft- und Hardware-Entwicklung buescher@mkt-sys.de 2015-01-21 (JJJJ-MM-DD) art85133_einfuehrung_mktview_scriptsprache.odp/pdf;

Mehr