matlab-praktikum zur numerik - universität siegen · pdf filematlab-praktikum zur numerik...

54
Matlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik Universität Siegen Version: 17 September 2007

Upload: vankhue

Post on 06-Feb-2018

238 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Matlab-Praktikumzur Numerik

Sommersemester 2007

M.Sc. Ivan CherlenyakProf. Dr. Hans-Jürgen Reinhardt

Fachbereich MathematikUniversität Siegen

Version: 17 September 2007

Page 2: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Inhaltsverzeichnis

1 Einführung in MATLAB und Octave 11.1 Was ist MATLAB und Octave? . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2.1 Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.2 Matrizen und Manipulationen mit Matrizen . . . . . . . . . . . . . 71.2.3 Datentypen in MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 81.2.4 Logische Operationen und Relationen . . . . . . . . . . . . . . . . . 91.2.5 Steuerstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2.6 Visualisieren mit MATLAB (Octave) . . . . . . . . . . . . . . . . . 101.2.7 Dateien lesen und schreiben . . . . . . . . . . . . . . . . . . . . . . 14

1.3 m-Files: Matlab als Programmiersprache . . . . . . . . . . . . . . . . . . . 141.3.1 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.3.2 Definition von Funktionen . . . . . . . . . . . . . . . . . . . . . . . 15

2 Numerische Algorithmen, ihre Komplexität und Fehleranalyse 192.1 Numerische Algorithmen und Fehlerquellen . . . . . . . . . . . . . . . . . . 192.2 Computerarithmetik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3 Zur Komplexität numerischer Algorithmen . . . . . . . . . . . . . . . . . . 23

3 Graphische Benutzeroberflächen und MATLAB 273.1 Erstellung einer GUI mit MATLAB . . . . . . . . . . . . . . . . . . . . . . 27

3.1.1 GUI Elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.1.2 Darstellung kontrollieren (Größe, Position, Farben, Eigenschaften

ändern) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.2 Programmierung(Callbacks, Datenstruktur, Spezialfunktionen, handles) . . 31

3.2.1 Darstellung von Daten in Grafiken . . . . . . . . . . . . . . . . . . 33

4 Einfache numerische Algorithmen mit MATLAB 354.1 Polynome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.1.1 Berechnung von Polynomwerten. Horner-Schema . . . . . . . . . . . 354.1.2 Polynome in MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2 Nullstellenberechnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.2.1 Bisektions-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.2.2 Methode der sukzessiven Approximation . . . . . . . . . . . . . . . 404.2.3 Newton-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Page 3: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

INHALTSVERZEICHNIS

4.2.4 Die Sekantenmethode (Regula falsi) . . . . . . . . . . . . . . . . . . 424.3 Lineare Gleichungssysteme: Direkter und iterativer Löser . . . . . . . . . . 43

4.3.1 Inverse Matrix, Normen und Konditionszahl der Matrix . . . . . . . 434.3.2 Direkte Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.3.3 Iterative Verfahren zur Lösung linearer Gleichungssysteme . . . . . 46

II

Page 4: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1

Einführung in MATLAB und Octave

1.1 Was ist MATLAB und Octave?

MATLAB ist ein sehr leistungsfähiges Softwaresystem für technische Berechnungen. DerName MATLAB kommt von MATrix-LABoratory. Grundelemente sind Matrizen undihre Manipulationen, die in numerischen Verfahren optimal eingesetzt werden können.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; Visualisierung

• Wissenschaftliche und technische Darstellungen

• Applikationsentwicklung mit Aufbau einer grafischen Benutzerschnittstelle

Berechnung MATLAB verfügt über eine numerische - qualitativ hochwertige - Pro-gammsammlung. Dem Benutzer bleibt es dadurch erspart, Standardalgorithmen neu pro-grammieren zu müssen.Visualisierung MATLAB verfügt über moderne Visualisierungsmöglichkeiten. Dadurchist der Benutzer in der Lage, Daten auf verschiedene Weisen zu visualisieren.Programmierung MATLAB verfügt über eine eigene Programmiersprache. Dadurchstellt MATLAB ein offenes System dar. Der Benutzer hat somit die Möglichkeit, dieFunktionalität von MATLAB durch eigene Programme beliebig zu erweitern. Dies kanndadurch geschehen, dass er MATLAB-Programme schreibt - sogenannte m-Files - oder C-bzw. Fortran-Codes einbindet.

Folgende Punkte tragen außerdem zum Erfolg von MATLAB bei:

1

Page 5: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.1 Was ist MATLAB und Octave?

• Syntax MATLAB besitzt eine benutzerfreundliche, intuitive Syntax, die kurz undeinfach ist. Sie lehnt sich stark an die mathematischen Schreibweisen an.

• Toolboxen In Form sogenannter Toolboxen lässt sich der Funktionsumfang vonMATLAB auf vielen Gebieten erweitern. Unter anderem stehen folgende Toolbo-xen zur Verfügung: (Extended) Symbolic Math Toolbox, Financial Toolbox, ImageProcessing Toolbox, Neural Network Toolbox, Optimization Toolbox, Partial Dif-ferential Equation Toolbox, Spline Toolbox, Wavelet Toolbox, Image ProcessingToolbox, Statistic Toolbox.

• Matrizen Grundlage von MATLAB sind reelle und komplexe (einschließlich dünnbesetzter) Matrizen. Die Einführung einer Matrix als grundlegendes Datenelementhat sich nicht nur in der (numerischen) Mathematik, sondern in vielen anderen rech-nerorientierten Bereichen als sehr vorteilhaft herausgestellt.

• Prototyprealisierung In der Praxis kommt es vor, daß man - aus den verschiede-nen Gründen heraus - darauf angewiesen ist, Algorithmen in anderen Programmier-sprachen, wie zum Beispiel C/C++,Fortran, Pascal oder Java, zu implementieren.Aber auch dann ist es vorteilhaft, einen Prototyp des Verfahrens in MATLAB zurealisieren, da dies meist sehr schnell möglich ist, bevor man den Algorithmus über-trägt bzw. automatisch übertragen lässt.

• Grafiken bearbeiten Das MATLAB-Grafiksystem umfasst Hochsprachenbefehlefür die Bildverarbeitung, für Trickbewegungen und Präsentationsgrafiken. Hierzugehören auch einfache Befehle, mit denen sich Grafiken kundenspezifisch gestaltenoder auch vollständig grafische Benutzerschnittstellen für eigene Applikationen auf-bauen lassen.

• Bibliothek von mathematischen Funktionen MATLAB verfügt über eine um-fangreiche Sammlung von mathematischen Algorithmen und Funktionen. Diese Funk-tionalität reicht von elementaren Funktionen über Eigenwertberechnungen bis hinzur schnellen Fourier-Transformation.

• Simulink Simulink - ein Partnerprogramm zu MATLAB - ist ein blockorientier-tes, interaktives System zur Simulation linearer und nicht lineare dynamischer Sy-steme. Es handelt sich um ein mausgesteuertes Grafikprogramm, das ein Modelleines technischen oder physikalischen Systems, das als Blockdiagramm auf demBildschirm darzustellen ist, unter dynamischen Einwirkungen nachbildet. Grundlagesind MATLAB-Funktionen zur Lösung gewöhnlicher Differentialgleichungen (ODE-Löser).

2

Page 6: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

• Platformunabhängig MATLAB läuft sowohl unter Windows als auch unter Linux.

Octave Octave ist ein linuxbasiertes Softwaresystem, das freizugänglich ist, ein soge-nanntes Open Source Produkt. Genauso wie MATLAB besitzt Octave eine interaktiveScriptsprache, die speziell für vektorisierbare Berechnungen optimiert ist und dabei Stan-dardroutinen der numerischen Mathematik (z.B. Eispack oder Lapack) auf einfache Weisezugänglich macht.Der Syntax von Octave ist der von MATLAB sehr ähnlich, d.h. ein Octave Programmkann meist auch von MATLAB ausgeführt werden. Die Rückwärtskompatibilität ist nichtimmer gegeben, da MATLAB besonders im Grafikbereich um einen erheblich größerenFunktionsumfang verfügt. Die KDE-Komponente von Octave heißt Koctave und sollteextra installiert werden. Das Octave-Forge Paket ist für mehr Kompatibilität mit MAT-LAB zuständig.

Starten und BeendenBei vielen kommandoorientierten Rechnersystemen wird MATLAB bzw. Octave durch dasKommando matlab bzw. octave gestartet. Oder - bei grafischen Oberflächen - klickt mannach dem Start auf ein entsprechendes MATLAB- oder Octave-Icon bzw. Koctave-Icon.Dann sollten Sie den MATLAB Prompt » oder den Octave Prompt octave:1> sehen, derauf ihre erste Eingabe wartet. Mit der Kommando quit verlassen sie beide Programme.

Eingabekonventionen

• Alle Befehle können sowohl interaktiv als auch über Skriptdaten (m-Files von MAT-LAB) eingelesen werden

• Skripts (m-Files) sind Textdateien mit dem Suffix .m. Sie werden durch Aufruf desDateinamens ohne Suffix eingelesen, und verhalten sich so, als ob ihr Inhalt Zeilefür Zeile am Prompt eingegeben würde.

• ; trennt mehrere Befehle in einer Zeile, und unterdrückt die Ausgabe von Werten.

• , trennt Befehle, gibt aber Werte aus.

• ... am Zeilenende bedeutet, dass der Ausdruck in der nächsten Zeile weitergeht.

3

Page 7: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.1 Was ist MATLAB und Octave?

• Kommentare werden mit % eingeleitet. Auf vielfachen Kundenwunsch wurde abRelease 14 eine Möglichkeit für blockweise Kommentare im MATLAB Editor einge-führt. Das Anfangszeichen ist „%} “ das Endzeichen „%} “.

• MATLAB und Octave unterscheiden zwischen Groß- und Kleinbuchstaben.

HilfeMATLAB verfügt über umfangreiche Online-Hilfen. Mit diesen erhalten Sie detaillierteInformationen zur Funktionalität von MATLAB. Die Hilfsysteme können mit den Kom-mandos help, helpwin und helpdesk usw. aufgerufen werden. Jetzt wollen wir detaillierteinige Informationsdienste vorstellen:

• Das help- Kommando.>> help name gibt Hilfetext zur Variable oder Funktion „name“ aus.Alle MATLAB-Funktionen sind in logische Gruppen(Themen) eingeteilt, und dieMATLAB-Verzeichnisstruktur basiert auf dieser Einteilung. Gibt man alleine helpein, so wird diese Gruppierung angezeigt. Hiermit kann man sich nun weiter vor-tasten. Gibt man zum Beispiel help elmat ein, so erhält man alle zur Verfügungstehenden MATLAB-Funktionen zum Bereich Grundlegende Matrizen und Matrix-manipulationen.

• Das lookfor- KommandoBasierend auf einem Schlüsselwort können Sie mit dem lookfor-Kommando nachFunktionen suchen. Dabei wird die erste Zeile des help-Textes jeder MATLAB-Funktion ausgegeben, die das angegebene Schlüsselwort beinhaltet. Sucht man zumBeispiel Informationen über Splines, dann gibt man am Prompt >> lookfor splinean. Will man, dass alle help-Zeilen durchsucht werden, so muss man im Aufruf dieOption -all verwenden.

• Das Hilfefenstersystem helpwinGibt man den Befehlhelpwinein, so wird ein neues Windowsfenster geöffnet, das verwenden werden kann, uminteraktive Hilfe über MATLAB Funktionen zu erhalten. Das helpwin-System istdas interaktive Analog des help-Systems. Durch Doppelklicken auf ein Thema indiesem Textfenster, erhält man eine Liste zu diesem Thema. Der helpwin-Befehlläßt sich analog dem help-Befehl mit dem gewünschten Thema bzw. der gewünsch-ten Funktion direkt aufrufen.

• Das Hilfesystem helpdeskDas MATLAB-Hilfesystem helpdesk liefert HTML-basierte Hilfe. Diese HTML-Dokumente

4

Page 8: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

haben den Vorteil, dass sie Grafiken beinhalten können und Verweise auf andere Do-kumente leicht machbar sind. Hilfesystem helpdesk-Befehle:helpdesk ruft Hilfefenster mit Themenliste aufdoc < Funktionsname > Gibt Informationen über diese Funktion

• Die Mathworks Webseitehttp : //www.mathworks.com

Zahlen und FormateMATLAB arbeitet mit Dezimalzahlen. Alle Zahlen werden im double-Format gemäß derSpezifikation durch die Gleitpunktform der IEEE abgespeichert. Vordefinierte Zahlen-ausgaben in MATLAB erfolgen nach mehreren Regeln. Eine ganze Zahl wird ganzzahligausgegeben. Reelle Zahlen aus dem Bereich [10−3, 103] werden auf 4 Dezimalen gerundetausgegeben. Andernfalls gibt MATLAB Zahlen in exponentieller Form aus, z.B.>> 2.374e-5, 3.1829e+4.

Man kann das Ausgabeformat mit Hilfe des Befehls format variieren. Um Speicherplatzzu sparen sind in MATLAB noch weitere Zahlentypen implementiert. Diese sind

• single

• int8, uint8, int16, uint16, int32, uint32

Für weitere Informationen siehe doc datatypes.Komplexe Zahlen können in MATLAB wie folgt eingegeben werden:a1= 7-8i, b1 = -21+3*j

Die imaginäre Zahl i =√−1 kann als i oder j eingegeben werden.

Variable und Standardoperationen

• varname = expression weist varname den Wert expression zu.

• Es gibt die „üblichen“ Operationen und Funktionen +,−, ∗, /,, , sin, cos, usw. Wei-tere Informationen unter Aufruf von : helpwin ops und helpwin elfun.

• Die elementaren logischen Operatoren werden auch nach Aufruf helpwin ops an-gezeigt.

• Allgemeine Kommandos ( General Purpose Commands) sind unter helpwin generalaufrufbar.

Beispiele:>> x_1 = 12/34, xStr = ’Ein String’,>> im = sqrt(-1)-i

5

Page 9: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.2 Grundlagen

Und hier ist ein Script test1, der in m-File test1.m gespeichert ist:>>a = 12;>>b = 13;>>s = a + b;>> p = a * b;>>disp(’Die Summe ist’); disp(s);>>disp(’Der Produkt ist’); disp(p);

1.2 Grundlagen

1.2.1 Vektoren

Zeilen- oder Spaltenvektoren>> x1 = [ 1 3 5 7]Erzeugt einen Zeilenvektor mit angegebenen Elementen.

>> x2 = [1; 3; 5; 7]Erzeugt einen Spaltenvektor. Beachte x2 entspricht x1′ (’ bewirkt Transponation).

>> x = Komponente1:KomponenteNErzeugt einen Zeilenvektor x, der mit Komponente1 beginnt, um 1 erhöht wird und mitoder vor KomponenteN endet.

>> x = Komponente1:Schrittweite:KomponenteNErzeugt einen Zeilenvektor x, der mit Komponente1 beginnt, um Schrittweite erhöhtwird und mit oder vor KomponenteN endet.

>> x =linspace(Komponente1,KomponenteN,n)Erzeugt einen äquidistanten Zeilenvektor x der mit Komponente1 beginnt und mit derKomponenteN endet, wobei der Vektor n Komponenten hat.

>> x =logspace(start,end,n)Erzeugt einen Zeilenvektor x der mit Komponente 10start beginnt und mit der Komponente10end endet, wobei der Vektor n Komponenten hat.

6

Page 10: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

1.2.2 Matrizen und Manipulationen mit Matrizen

Befehl AktionA = [1 2 3; 4 5 6] Zuweisung einer MatrixB =[1 2]+ i*[5 6] Zuweisung eines komplexen Vektorszeros(3,4) Nullmatrix mit 3 Zeilen und 4 Spaltenzeros(3) quadratische Nullmatrix der entsprechenden Größeeye Einheitsmatrix , Syntax wie zerosones Matrix mit allen Elementen 1, Syntax wie zerosrand Gleichmäßigverteilte Zufallsmatrixrandn Normalverteilte Zufallsmatrixhadamard Hadamard-Matrixv(k) das k-te Element des Zeilen- oder Spaltenvektors vA(k,l) das Matrixelement akl

v(m:n) Teilvektor des Vektors vA(k,:) die k-te Zeile der Matrix AA(:,l) die l-te Spalte der Matrix AA(3:7,2:5) Zugriff auf Matrixbereich(Teilmatrix);A(2:4,[1 3 5:7]) ... auch mit beliebigen IndexvektorenA(k,:)=[] Löschen eine Matrixzeilediag Extrahiert Diagonale oder erzeugt Diagonalmatrixrot90 Drehung um 90◦

fliplr Vertauscht Spalten von links nach rechtsflipud Vertauscht Zeilen von oben nach untenrepmat Erzeugt Blockmatrixreshape Ändert die Strukturtril Untere Dreiecksmatrixtriu Obere DreiecksmatrixA(:) Formt Matrix zu Spaltenvektor umsize Ermittelt Matrixgrößelength Länge eines Vektorsisempty Wahr, wenn Matrix leer ist

Andere Matrizen bekommt man mit Hilfe des Befehles>> helpwin elmat

7

Page 11: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.2 Grundlagen

MatrixoperationenSymbol Operation MATLAB Syn. Math. Syntax+ Addition A + B A + B- Subtraktion A - B A - B* Multiplikation A*B AB/ rechte Division A/B Löst XA=B mit Lösung X\ linke Division A \ B Löst AX = B mit Lösung X^ Potenzieren A^p Ap

’ Konjugiert Transpo-nieren

A’ (A)T

.’ Transponieren A.’ AT

kron Kronecker Tensorpro-dukt

kron(A,B) A⊗B

Bemerkungx = A\B löst Ax = b mit Hilfe des Gauss-Verfahrens. Es ist sogar erlaubt, dass LGSmehrere rechte Seiten besitzt. Deshalb steht in der Tabelle ein großes B.Matrixaddition und -Subtraktion sind elementweise definiert. Die Multiplikation und an-dere dagegen nicht, es sind echte Matrixoperationen. Es ist möglich, die Operationen.∗, .ˆ, .\, ./ elementweise durchzuführen.Beispiel: A = [1 2; 3 4]; B = [5 6;7 8].Dann istA.*B=[5 12; 21 32];A./B=[0.2000 0.3333; 0.4286 0.5000];A.^B=[1 64; 2187 65536].

1.2.3 Datentypen in MATLAB

Es gibt in MATLAB mehrere Datentypen (Klassen), die alle durch ein mehrdimensionalesFeld(Array) dargestellt werden. Vektoren und Matrizen sind die bekanntesten Beispielefür Felder. Unter anderem sind dies: double, char, sparse, cell und struct.

Typ Beschreibungdouble Internes MATLAB-Zahlenformatchar Zeichen(ketten) Formatsparse Format für dünn besetzte Matrizencell Zelle besteht aus Feldern des Typs double und charstruct verschiedene Typen

struct ist ein Datentyp, welcher verschiedene Werte von verschiedenen Typen bein-halten kann. Der MATLAB-Typ struct ist mit dem Datentyp Record in der SprachePascal vergleichbar.

8

Page 12: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

Beispiele:a = 10.5 (double)c = ’Zeichenkette’ (char)b = sparse(2,3) (sparse)d = {1:5,’Matlab’,ones(3)} (cell)

1.2.4 Logische Operationen und Relationen

Die logischen Operatoren sind in MATLAB aus Sonderzeichen aufgebaut. Werden Ma-trizen mit logischen Operatoren verknüpft, so geschieht dies komponentenweise. FolgendeTabelle zeigt die logischen Operatoren.

Logische Operatoren Beschreibung& logisches UND| logisches ODER~ logisches NICHTLogische Funktionen Beschreibungiscell WAHR, falls Argument cell-Feldischar WAHR, falls Argument char-Feldisempty WAHR, falls Argument leeres Feldisieee WAHR bei Rechnern mit IEEE-Standardxor Exklusives ODERRelationen Beschreibung== gleich~= nicht gleich>= größer oder gleich<= kleiner oder gleich> größer< kleiner

1.2.5 Steuerstrukturen

Programmiersprachen erlauben es, den Ablauf eines Programms zu steuern. Man sprichtvon einer Steuerstruktur, die aus mehreren Steuerelementen bestehen kann. Diese sindVerzweigungen und Schleifen.

9

Page 13: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.2 Grundlagen

SchleifenBefehle Aktionfor n=3:10

i=i*nend

for-Schleife

while <Ausdruck><Anweisung(en)>end

while-Schleife; <Ausdruck> wird vor der Ausführung der<Anweisungen> ausgewertet. Solange der <Ausdruck> un-gleich 0 ist, werden die <Anweisungen> ausgeführt.

Die break-Anweisung ist eine Sprunganweisung und dient dazu, aus einer Schleifeherauszuspringen. Liegt eine geschachtelte Schleife vor, so springt MATLAB aus dieser indie nächstübergeordnete.

Verzweigungen

If-AnweisungBefehle Aktionif <Test_1><Anweisungen_1>elseif<Test_2><Anweisungen_2>else<Anweisungen_3>end

Ist der <Test_1> ungleich 0 (WAHR), so werden<Anweisungen_1> ausgeführt. Ist <Test_1> gleich 0, so wird<Test_2> ausgewertet und <Anweisungen_1> nicht aus-

geführt. Ist jetzt der <Test_2> ungleich 0, so werden<Anweisungen_2> ausgeführt. Andernfalls führt das Pro-gramm <Anweisungen_3> aus.

Switch-AnweisungenBefehle Aktionswitch <Ausdruck>case<Konstante_1>

<Anweisungen>case <Konstante_2>

<Anweisungen>otherwise

<Anweisungen>end

switch lässt Gruppen von Anweisungen entsprechenddem Wert einer Variablen (hier <Konstante_1> oder<Konstante_2>) oder eines Ausdrucks ausführen. Eswird nur die erste Übereinstimmung ausgeführt.

1.2.6 Visualisieren mit MATLAB (Octave)

Was ist wissenschaftliches Visualisieren? Diese Frage kann mit der Darstellung von Datenbeantwortet werden. Wozu ist wissenschaftliche Visualisierung nützlich? Hierzu gibt esfolgende Gründe:

• Man erkennt Strukturen und Merkmale in den Daten.

10

Page 14: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

• Man identifiziert Trends.

• Man kann komplexe Informationen vergleichen.

• Man kann Gegenstände untersuchen, die physikalisch nicht untersuchbar sind.

2D-GrafikenDie plot-Funktion ist eine der grundlegenden Grafikfunktionen in MATLAB. Wenn xund y zwei Vektoren der gleichen Länge sind, dann öffnet der Befehl plot(x,y) ein Gra-fikfenster mit einer entsprechenden Grafik.Beispiel>> x =[0 0.1 0.2 0.3 0.4 0.5]>> y =[10 18 12 -3 8 25]Der mögliche Aufruf des plot-Befehls mit Optionen und mehreren Grafiken:>> plot(x1,y1,linspec1,x2,y2,linspec2,x3,y3,linspec3)Damit definieren wir, dass in einem Fenster drei Grafiken gezeichnet werden. Die Optionlinspec* beschreibt Farbe, Gestaltung der Linie und Markierung von Punkten der jewei-ligen Grafik.

Markierung von Punkten Gestaltungsvarianten für Linien FarbenSym. Bed.’o’ ◦’x’ ×’+’ +’*’ ∗’square’ �’diamond’ �

Sym. Bedeutung’-’ Linie(Default)’––’ gestrichelte Linie’:’ punktierte Linie

Sym. Bedeutung’r’ rot’g’ grün’b’ blau (Default)’k’ schwarz

Andere nützliche Funktionen zum plot-Befehl sind in der folgenden Tabelle aufgeli-stet:

Funktion Bedeutungsubplot ermöglicht ein Grafikfenster in mehrere Figuren zu unterteilenhold on gibt die Möglichkeit weitere Plots zum aktiven Fenster einfügenhold off schaltet hold on abgrid erzeugt ein Gittertext positioniert Text an spezifizierten Koordinatentitle erzeugt eine Überschriftxlabel Beschriftung der x-Achseylabel Beschriftung der y-Achse

11

Page 15: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.2 Grundlagen

Beispiel%------------------------------------------------% Test1.m m-File zum Erzeugung verschiedener Grafiken%------------------------------------------------x = linspace(-10,10,50);y1 = x.^2 + 5.*x + 7;y2 = exp(2.*x).*cos(4.*x);y3 = (x.^2-3.*x)./(x.^2+7.*x)subplot(2,2,1)plot(x,y1,’ro’)grid ontitle(’Quadratisches Polynom’)xlabel(’x’), ylabel(’y1’)subplot(2,2,2)plot(x,y1,’ro’,x,y2,’--k*’);grid ontitle(’Zwei verschiedene Grafiken in einem Plotfenster’)subplot(2,2,3)plot(x,y2-y1,’:g’)grid ontitle(’ Grafik der y2-y1’)subplot(2,2,4)plot(y3)

Funktionsgraphen im R2 mit ezplotMit dem ezplot-Befehl lassen sich auch Graphen von Funktionen zeichnen. Ein mögli-cher Aufruf für eine Grafik im ersten Subplot des vorigen Beispiels wäre:>>ezplot(’x^2+5*x+7’,[-10,10])Die Funktion ezplot erlaubt auch das Zeichnen von Kurven im R2, die implizit definiertsind und sowohl parametrisierte Kurven als auch Kurven in Polarkoordinaten sein können:Funktion Bedeutungezplot(’-x^2/4+y^2/25=1’,[-15,15])

implizit definierte Kurve

ezplot(’t-sin(t)’,’1-cos(t)’,[0,4*pi])

parametrisierte Kurve (Zykloide)

ezpolar(’1+cos(phi)’) Kurven in Polarkoordinaten (Kardioide)

3D-GrafikenDamit man die Funktionswerte einer Funktion f(x,y) zweier unabhängiger Variablen aus-rechnen kann, muss man zunächst ein zweidimensionales Gitter in der xy-Ebene erzeugen.Dann kann man die Funktion in diesen Gitterpunkten berechnen. Somit hat man Punkteauf der Fläche der Funktion bestimmt, und man kann dann den Graphen der Funktionzeichnen. Ein zweidimensionales Gitter in der xy-Ebene wird in MATLAB durch zweiMatrizen definiert. Eine Matrix besteht aus den x-Koordinaten und die andere aus den

12

Page 16: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

y-Koordinaten aller Gitterpunkte.Das Erzeugen dieser Matrizen kann mit der meshgrid-Funktion automatisiert werden.Hierzu muss man die Vektoren x und y der Funktion als Argumente übergeben. Wennwir z.B. den Bereich [2, 7] × [1, 6] mit 40 Punkten diskretisieren wollen, dann geben wirfolgende Befehle an:>> x = 2:0.5:7;>> y = 1:0.5:6;>> [X,Y] = meshgrid(x,y);

Nun können wir die Funktionswerte einer zweidimensionalen Funktion ausrechnen. Be-achte, dass X,Y Matrizen sind; deswegen benutze man elementweise Operationen. Wollenwir etwa die Funktionswerte von

f(x, y) = x2 − y2

auf obigem Gitter bestimmen, so geht das in einer Zeile:>> Z = X.^2-Y.^2.

In der Matrix Z stehen die Funktionswerte der entsprechenden Gitterpunkte. In MATLABstehen mehrere Funktionen zur Verfügung, um den Graphen von f zu zeichnen. Wir gebenzwei Möglichkeiten anmesh Erzeugt eine 3D-Darstellung (offenes Gitter) der Flächesurf Erzeugt eine 3D-Darstellung (schattiertes Gitter) der Fläche

Funktionsgraphen im R3

ezmesh(’x^2-y^2’) zeichnet die Fläche der angegebenen Funkti-on(offenes Gitter)

ezsurf(’x*exp(y^2)’) zeichnet die Fläche der angegebenen Funkti-on(schattiertes Gitter)

ezmeshc(’2+x^2-y^2’) zeichnet den Graphen einer Sattelfläche mit Hö-henlinien

ezplot3(’cos(t)’,’sin(t)’,’2*t’,[0,20])

zeichnet eine 3D-Kurve

plot3(2,3,4) zeichnet einen Punkt im R3 mit den Koordinaten(2, 3, 4)

13

Page 17: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.3 m-Files: Matlab als Programmiersprache

1.2.7 Dateien lesen und schreiben

In MATLAB kann man Daten- bzw. Textdateien lesen und schreiben. Hierbei kann manzwischen binärem MATLAB- und lesbarem ASCII-Format wählen. Binärdateien haben ge-genüber ASCII-Dateien die Vorteile, dass sie weniger Speicherplatz benötigen und schnel-ler gelesen und geschrieben werden können.Befehl Aktionsave myfile.mat komplette Sitzung in Datei speichern (MATLAB-

Format)save(’c:\temp\myfile2.mat’,’M’)

Variable M in Datei speichern (MATLAB-Format)

save myfile3.mat p-ascii

Variable p in Datei speichern (ASCII-Format)

load myfile3.mat Einlesen (default: MATLAB-Format)importdata(’f1.m’) importiert Daten aus den verschiedenen Formatenprint -depsc myplot.eps aktuellen Plot speichern als Farb-EPSprint -djpeg -f4myplot.eps

Plot Nr. 4 speichern als 24bit-JPEG

1.3 m-Files: Matlab als Programmiersprache

1.3.1 Scripts

Bisher wurden Anweisungen zeilenweise eingegeben und von MATLAB verarbeitet. Dieseinteraktive Arbeitsweise ist unzweckmäßig für Algorithmen, die mehrere Programmzeilenbenötigen und wieder verwenden sollen. Hierfür eignen sich so-genannte m-Files, die miteinem Editor erzeugt werden und unter einem Filenamen mit dem Kürzel .m abgespeichertwerden. Es gibt zwei Arten von m-Files: die Script-Files und die Function-Files.

Script-Files Ein Script-File ist eine Folge von MATLAB-Anweisungen. Die Anwei-sungen in einem Script-File werden ausgeführt, wenn man den File-Namen ohne den Suffix.m angibt. Ist zum Beispiel der File-Name test1.m, so gibt man einfach test1 ein. Varia-blen in einem Script-File sind global. Auch kann in einem Script-File ein anderes m-Fileaufrufen. Einige nützliche Funktionen für Programmieren mit m-Files sind in der folgen-den Tabelle zusammengefasst.

MATLAB-Funktion Beschreibungdisp Zeigt Resultate am Bildschirmecho Kontrolle der Bildschirmausgabeinput Wartet auf Eingabeiöh keyboard Kontrolle auf Tastaturpause Pause bis Tastendruckpause(n) Pause für n Sekundenwaitforbuttonpress Pause bis Mausklick oder Tastendruck

14

Page 18: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

1.3.2 Definition von Funktionen

Wenn man intensiver mit MATLAB arbeitet, dann wird man bald feststellen, dass es nichtfür alle Wünsche eingebaute Funktionen oder Kommandos gibt. In diesem Fall kann mansich eigene Funktion schreiben und damit die Funktionalität von MATLAB erweitern.Variable in Function-Files sind lokale Variable. Die Übergabe einzelner Variablen erfolgtüber eine Parameterliste im Funktionsaufruf. Die allgemeine Form von Functions-Filesist:function [out_1,...,out_n] = Name(In_1,...,In_m)

Um einen Funktion-file zu schreiben, muss man ein paar Regeln beachten:

• Der File-Name und der Funktionsname müssen übereinstimmen.

• Der Name darf bis zu 31 Zeichen haben. Das erste Zeichen muss ein Buchstabe sein.Ziffern und Unterstrich dürfen verwendet werden.

• Das Schlüsselwort function muss in der erste Zeile stehen. Dort sind auch die Ein-und Ausgabeargumente anzugeben.

• Die Kommentarzeilen nach der ersten Zeile dienen als Hilfstext. Man bekommt siemit help < functionname> am Bildschirm angezeigt.

• Funktionen können untereinander auch mit dem MATLAB-Workspace über globaleVariable kommunizieren.

• Ein Funktion-File muss kein Eingabe- oder Ausgabeargument haben.

• In einem Funktion-File können mehrere Funktionen stehen. Dabei gibt es eine Erst-funktion und weitere Unterfunktionen. Diese Unterfunktionen können von der Erst-funktion aufgerufen werden und sich gegenseitig aufrufen. Wie alle Funktionen sohaben auch Unterfunktionen ihren eigenen Workspace.

Beispiel: Berechne die zwei Lösungen einer quadratischen Gleichung x2 + px + q = 0function [x1,x2] = testfunktion2(p,q)x1 = -p/2 + sqrt(p^2-4*q)/2;x2 = -p/2 - sqrt(p^2-4*q)/2;

Achtung: Bei einem Aufruf>>testfunktion2(0,-1)

15

Page 19: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.3 m-Files: Matlab als Programmiersprache

wird nur der erste Ausgabeparameter am Bildschirm ausgegeben. Um beide zu bekom-men, muss die Funktion mittels>>[a,b]=testfunktion2(0,-1)aufgerufen werden.

Funktionen von Vektoren und MatrizenWenn eine reellwertige Funktion mit einem Vektor oder einer Matrix als reellwertigemArgument aufgerufen wird, wird die Funktion elementweise für jeden Eintrag des Vektorsoder der Matrix ausgeführt. Dies muss man auch bei selbst geschriebenen Funktionenbeachten. Wenn man dabei nur bereits (korrekt!) definierte mathematische Operationenverwendet, genügt es, alle Multiplikationen, Divisionen und Potenzierungen mit dem „. “zu versehen.function y = vektorfunktion1(x)

y = x.^2+2.*x+1;Das sollte man auch bei selbst geschriebenen Funktionen beachten. Wenn man in derFunktion „if“-Anweisungen verwendet, muss man dann etwas komplizierter programmie-ren. Die bereits bekannte (reelle) Betragsfunktion kann man wie folgt modifizieren, damitsie auch für Matrizen korrekt funktioniert:function y = vektorfunktion2(x)s = size(x)

size liefert die Anzahl von Zeilen und Spalten von x in einem 2-dimensionalen Vektorzurück . Jetzt kann man den reellen Betrag komponentenweise berechnen:for i=1:s(1)

for j=1:s(2)if x(i,j)>0

y(i,j) = x(i,j);else y(i,j) = -x(i,j);end

endend

Funktionen von FunktionenDie Funktion evalDie Funktion eval stellt in Verbindung mit Textvariablen(Zeichenketten) ein leistungsfä-higes Makro zur Textverarbeitung dar. Der Ausdruck bzw. die Anweisungeval(s)

lässt mit Hilfe des MATLAB-Interpreters den Ausdruck auswerten oder die Anweisungenausführen, die in der Textfolge s enthalten sind.Die Funktion fevalDie Funktion feval evaluiert eine Funktion, die mit einer Zeichenkette (String) spezifi-ziert ist. Zum Beispiel ist>>a = feval(’TestFunktion1’,x)zu

16

Page 20: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 1. Einführung in MATLAB und Octave

>>a = TestFunktion1(x)gleichwertig. feval erlaubt auch mehrere Ein- und Ausgabeargumente. Zum Beispiel sind>>[a,b] = feval(’TestFunktion2’,x,y,z)und>>[a,b] = TestFunktion2(x,y,z)äquivalent. Viele eingebaute MATLAB-Funktionen wie z.B. fzero,fplot,fminbnd ver-wenden diese Programmiertechnik.Inline-FunktionenBenötigt man während einer MATLAB-Sitzung eine Funktion, so kann man die inlineFunktion verwenden. Ist zum Beispiel>> f = inline(’sqrt(x.^2+y.^2)’,’x’,’y’)

dann kann man diese Funktion in gewohnter Weise auswerten>>f(4,5)Bisher haben wir Funktionen benutzt, deren Parameter Zahlen bzw. Vektoren oder Ma-trizen waren. Es gibt in MATLAB aber auch die Möglichkeit, ganze Funktionen an andereFunktionen als Parameter zu übergeben. Als Beispiel für eine Anwendung programmierenwir hier eine Funktion, die eine gegebene Funktion plottet. Ein Beispielaufruf lautet>>funplot(’sin(x)’,1,5,100)Der erste Parameter bestimmt die zu plottende Funktion, der zweite und dritte die unterebzw. obere Intervallgrenze des zu plottenden Bereichs. Der vierte Parameter bestimmt dieAnzahl der Stützstellen, die in der Grafik verwendet werden sollen.function funplot(fun,a,b,n,format)inline wandelt den übergebenen Funktionsnamen in eine ausführbare MATLAB Funktionum,g = inline(fun);

Wie üblich erzeugen wir den Vektor der Stützstellent = [a:(b-a)/(n-1):b];

dazu den Vektor von Funktionswerteny = g(t);

und plotten das Ganze. plot(t,y,format)Diese Beispielfunktion funplot plottet eine Funktion mit abhängiger Variable x. Beispie-laufruf:>>funplot(’sin(x)’,0,2*pi,50,’-’)>>input(´Druecke RETURN´)Eine wichtige Operation mit Funktionen ist die Integration. Die MATLAB Routine zurIntegration lautet quad, da numerische Integration üblicherweise als „Quadratur“ bezeich-net wird.>> x = quad(’sin’,0,2*pi)input(’Druecke RETURN’)

17

Page 21: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

1.3 m-Files: Matlab als Programmiersprache

18

Page 22: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 2

Numerische Algorithmen, ihreKomplexität und Fehleranalyse

2.1 Numerische Algorithmen und Fehlerquellen

• Numerische Mathematik beschäftigt sich mit Entwicklung und Analyse numerischerAlgorithmen.

• Mathematische Größen sind meist stetiger Natur.

• Zahlen werden in Computern in Registern oder Zahlenspeichern aufbewahrt.

• Computerzahlen können nur eine feste endliche Anzahl von Ziffern aufnehmen.

• Man unterscheidet zwischen iterativen und exakten Verfahren.

Unter einem numerischen Algorithmus versteht man einer Rechenvorschrift, die auseiner endlichen Folge elementarer Rechenschritte besteht und jede dabei auftretende Re-chenoperation nach Art und Reihenfolge eindeutig festlegt.

Probleme:

• Nicht jede reelle Zahl kann exakt in einem digitalen Computer dargestellt werden.

• Komplexe Probleme stetiger Natur sollen durch diskrete einfachere Probleme ersetztwerden.

• Iterative Methoden sind theoretisch unendlich.

19

Page 23: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

2.1 Numerische Algorithmen und Fehlerquellen

Lösungsstrategien

• Approximative Darstellung der reellen Zahlen.

• 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 unendlich-dimensionale Räume durch endlich-dimensionale.

• Man ersetzt einen unendlichen Prozess durch einen endlichen, z.B. eine unendlicheSumme durch eine endliche oder die Ableitungen durch Differenzenquotienten.

Fehlerquellen

Mögliche Fehlerquellen sind

a) Modellierungsfehler: Einige physikalische Eigenschaften des Problems oder desSystems müssen vereinfacht oder weggelassen werden.

b) Reale Messfehler: Laborinstrumente haben nur endliche Genauigkeit. Aus Ko-stengründen werden oft nur wenige Messreihen durchgeführt.

c) Eingabefehler: Eingabedaten sind oft selbst nur Näherungen.

Fehler, die beim Rechnen entstehen

• Diskretisierungsfehler: Mathematische Modelle müssen oft genähert werden. ZumBeispiel muss man den Differentialquotienten durch den Differenzenquotienten an-nähern.

• Abbruchfehler: Bei iterativen Verfahren müssen Abbruchkriterien verwendet wer-den.

• Rundungsfehler: Die Darstellung reeller Zahlen im Computer und die Rechnungmit ihnen ist im allgemeinen unexakt.

BeispielSei f : R → R eine Funktion und x, x ein exakter bzw. ungenauer Eingabewert. Zudem

20

Page 24: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 2. Numerische Algorithmen, ihre Komplexität und Fehleranalyse

sei f eine Approximation an f . Dann setzt sich der Gesamtfehler aus Rechenfehler undDatenfehler zusammen:

Gesamtfehler = f(x)− f(x)

=(f(x)− f(x)

)+ (f(x)− f(x))

= Rechenfehler + Datenfehler

Rechenfehler = Diskretisierungsfehler + Rundungsfehler

• Ein Diskretisierungsfehler ist die Differenz zwischen dem wahren Ergebnis unddem Ergebnis, das man erhalten würde, wenn man mit einem gegebenen Algorithmusam Computer exakt rechnen könnte.

• Ein Rundungsfehler ist die Differenz zwischen dem exakt berechneten Ergebnisund dem Ergebnis, das ein gegebener Algorithmus in endlich genauer Arithmetikberechnet.

Absoluter und relativer FehlerIst b ein Näherungswert einer Zahl a, dann gibt es zwei mögliche Wege, den Grad derAbweichung von b gegenüber a zu messen.

Absoluter Fehler = |a− b|.

Relativer Fehler =|a− b||a|

=Absoluter Fehler

Wahrer Wert.

Die Kondition eines Problems

Kondition =Relative Änderung im Ergebnis

Relative Änderung in den Eingangsdaten

Ein mathematisches Problem mit kleiner Konditionszahl heißt gut konditioniert, undentsprechende Probleme mit großen Konditionszahlen nennt man schlecht konditio-niert.

BeispielDas Problem zur Berechnung der Funktionswerte der Kosinusfunktion für Argumente inder Nähe von π/2. Es gilt:

Kondition =

cos(x+h)−cos(x)cos(x)

(x+h)−xx

≈−h sin(x)

cos(x)

hx

=− tan(x)

x≈ ∞(x → π/2).

Dies bedeutet, dass 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.

21

Page 25: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

2.2 Computerarithmetik

2.2 Computerarithmetik

Will man auf einem Computer zwei reelle Zahlen addieren oder irgendeine andere arith-metische Operation ausführen, so muss man die reellen Zahlen in den Rechner eingeben.Der Rechner aber kann im allgemeinen eine reelle Zahl nicht genau darstellen. Z.B. Pe-riodische Zahl 1.112 hat unendlich viele Ziffern und kann somit nicht exakt abgebildetwerden. Deshalb müssen reelle Zahlen zur Darstellung im Rechner approximiert wieder-gegeben werden. Diese Zahlen nennt man Maschinenzahlen.Digitaler Rechner benutzen Gleitpunktarithmetik (Fließpunktarithmetik), das heißt, mankann nur endlich viele Zahlen mit endlicher Genauigkeit darstellen. Dies führt auf Phä-nomene wie Rundungsfehler, Underflow und Overflow.

GleitpunktzahlenIdee: eine dezimale Zahl als Potenz von 10 zu schreiben.z.B 125678 = 1.25678 ∗ 105, 0.000000123 = 1.23 ∗ 10−7.In diesem Format bewegt sich (gleitet oder fließt) der Dezimalpunkt entsprechend derÄnderung der Potenz von 10.Jede Zahl x aus einem Gleitpunktsystem lässt sich wie folgt darstellen:

x = ±(d0 +d1

β+

d2

β2+ ... +

dn−1

βn−1) ∗ βe = ±d0.d1d2...dn−1 ∗ βe,

wobei di ∈ {0, ..., β − 1} für i = 0, ..., n− 1 und emin ≤ e ≤ emax gilt.Die Ziffernfolge d0.d1d2...dn−1 bezeichnet man als Mantisse, e ist der Exponent, β dieBasis, n die Mantissenstellenzahl („Genauigkeit“) und {e ∈ Z | emin ≤ e ≤ emax} derExponentenbereich, wobei auch emin, emax ∈ Z.Computer verwenden heutzutage fast ausschließlich binäre Arithmetik, das heißt β =2. Taschenrechner dagegen benutzen aus nahe liegenden Gründen dezimale Arithmetik(β = 10). Unabhängig davon, welche Basis ein Computer verwendet, konvertiert er beieiner Eingabe eine dezimale Zahl in die entsprechende Maschinenzahl und wieder in einedezimale Zahl zurück.Ein Gleitpunktsystem ist normalisiert, wenn die erste Ziffer d0 der Mantisse ungleichNull ist, sofern die darzustellende Zahl nicht gerade die Null ist. Für die Mantisse m giltdann immer

1 ≤ m < β.

Normalisierte Gleitpunktsysteme haben folgende Eigenschaften:

• Die Darstellung ist eindeutig.

• Die Genauigkeit ist maximal, weil keine Ziffer durch führende Nullen unnötig ver-braucht wird.

• In einem binärem Gleitpunktsystem ist die führende Ziffer immer 1. Deshalb mussman sie nicht explizit speichern und gewinnt ein zusätzliches Bit, um die Genauigkeitzu erhöhen.

22

Page 26: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 2. Numerische Algorithmen, ihre Komplexität und Fehleranalyse

Kann eine gegebene reelle Zahl x nicht als Gleitpunktzahl dargestellt werden, so musssie approximiert werden. Diese Gleitpunktnäherung bezeichnet man mit fl(x) und derProzess heißt Runden. Der Fehler, der dadurch entsteht, heißt Rundungsfehler.Die Genauigkeit eines Gleitpunktsystems kann durch eine Größe charakterisiert werden,die man Maschinengenauigkeit nennt. Den Wert bezeichnen wir mit εM . Alle in MAT-LAB abgebildeten reellen Zahlen sind mit einem relativen Fehler kleiner oder gleich

εM = 2−52 ≈ 2.2204 ∗ 10−16

behaftet. Es ist also wenig sinnvoll, mehr als sechzehn Stellen in der Mantisse ein - oderauszugeben.

Computerarithmetik in MATLABIn MATLAB ist der IEEE-Standard 754 mit doppelter Genauigkeit(64Bit) realisiert, wannimmer Hardware und Software dies zulassen. Deshalb hat in MATLAB jede Zahl x dieForm:

x = ±(1 + f) · 2e,

wobei f = d1

2+ ... + d52

252 . Für die Exponenten e gilt −1022 ≤ e ≤ 1023.

MATLAB-Name BeschreibungεM Maschinengenauigkeit; IEEE: 2−52 ≈ 2.2 · 10−16

realmin Kleinste positive reelle Zahl; IEEE: 2−1022 ≈ 2.2 · 10−308

realmax Größte positive reelle Zahl; IEEE: (2− 2−52) · 21023 ≈ 1.8 · 10308

In MATLAB spricht man von flints, wenn man eine Gleitpunktzahl meint, deren Werteine ganze Zahl ist. Bei flint-Zahlen gibt es keine Rundungsfehler.Die IEEE-Gleitpunktarithmetik erlaubt spezielle Werte für folgende Ausnahmefälle:

• Inf für unendlich, zum Beispiel wenn eine Zahl durch Null dividiert wird.

• NaN für not-a-number, wenn Operation undefiniert oder unbestimmt ist, wie 0/0oder 1/′Zeichen′.

2.3 Zur Komplexität numerischer Algorithmen

Für Probleme der numerischen Mathematik gibt es meist mehr als einen Lösungsweg.Wählt man zur Lösung einen Algorithmus aus mehreren aus, dann benutzt man dafürdrei Hauptkriterien: Geschwindigkeit, Speicheraufwand und Stabilität.

Zählen arithmetischer GleitpunktoperationenIn weiteren werden wir n-Vektoren und n × n−Matrizen benutzen, um die Anzahl der

23

Page 27: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

2.3 Zur Komplexität numerischer Algorithmen

Operationen zu zählen.Addition zweier Vektoren. Für die Berechnung der Summe werden n Additionen be-nötigt.Skalarprodukt benötigt:

• n Additionen

• n Multiplikationen

Addition zweier quadratischer Matrizen. Hier sind n2 Additionen notwendig.Multiplikation zweier quadratischer Matrizen Matrix C = A ∗ B hat n2 Elemen-te, und ein Element beinhaltet ein Skalarprodukt zweier Vektoren. Damit benötigt derAlgorithmus

• n3 Additionen

• n3 Multiplikationen

Lösen eines linearen Systems mit Dreiecksmatrix. Das Lösen eines linearen GSmit dreiecksförmiger Matrix folgende Operationen benötigt:

• 1/2n2 − 1/2n Additionen

• 1/2n2-1/2n Multiplikationen

• n Divisionen

Der dominante Term.Für große n ist der Term 1

2n2 im Ausdruck 1

2n2 − 1

2n dominant gegenüber dem Term 1

2n.

Ist z. B. n = 100, so ist das Verhältnis hundert zu eins. Den variablen Faktor im domi-nanten Term - hier n2 nennt man den dominanten Term des Algorithmus. Damit ist dieOrdnung des Algorithmus zur Lösung eines linearen Systems mit Dreiecksmatrix von derOrdnung n2,das Skalarprodukt die Ordnung n hat. Hierfür benutzt man die sogenann-ten Landauschen Symbole und schreibt gewöhnlich O(n2) bzw. O(n). Der Faktor 1/2 imTerm 1/2n2 heißt die Ordnungskonstante. Es stellt sich heraus, dass man die OrdnungAlgorithmus oft leicht bestimmen kann, die Ordnungskonstante aber nicht. Aus diesemGrund wird sie oft unterdrückt und nicht angegeben. Sie ist dann von der Bedeutung,wenn man zwei Algorithmen gleicher Ordnung vergleichen will.

Traditionell wurden in der numerischen Mathematik vorwiegend die Multiplikationund Divisionen gezählt, da sie gewöhnlich rechenintensiver als Additionen und Subtrak-tionen sind, und weil bei vielen Algorithmen ähnlich viele Additionen bzw. Subtraktionen

24

Page 28: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 2. Numerische Algorithmen, ihre Komplexität und Fehleranalyse

wie Multiplikationen bzw. Divisionen auftreten. Neuerdings gibt es kaum noch nennens-werte Unterschiede zwischen Additionen bzw. Subtraktionen und Multiplikationen bzw.Divisionen. Daher wird zunehmend jede arithmetische Operation gezählt. Gleitpunktope-rationen heißen im Englischen floating point operations oder kurz flops. Jede Addi-tion, Subtraktion, Multiplikation, Division und das Berechnen der Quadratwurzel zähltals eine Gleitpunktoperation(flop). Die MATLAB-Funktion flops kann (approximativ)die Anzahl der Gleitpunktoperationen zählen.

25

Page 29: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

2.3 Zur Komplexität numerischer Algorithmen

26

Page 30: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 3

Graphische Benutzeroberflächen undMATLAB

3.1 Erstellung einer GUI mit MATLAB

Grafische Benutzeroberflächen (GUI) vereinfachen die Verwendung von MATLAB-Pro-grammen und machen sie anderen Benutzern zugänglich. MATLAB bietet ein einfachesund leicht erlernbares Konzept zur GUI-Entwicklung.

• GUI Elemente

• Darstellung kontrollieren (Größe, Position, Farben, Eigenschaften ändern)

• Programmierung (Callbacks, Datenstruktur, Spezialfunktionen, handles)

• Darstellung von Daten in Grafiken

3.1.1 GUI Elemente

1. Starten Sie MATLAB2. Rufen Sie im MATLAB-Command-Window das Programm guide auf>>guide3. Auf der nun erschienenen Arbeitsfläche können verschiedene GUI Elemente positioniertwerden. Um die Namen der GUI -Komponenten anzeigen zu lassen, wähle in Menu FileZeile Preferences und in aufgemachtem Fenster setze das Häkchen in Show names in

27

Page 31: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

3.1 Erstellung einer GUI mit MATLAB

component palette. Wir stellen einzelne GUI-Komponenten dar.

Die Beschreibungen einzelner Komponenten wurden aus der MATLAB-Hilfe in engli-scher Sprache entnommen.

• Push Button Push buttons generate an action when clicked. For example, an OKbutton might close a dialog box and apply settings. When you click a push button,it appears depressed; when you release the mouse, the button appears raised andits callback executes.

• Toggle Button Toggle buttons generate an action and indicate whether they areturned on or off. When you click a toggle button, it appears depressed, showing thatit is on. When you release the mouse button, the toggle button’s callback executes.However, unlike a push button, the toggle button remains depressed until you clickthe toggle button a second time. When you do so, the button returns to the raisedstate, showing that it is off, and again executes its callback.

• Radio Button Radio buttons are similar to check boxes, but are typically mutuallyexclusive within a group of related radio buttons. That is, you can select only onebutton at any given time. To activate a radio button, click the mouse button on the

28

Page 32: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 3. Graphische Benutzeroberflächen und MATLAB

object. The display indicates the state of the button.

• Check Box Check boxes generate an action when checked and indicate their stateas checked or not checked. Check boxes are useful when providing the user with anumber of independent choices that set a mode, for example, displaying a toolbaror generating callback function prototypes.

• Edit Text Edit text controls are fields that enable users to enter or modify textstrings. Use edit text when you want text as input. The String property containsthe text entered by the user. The callback executes when you press Enter for asingle-line edit text, Ctl+Enter for a multi-line edit text, or the focus moves away.

• Static Text Static text controls display lines of text. Static text is typically usedto label other controls, provide directions to the user, or indicate values associatedwith a slider. Users cannot change static text interactively and there is no way toinvoke the callback routine associated with it.

• Slider Sliders accept numeric input within a specific range by enabling the userto move a sliding bar, which is called a slider or thumb. Users move the slider bypressing the mouse button and dragging the slider, by clicking in the trough, or byclicking an arrow. The location of the slider indicates a percentage of the specifiedrange.

• List Box List boxes display a list of items and enable users to select one or moreitems.

• Pop-Up Menu Pop-up menus open to display a list of choices when users click thearrow.

• Axes Axes enable your GUI to display graphics (e.g., graphs and images). Likeall graphics objects, axes have properties that you can set to control many aspectsof its behavior and appearance. See ’Axes Properties’ in the MATLAB Graphicsdocumentation for more information on axes objects.

• Panel Panels group GUI components. Panels can make a user interface easier tounderstand by visually grouping related controls. A panel can have a title andvarious borders. Panel children can be panels and button groups as well as axes anduser interface controls. The position of each component within a panel is interpretedrelative to the panel. If you move the panel, its children move with it and maintaintheir positions on the panel.

29

Page 33: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

3.1 Erstellung einer GUI mit MATLAB

• Button Group Button groups are like panels but can be used to manage exclu-sive selection behavior for radio buttons and toggle buttons. For radio buttons andtoggle buttons that are managed by a button group, you must include the code tocontrol them in the button group’s SelectionChangeFcn callback function, not inthe individual uicontrol Callback functions. A button group overwrites the Callbackproperties of radio buttons and toggle buttons that it manages.

• ActiveX Component ActiveX components enable you to display ActiveX controlsin your GUI.

ActiveX components are available only on the Microsoft Windows platform.

3.1.2 Darstellung kontrollieren (Größe, Position, Farben, Eigen-schaften ändern)

Die Eigenschaften der GUI - Komponenten können in Property Inspector angesehenund geändert werden. Der Property Inspektor wird aktiviert durch Doppelklick auf derausgewählten Komponente.Alle GUI-Komponente besitzen folgende Eigenschaften:

Tag Die Tag-Eigenschaft ist ein Identifikationswert für die Komponente. Der wird vondem MATLAB Guide selbst benannt (z.B. pushbutton1), wenn man die Kompo-nente auf das Layout setzt. Mit diesem Tag wird dann auch der Callback-Name derKomponente erweitert ( pushbutton1_Callback). Man sollte die Tag’s abändern,damit sie leichter mit den Komponenten und Callbacks identifiziert werden kön-nen (z.B. Okbutton, quitbutton_Callback). Wenn Sie den Tag der Komponentengeändert haben, wird der entsprechende Name des Callbacks beim Speichern auchgeändert.

String Die String-Eigenschaft enthält Text und wird in der Komponente oder bei der Kom-ponente eingeblendet.

Value Die Value-Eigenschaft enthält den numerischen Wert der Komponenten, deren Be-reich mit den Eigenschaften Max und Min spezifiziert ist.Für Radio Button und Check Box sind Max und Min mit 1 und 0 voreingestellt.Die Value-Eigenschaft ist 1, wenn Radio Button oder Check Box gewählt ist.

30

Page 34: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 3. Graphische Benutzeroberflächen und MATLAB

Callback Die Callback-Eigenschaft bestimmt die Callback-Funktion, die im GUI M-File auf-gerufen wird, wenn der Benutzer diese Komponente aktiviert. GUI-Komponentenbenutzen Callbacks um seine Mission zu erfüllen. Solche Aktionen sind z.B. Klick derPush Button- Taste, Auswahl eines Menüpunktes, Aktivierung der Radio Button-Tasteoder Verschiebung des Schiebereglers. Neben der Callback-Funktion, die durch dieCallback-Eigenschaft der Komponente bestimmt wird, haben verschiedene graphi-sche Objekte noch zusätzliche Callbacks wie z.B. CreateFcn, DeleteFcn, ResizeFcn.In diesen Callback-Funktionen beschreibt man die Anweisungen, die beim Erzeugender Komponente (CreateFcn) oder bei der Vernichtung der Komponente (DeleteFcn)usw. durchgeführt werden.

3.2 Programmierung(Callbacks, Datenstruktur, Spezi-alfunktionen, handles)

Nachdem die Grafische Benutzeroberfläche entworfen ist und die Eigenschaften der Kom-ponenten gesetzt sind, fängt man an, GUI zu programmieren. Der Programmcode zum

31

Page 35: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

3.2 Programmierung(Callbacks, Datenstruktur, Spezialfunktionen, handles)

Gui befindet sich im Gui M-File. Wenn man das GUI speichert oder startet, generiertMATLAB das GUI M-File. In diesem File befindet sich der Initialisierungscode und dieCallbacks zu den einzelnen Komponenten. Der generierte Initialisierungscode sollte nichtgeändert werden.Daten-Freigabe mit der Handles-StrukturWenn man GUI startet, erzeugt MATLAB die handles -Struktur. Diese beinhaltet alleKomponenten des gestarteten GUI, z.B. Menüs, Push Buttons, Edit Text und Axes. Wirkönnen handles-Strukturen benutzen für

• Freigabe der Daten zwischen Callbacks

• Zugriff auf GUI-Data

• Zum Speichern der Variable X:handles.current_data = X;guidata(hObject,handles);

• Zum Abrufen der im handles gespeicherten Daten:X = handles.current_data;

Zugriff auf GUI-DataWir können die Information der GUI-Komponenten aus der handles-Struktur bekommen:val = str2double(get(handles.edit1,’String’));

Funktionen und Callbacks im M-FileMan kann den Code zu den folgenden Teilen des M-Files addieren.

• Opening Funktion wird durchgeführt, bevor GUI für den Benutzer sichtbar wird.Man hat hier schon Zugriff auf alle GUI-Komponenten, weil diese schon vor demAufruf OpeningFcn erzeugt sind. Man kann hier den Code hineinschreiben, um alleAufgaben zu erledigen, die man am Anfang machen will. Z.B. gibt man am Anfangin Edit Text etwas aus, zeichnet Grafiken in Axes, blockiert GUI mit dem uiwait-Befehl.functionmy_gui_OpeningFcn(hObject,eventdata,handles,varargin)my_gui(’Position’, [71.8 44.9 74.8 19.7]).

• Output Funktion gibt die Output-Argumente in die Kommandozeile zurück. Eskann nützlich sein, wenn man von einer GUI zu einer anderen etwas übergeben will.

• Callbacks: Callbacks benutzt man, um mit Hilfe von GUI-Komponenten die Aus-führung des Programms zu steuern.

Jetzt stellen wir die drei wichtigsten Befehle beim Arbeiten mit GUI vor:

32

Page 36: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 3. Graphische Benutzeroberflächen und MATLAB

1) findobj h = findobj(objhandles,’PropertyName’,PropertyValue,...)Findobj findet alle grafischen Objekte mit vorgegebenen Eigenschaften undgibt Objekt-Handles zurück.

2) get a=get(h,’PropertyName’) - gibt den Wert des grafischen Objekts hzurück.

3) set set(H,’PropertyName’,PropertyValue,...) - setzt in Objekt H die Ei-genschaft ’PropertyName’ auf den Wert PropertyValue.

3.2.1 Darstellung von Daten in Grafiken

Zur Darstellung von Grafiken benutzen wir die GUI-Komponente Axes\index{Axes}. Da-mit wird definiert, in welchem Objekt der Plot eigentlich dargestellt werden soll. Die Er-zeugung von Grafiken übernehmen die Befehle plot(), surf(), ezplot(), plot3d()mit Parametern in der Form, die wir schon in Abschnitt Visualisieren mit MATLAB ken-nen gelernt haben, z.B.axes(handles.axes1);plot(xDataFull(xIndex),Y2,’-.r’,uax_out(:,3),uax_out(:,2),’-’).

33

Page 37: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

3.2 Programmierung(Callbacks, Datenstruktur, Spezialfunktionen, handles)

34

Page 38: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4

Einfache numerische Algorithmen mitMATLAB

4.1 Polynome

Polynome spielen in der Mathematik eine wichtige Rolle. Durch Polynome lässt sich einegroße Klasse von Funktionen approximieren. Polynome lassen sich einfach differenzierenund integrieren, und man kann leicht die Nullstellen der Polynome numerisch appro-ximieren. Wenn man mit Polynomen höherer Ordnung arbeitet, ist es wichtig, effizienteMethoden zur Auswertung der Polynomwerte zu haben. Dies hat vor allem in Hinsicht aufRundungsfehler bei Fließkommazahlen große Bedeutung. Im wissenschaftlichen Rechnenist es darüber hinaus wichtig, die Anzahl der Rechenoperationen einzelner Berechnungenzu minimieren.

4.1.1 Berechnung von Polynomwerten. Horner-Schema

Eine effiziente Auswertung eines Polynoms und seiner Ableitungen an bestimmten Stellenwird im Horner-Schema realisiert.Idee des Horner-Schemas:Die Berechnung des Polynoms

p(x) = a0 + a1x + a2x2 + a3x

3 + a4x4

an einer Stelle x0 liefert uns folgendes Ergebnis:

p(x) = a0 + a1x0 + a2x20 + a3x

30 + a4x

40 = a0 + (a1 + (a2 + (a3 + a4x0)x0)x0)x0.

Die Verallgemeinerung des obigen Rechenvorschrifts in der rekursiven Schreibweise liefertuns folgende Resultat.

35

Page 39: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.1 Polynome

Sei p ein Polynom (an 6= 0)

p(x) =n∑

k=0

akxk.

Zur Auswertung von p an der Stelle x0 setze a0k = ak, k = 0, ..., n, und

a1n = a0

n

a1j = a0

j + a1j+1x0 für j = n− 1, ..., 0.

Dann gilt p(x0) = a10. Mit Hilfe des Horner-Schemas lässt sich das Polynom durch den

linearen Faktor (x− x0) teilen. Seien

pn(x) =n∑

j=0

a0jx

j

pn−1(x) =n∑

j=1

a1jx

j−1

Dann gilt für beliebiges x0 und nach obigem Schema entwickelten a10 :

pn(x) = pn−1(x)(x− x0) + a10.

Jetzt sind wir in der Lage, das vollständige Horner-Schema zu präsentieren. Für k =0, ..., n und j = k, .., n definieren wir

ak+1j = ak

j + ak+1j+1x0.

Diese Rekursionformel bedeutet nun, dass das Element ak+1j sich aus der Summe des

darüberstehenden Elements und des links danebenstehenden Elements multipliziert mitx0 ergibt. Wir stellen das vollständige Horner-Schema tabellarisch dar.

a0n a0

n−1 a0n−2 ... a0

2 a01 a0

0

x0 a1n a1

n−1 a1n−2 ... a1

2 a11 a1

0

x0 a2n a2

n−1 a2n−2 ... a2

2 a21

x0 a3n a3

n−1 a3n−2 ... a3

2...

......

...x0 an−1

n an−1n−1 an−1

n−2

x0 ann an

n−1

x0 an+1n

Als Anwendung lassen sich die Koeffizienten einer Taylorreihe durch das Horner-Schemaberechnen,

Tx0p(x) =n∑

k=0

p(k)(x0)

k!(x− x0)

k.

Hierbei ergibt sichp(k)(x0) = k! · ak+1

k .

36

Page 40: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

4.1.2 Polynome in MATLAB

Polynome werden in MATLAB durch einen Zeilenvektor repräsentiert, wobei die Kom-ponenten des Vektors die Koeffizienten des Polynoms darstellen. Die Reihenfolge ist ab-steigend festgelegt z.B. die Polynome p1(x) = 3x2 − 2 und p2(x) = 14x4 − 7x2 + 9x − 6werden durch folgende Vektoren in MATLAB gegeben:>>p1 = [3 0 -2]>>p2 = [14 0 -7 9 -6]Die Nullstellen des Polynoms lassen sich anhand der Funktion roots() berechnen.>> r = roots(p1)Mit dem Befehl poly() können wir aus den Nullstellen das Polynom konstruieren. Daein Polynom aber durch seine Nullstellen nur bis auf ein Vielfaches eindeutig bestimmtist, wählt MATLAB das Polynom mit Koeffizient 1 vor dem höchsten Monom.

In MATLAB sind andere nützliche Funktionen, die dem Anwender das Arbeiten mitPolynomen erleichtern implementiert. Die folgende Tabelle fasst die Funktionen zusam-men:Funktion Beschreibungconv() Multipliziert Polynomedeconv() Dividiert Polynomepoly() Berechnet Polynom aus Nullstellenpolyder() Berechnet die Ableitung eines Polynomspolyval() Berechnet Polynomwerteroots() Berechnet Nullstellen eines Polynoms

37

Page 41: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.2 Nullstellenberechnung

4.2 Nullstellenberechnung

Wir betrachten eine nichtlineare Funktion f : Rd → Rd und die damit resultierendenichtlineare Gleichung

f(x) = 0 (4.1)

Wir nennen x eine Nullstelle der nichtlinearen Gleichung (4.1), wenn x eine Lösung derGleichung (4.1) ist.Unser Ziel ist es verschiedene Methoden zur Lösung solcher Gleichungen vorzustellen.Bevor man zur Vorstellung einzelner Methoden übergeht, diskutieren wir die Fragen derExistenz und Eindeutigkeit der Lösung. Im Falle linearer Probleme haben wir bekannteErgebnisse, z.B. hat ein lineares Gleichungssystem entweder keine, eine oder unendlichviele Lösungen. Für die Eindeutigkeit der Lösung muss die Matrix regulär sein. Im nicht-linearen Fall können die Gleichungen jede Anzahl von Lösungen haben. Darüber hinauskönnen nichtlineare Gleichungen mehrfache Nullstellen besitzen.Lineare Gleichungen bzw. lineare Gleichungssysteme lassen sich in endlich vielen Schrittenlösen. Dagegen sind nichtlineare Gleichungen nicht immer direkt lösbar. Diese Gleichungenkönnen im allgemeinen nur approximativ gelöst werden, und zwar durch die Anwendungdes geeigneten iterativen Verfahrens.

4.2.1 Bisektions-Methode

Als Einführung in die Problematik stellen wir das Intervallschachtellungsverfahren (Bisektions-Methode) vor. Im folgenden interessieren wir uns nur für reelle Nullstellen nichtlineareGleichungen im R1.Idee der Bisektions-Methode: Wechselt eine stetige Funktion f auf einem Intervall ihrVorzeichen, so muss sie nach dem Zwischenwertsatz (ZWS) in diesem Intervall mindestenseine Nullstelle haben.Algorithmus der Bisektions-MethodeAngenommen f sei eine stetige Funktion auf dem Intervall [a0, b0] mit mindestens einerNullstelle in [a0, b0].Die Bisektions-Methode hat dann folgende Form:

1) Für n = 0, 1, 2, 3, ...

2) berechne Mittelpunkt mn = an+bn

2.

3) Wenn f(mn)f(an) < 0 ist, dann liegt die Nullstelle in [an, mn]; bn+1 := mn, an+1 :=an. Gehe zu 1) und erhöhe n um 1.

5) Wenn f(mn)f(bn) < 0 ist, dann liegt die Nullstelle in [mn, bn]; bn+1 := bn, an+1 :=mn. Gehe zu 1) und erhöhe n um 1.

38

Page 42: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

Konvergente iterative Methoden erzeugen eine Folge von Approximationen {xn}n∈N ⊂ R,so dass mit der Nullstelle x gilt

limn→∞

xn = x (4.2)

Weil iterative Methoden theoretisch unendlich viele Schritten haben, muss man ein Ab-bruchkriterium festlegen. Für die Bisektions-Methode werden wir folgendes Abbruchkri-terium verwenden:Führe den Algorithmus solange durch, bis |a− b| kleiner als eine vorgegebene Zahl tol ist.Wie schon erwähnt wurde, konvergiert die Iterationsfolge. Es stellt sich die Frage nachKonvergenzgeschwindigkeit der Methode. Es lässt sich leicht zeigen, dass

|xn − x| ≤ 1

2(bn − an) =

1

2n+1(b0 − a0) (4.3)

gilt, wobei xn der Intervallmittelpunkt des Intervalls (an, bn) und x die Nullstelle dernichtlinearen Gleichung ist. Diese Abschätzung nennt man a-priori-Fehlerabschätzung,und damit sind wir in der Lage zu sagen, wie viele Schritte höchstens erforderlich sind,um eine Approximation der Nullstelle x mit einer vorgegebener Genauigkeit zu berechnen.Fassen wir zusammen: Für die Implementierung einer iterativen Methode sollten folgendeFragen beantwortet werden.

• Angabe des Startpunktes bzw. Startintervalls des Verfahrens.

• Konvergiert die Iterationsfolge? Wenn die Folge konvergiert, ermitteln wir die Kon-vergenzgeschwindigkeit der Methode.

• Wann wird die Iterationsfolge abgebrochen?

Für die Charakterisierung der Konvergenzgeschwindigkeiten führen wir folgende Defini-tionen ein.

Definition 4.1 Eine Iterationsfolge {xn}n∈N konvergiert linear mit der Rate c (0 ≤ c <1) gegen die Nullstelle x, wenn

lim supn→∞

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

= c (4.4)

gilt.

Definition 4.2 Eine Iterationsfolge {xn}n∈N konvergiert mindestens mit der Ordnung pund der Rate c (0 ≤ c < 1) gegen die Nullstelle x, wenn

lim supn→∞

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

p

≤ c (4.5)

39

Page 43: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.2 Nullstellenberechnung

gilt. Ist p = 2, so ist die Ordnung mindestens quadratisch usw. Gilt sogar

lim supn→∞

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

p

= c 6= 0 (4.6)

so konvergiert die Folge genau mit der Ordnung p. Ist c = 0 so nennt man die Konvergenzsuperlinear (p = 1), superquadratisch (p = 2) usw.

Aus (4.3) erhalten wir unmittelbar, dass die Konvergenzgeschwindigkeit der Bisektions-Methode linear mit p = 1 und c = 0.5 ist.

Vorteile und Nachteile der Bisektions-MethodeEin Vorteil der Bisektions-Methode ist ihre globale Konvergenz; ein Nachteil ist ihre lang-same lineare Konvergenzgeschwindigkeit.

4.2.2 Methode der sukzessiven Approximation

Sei F : Rd → Rd eine skalare(d = 1) oder vektorwertige(d > 1) Funktion.

Definition 4.3 Eine Zahl x∗ ∈ Rd heißt Fixpunkt von F , wenn x∗ Lösung der folgendenGleichung ist:

x∗ = F (x∗) (4.7)

Die Iterationsvorschrift der Methode der sukzessiven Approximation (Fixpunkti-teration) hat die Form

xn+1 = F (xn), n = 0, 1, 2, ... (4.8)

Dabei ist x0 die Anfangsapproximation. Jetzt stellt sich die Frage, ob die Fixpunktitera-tion eine konvergente iterative Methode ist. Die Antwort ist ja, wenn die Funktion F eineKontraktion ist.

Satz 4.4 (Theorem 5.7 in [Pla00]) Sei M ⊂ Rd eine abgeschlossene Teilmenge, unddie Abbildung F : M → M sei bezüglich einer Vektornorm ‖.‖ : Rd → R eine Kontrak-tion, das heißt, für eine Konstante 0 < L < 1 sei

‖F (x)− F (y)‖ ≤ L‖x− y‖ x, y ∈ M, (4.9)

erfüllt. Dann gilt folgendes:

a) F besitzt genau einen Fixpunkt x∗ ∈ M ;

40

Page 44: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

b) Für jeden Startwert x0 ∈ M liefert die Fixpunktiteration (4.8) eine gegen x∗ kon-vergierende Folge, und es gelten die Fehlerabschätzungen

‖xn − x∗‖ ≤L

1− L‖xn − xn−1‖ ≤

Ln

1− L‖x1 − x0‖, n = 1, 2, 3, ... (4.10)

Für stetig differenzierbare Funktionen F können wir ein wichtiges Kriterium für dieLipschitz-Bedingung (4.9) angeben.

Satz 4.5 ([SH82] S. 35) Die Funktion F sei stetig differenzierbar auf der TeilmengeM = Kρ(c) = {x ∈ Rd | ‖x− c‖ ≤ ρ}. Dann ist die Bedingung

‖F ′(x)‖ ≤ L, x ∈ M, (4.11)

notwendig und hinreichend für die Lipschitz-Bedingung (4.9):

‖F (x)− F (y)‖ ≤ L‖x− y‖ x, y ∈ M.

Auf der Basis der Methode der sukzessiven Approximation lassen sich vergleichsweiseeffiziente Methoden zur Nullstellenberechnung bilden. Die Nullstellen von f : M → Rd

sind gerade die Fixpunkte der folgenden Funktion F :

f(x) = 0 ⇔ x = F (x), F (x) = x− Cf(x), x ∈ M.

Dabei ist M eine abgeschlossene Teilmenge des Rd und C eine reguläre d× d−Matrix.

4.2.3 Newton-Verfahren

Die Iterationsfolge des Newtonsverfahrens ist im R1 durch folgende Formel definiert:

xn+1 = xn −1

f ′(xn)f(xn), n = 0, 1, 2, ... (4.12)

Im weiteren bezeichnet G eine offene Teilmenge des R. Folgender Satz sichert uns die Kon-vergenz der Newton-Methode mit quadratischer Konvergenzgeschwindigkeit für einfacheNullstelle unter den im Satz getroffenen Voraussetzungen.

Satz 4.6 ([SH82], S. 39) Die Funktion f ∈ C2(G) möge mit positiven Zahlen m, M denBedingungen genügen

|f ′(x)| ≥ m, |f ′′(x)| ≤ M, x ∈ G. (4.13)

Zu jeder Nullstelle z ∈ G gibt es dann eine Umgebung Kρ(z) ⊆ G, ρ > 0, so dass zdie einzige Nullstelle von f in Kρ(z)ist, für jeden Anfangswert x0 ∈ Kρ(z) die Näherun-gen x1, x2, ... in Kρ(z) bleiben und gegen die Nullstelle z konvergieren mit der a-priori-Fehlerabschätzung

q =M

2m|x0 − z| < 1, |xn − z| ≤ 2m

Mq2n

, n = 0, 1, 2, ...,

41

Page 45: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.2 Nullstellenberechnung

und den a-posteriori-Fehlerabschätzungen

|xn − z| ≤ 1

m|f(xn)| ≤ M

2m|xn − xn−1|, n = 0, 1, 2, ....

Bei einer einfachen Nullstelle ist das Newton-Verfahren lokal quadratisch konvergent. Beieiner mehrfachen Nullstelle x∗ konvergiert das Newton-Verfahren superlinear,

limn→∞

xn+1 − x∗xn − x∗

= 1− 1

m, x∗ m-fache Nullstelle.

Kennt man m nicht, so kann man mit Hilfe der Asymptotik

xn−1 − xn

xn−2 − xn

≈ 1− 1

m⇒ m ≈ xn − xn−2

xn−1 − xn−2

m approximieren. Wenn x∗ eine m − fache Nullstelle ist, dann können wir das Newton-Verfahren beschleunigen:

xn+1 = xn −mf(xn)

f ′(xn).

Diese modifizierte Iterationsfolge konvergiert quadratisch gegen eine m−fache Nullstellex∗.Vorteile und Nachteile des Newton-VerfahrensVorteil

• Bei einfacher Nullstelle lokal quadratisch konvergent

Nachteile

• Benötigt Ableitungswerte

• Nur lokal konvergent

4.2.4 Die Sekantenmethode (Regula falsi)

Wenn man die in der Newton-Methode benötigte Ableitung f ′ nicht ausrechnen kann, soapproximiert man die Ableitung f ′ durch einen Differenzenquotienten. Damit erhält manfolgende Iterationsformel:

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

f(xn)− f(xn−1), n = 0, 1, 2, ... (4.14)

Dabei benötigt die Sekantenmethode zwei Anfangswerten x0, x1. Der Konvergezsatzfür die Sekantenmethode lässt sich ganz analog wie beim Newton-Methode formulierenund beweisen. Einzige Unterschied stellt die Konvergenzgeschwindigkeit dar. Es lässt sichzeigen, dass Sekantenmethode superlinear gegen die einfache Nullstelle x∗ konvergiert.

42

Page 46: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

Vorteile und Nachteile der SekantenmethodeVorteile

• Benötigt keine Ableitung der Funktion

• Benötigt nur eine neue Funktionsauswertung pro Iteration

• Bei einfacher Nullstelle superlinear konvergent

Nachteil

• Nur lokal konvergent

4.3 Lineare Gleichungssysteme: Direkter und iterativerLöser

4.3.1 Inverse Matrix, Normen und Konditionszahl der Matrix

Zuerst betrachten wir einige nützliche Funktionen:MATLAB-Name Bedeutungdot(a,b) Skalarprodukt zwei Vektorennorm(b) Euklidische Länge eines Vektorsnorm(b,p) ‖b‖p = (

∑ni=1 |bi|p)

1p

cross(a,b) Kreuzproduktdet(A) Determinant von Ainv(A) Inverse von Aeye(n) n× n Einheitsmatrixnorm(A)=norm(A,2) Spektralnormnorm(A,1) maxj

∑ni=1 |aij|

norm(A,inf) maxi

∑nj=1 |aij|

cond(A)=cond(A,2) Konditionszahl von A bezüglich der Spektralnormcond(A,1) cond(A) bzgl. der Spaltensummennorm ‖.‖1.cond(A,inf) cond(A) bzgl. der Zeilensummennorm ‖.‖∞.

Man kann lineare Gleichungssysteme Ax = b mittels der Inversen der Matrix A lösen:x=inv(A)*b. Dies ist aber numerisch ineffizient im Vergleich zu anderen Vorgehensweisen.

43

Page 47: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.3 Lineare Gleichungssysteme: Direkter und iterativer Löser

4.3.2 Direkte Verfahren

MATLAB hat eine Reihe von Algorithmen zur Lösung von linearen Gleichungssystemenund verwandten Problemen eingebaut. SeiA = [ 1 5 6; 7 9 6; 2 3 4], b = [29; 43; 20].

Der Grundbefehl zur Lösung eines linearen Gleichungssystems ist der umgekehrte Schräg-strich

x=A\b

Die Rechnung wird mit der Gauß-Elimination (mit Pivotierung) durchgeführt. Wenn Ain obererer oder unterer Dreiecksform vorliegt, wird Rückwärts- bzw. Vorwärtseinsetzendurchgeführt.Anmerkung: Wenn A nicht quadratisch ist, wird keine Fehlermeldung ausgegeben, son-dern automatisch das zugehörige lineare Ausgleichsproblem gelöst (Verallgemeinerte bzw.Quasi-Lösung).

VorwärtseinsetzenWir betrachten zunächst untere Dreieckssysteme Lx = b. Hierzu sei folgendes 3 × 3-System gegeben: l11 0 0

l21 l22 0l31 l32 l33

x1

x2

x3

=

b1

b2

b3

Die Unbekannten x1, x2 und x3 können wie folgt berechnet werden:

x1 =b1

l11

x2 =b2 − l21x1

l22

x3 =b3 − l31x1 − l32x2

l33

RückwärtseinsetzenDas Lösen eines linearen Systems Ux = b mit einer oberer Dreiecksmatrix U geschiehtanalog zum unteren Dreiecksfall. u11 u12 u13

0 u22 u23

0 0 u33

x1

x2

x3

=

b1

b2

b3

Die Unbekannten x1, x2 und x3 können wie folgt berechnet werden:

44

Page 48: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

x3 =b3

u33

x2 =b2 − u23x3

u22

x1 =b3 − u12x2 − l13x3

u11

Die Grundlage der Gauss-Elimination Methode bildet eine LU-Zerlegung. Die Matrix Alässt sich in ein Produkt

A = LU

einer unteren Dreiecksmatrix L und einer oberen Dreiecksmatrix U zerlegen. Ist nun eineLU−Faktorisierung gegeben, dann kann man das lineare Gleichungssystem Ax = b auchals LUx = b schreiben. Damit läßt sich das untere Dreieckssystem Ly = b durch Vor-wärtseinsetzen und das obere Dreieckssystem Ux = y durch Rückwärtseinsetzen lösen.Bei Vertauschung (PA = LU) muss Ly = Pb durch Vorwärts- und dann Ux = y durchRückwärtseinsetzen gelöst werden. Vereinbart man noch, dass bei L nur jeweils 1 in derDiagonale steht, dann ist die obige Zerlegung eindeutig.

LU-Zerlegung in MATLAB In MATLAB erfolgt eine LU-Zerlegung einer MatrixA mit dem Befehl lu(A). Je nach Anzahl der Ausgabeargumente erhält man unterschied-liche Antwortmatrizen.

>>[L,U,P] =lu(A)Mit Hilfe von 3 Ausgabeargumenten erhält man die untere Dreiecksmatrix L, die obereDreiecksmatrix U sowie die Permitationsmatrix P. Es gilt dann PA = LU.

>>[L,U] =lu(A)Hier bekommt man die obere Dreiecksmatrix U und die verallgemeinerte DreiecksmatrixL. A = LU.

>>Y=lu(A)Man findet im oberen Teil der Matrix Y die obere Dreiecksmatrix U wieder und unter derHauptdiagonalen die untere Dreiecksmatrix L ohne Hauptdiagonale als Untermatrizen.Deswegen ist Y = U+L-eye(size(X)), wenn [L,U,P] = lu(X) gilt.

45

Page 49: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.3 Lineare Gleichungssysteme: Direkter und iterativer Löser

4.3.3 Iterative Verfahren zur Lösung linearer Gleichungssysteme

Die direkten Verfahren stellen bei einer kleinen Anzahl von Unbekannten oftmals eineeffiziente Vorgehensweise dar. Iterative Methoden lösen ein lineares System dadurch, dasssie mit einem Startpunkt beginnen und diesen solange sukzessiv verbessern, bis die ge-wünschte Genauigkeit erreicht ist. Theoretisch müssen unendlich viele Iterationsschrittedurchgeführt werden. In der Praxis aber hört man auf, sobald das Residuum ‖b − Ax‖oder ein anderes Fehlermaß klein genug ist.MATLAB stellt eine Reihe von Verfahren zur iterativen Lösung linearer Gleichungssyste-me zur Verfügung. Wir werden nun einige wichtige Verfahren durchgehen, die alle - imGegensatz zum Jacobi oder Gauss-Seidel Verfahren - für allgemeine quadratische Matri-zen funktionieren. Alle diese Methoden basieren sich auf die Methode der konjugiertenGradienten.

Die Methode der konjugierten GradientenDie Methode der konjugierten Gradienten basiert auf Ideen der mathematischen Opti-mierung. Sie ist anwendbar auf lineare Systeme mit symmetrischen und positiv definitenMatrizen. In exakter Arithmetik konvergiert das Verfahren in einer endlichen Anzahl vonSchritten. Aufgrund von Rundungsfehlern auf dem Computer muss die Methode jedochals ein iteratives Verfahren betrachtet werden.

Algorithmus zur Lösung des GS Ax = bIst x0 der Startpunkt und p0 = r0 = b−Ax0, dann wiederholt man für k =0,1,... folgendeSchritte bis Konvergenz eintritt:

1. αk =rTk rk

pTk Ask

(Schrittweite)

2. xk+1 = xk + αkpk (Approximierte Lösung, Iterierte)

3. rk+1 = rk − αkApk (Residuum)

4. βk+1 =rTk+1rk+1

rTk rk

5. pk+1 = rk+1 + βk+1pk (Schrittrichtung)

Verfahren für reguläre MatrizenZunächst definieren wir uns ein Beispiel-Gleichungssystem und zwar eins, das sehr schlechtkonditioniert istA = [0.7800.563; 0.913 0.659];b = [0.217; 0.254];cond(A,2)Die exakte Lösung dieses Systems ist [1; -1]. Wir stellen jetzt cg- basierte Verfahren dar.Im Einzelnen sind diesbicgstab - „stabilisiertes bikonjugiertes Gradientenverfahren “

46

Page 50: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Kapitel 4. Einfache numerische Algorithmen mit MATLAB

cgs -„quadriertes konjugiertes Gradientenverfahren “bicg-„bikonjugiertes Gradientenverfahren“gmres - „verallgemeinertes Minimalresiduumsverfahren“Bei dem ersten Beispiel, dem ´´bicgstab´´ Verfahren, betrachten wir genauer, welche Pa-rameter angegeben werden können. Alle Verfahren haben die gemeinsame Eigenschaft,dass sie verschiedene Abbruchkriterien verwenden. Nach Abbruch des Verfahrens wirdausgegeben, aus welchem Grund die Iteration beendet wurde.1) Abbruch bei erreichter gewünschter Genauigkeit: Hier wird für eine vorgegebene To-leranz ´´tol´´ so lange iteriert, bis das relative Residuum ‖Ax − b‖/‖b‖ < tol (für die2-Norm) ist. Der Vorteil dieses Verfahrens liegt darin, dass sich der Fehler in der Lösungdann aus der Kondition der Matrix A abschätzen lässt. Die gewünschte Genauigkeit istmit 10−6 voreingestellt.2) Abbruch nach maximaler Anzahl an Iterationen: Wenn eine maximale Anzahl vonIterationen erreicht ist, wird das Verfahren in jedem Fall abgebrochen, auch wenn diegewünschte Genauigkeit noch nicht erreicht ist. Die maximale Anzahl der Iterationen istmit n (=Dimension des Problems) voreingestellt.3) Abbruch bei Stagnation: Wenn sich das Residuum nicht mehr verbessert, wird ebenfallsabgebrochen, auch wenn die gewünschte Genauigkeit noch nicht erreicht ist.Wir illustrieren nun die verschiedenen Abbruchkriterien. Beachte: Die Anzahl der Itera-tionen, die nach dem Abbruch angegeben wird, kann ein nichtganzzahliger Wert sein, daviele Verfahren mehrstufige Iterationsschritte durchlaufen, die nach einem Teildurchlaufabgebrochen werden können. Wir rufen das Verfahren zunächst ohne weitere Paremeterauf.>> bicgstab(A,b) input(’druecke RETURN’)Hier tritt nun ein Abbruch wegen erreichter maximaler Anzahl der Iterationen auf. Alsoptionale Parameter können nun die Toleranz als drittes Argument und die maximale An-zahl der Iterationen als viertes Argument angegeben werden. Wir erhöhen nun die Anzahlder Iterationen und belassen die Toleranz bei dem voreingestellten Wert 1e-6.>>bicgstab(A,b,1e-6,20) input(’druecke RETURN’)Hier tritt ein Abbruch bei erreichter Genauigkeit ein, das Ergebnis ist aber noch nichtzufriedenstellend, da A schlecht konditioniert ist. Wir erhöhen also die gewünschte Tole-ranz:>>bicgstab(A,b,1e-10,20) input(’Druecke RETURN’)Jetzt kann man mit dem Ergebnis zufrieden sein. Wir verwenden jetzt den gleichen Aufruffür andere Verfahren>>cgs(A,b,1e-10,20) input(’Druecke RETURN’)>>bicg(A,b,1e-10,20) input(’Druecke RETURN’)>>qmr(A,b,1e-10,20) input(’Druecke RETURN’)Eine Ausnahme macht das gmres-Verfahren, das eine verschachtelte Iteration verwendet.Hier muss als dritter Parameter die maximale Anzahl der Schritte der inneren Iterationangegeben werden.>>gmres(A,b,3,1e-10,20) input(’Druecke RETURN’)Welches Verfahren für welche Problemklasse am angemessensten ist, hängt stark vombetrachteten Problem ab.

47

Page 51: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

4.3 Lineare Gleichungssysteme: Direkter und iterativer Löser

48

Page 52: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Literaturverzeichnis

[DR05] F.-J. Delvos, H.-J. Reinhardt, Numerik I, Skript, Universität Siegen, August 2005.

[GW00] G. Gramlich, W. Werner, Numerische Mathematik mit Matlab: eine Einführungfür Naturwissenschaftler und Ingenieure, dpunkt-Verlag, 2000.

[MF99] J. H. Mathews, K. D. Fink, Numerical Methods using MATLAB, Prentice Hall,1999.

[Mat05a] Matlab: Mathematics, The MathWorks, Natick, MA, USA, 2005. ht-pp://www.mathworks.de

[Mat05b] Matlab: Graphics, The MathWorks, Natick, MA, USA, 2005. ht-pp://www.mathworks.de

[Mat05c] Matlab: Programming, The MathWorks, Natick, MA, USA, 2005. ht-pp://www.mathworks.de

[Mol04] C. Moler, Numerical Computing with MATLAB, SIAM, 2004.

[Pla00] R. Plato, Numerische Mathematik kompakt, Vieweg, Wiesbaden, 2000.

[SH82] F. Stummel, K. Hainer, Praktische Mathematik, B.G. Teubner, Stuttgart, 1982.

49

Page 53: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

Stichwortverzeichnis

Algorithmus, 19

Callback, 31

Datentyp, 8

Fehlerabsoluter, 21relativer, 21Datenfehler, 21Rechenfehler, 21Rundungsfehler, 23

FileFunktion-File, 15Script-File, 14

findobj, 33flop, 25for, 10Format

double-Format, 5MATLAB-Format, 14Zahlenformat, 5ASCII-Format, 14

Funktionvon Funktionen

eval, 16feval, 16inline, 17

von Vektoren und Matrizen, 16

Gauss-Algorithmus, 44get, 33Gleitpunktsystem, 22Gleitpunktzahl

Basis, 22Exponent , 22Mantisse, 22

Grafik

2D-Grafik, 113D-Grafik, 12Funktionsgraph im R2, 12Funktionsgraph im R3, 13

GUI, 27Gui Element

Axes, 29, 33Button Group, 30Edit Text, 29Panel, 29Push Button, 28Radio Button, 28Static Text, 29

Handles, 32help, 4helpdesk, 4helpwin, 4

IEEE, 5IEEE-Standard, 23if, 10

KDE, 3Koctave, 3Kommentar, 4Kondition, 21Kontraktion, 40Konvergenzgeschwindigkeit, 40, 41

Lapack, 3linspec, 11lookfor, 4LU-Zerlegung, 45

Maschinengenauigkeit, 23Matrix, 2, 7meshgrid, 13Methode

50

Page 54: Matlab-Praktikum zur Numerik - Universität Siegen · PDF fileMatlab-Praktikum zur Numerik Sommersemester 2007 M.Sc. Ivan Cherlenyak Prof. Dr. Hans-Jürgen Reinhardt Fachbereich Mathematik

STICHWORTVERZEICHNIS

Bisektions-Methode, 38Methode der konjugierten Gradienten,

46Methode der sukzessiven Approximati-

on, 40Newton-Verfahren, 41Sekantenmethode, 42

Nullstelle, 38

Octave, 3Operation

logische, 9Standardoperation, 5elementweise Operation, 8

Ordnung des Algorithmus, 24Ordnungskonstante, 24

plot, 11Polynom

Horner-Schema, 35Polynome in Matlab, 37

Property Inspektor, 30Prototyp, 2

set, 33Simulink, 2Steuerstruktur

Schleife, 9Sprunganweisung, 10Verzweigung, 10

switch, 10

Toolbox, 2

Variable, 5Vector, 6Visualisierung, 1, 10

while, 10

51