81
Wissenschaftliches Rechnen – Grundlagen (Studienjahr 2015/2016) Stefan Brechtken Skriptum basierend auf den Skripten von Doz.Dr.habil. Werner Vogt Technische Universität Ilmenau FG Numerische Mathematik und Informationsverarbeitung 98684 Ilmenau, Germany e-mail: [email protected] Kapitel 3 Teil 1 Programmierung mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen 2015/2016 14. Oktober 2015

Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Wissenschaftliches Rechnen – Grundlagen(Studienjahr 2015/2016)

Stefan BrechtkenSkriptum basierend auf den Skripten von Doz.Dr.habil. Werner Vogt

Technische Universität IlmenauFG Numerische Mathematik und Informationsverarbeitung

98684 Ilmenau, Germany

e-mail: [email protected]

Kapitel 3 Teil 1Programmierung

mit MATLAB

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016

14. Oktober 2015

1

Page 2: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Eine Sprache erlernt man nur,wenn man in ihr spricht –

eine neue Programmiersprache lernt man nur,wenn man in ihr Programme schreibt.

∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗

(frei nach B. Kernighan und D. Richie)

Das ursprüngliche Scriptum entstand 2007 - 2012 während der Vorle-sungen zu “Algorithmen und Programmierung“ und “Grundlagen desWissenschaftlichen Rechnens“. Diese Version wurde dem Vorlesungsstoff“Grundlagen des Wissenschaftlichen Rechnens” angepasst und verkürzt.Den Urheberretsansprüchen des Originals entsprechend ist dieser Teilausschließlich für den individuellen Gebrauch der Studierenden an derTechnischen Universität Ilmenau bestimmt.Es ist einschließlich aller seiner Teile urheberrechtlich geschützt. JedeVerwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes,insbesondere jegliche kommerzielle Nutzung, ist unzulässig und straf-bar. Das gilt besonders für Vervielfältigungen, Übersetzungen, Mikro-verfilmungen und die Einspeicherung und Verarbeitung in elektronischenSystemen.

Page 3: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Inhaltsverzeichnis

3 Matlab 13.1 Datentypen in Matlab . . . . . . . . . . . . . . 4

3.1.1 Grundlegende Sprachelemente . . . . . . . . 43.1.2 Vordefinierte skalare Standardtypen . . . . . 43.1.3 Arithmetische Ausdrücke . . . . . . . . . . . 7

3.2 Programme in Matlab . . . . . . . . . . . . . . 83.2.1 Deklaration und Aufruf eines Script-Files . . . 83.2.2 Mathematische Standardfunktionen in Matlab . 11

3.3 Bedingte Anweisungen (Selektion) . . . . . . . 133.3.1 Bedingungen . . . . . . . . . . . . . . . . 133.3.2 Einseitige if-Anweisung . . . . . . . . . . . 143.3.3 Zweiseitige (vollständige) if-Anweisung . . . . 143.3.4 Mehrseitige if-Anweisung . . . . . . . . . . 153.3.5 Switch-Anweisung (Auswahlanweisung) . . . . 16

3.4 Zyklusanweisungen (Repetition) . . . . . . . . 173.4.1 While–Anweisung . . . . . . . . . . . . . . 173.4.2 For–Anweisung . . . . . . . . . . . . . . . 19

3.5 Prozedurale Programmierung . . . . . . . . . . 203.5.1 Funktionsdeklaration und –definition . . . . . 203.5.2 Funktionsaufruf . . . . . . . . . . . . . . . 22

3.6 Lokale und globale Objekte . . . . . . . . . . . 283.6.1 Lokale Programmobjekte . . . . . . . . . . 283.6.2 Globale Programmobjekte . . . . . . . . . . 303.6.3 Geschachtelte Funktionen . . . . . . . . . . 31

3.7 Felder (arrays) . . . . . . . . . . . . . . . . . . 33

3

Page 4: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 4

3.7.1 Feldkonstruktion . . . . . . . . . . . . . . 333.7.2 Operationen auf Feldern . . . . . . . . . . . 353.7.3 Feld–Manipulation . . . . . . . . . . . . . 36

3.8 2-dimensionale Grafik mit Feldern . . . . . . . 383.8.1 Das Plot-Kommando . . . . . . . . . . . . 383.8.2 Weitere 2D–Plots . . . . . . . . . . . . . 40

3.9 Algorithmen auf Zeichenketten . . . . . . . . . 413.9.1 Zeichenketten-Definition und -Verarbeitung . . 413.9.2 Datum und Uhrzeit . . . . . . . . . . . . . 44

3.10 Algorithmen auf mehrdimensionalen Feldern . 463.10.1 Feldkonstruktion und Feldallozierung . . . . . 463.10.2 Feldmanipulation und höherdimensionale Felder 49

3.11 Matrizen und lineare Systeme . . . . . . . . . 503.11.1 Arithmetik auf Matrizen . . . . . . . . . . . 503.11.2 Lineare Gleichungssysteme . . . . . . . . . . 513.11.3 Beschleunigung aller Algorithmen . . . . . . 53

3.12 3-dimensionale Grafik . . . . . . . . . . . . . . 533.12.1 Raumkurvendarstellung (plot3) . . . . . . . . 533.12.2 Gitter- und Flächendarstellungen . . . . . . . 54

3.13 Rekursive Algorithmen . . . . . . . . . . . . . 563.13.1 Direkte und indirekte Rekursivität . . . . . . 573.13.2 Abarbeitungsprinzip rekursiver Funktionen . . 573.13.3 Terminiertheit rekursiver Funktionen . . . . . 613.13.4 Entwurfsprinzipien rekursiver Algorithmen . . . 61

3.14 Algorithmen auf Strukturen und Dateien . . . 643.14.1 Algorithmen auf Strukturen (struct) . . . . . 643.14.2 Felder von Strukturen . . . . . . . . . . . . 66

3.15 Algorithmen auf Dateien (file) . . . . . . . . . 673.15.1 Diary-Files und Script-Files in Matlab . . . 69

Page 5: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 0

3.15.2 Schreiben/ Lesen von Binärdateien . . . . . . 693.15.3 Schreiben/ Lesen von ASCII-Textdateien . . . 71

3.16 Symbolische Algorithmen und Grafik . . . . . . . . . 723.16.1 Computeralgebra-Systeme . . . . . . . . . . 73

Page 6: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Kapitel 3

Matlab

Was ist Matlab?• Matlab = Matrix Laboratory ist ein multifunktionales Pro-

grammsystem der Firma Mathworks (www.mathworks.com)• Matlab besitzt eine imperative Programmiersprache zur struktu-

rierten und zur prozeduralen Programmierung. Abstrakte Datenty-pen lassen sich generieren.

• Matlab arbeitet als Interpretersystem, wobei Compilation möglichist. Die Grundfunktionen liegen als schneller Code compiliert vor.

• Matlab ist anwendungsorientiert und wird weltweit von Tausen-den von Ingenieuren (ET, MB, Regelungstechnik, Werkstofftechniketc.) und Naturwissenschaftlern erfolgreich in der Praxis eingesetzt.

Toolboxen von Matlab (Auswahl)• Symbolic Math Toolbox – symbolisches Rechnen (CAS)• Optimization Toolbox – lin. und nichtlin. Optimierung• Partial Differential Equation Toolbox – Näherungslösung PDGLn

• Curve Fitting Toolbox – Approximation von Datenpunkten• Statistics Toolbox – statistische Daten-Analyse

• Signal Processing Toolbox – digitale Signalverarbeitung• Wavelet Toolbox – Signal- und Bildverarbeitung mit Wavelets• Image Processing Toolbox – digitale Bildverarbeitung

1

Page 7: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 2

• Video and Image Processing Blockset – Videoverarbeitung• Financial Toolbox – finanzmathematische Analysen• Financial Derivatives Toolbox – equity and fixed-income derivatives

Analysen• Parallel Computing Toolbox – Parallelverarbeitung auf Multicore-

Computern und Computer-Clustern

Erweiterungen von Matlab (Auswahl)• Simulink – Simulation und Analyse dynamischer Systeme• SimMechanics – Modellierung und Simulation mechanischer 3D-

Systeme mit Animation• Stateflow – Design-Umgebung zur Entwicklung von Flussdiagram-

men, automatische Generierung von C CodeWeitere Infos: www.mathworks.com/products

Integrierte Entwicklungsumgebung (IDE) von Matlab• Benutzeroberfläche (konfigurierbar) mit

1. Kommandofenster (Command Window)2. Aktuelles Verzeichnis (Current Directory)3. Speicherbelegung (Workspace)4. Kommando-Historie (Command History)5. Menü- und Symbolleiste6. Startpfad (Launch Pad)

• Texteditor (konfigurierbar) mit1. Syntax-Hervorhebung (Highlighting), Nummerierung2. Debugger zur schnellen Fehlersuche

• Hilfesystem mit1. ausführlichem Matlab -Tutorial

Page 8: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 3

2. Referenz aller Funktionen und Eigenschaften3. Stichwort-Suche und Erläuterung

• Grafiksystem (leicht programmierbar) mit1. Grafikfenstern für 2D- und 3D-Grafiken2. Grafikeditor (Property Editor)3. umfangreiche Visualisierungsfunktionen4. GUIDE zur Schaffung grafischer Nutzeroberflächen (GUIs)

Alternative zu Matlab: GNU Octave

• gleicher Grundfunktionsumfang wie Matlab, gleiche Syntax

• vielzahl von Toolboxen (nicht vergleichbar mit Matlab)

• auf allen Plattformen verfügbar, open source und kostenlos

• ab Version 3.8 mit zu Matlab ähnlicher Grafikoberfläche

• https://www.gnu.org/software/octave/ =⇒ Downloads

• weitere Pakete für spezifische Aufgabenhttp://octave.sourceforge.net/index.html

• Übungsaufgaben können mit Octave gelöst werden, solange auf Syn-taxkompatibilität geachtet wird!

Page 9: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 4

3.1 Datentypen in Matlab

3.1.1 Grundlegende Sprachelemente

Alphabet (Grundsymbole) :

⟨Buchstabe⟩ ::= A|B|C|...|Z|a|b|c|...|y|z⟨Ziffer⟩ ::= 0|1|2|3|4|5|6|7|8|9

⟨Sonderzeichen⟩ ::= +| − | ∗ | = | < | > | . . . |⟨Schlüsselwort⟩⟨Grundsymbol⟩ ::= ⟨Buchstabe⟩|⟨Ziffer⟩|⟨Sonderzeichen⟩

Hinweis: Matlab unterscheidet zwischen Groß- und Kleinbuchstaben,es ist “case sensitiv“!

Wichtige Zeichen:• Semikolon (;) dient der Unterdrückung der Ausgabe!• Prozentzeichen (%) leitet eine Kommentarzeile ein!• 3 Punkte (...) dienen der Fortsetzung einer Eingabezeile!• Wo 1 Leerzeichen stehen kann, dürfen beliebig viele stehen!

3.1.2 Vordefinierte skalare StandardtypenEin Datentyp definiert die Art der Werte, die eine Variable annehmenkann. Jede Variable in einem Programm muß genau einem Datentyp zu-geordnet werden. Das geschieht im allg. durch eine Wertzuweisung.Matlab unterscheidet skalare Datentypen und strukturierte Datenty-pen. Letztere werden aus den skalaren Typen aufgebaut.

Page 10: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 5

Standard-Datentypen:1. Gleitpunkt-Typen (float-Typen) für reelle und komplexe Zahlen:

double, single

2. Ganzzahl-Typen (integer-Typen)für ganze und nat. Zahlen:int8,uint8,int16,uint16,int32,uint32,int64,uint64

3. Logik-Typ (Boolscher Typ) für logische Wahrheitswerte:logical mit Werten false, true (1 Byte)

4. Charakter-Typ für alphanumerische Zeichenketten:'kette' mit Werten gemäß ASCII-Code (2 Bytes pro Zeichen)

ANSI/IEEE - Standard 754 zur Gleitpunktarithmetik

Zahlenformate : single single double doubleextended extended

Wortbreite 32 Bit ≥ 43 Bit 64 Bit ≥ 79 Bit4 Byte ≥ 6 Byte 8 Byte ≥ 10 Byte

Mantissenbreite 24 Bit ≥ 32 Bit 53 Bit ≥64 BitExponentenbreite 8 Bit ≥ 11 Bit 11 Bit ≥15 Bithidden bit ja undefiniert ja undefiniertbias 127 undefiniert 1023 undefiniert

max. Exponent +127 ≥ +1023 +1023 ≥ +16383min. Exponent −126 ≤ −1022 −1022 ≤ −16382

Dezimalstellen 6.9 − 7.2 ≥9.3 − 9.6 15.6 − 15.9 ≥18.9 − 19.2

größte Zahl 3.4 ∗ 10+38 ≥1.7 ∗ 10+308 1.7 ∗ 10+308 ≥1.1 ∗ 10+4932

kleinste norm. Zahl 1.2 ∗ 10−38 ≤2.3 ∗ 10−308 2.3 ∗ 10−308 ≤3.4 ∗ 10−4932

kl. denorm. Zahl 1.5 ∗ 10−45 ≤1.7 ∗ 10−317 5.0 ∗ 10−324 ≤3.7 ∗ 10−4951

Page 11: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 6

Ganzzahl-Typen für ganze und natürliche Zahlen:

ML- Vor- Anz. Wertebereich GNU-Typ Zeichen Bytes Pascal

uint8 nein 1 0 .. 28 − 1 Byteuint16 nein 2 0 .. 216 − 1 ShortWorduint32 nein 4 0 .. 232 − 1 Worduint64 nein 8 0 .. 264 − 1 LongWord

int8 ja 1 −27 .. 27 − 1 ByteIntint16 ja 2 −215 .. 215 − 1 ShortIntint32 ja 4 −231 .. 231 − 1 Integerint64 ja 8 −263 .. 263 − 1 LongInt

Hinweise zur Nutzung von Datentypen:• double ist der wesentlichste Datentyp, in dem standardmäßig alle

Rechengrüßen dargestellt und verarbeitet werden!• Für single, int*, uint* stehen nur wenige Operationen zur

Verfügung; int64, uint64 sind reine Speicherkategorien!• Logische Variablen können nur die Werte 0 (false) und 1 (true) an-

nehmen!• Zeichenketten (strings) sind Felder vom Typ char!

Page 12: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 7

3.1.3 Arithmetische Ausdrücke

Variablen:• Name besteht aus maximal 63 lat. Buchstaben, Ziffern, _ , erstes

Zeichen ist ein Buchstabe (siehe Bezeichner)• keine Deklaration, Speicher Allokation bei Definition• Datentyp kann explizit festgelegt werden (standard ist double)• Freigabe mit clear, Anweisungssequenz mit ; , ...

Wertzuweisungen / Definition:• Syntax

⟨Variablenname⟩ = ⟨Ausdruck⟩⟨Variablenname⟩ = ⟨Datentyp⟩(⟨Ausdruck⟩)

• Einsicht in Speicherverwendung mittels whos

Aritmetische Operatoren und Ausdrücke:Der Verknüpfung arithmetischer Variablen dienen folgende Operatoren:

Operator Operation Bedeutung Auswertung

() (x) Prioritätsveränderung 1^ x ^ y Potenzierung xy 2- - x Negation −x 3+ + x Vorzeichen +x 3* x * y Multiplikation x ∗ y 4/ x / y Division x/y 4\ x \ y Division y/x 4+ x + y Addition x + y 5- x - y Subtraktion x − y 5

Page 13: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 8

Hinweis: Operatoren mit gleicher Priorität werden von links nach rechtsabgearbeitet (Linksassoziativität). Mittels Klammerung können diese Prio-ritäten durchbrochen werden.

3.2 Programme in Matlab

Ein Programm ist eine geordnete oder strukturierte Menge von Anwei-sungen zur Abarbeitung eines Algorithmus. Ein Computerprogramm istdie Formulierung eines Algorithmus in maschinell abarbeitbarer Form. InMatlab entspricht dem im Wesentlichen das sogenannte Script-File.

3.2.1 Deklaration und Aufruf eines Script-Files

Ein Script-File ist eine Anweisungsfolge, die mit bel. Editor erstellt wirdund als ASCII-Datei unter ⟨Name⟩. m abgespeichert wird.

Kommentare: Zur Dokumentation sollen Kommentare nach % no-tiert werden. Die ersten Kommentarzeilen dienen der Hilfe. Ausgabe bei

help ⟨Name⟩ oder doc ⟨Name⟩Programmaufruf:• Er erfolgt mittels des Namens ⟨Name⟩.• Das Script kann auf alle im Workspace befindlichen Objekte (des

aufrufenden Programmes) zugreifen.• Alle berechneten Größen stehen auch nach Abarbeitung im Works-

pace zur Verfügung.

Page 14: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 9

Eingabeanweisung (input-Anweisung):• Syntax: ⟨Variable⟩ = input( ′⟨Eingabeprompt⟩′);

⟨Variable⟩ = input( ′⟨Eingabeprompt⟩′, ′s ′);

• Wirkung:1. Form: Ausgabe von ⟨Eingabeprompt⟩ und Wartezustand (pause);eingegebener Wert wird (nach Enter) der ⟨Variable⟩ zugewiesen.2. Form: Zuweisung einer Zeichenkette (′s′ wie string)

Einfache Ausgabeanweisung (disp-Anweisung):• Syntax: disp(⟨Variable⟩) oder disp( ′⟨String⟩′)• Wirkung: Ausgabe von ⟨Variable⟩ bzw. des Textes aus

disp( ′⟨String⟩′) ohne Variablennamen im gesetzten Format!

Kommando Beschreibung

format short Festpunkt, 5 Dezimalstellen (Default)format long Festpunkt, 15 Dezimalstellenformat wie format short (Default)format short e Gleitpunkt, 5 Dezimalstellenformat long e Gleitpunkt, 15 Dezimalstellenformat short g Fest- oder Gleitpunkt, 5 Dezimalstellenformat long g Fest- oder Gleitpunkt, 15 Dezimalstellen

format hex Hexadezimal-Formatformat ’+’ Symbole +, - und Leerzeichen gedrucktformat bank Festpunkt für Dollars und Centsformat rat Approximation durch rationale Zahl

format compact Unterdrückung von Leerzeilenformat loose Einfügen von Leerzeilen

Page 15: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 10

Ausgabe formatierter Daten (fprintf-Anweisung):1. Syntax: fprintf(⟨Format-String⟩, ⟨Arg1⟩, ⟨Arg2⟩, . . .)

fprintf( 1 , ⟨Format-String⟩, ⟨Arg1⟩, ⟨Arg2⟩, . . .)

2. Wirkung: ⟨Format-String⟩ enthält Umwandlungs-Spezifikationen(wie in der Sprache C). Damit wird beschrieben, wie jedes Argument⟨Arg1⟩, ⟨Arg2⟩, . . . auszugeben ist.• Umwandlungs-Spezifikationen: % w . p c mit

– Feldbreite w (max. Zahl der Zeichen)– Zahl der Stellen nach dem Dezimalpunkt p (optional)– Umwandlungstyp c

• Wesentlichste Umwandlungstypen c sind:c Beschreibungc Einzelnes Zeichend Dezimalnotation (ganzzahlig, signed)u Dezimalnotation (ganzzahlig, unsigned)e, E Gleitpunktnotation (3.1415e+002)f Festpunktnotationg, G Kompaktere Darstellung von e oder fs Zeichenketten-Notationx, X Hexadezimal-Notation

• Spezielle Steuerzeichen in ⟨Format-String⟩ sind:

Zeichen Beschreibung\b Backspace\n Zeilenwechsel\t Tabulator horizontal%% Prozentzeichen

• Datei-Identifizierer: 1 = Bildschirm (optional)1

1Die Arbeit mit Dateien (I/O) wird in Kapitel 8 behandelt.

Page 16: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 11

3.2.2 Mathematische Standardfunktionen in Matlab

Aufruf Bedeutung Beispiele

abs(x) |x|sign(x) Signum: −1, 0,+1 sign(-2.4) ⇒ -1sqrt(x) √

x sqrt(-1) ⇒ 0 + 1.0000ipow2(x) 2x, x reell pow2(-2.4) ⇒ 0.1895exp(x) ex exp(i) ⇒ 0.5403 + 0.8415ilog(x) lnx, x > 0

log10(x) lgx, x > 0

log2(x) log2 x, x > 0

sin(x) sinx, Bogenmaß sin(pi/2) ⇒ 1cos(x) cosx, Bogenmaßtan(x) tanx, Bogenmaß tan(pi/2) ⇒ 1.6331e+016cot(x) cotx, Bogenmaß cot(0) ⇒ ans = Infasin(x) arcsinx asin(1) ⇒ 1.57079632679490acos(x) arccosxatan(x) arctanx

acot(x) arccot xsinh(x) sinhx

cosh(x) coshx

tanh(x) tanhx tanh(10) ⇒ 0.99999999587769coth(x) cothx coth(10) ⇒ 1.00000000412231asinh(x) asinh x

acosh(x) acosh x acosh(cosh(2)) ⇒ 2atanh(x) atanh x

acoth(x) acoth x acoth(1-i) ⇒ 0.4024 + 0.5536i

Page 17: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 12

Mathematische Standardfunktionen in Matlab (Auswahl):

Aufruf Bedeutung Beispiele

fix(x) Rundung in Richtung 0 fix(3.55) ⇒ 3floor(x) Rundung gegen −∞ floor(-3.55) ⇒ -4ceil(x) Rundung gegen +∞ ceil(-3.55) ⇒ -3round(x) Rundung zum nächsten Integer round(3.55) ⇒ 4mod(x,y) Ganzer Rest von x/y mod(41,17) ⇒ 7

abs(z) Absolutbetrag von z abs(-2i) ⇒ 2angle(z) Phasenwinkel von z angle(-2i) ⇒ -1.5708real(z) Realteil von z real(2+5i) ⇒ 2imag(z) Imaginärteil von z imag(2+5i) ⇒ 5conj(z) Konjugiert komplexes von z conj(2+5i) ⇒ 2 - 5i

Spezielle Variablen und Konstanten in Matlab (Auswahl):

Name Bedeutung Wert, Auftreten

ans Aktuelle Antwort ans = 2.6667why UNBEKANNT “The computer did it.“eps Rel. Gleitpunktgenauigkeit 2.220446049250313e-016realmax Größte pos. Gleitpunktzahl 1.797693134862316e+308realmin Kleinste pos. Gleitpunktzahl 2.225073858507201e-308Inf, inf Unendlich (∞) exp(1000) ⇒ InfNaN “Not-a-Number“ 0.0 / 0.0 ⇒ NaN

pi Kreiszahl 3.141592653589793e+000i, j Imaginäre Einheit

√−1

exp(1) Basis der nat. Logarithmen 2.718281828459046e+000

Page 18: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 13

Matlab besitzt strukturierte Anweisungen (Kontrollstrukturen):• Bedingte Anweisungen• Zyklusanweisungen

3.3 Bedingte Anweisungen (Selektion)

3.3.1 Bedingungen

If-Anweisungen führen das Programm in Abhängigkeit vom Wert einerBedingung aus, die die Form eines logischen Ausdruckes hat. Darin tretenVergleichsoperatoren und logische Operatoren auf.

Vergleichsoperatoren in Matlab:

Name Symbol Bedeutung Auswertungeq == gleich 7ne ∼= ungleich 7ge >= größer gleich 7gt > größer als 7le <= kleiner gleich 7lt < kleiner als 7

Logische Operatoren in Matlab:

Name Symbol Bedeutung Auswertungand & logische UND 8

&& logisches UND (short circuit) 10or | logisches ODER 9

|| logisches ODER (short circuit) 11not ∼ logisches NICHT 3xor exclusives ODER -any Partikularisator ∃ -all Generalisator ∀ -

Page 19: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 14

3.3.2 Einseitige if-Anweisung

Syntax: ⟨Einseitige if -Anweisung⟩ ::= if ⟨Bedingung⟩⟨Anweisungssequenz⟩

end

PAP: Struktogramm:

3.3.3 Zweiseitige (vollständige) if-Anweisung

Ausführung der Anweisungssequenz 1, falls die Bedingung erfüllt ist;andernfalls erfolgt die Ausführung der Anweisungssequenz 2.Syntax: ⟨Zweiseit. if -Anweisung⟩ ::= if ⟨Bedingung⟩

⟨Anweisungssequenz 1⟩else

⟨Anweisungssequenz 2⟩end

PAP: Struktogramm:

Page 20: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 15

3.3.4 Mehrseitige if-Anweisung

Wenn Anweisungssequenz 2 wiederum eine if-Anweisung enthält, wirdelse und if zu elseif zusammengezogen und es entstehen so 3 Alternati-ven. Beliebig viele weitere elseif-Zweige können nun folgen.Syntax: ⟨Mehrseit. if-Anweisung⟩ ::= if ⟨Bedingung 1⟩

⟨Anweisungssequenz 1⟩elseif ⟨Bedingung 2⟩

⟨Anweisungssequenz 2⟩elseif ⟨Bedingung 3⟩

⟨Anweisungssequenz 3⟩. . .

elseif ⟨Bedingung n-1⟩⟨Anweisungssequenz n-1⟩

else

⟨Anweisungssequenz n⟩end

PAP: Struktogramm:

Page 21: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 16

3.3.5 Switch-Anweisung (Auswahlanweisung)

Struktur der switch-Anweisung:

switch ⟨case-Ausdruck⟩case ⟨Selektor 1⟩

⟨Anweisungen 1⟩case ⟨Selektor 2⟩

⟨Anweisungen 2⟩. . .

otherwise

⟨Anweisungen n⟩end

Bem.: Stimmt der Wert des Case-Ausdruckes mit einem Selektor über-ein, so wird dieser Fall abgearbeitet und die switch-Anweisung beendet!Der otherwise-Fall entspricht dem else-Zweig und ist optional. Ein Se-lektor kann• ein Einzelwert <wert_1> oder• eine Liste von Einzelwerten (in geschweiften Klammern) sein:

{<wert_1>, <wert_2>, ..., <wert_n>}

Page 22: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 17

3.4 Zyklusanweisungen (Repetition)

3.4.1 While–Anweisung

Die while-Anweisung ist abweisend bzw. Kopfgesteuert.

Syntax: ⟨while-Anweisung⟩ ::= while ⟨ Bedingung⟩⟨Anweisungssequenz⟩

end

PAP: Struktogramm:

Nichtabweisende, fußgesteuerte while-Anweisung:Keine Kontrollstruktur vorhanden, Realisierung über logische “Flaggen”(Statusindikatoren) oder die break-Anweisung.• In if– und switch–Anweisungen beendet break diese Anweisung.• In while– und for–Schleifen beendet break diese (innere) Schleife.• Außerhalb von Anweisungen beendet break das Programm.

Syntax (flag): while 1 % 1 == true

⟨Anweisungssequenz 1⟩if ⟨ Bedingung⟩

break;

end

⟨Anweisungssequenz 2⟩end

Page 23: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 18

Syntax (break):flag = true;

while flag % 1 == true

⟨Anweisungssequenz⟩flag = ⟨ Bedingung⟩;

end

PAP: Struktogramm:

Page 24: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 19

3.4.2 For–AnweisungDie for-Anweisung (Laufanweisung, Zählschleife) nutzt man für Zyklen,die durch eine Laufvariable (Kontrollvariable) Lv gesteuert werden. DieseVariable durchläuft einen Laufbereich von einem Anfangswert Aw bis zueinem Endwert Ew mit einer Schrittweite Sw.

Syntax: ⟨for-Anweisung⟩ ::= for ⟨Laufvariable⟩ = ⟨Laufliste⟩⟨Anweisungssequenz⟩

end

⟨Laufliste⟩ ::= ⟨Aw⟩ : ⟨Ew⟩ | ⟨Aw⟩ : ⟨Sw⟩ : ⟨Ew⟩ |[Element1, . . . , Elementn] | . . .

Merke:• Der Schleifenkopf wird nur genau einmal ausgewertet.

• Die for-Anweisung ist abweisend, d.h. zuerst wird die Zulässigkeitder Laufvariablen geprüft!

Geschachtelte for–Anweisungen:Eine Zyklusanweisung kann komplett im Schleifenkörper einer anderenZyklusanweisung liegen (geschachtelte Zyklen). Die Schleifenkörper dür-fen dann einander nicht überschneiden. Geschachtelte for-Anweisungendürfen nicht ein- und dieselbe Laufvariable besitzen.

Page 25: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 20

3.5 Prozedurale Programmierung

Ziel: Universalität, UnabhängigkeitLösung: Unterprogramme (Prozeduren)

Definition 1 : Prozedur 2

Eine Prozedur ist eine Folge von Anweisungen (Aktionen), die einen insich abgeschlossenen Programmteil darstellt, der von einem anderen Pro-grammteil aus aufgerufen, d.h. ausgeführt werden kann. Eine Prozedurhat eine Schnittstelle, die ihren Namen, die zulässigen Eingabeobjekte(auch Argumente genannt) und das Resultat, d.h. die nach der Ausfüh-rung vorliegenden Resultatobjekte, spezifiziert. Bei jeder Funktion (func-tion) sind zu unterscheiden:• Deklaration (+ Definition, Vereinbarung der Funktion)• Aufruf (Aktivierung der Funktion)

3.5.1 Funktionsdeklaration und –definitionJede Funktion besteht aus dem Funktionskopf, gefolgt vom Funktionsblock.Eine Funktionsdeklaration kann (wie ein Script-File) mit bel. Editor er-stellt werden und ist als separate ASCII-Datei unter ⟨Name⟩.mabzuspeichern (deshalb auch: “M-File“).(a) FunktionskopfSyntax: ⟨Funktionskopf⟩ ::= function [⟨Rückgabeparameter⟩]

= ⟨Funktionsname⟩(⟨Eingangsparameter⟩)

⟨Rückgabeparameter⟩ ::= ⟨Variable⟩{, ⟨Variable⟩}⟨Eingangsparameter⟩ ::= ⟨Variable⟩{, ⟨Variable⟩}

2Rechenberg,P.; Pomberger,G.(Hrsg.): Informatik-Handbuch. 4. erw. Auflage. Hanser Verlag 2006

Page 26: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 21

Semantik:• Der Funktionsname darf im nachfolgenden Funktionsblock benutzt

werden ⇒ rekursive Funktion.• Eingangs- und/oder Rückgabeparameter können fehlen.

(b) FunktionsblockBesteht aus Anweisungssequenz, alle Kontrollstrukturen sind zulässig.Alle Eingangsparameter dürfen verwendet werden. Rückgabeparameterdürfen nach Definition wie Variablen verwendet werden.Hilfetext zu Funktionen: help <Funktionsname> bzw.

doc <Funktionsname>Auftretende Parameterarten:• Funktionsparameter = formale Parameter:

Eingangs- Rückgabeparameter, da die aktuellen Werte zum Zeit-punkt der Deklaration nicht bekannt sind, dienen sie als “Platzhalter“.

• Hilfsparameter = lokale Parameter:Alle Variablen die innerhalb der Funktion definiert werden und nichtim Funktionskopf stehen. Bei Verlassen der Funktion wird ihr Spei-cherplatz automatisch freigegeben.

Return–Anweisung:

Sie bewirkt den unmittelbarenRücksprung aus der Funktionin das aufrufende Programmbzw. in das Kommandofenster(im interaktiven Modus).

function y = f(x)...y = 0;if abs(x) > 1

returnend...

Page 27: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 22

3.5.2 FunktionsaufrufDer Funktionsaufruf aktiviert den Funktionsblock und überträgt ihm dieSteuerung des Programmablaufes. Dabei werden die formalen Parameterdurch aktuelle Parameter (Argumente) ersetzt.3

Funktionen können aufgerufen werden:• aus dem Kommandofenster, einem Programm, einer Funktion

Syntax des Funktionsaufrufes[⟨Rückgabeargumente⟩] = ⟨Funktionsname⟩(⟨Eingangsargumente⟩) |

⟨Funktionsname⟩ (⟨Eingangsargumente⟩)⟨Rückgabeargumente⟩ ::= ⟨Variable⟩{, ⟨Variable⟩}⟨Eingangsargumente⟩ ::= ⟨Ausdruck⟩{, ⟨Ausdruck⟩}

Semantik:• Eingabeargumente können Variablen, aber auch Ausdrücke (aus-

wertbar) und insbesondere Konstanten sein.• Funktionen können innerhalb von Ausdrücken aufgerufen werden.

Semantik:• Das erste Rückgabeargument ist das “Hauptresultat“ und kann di-

rekt verarbeitet werden.• Zuordnung der aktuellen Parameter dem entsprechenden Formalpa-

rameter der Reihenfolge nach zugeordnet.• Folge: Anzahl und Typen der Parameter sollten übereinstimmen,

Bezeichner hingegen können sich unterscheiden.

3Matlab übersetzt beim ersten Aufruf die Funktion in eine interne Form; weitere Aufrufe sind schneller.

Page 28: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 23

ParameterübergabeEine Variable kann benutzt werden, wenn sie

(a) einen Namen,(b) eine Speicheradresse und(c) einen Wert

besitzt. Formale Parameter besitzen anfangs jedoch nur Namen undAdresse. In imperativen Sprachen sind 2 Mechanismen der Wertvermitt-lung üblich:

(a) Referenzaufruf (Namensaufruf, call by name)

• nicht vorgesehen

• Hinweis: mittels libpointer sehr eingeschränkt möglich.

(b) Wertaufruf (call by value)• Realisierung:

– Automatische Bildung einer lokalen Hilfsvariablen– Berechnung des Wertes des aktuellen Parameters und Zuwei-sung zur Hilfsvariablen

– Direkte Verwendung der Hilfsvariablen und ihres Wertes im Funk-tionsblock

• Bezeichnung: Wertparameter (hier: a, b, epsi)• Konsequenzen:

– Aktueller Parameter e kann eine Variable, Konstante oder einAusdruck sein

– Variablen des aufrufenden Programmes behalten ihren Wert; esfindet keine wertmäßige Veränderung statt

• Hinweis: Matlab benutzt stets Wertaufruf für alle Parameter!

Page 29: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 24

Frage: Wie werden transiente Parameter behandelt, die zugleich Ein-gangs- und auch Ergebnisparameter sind?

Variable Argumentzahl und optionale Parameter

Nicht übergebene Parameter dürfen nicht genutzt werden.Die optionale Verwendung von Formalparametern wird durch 2 Funktio-nen unterstützt:• nargin liefert im Funktionskörper die Zahl der Eingangsargumente,• nargout liefert im Funktionskörper die Zahl der Ergebnisargumente,

die im aktuellen Aufruf dieser Funktion benutzt werden.Anwendung von nargin und nargout:Abfrage der Werte und Besetzen der fehlenden Parameterwerte mitDefault-Werten.Hinweis:nargin und nargout sind parameterlose Funktionen; deshalb kann ihrWert nicht verändert werden (d.h. nargin = nargin+1 ist falsch).

Funktionsnamen als Parameter

Viele Sprachen gestatten auch Funktionsnamen als Formalparameter andie aufrufende Funktion bzw. ein Script-File zu übergeben.

Funktionszeiger (function handle):Hinter dem Namen f verbirgt sich die konstante Startadresse dieserFunktion. Variablen zur Aufnahme von Adressen werden als Zeigervaria-blen (Zeiger, pointer) bezeichnet. Matlab benutzt den Begriff “functionhandle“ (Funktionszeiger), der auch manipulierbar ist. Ein Wert einesFunktionszeigers wird mit @⟨Funktionsname⟩ bezeichnet.

Page 30: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 25

Auswertung des Funktionszeigers zur Funktionswert-Berechnung durchdirekten Aufruf:Syntax:

⟨Funktionszeiger⟩({⟨Funktionsparameter⟩} )

Semantik:Anzahl und Reihenfolge der Parameter muss mit den Variablen der Funk-tion f(var1, var2, . . . , varn) korrespondieren.

Hilfe zu Funktionszeigern: functions ( ⟨Funktionszeiger⟩ )

Anonyme Funktionen:Einfache (typischerweise mathematische) Funktionen können elegant undkurz innerhalb des Kommandofensters, von Skriptfiles und von Funkti-onsdefinitionen erklärt werden. Sie können beliebig viele Ein- und Aus-gabeparameter besitzen.Syntax:

⟨Fkt.name⟩ = @(⟨Eingangsp.⟩)[⟨Rückgabep.⟩]⟨Rückgabeparameter⟩ ::= ⟨Variable⟩{, ⟨Variable⟩}⟨Eingangsparameter⟩ ::= ⟨Variable⟩{, ⟨Variable⟩}

Semantik:Es wird eine Speicheradresse angelegt und Speicher alloziert. In die-sen Speicherbereich wird die anonyme Funktion abgespeichert und dieStartadresse wird dem Funktionszeiger zugewiesen. Die Funktion ist aus-schließlich über diesen Zeiger zu erreichen und ansonsten nicht vorhan-den (anonyme Funktion). Man kann nun mit diesem Funktionszeiger wiemit jedem anderen Funktionszeiger arbeiten.

Page 31: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 26

Bemerkung:Rückgabe von mehr als einem Parameter geschieht als eindimensionalesFeld, im Unterschied zu nicht anonymen Funktionen. Warum?

Die Matlab–Funktion fzerofzero basiert auf einem klassischen Algorithmus von T. Dekker mit Bi-sektions-, Sekanten-Verfahren und inverser quadratischer Interpolation(>> doc fzero).Hinweis: Prinzipien der ProgrammentwicklungBisher wurden einfache Probleme betrachtet, deren Algorithmierung,Programmierung, Implementierung und Erprobung durch 1 Person aus-geführt werden konnte.Bei umfangreichen Projekten ist jedoch eine Korrespondenz zwischenAuftraggeber, Programmentwickler und Programmnutzer erforderlich,um– die Struktur der Ein- und Ausgabedaten– die Struktur des Programmes und seiner Teileendgültig festzulegen.

Systematisierung des Entwicklungsprozesses:

(1) Anforderungsdefinition: Festlegung der Aufgabenstellung

(2) Problemanalyse: Algorithmierung wesentlicher Teilschritte

(3) Festlegung der logischen Programmstruktur (Schrittalg.)

(4) Entwicklung der physischen Programmstruktur

(5) Programmerprobung: Verifikation, Optimierung

(6) Programmanalyse: Alternativen und Aufwandsvergleiche

Page 32: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 27

Höhere transzendente Funktionen in Matlab (Auswahl):

Aufruf Bedeutung Bemerkung

gamma(x) Gammafunktion Γ(x), x reell Γ(n + 1) = n!

gammainc(x,a) Unvollständige Gammafunktion x, a reellgammaln(x) Logarithmus der Gammafkt.psi(k,x) Polygammafunktion

beta(z,w) Betafunktion B(z, w) z, w reell [s.u.]betainc(x,z,w) Unvollständige Betafunktion x ∈ [0, 1]

betaln(z,w) Logarithmus der Betafunktion

airy(k,z) Airy–Funktionen Ai und Bi k ∈ {0, 1, 2, 3}besselj(ν,z) Bessel-Funktionen 1. Art z komplex, ν reellbessely(ν,z) Bessel-Funktionen 2. Art z komplex, ν > 0

besselh(ν,k,z) Bessel-Funktionen 3. Art k ∈ {1, 2}besseli(ν,z) Modif. Bessel-Fktnen. 1. Art z komplex, ν reellbesselk(ν,z) Modif. Bessel-Fktnen. 2. Art z komplex, ν reell

expint(x) Exponentialintegral E1(x) x komplexellipj(u,m) Jacobi’sche ellipt. Fktnen. m ∈ [0, 1]

ellipke(m) Vollst. ellipt. Integral 1. und 2. Gattung

erf(x) Fehlerintegral (error function) x reell [s.u.]erfc(x) komplementäres Fehlerintegral x reellerfinv(x) inverses Fehlerintegral x ∈ [−1, 1]

erfcinv(x) inverses kompl. Fehlerintegral x ∈ [0, 2]

Beispiele:

B(z, w) =

1∫0

xz−1 (1−x)w−1 dx, erf(x) =2

π

x∫0

e−t2 dt

Page 33: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 28

3.6 Lokale und globale Objekte

3.6.1 Lokale ProgrammobjekteDer Programmblock besteht - wie der Funktionsblock - aus einer Anwei-sungssequenz, die in dieser natürlichen Reihenfolge abgearbeitet wird.Auf die in einem Block vereinbarten Datenobjekte kann man innerhalbdieses Blockes zugreifen, man kann sie verarbeiten. In Matlab mussman jedoch zwischen Script-Files und Function-Files unterscheiden:

• Blöcke von Script-Files bilden keinen eigenen Vereinbarungsblock:Das Script kann auf alle Objekte der Umgebung zugreifen und diesewiederum auf alle im Script eingeführten Objekte. Alle befinden sichim Workspace von Matlab , z.B. auf oberstem Niveau (1).

• Jeder Funktionsblock eröffnet ein neues Vereinbarungsniveau (2)mit eigenem Workspace. Matlab 7 gestattet auch die Deklarationvon Funktionen im Innern von Funktionsblöcken (sog. geschachtel-te Funktionen, nested functions) womit Vereinbarungsniveaus 3,4,…eröffnet werden können.

Prinzip der rationellen Speichernutzung:Zielsetzung der Blockstrukturierung: Allen Programmobjekten (Varia-blen, Funktionen etc.) ist nur so lange Speicherplatz zuzuweisen, wie siegebraucht werden!Lebensdauer eines Programmobjektes:Die Lebensdauer eines Objektes definiert den Zeitraum, in dem den Na-men im Speicher reale, physikalische Objekte zugewiesen sind. In Mat-lab unterscheiden wir• statische Objekte:4 Verfügbarkeit im Workspace von Matlab wäh-

rend der gesamten Matlab -Sitzung, betrifft Variablen auf Niveau1 sowie Funktionen im Suchpfad von Matlab

4Zur Unterscheidung von den expliziten globalen Objekten (global) wird hier dieser Terminus benutzt.

Page 34: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 29

• lokale Objekte: Zuweisung bei Eintritt in einen Funktionsblock und(“automatischer“) Verlust des Speicherplatzes bei Verlassen diesesBlockes; betrifft Variablen und Funktionen auf Niveaus 2,3,...

• globale Objekte: Verfügbarkeit aus allen Funktionen und Scripten,in denen diese Objekte explizit mit global benannt werden.

Hinweis: Imperative Sprachen (C, Pascal etc.) unterscheiden die statische, automati-sche und dynamische Speicherklasse. Laufzeit-Objekte mit dynamischer Lebensdau-er erfordern spezielle Aktionen zur Allozierung und Disallozierung von Speicherplatz.

Gültigkeitsbereich G eines Namens:Der Gültigkeitsbereich G ist derjenige Programmteil, in dem über denNamen auf das Objekt zugegriffen werden kann. Matlab legt fest:• Statische Objekte: im Kommandomodus und in allen direkt aufge-

rufenen Script-Files auf direkter Anweisungsebene (Niveau 1)• Lokale Objekte: G ist genau derjenige Funktionsblock B, in dem

der zugehörige Name auf direkter Anweisungsebene benutzt wird.Der Terminus “direkte Anweisungsebene“ schließt bei Funktionsaufrufenderen Blöcke aus.Sichtbarkeit eines Namens:Unter der Sichtbarkeit eines Namens versteht man denjenigen Teil seinesGültigkeitsbereiches, von dem aus ein zulässiger Zugriff auf das Objektmöglich ist. Das Auftreten eines doppelten Bezeichners unterbricht dieSichtbarkeit, die erst wieder eintritt, wenn der Gültigkeitsbereich desdoppelten Namens endet.

Page 35: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 30

3.6.2 Globale Programmobjekte

Zugriff aus unterschiedlichen Funktionen auf ein-und-dieselbe Variablewird durch die explizite Deklaration mit global möglich.Syntax der global-Deklaration:

global ⟨Name⟩ | global ⟨Name⟩ {⟨Name⟩}

Semantik:Bei der ersten global-Deklaration wird eine Variable ⟨Name⟩ im “globalenWorkspace“ angelegt. Bei jeder weiteren global-Deklaration dieser Va-riablen wird im “lokalen Workspace“ der betreffenden Funktion eine Re-ferenz auf die globale Variable angelegt.

Empfehlungen:• Die Benutzung globaler Objekte innerhalb von Funktionen sollte im

Interesse der Klarheit und Universalität weitgehend vermieden wer-den.

• Mitunter macht der - sparsame - Einsatz globaler Variablen jedochSinn, z.B. bei der Behandlung von Systemparametern (Konstanten)in Funktionen.

• Bei globalen Variablen sollte eine wertmäßige Veränderung innerhalbvon Funktionsblöcken möglichst unterbleiben.

Freigabe von Speicherplatz mit clear:Das Kommando clear gibt Speicherplatz von Variablen, Funktionen undKlassendefinitionen unmittelbar frei. Wesentliche Anwendungen sind:• clear all löscht alle lokalen und globalen Variablen, Funktionen und

MEX-Links (vgl. demosimpson.m u.a. Scripte).• clear löscht alle lokalen Variablen im jeweiligen Workspace.• clear global löscht physisch alle globalen Variablen.

Page 36: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 31

• clear var1 var2 ... löscht die angegebene Variablen.• clear global var1 var2 ... löscht diese globalen Variablen.

Hinweis: Falls var global ist, so entfernt clear var es vom aktuellenWorkspace, belässt es jedoch in allen Funktionen, die es als global de-klariert haben.

3.6.3 Geschachtelte Funktionen

Drei Varianten der Organisation eines Projektes:• Klassische Gliederung in separate functions• Gliederung mit subfunctions• Gliederung mit nested functions.

(a) Gliederung in separate functionsJede Function f und jedes Script s wird separat und i.allg. mit Dateina-men f.m bzw. s.m gespeichert.

(b) Gliederung mit SubfunctionsEine (Haupt-)Function f kann mehrere Subfunctions f1, f2, ..., fn besit-zen. Diese werden seriell im Function-File mit Dateinamen f.m definiert.

(c) Gliederung mit Nested functionsEine Function g kann ganz im Innern einer Function f definiert wer-den. g kann wiederum im Innern eine Function h enthalten usw. Diese“geschachtelten Funktionen“ (engl.: nested functions) werden im Func-tion-File mit Dateinamen f.m definiertMerke: Das Ende jeder Funktion ist nun mit dem Schlüsselwort end zukennzeichnen!

Page 37: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 32

Grundlegende DatenstrukturenBisher wurden die vordefinierten Datentypen• double, single (Gleitpunkttypen)• int8, int16, int32, int64,

uint8, unit16, uint32, uint64 (Speichertypen)• char (Zeichentyp)• logical (Logiktyp; in Matlab wird er nur simuliert)

für skalare Daten benutzt. Weitere (abstrakte) Datentypen können mitdem Klassenkonzept der objektorientierten Programmierung in Mat-lab selbst definiert werden.Datenstrukturen entstehen durch Zusammenfassung skalarer Daten zuAggregaten, die über einen Namen angesprochen und verarbeitet werdenkönnen.3 grundlegende Datenstrukturen:1. Felder (array) mit nummerierten (indizierten) Elementen ein- und

desselben beliebigen Basistyps2. Records (struct) mit benannten Datenfeldern (named fields) ver-

schiedener und beliebiger Datentypen3. Zellen (cell array) mit nummerierten (indizierten) Datenfeldern ver-

schiedener und beliebiger Datentypen.Zeichenketten (character strings) werden als Felder auf dem Basistypchar behandelt.

Page 38: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 33

3.7 Felder (arrays)

Definition 1 : Feld (array)

• Ein Feld ist eine aus einer festgelegten Anzahl von Komponentengleichen Typs bestehende Datenstruktur.

• Zugriff auf eine Komponente des Feldes erfolgt durch Angabe vonIndizes.

• Die Anzahl der Indizes zur Auswahl einer Komponente gibt dieDimension des Feldes an. Diese kann beliebig groß sein.

Felder (arrays) sind die häufigsten Datenstrukturen im Bereich mathe-matisch-naturwissenschaftlich-technischer Algorithmen. Die Festlegungder Strukur dieser Daten einschließlich des Speicherbedarfs (Allozierung)erfolgt in Matlab dynamisch (d.h. während der Abarbeitung). Felderkönnen dynamisch verändert bzw. disalloziert werden.

3.7.1 FeldkonstruktionSie kann durch Zusammenfassung mittels Klammern erfolgen. Kommatabzw. Leerzeichen wirken als Trennzeichen der Elemente. Syntax:

⟨Feldkonstruktion⟩ ::= [ Element1, Element2, . . . , Elementn ] |[ Element1 Element2 . . . Elementn ]

Semantik:• Die Anzahl n der Elemente ist die Länge des Feldes x. length(x) und

size(x) liefern diese Zahl n.• Mathematisch wird das Feld x als Zeilenvektor (row vector) bezeich-

net. Die Elemente werden in der Zeile ausgegeben.• Wird x als Spaltenvektor (column vector) gewünscht, so notieren wir

x’ (Zeichen für Transposition) bzw. benutzen anstelle des Kommasbei der Konstruktion das Semikolon.

Page 39: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 34

Konstruktion spezieller Felder:1. Laufbereich mit Schrittweiten-Angabe:

Anfangswert : Schrittweite : Endwert | Anfangswert : Endwert2. Linearer Laufbereich mit Anzahl der Werte:

linspace(Anfangswert, Endwert, Zahl der Werte)3. Logarithmischer Laufbereich mit Anzahl der Werte:

logspace(Anfangsexponent, Endexponent, Zahl der Werte)

Indizierte Variablen:Der Zugriff auf eine Feldkomponente erfolgt durch Angabe der dafürnötigen Indizes.Syntax: ⟨Feldvariable⟩ (⟨Index⟩) | ⟨Feldvariable⟩ (⟨Indexfeld⟩)

Semantik:• Index steht für eine einzelne Komponente. Der Ausdruck wird aus-

gewertet und die Komponente ausgewählt. end steht stets für dieletzte Komponente!

• Indexfeld kann nach bisherigen Regeln gebildet werden und steht fürein Teilfeld mit Werten im Indexbereich!

Page 40: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 35

3.7.2 Operationen auf Feldern

Arithmetik auf Feldern:• Skalar– Feld–Arithmetik: Addition, Subtraktion, Multiplikation, Di-

vision von Feld und Skalar• Feld–Feld–Arithmetik: Elementweise Verknüpfung durch Addition,

Subtraktion, Multiplikation oder Division, falls gleiche Feldlänge vor-liegt

Definition der Feld–Arithmetik:a = [a1, a2, . . . , an], b = [b1, b2, . . . , bn], c skalar

Operation ResultatSkalar–Addition a + c = [a1 + c, a2 + c, . . . , an + c]

Skalar–Subtraktion a − c = [a1 − c, a2 − c, . . . , an − c]

Skalar–Multiplikation a ∗ c = [a1 ∗ c, a2 ∗ c, . . . , an ∗ c]

Feld–Addition a + b = [a1 + b1, a2 + b2, . . . , an + bn]

Feld–Subtraktion a − b = [a1 − b1, a2 − b2, . . . , an − bn]

Feld–Multiplikation a .∗ b = [a1 ∗ b1, a2 ∗ b2, . . . , an ∗ bn]

Rechts–Division a ./b = [a1/b1, a2/b2, . . . , an/bn]

Links–Division a .\ b = [a1\b1, a2\b2, . . . , an\bn]

a .∧ c = [a1 ∧ c, a2 ∧ c, . . . , an ∧ c]

Feld–Potenzen c .∧ b = [c ∧ b1, c ∧ b2, . . . , c ∧ bn]

a .∧ b = [a1 ∧ b1, a2 ∧ b2, . . . , an ∧ bn]

Interpretation der beiden Divisionen: a/b := ab, a\b := b

a

Page 41: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 36

Funktionen auf Feldern:Die Standardfunktionen können auf Feldargumente angewandt werden.Bei selbst-definierten Funktionen ist auf Feldarithmetik zu achten, umsie für Feldanwendungen listenfähig (listable) zu machen!

Funktionen auf Feldern x zur Datenanalyse:Matlab verfügt über zahlreiche Funktionen, z.B zur Datenanalyse• sum(x) =

∑ni=1 xi, prod(x) =

∏ni=1 xi

• norm(x) =√∑n

i=1 x2i = sqrt(sum(a .* a))

• max(x) = maxi=1(1)n

xi, min(x) = mini=1(1)n

xi

• mean(x) = x = 1n

∑ni=1 xi (arith. Mittel, Erwartungs-

wert)

• std(x) =√

1n−1

∑ni=1(xi − x)2 (Standardabweichung)

� Hinweis: Man nutze diese Funktionen anstelle der for-Zyklen!

3.7.3 Feld–Manipulation

Felder werden dynamisch alloziert und können deshalb während der Ab-arbeitung vergrößert, verkleinert, zusammengefügt und (mit clear) auchdisalloziert werden.1. Verändern und Expandieren von Feldern2. Zusammenfügen von Feldern3. Verkleinern von Feldern4. Teilfelder

Page 42: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 37

5. bedingte Teilfelder

(a) logische Vektoren / Felder(b) logische Vektoren / Felder im Indexbereich(c) Indexfelder von Teilfeldern - find

6. Feldvergleich und MengenoperationenFunktion Bedeutungisequal(a,b) True, falls a und b identisch sindismember(a,b) True, falls a ganz in b enthalten istintersect(a,b) Werte im Durchschnitt von a und b

union(a,b) Werte in der Vereinigung von a und b

setdiff(a,b) Werte von a, die nicht in b sindsetxor(a,b) Werte im exclusiven ODER von a und b

Page 43: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 38

3.8 2-dimensionale Grafik mit FeldernMatlab kann numerische Daten als Punkte und Linien in 2 Dimensio-nen (2D) sowie als Flächen in 3 Dimensionen (3D) darstellen, bei Bedarfweiter editieren und speichern. Grundlage ist die Darstellung in Feldern.

3.8.1 Das Plot-KommandoSyntax: plot (⟨y -Werte⟩) |

plot (⟨x -Werte⟩, ⟨y -Werte⟩) |plot (⟨x -Werte⟩, ⟨y -Werte⟩, ⟨Format⟩) |plot (⟨x1⟩, ⟨y1⟩, ⟨Format1⟩, ⟨x2⟩, ⟨y2⟩, ⟨Format2⟩, ...) |

Semantik:• ⟨x -Werte⟩ werden horizontal, ⟨y -Werte⟩ werden vertikal darge-

stellt. Beide Felder müssen dieselbe Länge n haben.• Fehlt ⟨x -Werte⟩, so wird es durch das Feld [1, 2, . . . , n] der Indi-

zes ersetzt.• Mit ⟨Format⟩ können Farbe (F), Symbol (S) und Linienstil (L) ge-

wählt werden. Form als Zeichenkette ⟨Format⟩ := ’FSL’.F Farbe S Symbol L Linienstil--------------------------------------------------b blue . point - solidg green o circle : dottedr red x x-mark -. dashdotc cyan + plus -- dashedm magenta * stary yellow s squarek black d diamond

p pentagramh hexagram

--------------------------------------------------S := v,^,<,> triangles (down,up,left,right)

Page 44: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 39

• Fehlt ⟨Format⟩, so wird eine Linie (solid) gezeichnet. Fehlt die Farb-angabe F, so wird die Farbskala - beginnend mit blue - durchlaufen.

• plot gestattet beliebig viele Ausgaben (vgl. 4. Form). Formatanga-ben können fehlen; jedoch sind beide Vektoren ⟨xk⟩ und ⟨yk⟩ stetsanzugeben und müssen dieselbe Länge haben.

Konfigurieren der Ausgabe (Auswahl):• xlabel, ylabel – Festlegung der Achsenbeschriftung• legend – Erzeugung einer Bild-Legende• title – Eingabe einer Bildüberschrift• grid – Erzeugung eines rechtwinkligen Gitternetzes (on, off)• box – Erzeugung eines Diagrammrahmens (on, off)• axis – Steuerung der Achsendarstellung (on, off,...)• hold – Ausgabe mehrer Plots in die gleiche figure (on,off)• colordef – Festlegung der Diagramm- und Beschriftungsfarben

• Gleichzeitige Darstellung mehrerer Figuren (figure-Funktion):Matlab plottet Grafiken in eigenen Fenstern (desweiteren “Figuren“genannt), die die fortlaufenden Nummern 1,2,3,…besitzen.1. figure kreiert eine neue Figur mit fortlaufender Nummer2. figure(k) öffnet eine Figur mit Nummer k (neu oder vorhanden)3. gcf (get handle to current figure) liefert Nr. der aktiven Figur.4. clf (clear current figure) löscht die Objekte in der aktuellen Figur5. close schließt die aktuelle Figur6. close(k) schließt die Figur mit Nummer k7. close all schließt alle offenen Figuren

Page 45: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 40

• Unterteilung der Ausgabefigur in Unterfiguren (subplot-Funktion):Eine Figur kann in eine m × n-Matrix (m Zeilen, n Spalten) un-terteilt werden. Nummeriert man deren m·n Teilfenster zeilenweisevon links her, so öffnet subplot(m,n, p) das p-te Teilfenster indieser Anordnung.

3.8.2 Weitere 2D–Plots• Modifikationen von plot:

– semilogx stellt die x-Achse logarithmisch skaliert dar– semilogy stellt die y-Achse logarithmisch skaliert dar– loglog stellt beide Achsen logarithmisch skaliert dar– area wirkt wie plot; die Fläche zwischen 0 und y wird gefüllt– stem stellt diskrete Daten mit senkrechten Linien dar.

• Darstellung von Diagrammen:– bar(x,y) erzeugt ein vertikales Säulendiagramm mit y-Werten– barh(x,y) erzeugt ein horizontales Säulendiagrammmit y-Werten– stairs(x,y) erzeugt ein vertikales Treppendiagramm mit y-Werten– hist(y,n) erzeugt ein vertikales Histogramm mit y-Werten– pie(a,b) erzeugt ein Tortendiagramm mit Wertevektor a– polar(t,r,S) erzeugt einen Polarplot

• Weitere nützliche Plot-Utensilien:– [a,b] = ginput(n) gestattet die interaktive Auswahl von n Punk-ten aus einer bestehenden Grafik mit linker Maustaste. Speiche-rung der Punktkoordinaten in den Vektoren a und b

– fill(x,y,’F’) füllt ein Polygon mit Farbe F, dessen Ecken durchdie Vektoren x und y spezifiziert sind (Letzter und erster Punktwerden verbunden)

– text(x,y,’string’) fügt die Zeichenkette string an den Koordina-ten (x,y) in den aktuellenn Plot ein.

Page 46: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 41

3.9 Algorithmen auf Zeichenketten

3.9.1 Zeichenketten-Definition und -Verarbeitung

Während Zeichenketten in vielen Sprachen statisch angelegt werden als• Zeichenketten mit fester Maximallänge und variabler aktueller Län-

ge (Längenidikator) oder• Null-terminierte Zeichenketten (theoretisch) beliebiger Länge,

verwaltet Matlab Strings als eindimensionale Felder (Vektoren) aufdem Basistyp char (character strings). Jedes Zeichen belegt 2 Bytes5.Syntax: ⟨Kettenkonstante⟩ ::= ’ ’ | ’⟨Zeichen⟩{⟨Zeichen⟩}’Semantik:• Apostroph (’) in der Kette ist durch 2 Apostrophe anzugeben.• In Matlab existiert auch die leere Zeichenkette.• length und size sind anwendbar.

Manipulation von Strings:• double(String) wandelt jedes Zeichen in seinen ASCII-Code um.

• char(Vektor) wandelt jeden ASCII-Code in das Zeichen um (Gegen-stück zu double).

• Zugriff auf einzelne Zeichen und auf Teilketten ist mit Indexnotationfür Felder möglich.

• Verkettung ist durch Feldverknüpfung möglich.

• Transposition mit (’) liefert die Zeichen in einer Spalte.

5Grund für 216 Zeichen ist die Einbeziehung fernöstlicher Alphabete, wie Japanisch und Chinesisch.

Page 47: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 42

Zeichenketten-Konvertierungen und -Abfragen:Während double und char zeichenweise umwandeln, wird oft eine kom-plette Konvertierung Zahl ⇔ Zeichenkette gewünscht.• Konvertierung Ganzzahl ⇒ Zeichenkette

Format : str = int2str(aus)Parameter : aus – arithmet. Ausdruck mit Wert double

str – KettenvariableWirkung : Berechnung von aus, Rundung auf Ganzzahl

und Konvertierung in die Kette str

• Konvertierung Zahl ⇒ Zeichenkette mit FormatierungFormate : str = num2str(aus)

str = num2str(aus,n)str = num2str(aus,format)

Parameter : aus – arithmet. Ausdruck mit Wert doublen – natürliche Zahl (Präzision)format – Formatierungs-Kette

Wirkung : Berechnung von aus, Konvertierung in strauf 4 (Default) bzw. n Nachkommastellenbzw. gemäß Formatierungs-Kette format

• Konvertierung Zeichenkette ⇒ ZahlFormate : x = str2num(str), x = str2double(str)Parameter : str – Kettenausdruck für eine double-Zahl

x – double-VariableWirkung : Berechnung von str, Versuch der Konvertierung

in eine Zahl x (andernfalls [ ] )

Page 48: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 43

• AbfragefunktionenFormate : t = ischar(a), t = isletter(a)Parameter : a – beliebige Zahl oder Zeichenkette

t – (Feld) logische(r) Werte 0 (false) bzw. 1 (true)Wirkung : ischar: Prüfung, ob a eine Zeichenkette ist,

isletter: Prüfung, ob die Zeichen Buchstaben sind.

Zeichenketten-Funktionen (Auswahl):Zur Vereinfachung der Zeichenketten-Verarbeitung stehen in Matlabu.a. folgende Funktionen zur Verfügung.• Horizontale Verkettung

Format : s = strcat(s1,s2,...,sn)Parameter : s1,s2,...,sn – Kettenausdrücke, s – KettenvariableWirkung : Verkettung von s1,s2,...,sn ohne Berücksichtigung

von Leerzeichen an Anfang und EndeBemerkung : s = [s1,s2,...,sn] (s.o.) berücksichtigt

Leerzeichen an Anfang und Ende

• Ersetzen in einer ZeichenketteFormat : s = strrep(s1,s2,s3)Parameter : s1, s2, s3 – Kettenausdrücke, s – KettenvariableWirkung : Jedes Auftreten von s2 in s1 wird durch s3 ersetzt.

• Vergleich zweier ZeichenkettenFormat : t = strcmp(s1,s2)Parameter : s1,s2 – Kettenausdrücke, t – 0 (false) bzw. 1 (true)Wirkung : t = 1, falls s1 und s2 übereinstimmen, sonst t = 0.Bemerkung : t = strcmpi(s1,s2) ignoriert

Groß- und Kleinschreibung.

Page 49: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 44

• Suchen in einer ZeichenketteFormat : nr = strfind(text,s)Parameter : text, s – Kettenausdrücke, nr – ZahlenvektorWirkung : nr ist das Feld der Startindizes jedes Auftretens der

Kette s in der Kette text.

3.9.2 Datum und Uhrzeit

Matlab bietet Funktionen zur Verarbeitung von Datum und Uhr-zeit an, insbesondere zur Bestimmung, Darstellung und Arithmetik beiDatum und Zeit, zur Kalenderfunktion und zur Stoppuhr-Funktion beiRechenzeit-Bestimmungen.(a) Aktuelles Datum und Uhrzeit

• clock liefert aktuelles Datum und Uhrzeit als Feld• now liefert aktuelles Datum und Uhrzeit als double-Zahl• date liefert aktuelles Datum als String ’dd-mmm-jjjj’

(b) Datum- und Uhrzeitformate• datestr konvertiert von now-Darstellung in String-Form• datenum konvertiert von String-Form in now-Darstellung• datevec konvertiert von String-Form in Feld-DarstellungDatenform des Resultats von datestr:datestr(tage,datumform) konvertiert den String tage von now-Darstellung in String-Form mit Kennzahl datumform .

datumform String tage Beispiel0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 15:45:171 'dd-mmm-yyyy' 01-Mar-20002 'mm/dd/yy' 03/01/003 'mmm' Mar4 'm' M5 'mm' 036 'mm/dd' 03/01

Page 50: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 45

7 'dd' 018 'ddd' Wed9 'd' W10 'yyyy' 200011 'yy' 0012 'mmmyy' Mar0013 'HH:MM:SS' 15:45:1714 'HH:MM:SS PM' 3:45:17 PM15 'HH:MM' 15:4516 'HH:MM PM' 3:45 PM17 'QQ-YY' Q1-9618 'QQ' Q119 'dd/mm' 01/0320 'dd/mm/yy' 01/03/0021 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:1722 'mmm.dd,yyyy' Mar.01,200023 'mm/dd/yyyy' 03/01/200024 'dd/mm/yyyy' 01/03/200025 'yy/mm/dd' 00/03/0126 'yyyy/mm/dd' 2000/03/0127 'QQ-YYYY' Q1-199628 'mmmyyyy' Mar200029 (ISO 8601) 'yyyy-mm-dd' 2000-03-0130 (ISO 8601) 'yyyymmddTHHMMSS' 20000301T15451731 'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17

(c) Kalenderfunktionen• weekday liefert den Wochentag (Sonntag=1, Samstag=7)• calendar generiert einen Monatskalender

(d) Stoppuhr-FunktionWie oben bemerkt, liefert clock den aktuellen Zeitvektor T.• Die Funktion etime(T1,T0) (elapsed time) gibt die zwischen 2

Vektoren T0 und T1 vergangene Zeit zurück.• Die Stoppuhrfunktionen tic; (Start) und toc (Zeitausgabe) lie-

fern die Zeit in Sekunden.

Page 51: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 46

3.10 Algorithmen auf mehrdimensionalen Fel-dern

Um auch Matrizen und Tensoren effizient verarbeiten zu können, bietetMatlab die Datenstruktur mehrdimensionale Felder (arrays) an.

3.10.1 Feldkonstruktion und Feldallozierung

Zur Erinnerung:1. Ein Feld ist eine aus einer festgelegten Anzahl von Komponenten

gleichen Typs bestehende Datenstruktur.2. Zugriff auf eine Komponente des Feldes erfolgt durch Angabe von

Indizes.3. Die Anzahl der Indizes zur Auswahl einer Komponente gibt die

Dimension des Feldes an. Diese kann beliebig groß sein.4. Matlab -Felder können dynamisch alloziert, verändert bzw. disal-

loziert werden.Matlab (MATrix LABoratory) ist an 2-dimensionalen Feldern orien-tiert, die mathematisch als Matrizen (mit Zeilen und Spalten) interpre-tiert werden können.Feldeingabe und -abspeicherung:• 2-dimensionale Felder: Zeilenweise Eingabe (als 1-dimensionale Fel-

der) und Zeilentrennung mittels Semikolon (;) oder Enter6

• Mehrdimensionale Felder werden allgemein in invers-lexikografischerReihenfolge abgespeichert, d.h. die Komponenten sind im Speicherso angeordnet, daß der erste Index am schnellsten variiert, der letzteIndex dagegen am langsamsten.Insbesondere werden Matrizen spaltenweise gespeichert!

6Höherdimensionale Felder werden anschließend behandelt.

Page 52: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 47

• Gestalt und Größe des Feldes:s = size(A) liefert für ein d-dimensionales Feld A den Zeilen-

vektor s aller d Indexbereiche.d = ndims(A) liefert die Dimension d von A: d=length(size(A))L = length(A) liefert die Länge L der größten Dimension d

von A: L=max(size(A))n = numel(A) liefert die Zahl n aller Elemente von A:

n=prod(size(A))Indizierte Variablen:Der Zugriff auf eine Feldkomponente erfolgt durch Angabe aller dafürnötigen n Indizes.Syntax: ⟨Feldvariable⟩ ( Index1, Index2, . . . , Indexn ) |

⟨Feldvariable⟩ ( Indexfeld1, Indexfeld2, . . . , Indexfeldn )

Semantik:• Index steht für eine einzelne Komponente. Der Ausdruck wird aus-

gewertet und die Komponente ausgewählt.Merke: end steht stets für die letzte Komponente!

• Indexfeld kann nach bisherigen Regeln gebildet werden und steht füreine Komponente oder ein Teilfeld mit Werten im Indexbereich!

Wertung:Skalare und Vektoren werden intern ebenfalls als 2-dimensionale Felder(Matrizen) behandelt (Man überprüfe dies mit whos):• Skalare als (1,1)-Matrizen• Zeilenvektoren als (1,n)-Matrizen• Spaltenvektoren als (m,1)-Matrizen.

Page 53: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 48

Spezielle Felder und Prä-Allozierung:Mit folgenden Matrix-Funktionen können Felder beliebiger Dimensionenn leicht generiert werden.Syntax: ⟨Matrix-Funktion⟩ |

⟨Matrix-Funktion⟩ ( dim ) |⟨Matrix-Funktion⟩ ( dim1, dim2, . . . , dimn )

Semantik:• Im 1. Fall wird eine skalare Variable (d.h. eine (1,1)-Matrix) erzeugt.• Im 2. Fall wird eine quadratische (dim,dim)-Matrix erzeugt.• Im 3. Fall wird allgemein ein n-dimensionales Feld mit Indexberei-

chen dim1, dim2, ..., dimn erzeugt.

Funktionen für spezielle Felder in Matlab (Auswahl):

Name Bedeutung Dimension

zeros Feld mit Einträgen Null (0) bel.ones Feld mit Einträgen Eins (1) bel.rand Feld mit gleichverteilten

Zufallszahlen in (0,1) bel.randn Feld mit normalverteilten Zufalls-

zahlen um Mittel 0 mit Varianz 1 bel.eye Einheitsmatrix n = 2

magic Magisches Quadrat n = 2

pascal Pascalsche Dreiecks-Matrix n = 2

hilb Hilbert-Matrix n = 2

Hinweis: Große Felder A sollten mit A = zeros(d1,d2,...,dn) zuBeginn prä-alloziert werden, da sonst innerhalb von Schleifen ggf. einständiges Erweitern des Feldes vorgenommen werden muss!

Page 54: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 49

3.10.2 Feldmanipulation und höherdimensionale Felder

Matlab bietet viele Möglichkeiten zur dynamischen Veränderung vonFeldern, wie Erweiterung, Reduzierung, Streckung, Vervielfachung, Dre-hung, Spiegelung, Herausschneiden von Teilfeldern usw., analog zu Feld-Manipulationen siehe 3.7.3.Hinweis: Der gesamte Bereich eines Index kann mittels

A(d1,d2,..., 1 : end,...,dn) oder A(d1,d2,..., : ,...,dn)

angegeben werden.

1. Verändern und Expandieren von Feldern

2. Ausschneiden von Teilfeldern, Verkleinern

3. Zusammensetzen von Feldern

Streckung von Feldern (Stretching):Matlab kann alle Elemente eines Feldes A in ihrer natürlichen Speicher-Anordnung zu einem 1-dimensionalen Spaltenvektor machen (Stretching).Bei Matrizen wird also spaltenweise gestreckt!• A(:) liefert alle Elemente des Feldes A als Spaltenvektor.• A(Indexbereich) liefert alle Elemente des gestreckten Vektors im

angegebenen Indexbereich als Zeilenvektor.

Page 55: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 50

3.11 Matrizen und lineare Systeme

Alle bereits für Vektoren eingeführten Operationen sind auch bei Matri-zen, d.h. ”echten“ 2-dimensionalen Feldern, gültig. Hinzu kommen dieMatrizenmultiplikation und die Matrixpotenzierung.

3.11.1 Arithmetik auf Matrizen

Folgende Matrixoperationen werden nun betrachtet:• Skalar– Matrix–Arithmetik: Addition, Subtraktion, Multiplikation,

Division, Potenzierung von Matrix und Skalar• Matrix–Matrix–Arithmetik: Elementweise Verknüpfung durch Addi-

tion, Subtraktion, Multiplikation, Division oder Potenzierung, fallsgleiche Indexbereiche vorliegen.

• Matrixmultiplikation A∗B (Priorität 4 - wie zu erwarten) und Ma-trixpotenzierung An, n ∈ N (Priorität 2 - wie zu erwarten)

• Transposition mittels A.′ und A′ (Priorität 2 !)

Definition der Matrix–Arithmetik: A = (aik), B = (bik), c skalar

Operation ResultatSkalar–Addition A + c = (aik + c)

Skalar–Subtraktion A − c = (aik − c)

Skalar–Multiplikation A ∗ c = (aik ∗ c)

Skalar–Division A/c = (aik/c)

Matrix–Addition A + B = (aik + bik)

Matrix–Subtraktion A − B = (aik − bik)

Elementweise Multiplikation A .∗ B = (aik ∗ bik)

Elementweise Rechts-Division A ./B = (aik/bik)

Elementweise Links-Division A .\ B = (aik\bik)

Page 56: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 51

Operation ResultatElementweise A .∧ c = (aik ∧ c)

Matrix– c .∧ B = (c ∧ bik)

Potenzen A .∧ B = (aik ∧ bik)

Matrix–Multiplikation A ∗ B =(∑

j aij ∗ bjk

)Matrix–Potenzierung A ∧ n = A ∗ A ∗ · · · ∗ A (n-mal)Matrix–Transposition A′ = AH (konjugiert komplex)Matrix–Transposition A.′ = AT (nicht-konjugiert komplex)

3.11.2 Lineare Gleichungssysteme

Lösung von

A · x = a mit A ∈ Rn×n, a ∈ Rn .

Matlab benutzt dazu u.a. die numerisch stabile QR-Zerlegung.

(c) Matlab-Funktionen für lineare Gleichungssysteme:Folgende direkte Verfahren werden in Matlab häufig benutzt:• Verfahren 1: LR-Zerlegung von A mit Pivotisierung (PA = LR)

[L,R,P] = lu(A); y = L\(P*a); x = R\y

• Verfahren 2: Backslash-Operator A\a (x = A\a)

x = A\a

• Verfahren 3: Inverse Matrix A−1 (x = A−1a)

x = inv(A)*a

Page 57: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 52

• Verfahren 4: Cholesky-Zerlegung von ATA (ATAx = ATa)

L = chol(A'*A)'; b = A'*a; x = L'\(L\b)

• Verfahren 5: QR-Zerlegung von A (A = QR)

[Q,R] = qr(A); b = Q'*a; x = R\b

Wichtige Funktionen für Matrizen in Matlab (Auswahl):

Aufruf Bedeutung Dim.

det(A) Determinante det(A) (n,n)trace(A) Spur von A ab A11 (m,n)rank(A) Rang von A (m,n)norm(A,inf) Zeilensummen-Norm von A (m,n)norm(A,1) Spaltensummen-Norm von A (m,n)norm(A,2) Sektralnorm von A (n,n)cond(A,inf) Konditionszahl cond∞ von A (n,n)cond(A,1) Konditionszahl cond1 von A (n,n)cond(A,2) spektrale Konditionszahl von A (n,n)inv(A) Inverse Matrix A−1 von A (n,n)pinv(A) Pseudoinverse A+ von A (m,n)eig(A) Eigenwerte von A (n,n)[V,D]=eig(A) Eigenwerte und -vektoren (n,n)svd(A) Singulärwert-Zerlegung von A (m,n)null(A) Nullraum (Kern) von A (m,n)orth(A) Orthogonalisierung von A (m,n)

Page 58: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 53

Aufruf Bedeutung Dim.

lu(A) LR-Zerlegung (LU-Zerlegung) von A (n,n)qr(A) QR-Zerlegung von A (n,n)chol(A) Cholesky-Zerlegung von A (n,n)qz(A,B) QZ-Zerlegung verallg. EW-Probleme (n,n)expm(A) Matrixexponent exp(A) von A (n,n)logm(A) Matrixlogarithmus ln(A) von A (n,n)

3.11.3 Beschleunigung aller Algorithmen

Welchen Effizienzvorteil bietet die Matrixnotation gegenüber elemente-weiser Verarbeitung?

• Fazit:

3.12 3-dimensionale GrafikMatlab kann numerische Daten als Punkte und Linien sowie als Flä-chen in 3 Dimensionen (3D) perspektivisch darstellen, bei Bedarf weitereditieren und speichern. Grundlage ist die Darstellung in Matrizen.3.12.1 Raumkurvendarstellung (plot3)

Syntax: plot3 (X, Y, Z) |plot3 (X, Y, Z, Format) |plot3 (X1, Y1, Z1, Format1, X2, Y2, Z2, Format2, ...)

Semantik:• Sind X,Y und Z Vektoren derselben Länge n, so wird 1 Kurve (mit

n Punkten) gezeichnet. X -Werte und Y -Werte werden horizontal,Z -Werte werden vertikal dargestellt.

Page 59: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 54

• Sind X,Y und Z Matrizen derselben Größe (n,m), so werden m

Kurven spaltenweise gezeichnet, d.h. (X(:,i), Y(:,i), Z(:,i)), i=1(1)m.• Mit Format können Farbe (F), Symbol (S) und Linienstil (L) wie in

plot gewählt werden (s.dort).• plot3 gestattet beliebig viele Ausgaben (vgl. 3. Form).

Zusätzlich zu den Optionen von plot gilt u.a.:• xlabel(’x’), ylabel(’y’), zlabel(’z’) setzt 3 Labels• axis([xmin xmax ymin ymax zmin zmax]) setzt die Zeichen-

bereiche in 3 Richtungen• text(x,y,z,’String’) platziert den String an Position (x,y,z)

3.12.2 Gitter- und Flächendarstellungen

Matlab definiert mit mesh, meshc, meshz, surf, surfc, surflusw. eine Gitter-Oberfläche über einem rechteckigen (n,m)-Gitter derxy-Ebene. Funktionswerte sind die z-Werte.(a) Plot der Werte einer reellen Matrix A• mesh(A) erzeugt ein rechteckiges Gitter mit X = 1:n und Y = 1:m,

wobei [m,n] = size(A) ist. Diem·n reellen MatrixwerteAik werdenüber dem XY-Gitter senkrecht dargestellt. Die Farbe ist proportionalder Höhe. Verdeckte Linien werden nicht gezeichnet.

• surf(A) stellt die Fläche mittels farbiger ”Patches“ bei verdecktenKanten dar.

Modifikationen der beiden Kommandos:• meshc(A) und surfc(A) erzeugen zusätzlich einen Contour-Plot

in der xy-Ebene• meshz(A) – Gitterplot mit Referenzebene um das Gitter• surfl(A) – Flächenplot mit colormap-basierter Beleuchtung

Page 60: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 55

(b) Plot der Werte einer Funktion z = f(x, y)

Zuerst ist eine (m,n)-Matrix Z zu erzeugen, die dann mit den eingeführ-ten Kommandos mesh, surf usw. dargestellt wird.• [X,Y] = meshgrid(x,y) erzeugt ein rechteckiges Gitter: Gegeben

sind die Knotenvektoren x der Länge n und y der Länge m. Dannist X eine (m,n)-Matrix, deren Zeilen identisch mit x sind, währendY eine (m,n)-Matrix ist, deren Spalten identisch mit y sind.

• Z = f(X,Y) erzeugt die gewünschte (m,n)-Matrix über X und Y.Achtung: Funktion muss Matrixwertige Argumente verarbeiten kön-nen!

• mesh(X,Y,Z,C) stellt Z über X und Y dar. Die Farbskalierungwird durch die Werte der Matrix C beschrieben.

• mesh(X,Y,Z) benutzt die Farbwerte von Z, d.h. C = Z.• surf(X,Y,Z) und weitere Modifikationen siehe oben.

(c) Plot parametrisch definierter FlächenIst für die Flächenparameter a ≤ u ≤ b und c ≤ v ≤ d dieParameterdarstellung einer Oberfläche durch

x = x(u, v), y = y(u, v), z = z(u, v)

gegeben, so liefern

• [U,V] = meshgrid(u,v) ein rechteckiges Gitter• X=x(U,V), Y=y(U,V), Z=z(U,V) die (m,n)-Matrizen• mesh(X,Y,Z), surf(X,Y,Z) usw. die Flächendarstellung.

Page 61: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 56

3.13 Rekursive Algorithmen

Rekursion stellt eines der grundlegendsten algorithmischen Konzepte dar.Sie tritt deshalb in der Programmierung häufig auf, wobei 2 Erschei-nungsformen zu unterscheiden sind:• Rekursive Algorithmen: rekursive Funktionen, rekursive Proze-

duren (rekursive Unterprogramme)

• Rekursive Datenstrukturen: Listen (Ketten, Stapel etc.), Bäu-me, Graphen (Geflechte)

Der induktive Aufbau der natürlichen Zahlen N = {0, 1, 2, 3, . . .}durch die Peanoschen Axiome ermöglicht außer dem Beweisprinzip dervollständigen Induktion auch rekursive Definitionen von Abbildungen.

Rekursive DefinitionEine Abbildung f : N → W wird rekursiv definiert, indem man(i) f(0) explizit festlegt und(ii) f(n) für beliebiges n ∈ N≥1 in Abhängigkeit von f(n − 1)

definiert, d.h. auf f(n − 1) zurückführt.Damit ist die Abbildung f für alle n ∈ N definiert.

Verallgemeinerte RekursionAußer in der Grundform kommen rekursive Definitionen in zahlreichenVarianten vor: Häufig wird f(n) nicht nur auf f(n − 1) zurückge-führt, sondern auf f(n′) mit beliebigem n′ < n . Mitunter wirdf(n) auf mehrere Vorgänger zurückgeführt, z.B. auf f(n1), f(n2)

mit n1 < n, n2 < n .

Page 62: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 57

3.13.1 Direkte und indirekte Rekursivität

Rekursiver Aufruf(i) Ein rekursiver Aufruf einer Funktion oder ProzedurA liegt vor, wenn

das Unterprogramm vor Beendigung der Abarbeitung seines Anwei-sungsteils erneut aufgerufen wird.

(ii) Direkte Rekursivität: Das Unterprogramm A ruft sich während sei-ner Abarbeitung selbst (direkt) auf.

(iii) Indirekte Rekursivität: A ruft sich über mindestens ein weiteres Un-terprogramm B auf.

Frage: Wie verhält sich der Computer bei der Abarbeitung von fib(15)oder fac(2) ?

3.13.2 Abarbeitungsprinzip rekursiver Funktionen

Bei der Abarbeitung von fac(2) werden die Parameter wie üblich be-handelt, d.h. Wertparameter und lokale Parameter werden im Stack ab-gelegt (Stapelung, Kellerung), globale Parameter hingegen nicht. Dasheißt insbesondere:

1. Mit jedem Aufruf von fac wird eine neue Version (auch: Inkarnati-on) von fac erzeugt.

fac(2) −→ fac(1) −→ fac(0)

sind die Inkarnationen zu n = 2 .

2. Zu jeder Inkarnation können Wert- und lokale Parameter gehören,deren Gültigkeitsbereich genau der Anweisungsblock dieser Inkarna-tion ist. Bei erneutem Aufruf von fac werden sie dann unsichtbar.

3. Diese Parameter n, n− 1, n− 2, . . . , 2, 1, 0 , werden im Stackabgelegt, bis die Rekursion abbricht (terminiert) und erstmalig derWert fac(0) = 1 berechnet wird.

Page 63: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 58

4. Die Inkarnationen werden nun sukzessive in umgekehrter Reihenfolgeabgeschlossen:

fac(0) −→ fac(1) −→ fac(2),

wobei die gesperrten (gekellerten) Werte sukzessive sichtbar undverarbeitet werden.

Fazit: Die Ablage und Verarbeitung auf dem Stack erfolgt nach demautomatischen Speicherprinzip.

Ist die Anweisung m := fib(5) abzuarbeiten, so lauten die Inkarna-tionen:

Page 64: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 59

Lineare und nichtlineare Rekursion

(i) Ist F eine Funktion und A eine Anweisung, so heißt A linear in F ,wenn gilt:1. Ist A keine bedingte Anweisung, so enthält A höchstens einen

Aufruf von F .2. Ist A eine bedingte Anweisung der Form

if B1, A1; elseif B2, A2; elseif B3, A2;. . . . . . . . . .else An; end

oder eine äquivalente switch-Anweisung, so sind alle Anweisun-gen A1,A2,...,An linear in F .

(ii) Eine rekursive Funktion F mit Anweisungsblock A heißt linear-rekursiv, wenn A linear in F ist. Andernfalls heißt sie nichtlinear-rekursiv.

Binärer Baum (Bintree)M sei eine Menge (die Knotenmenge). Dann wird die Menge B2(M)

der Binärbäume über M rekursiv definiert:

(i) ε ∈ B2(M) mit ε - leerer Baum

(ii) Ist a ∈ M und x, y ∈ B2(M) , so ist auch(a, x, y) ∈ B2(M) .

Der Knoten a heißt Wurzel, x linker Teilbaum (Unterbaum), y rech-ter Teilbaum (Unterbaum) des Binärbaumes (a, x, y). Ein Binärbaum(a, ε, ε) heißt Blatt.

Folgerung:Der zu einem Aufruf der Funktion F aus der Menge M aller möglichen

Page 65: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 60

Inkarnationen durch die Rekursionsvorschrift erzeugte binäre Baum heißtRekursionsbaum.

Gehen von einer Wurzel a genau p Unterbäume aus, so spricht man vonp-adischen Bäumen (z.B. triadische Bäume bei p = 3). Damit verall-gemeinert man die Definition:

p-adischer BaumM sei eine Menge (die Knotenmenge). Dann wird die Menge Bp(M)

der p-adischen Bäume über M rekursiv definiert:

(i) ε ∈ Bp(M) mit ε - leerer Baum

(ii) Ist a ∈ M und x1, x2, . . . , xp ∈ Bp(M) , so auch(a, x1, x2, . . . , xp) ∈ Bp(M) .

xk heißt k-ter Teilbaum (Unterbaum) des Baumes (a, x1, x2, . . . , xp).

Ein Baum (a, ε, . . . , ε) heißt Blatt.

Folgerungen:1. Binärbäume sind die dyadischen Bäume über M .2. Seien p1, p2, . . . , pr die Anzahlen von Unterbäumen, die in einem

beliebigen Baum auftreten und p := max1=1(1)r pi . Ergänztman die Zahl der Unterbäume in jeder Wurzel durch leere Bäumezur Zahl p, so ist nun der Baum p-adisch.

3. Für p = 1 ergibt sich der Spezialfall der Folge (Sequenz).4. Jede rekursive Funktion F generiert einen p-adischen Rekursions-

baum. F ist genau dann linear-rekursiv, falls p = 1 ist; andernfallsist F nichtlinear-rekursiv.

Page 66: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 61

3.13.3 Terminiertheit rekursiver Funktionen

Eine Funktion F terminiert für eine gegebene Parameterbelegung V ,wenn die Bestimmung von F (V ) nach endlich vielen Aufrufen (Inkar-nationen) von F einen definierten Wert ergibt.

Korrektheit rekursiver FunktionenTrotz nachgewiesener Terminiertheit einer rekursiven Funktion F ist da-mit i. allg. noch nicht verifiziert, daß F gerade die gewünschte Abbildungdarstellt.

Beispiele

• fac(n)liefert offenbar das Produkt n(n − 1) · · · 2 · 1 = n! , damit istdie Korrektheit leicht nachweisbar.

• fib(n)gibt die übliche mathematische Definition der Fibonacci-Zahlen an.

• ggt(m,n)gibt nicht die algebraische Definition des größten gemeinsamen Tei-lers an (s.o.). Dennoch gilt: Die Funktion ggt(m,n) ist korrekt,d.h. sie liefert den größten gemeinsamen Teiler von m und n (Be-weis als �bungsaufgabe).

3.13.4 Entwurfsprinzipien rekursiver Algorithmen

Während sich bei rekursiven Funktionen die Gestalt der Matlab -Function unmittelbar ableiten läßt (vgl. fac, fib, ggt, co), ist für umfang-reiche Algorithmen oft erheblicher gedanklicher Aufwand nötig, um einenkorrekten – und möglichst kurzen – rekursiven Algorithmus zu entwer-fen. Folgende allgemeine Entwurfsprinzipien liegen jedoch den meisten

Page 67: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 62

der rekursiven Algorithmen zugrunde:

• Einbettungsprinzip

• Prinzip ”Teile und herrsche“ (Divide et impera)

• Backtracking-Prinzip (Trial and error)

(a) Prinzip der EinbettungDie Größe, nach der die Rekursion verläuft, kommt im Algorithmus selbsthäufig nicht vor, so daß die gestellte Aufgabe A nicht rekursiv angebbarist.Idee: Eine allgemeinere Aufgabe A′ = A(n) , die A als Spezialfallenthält, läßt sich aber oft rekursiv lösen, wenn ein zusätzlicher (Rekur-sions-)Parameter n eingeführt wird, d.h A wird in A′

”eingebettet“.

Beispiel Türme von HANOI (hanoi.m)Als der Tempel von Hanoi gebaut wurde, wurden 3 große Stangen in den Boden ge-rammt und 64 Scheiben abnehmenden Durchmessers auf die erste Stange gesteckt- mit der kleinsten an der Spitze und der größten am Boden. Die Tempelmönchemußten die Scheiben ununterbrochen von Stange 1 zu Stange 3 unter Benutzungder Stange 2 und Beachtung der folgenden 2 Regeln bewegen:

1. Nur 1 Scheibe darf jedesmal bewegt werden.2. Keine Scheibe darf auf eine kleinere Scheibe gelegt werden.

Laut �berlieferung wird, wenn sie die Aufgabe bewältigt haben, das Ende der Welteintreten.

Einbettungsprinzip:• Einfacher Algorithmus A: ”Lege 64 Scheiben von 1 auf 3 mit Hilfs-

stab 2“ ⇒ keine Parameter• Verallgemeinerter Algorithmus A′: ”Lege n Scheiben von x auf y

mit Hilfsstab z“ ⇒ Parameter sind nun x,y,z,n; n ist der ”Rekursi-onsparameter“

Page 68: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 63

Grundform des Algorithmus hanoi(x,y,z,n)1. Lege n-1 Scheiben von x auf z mit Hilfe von y !2. Lege 1 Scheibe von x auf y (Ausgabe) !3. Lege n-1 Scheiben von z auf y mit Hilfe von x !

Terminierungsbedingung:

”Falls keine Scheibe auf x liegt, so fertig!“Anzahl der Umlegungen: Offenbar ist T (0) = 0 und

T (n) = T (n − 1) + 1 + T (n − 1), n ≥ 1 .

Induktiv zeigt man daraus T (n) = 2n − 1 , n ≥ 1.

(b) Prinzip ”Teile und herrsche“Die Entwurfsstrategie empfiehlt1. die Zerlegung eines Problems P0(n) der Größe n in mehrere Teil-

probleme geringerer Größe P1(n′), n′ < n,

2. die jeweils gelöst werden3. und anschließend zu einer Lösung des Grundproblems zusammenge-

setzt werden.Mit jedem Teilproblem wird analog verfahren, bis man zu Teilproblemengelangt, die klein genug sind, um ohne weitere Teilung gelöst zu werden.Häufigster Spezialfall: Zerlegung von P0(n) in 2 Teilprobleme P1(n1)

und P2(n2) mit n1 + n2 = n .

Wichtige praktische Anwendungen:• Schnelle Suchverfahren, Sortierverfahren• Schnelle Fouriertransformation (FFT)• Adaptive Integrationsverfahren in 1D und 2D• Parallelisierte Verfahren (Numerik, Visualisierung) etc.

Page 69: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 64

Die entstandenen Verfahren gehören zu den effektivsten existierendenAlgorithmen!7

3.14 Algorithmen auf Strukturen und DateienIn vielen Anwendungen der Informationsverarbeitung ist es zweckmäßig,Datenelemente unterschiedlichen Typs zu logischen Einheiten, den Struk-turen (Datensätzen, engl.: records), zusammenzufassen. Damit lassensich Dateien (engl.: files) leicht aufbauen. Algorithmen auf diesen 2 Da-tentypen unterscheiden sich z.T. erheblich von der bisherigen Verarbei-tung der Felder.

3.14.1 Algorithmen auf Strukturen (struct)Eine Struktur ist ein Matlab -Datentyp, der aus einer festgelegtenAnzahl benannter Komponenten, den Datenfeldern (engl.: named datacontainers) besteht. Diese Datenfelder können innerhalb einer Strukturvon verschiedenem Typ sein.Beispiele:

Datum : Tag, Monat, JahrName : Vorname, ZunameKomplexe Zahl : Realteil, ImaginärteilAdresse : PLZ, Ort, Strasse, NrStudent : Matrikel-Nr., Name, Adresse, Geb.-Datum, Fächer

Erzeugung und Verarbeitung von StrukturenDie Prä-Allozierung mittels struct legt die Reihenfolge sowie die Namenund Werte der Datenfelder fest.

7Vgl. dazu “The Top Ten Algorithms of the Century“ (J. Dongarra and F. Sullivan). Zu diesen 10 Top-Algorithmen gehören der Quicksort-Sortieralgorithmus von Anthony Hoare und die Fast Fourier Transform(FFT) von James Cooley und John Tukey.

Page 70: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 65

Syntax: ⟨Strukturname⟩ = struct ( ’Datenfeld 1’,Wert 1, ...’Datenfeld 2’,Wert 2, ...

........

’Datenfeld n’,Wert n )Semantik:• Der Typ der Datenfelder kann beliebig sein - also auch strukturiert

(array, character string, struct etc.).• Die Abspeicherung der Datenfelder erfolgt linear in Reihenfolge der

Definition.• Der Gültigkeitsbereich der Datenfeldnamen (name, bafoeg, ort etc.)

ist die Strukturdefinition selbst!• Strukturen sind Feld-orientiert, d.h. jeder Strukturname repräsen-

tiert bereits ein 1x1-Feld. Damit können Strukturfelder beliebigerDimension - wie gewöhnliche Felder - aufgebaut werden.

Strukturierte Typen in Datenfeldern (nested structures):Als Datenfelder dürfen auch strukturierte Typen stehen. Es ist ratsam,diese Typen zuvor explizit zu deklarieren und dann die Typnamen zuverwenden. Damit können hierarchische Strukturen aufgebaut werden.

Strukturzugriff und -verarbeitung• Zuweisung ganzer Strukturen:

Zuweisung ganzer Strukturen desselben Typs (Muster) ist zulässig.Sämtliche Werte der Datenfelder werden physisch kopiert.

• Strukturkomponente und Komponentenselektor:Der Zugriff auf eine Strukturkomponente geschieht durch Angabeder Strukturvariablen, gefolgt vom Datenfeldbezeichner, getrenntdurch eine Punkt. Es entsteht ein 2-stufiger Name. Er darf alsL-Wert und als R-Wert benutzt werden.

• Strukturen als Funktionsparameter:Strukturvariablen können als formale und als aktuelle Parameter von

Page 71: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 66

Funktionen stehen.

Datenstrukturen als StrukturkomponentenDer Typ der Datenfelder kann beliebig sein - also auch strukturiert (ar-ray, character string, struct etc.)

3.14.2 Felder von Strukturen

Ein Strukturtyp kann selbst als Elementtyp eines ein- oder mehrdimensio-nalen Feldes (Vektor, Matrix,...) dienen. Auf derartige Strukturfeldertreffen alle Aussagen der Kapitel 4 und 5 zu.Erzeugen von Strukturfeldern1. Einzel-Zuweisungen: Die Feldelemente werden einzeln generiert und

mit Werten belegt.• Alle Strukturen des Feldes student haben dieselbe Anzahl von

Datenfeldern. Alle Felder haben dieselben Namen.• Merke: Felder verschiedener Elemente von student können un-

terschiedliche Größe heben (z.B. noten, name).• Mit student(3).name = ’Paul’ wird eine 3. Komponente dersel-

ben Struktur generiert. Bis auf name sind alle Datenfelder leer.

2. Prä-Allozierung mit identischen Werten: Nach Definition der Ele-mentstruktur A liefert B = repmat(A,m,n) eine mxn-MatrixB, deren Elemente gleich A sind. Beispiel:

3. Prä-Allozierung mit verschiedenen Werten: Die Datenfelder werdenmittels Zellen {wert 1,wert 2,...,wert n } initialisiert.

Page 72: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 67

3.15 Algorithmen auf Dateien (file)Eine Datei (file) ist ein Datentyp, der aus Komponenten des gleichenBasistyps besteht und insbesondere der dauerhaften Speicherung großerDatenmengen außerhalb des Arbeitsspeichers dient. Matlab kann zahl-reiche Dateiformate verarbeiten:

Dateityp Extensionen und BedeutungBinärdateien MAT (Matlab format)ASCII-Textdateien DLM (delimited text),

CSV (comma-separated numbers),TAB (tab-separated text)

Wissenschaftliche CDF (common data format),Daten HDF4, HDF5 (hierarchical data format)Tabellen-Daten XLS (Excel worksheet),(spreadsheets) WK1(Lotus 123 worksheet)Bilddateien TIFF, PNG, BMP, JPEG, GIF, PCX, ...Audio- u. Videodateien WAV (Microsoft), AVI, ...

Matlab-Funktionen zum Lesen/ Schreiben von Daten:Man unterscheidet elementare Dateiverarbeitung (low-level) von verein-fachter Verarbeitung auf höherem Niveau (high-level). Wir werden ins-besondere letztere betrachten.Low-Level File I/O: Kennzeichen ist die Nutzung eines File-Identifiers.Damit erfolgen explizites Öffnen und Schließen, elementare Lese- undSchreiboperationen, Bewegung des Dateizeigers usw.

Page 73: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 68

Funktion Wirkungfopen Öffnen von Dateien, Def. eines File-Identifiersfclose Schließen von Dateienfwrite Schreiben binärer Dateienfread Lesen binärer Dateienfprintf Schreiben formatierter Datenfscanf Lesen formatierter Datenfgetl Lesen einer Zeile einer Textdateifseek Setzen der Dateiposition (Dateizeiger)feof Abfrage des Datei-Status usw...

High-Level File I/O: Kennzeichen ist die direkte Benutzung des Da-teinamens ohne einen File-Identifier. Öffnen und Schließen erfolgen au-tomatisch.

Funktion Wirkungdiary Schreiben einer Protokoll-Textdatei<Name> Lesen einer Script-Datei <Name>.msave Schreiben von binären und ASCII-Textdateienload Lesen von binären und ASCII-Textdateiendlmwrite Schreiben ASCII-formatierter Dateiendlmread Lesen ASCII-formatierter Dateiencsvwrite Schreiben kommaseparierter ASCII-Dateiencsvread Lesen kommaseparierter ASCII-Dateien usw...

Page 74: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 69

3.15.1 Diary-Files und Script-Files in Matlab

1. Schreiben der Datei <Dateiname>.m :diary <Dateiname>.m oder diary('<Dateiname>.m')

erstellt eine ASCII-Textdatei <Dateiname>.m als Protokolldatei mitdem gesamten Tastatur-Input und Bildschirm-Output. Bemerkung:• diary off unterbricht/beendet die Speicherung• diary on setzt die Speicherung der aktuellen Datei wieder fort• diary <Dateiname>.m bei existierender Datei hängt das folgende

Protokoll an (append-Funktion)

speichert in das Script-File studenten.m das Strukturfeld student.2. Anzeige des Inhalts einer ASCII-Textdatei <Dateiname>.m :

type <Dateiname>.m oder Anzeige im Matlab -EditorNach Anzeige von studenten.m im Editor ist Löschen nicht benötigerZeilen und Veränderung leicht möglich!3. Lesen der Datei <Dateiname>.m :

Ausführen mit dem Aufruf <Dateiname>(ohne die Extension .m !) kreiert das Strukturfeld student im Works-pace. 4. Erweitern der Datei <Dateiname>.m :Mittels diary <Dateiname>.m wird zum Anhängen geöffnet.

3.15.2 Schreiben/ Lesen von Binärdateien

Ziel: Effiziente Speicherung von Variablen des Workspace zwecks späte-rer Weiterverarbeitung mit Matlab sowie Datenschutz!1. Schreiben (Speichern) einer Binärdatei <Dateiname>.mat :

savesave <Dateiname>

Page 75: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 70

save <Dateiname> var1 var2 ...save ... <Option> ...save('<Dateiname>', ...)

schreibt eine binäre Datei <Dateiname>.mat des akt. Workspace.• <Dateiname> kann einen (vollständigen oder partiellen) Pfad ent-

halten. Speicherung von <Dateiname>.mat im angegebenen bzw.aktuellen Verzeichnis.

• Fehlt <Dateiname>, so heißt die Datei matlab.mat.• save speichert alle Variablen des Workspace in <Dateiname>.mat;

die 3. Form speichert nur die aufgelisteten Variablen. Wildcard * istmöglich, z.B. A* oder klima* .

• Die Option -append speichert die Variablen am Ende einer existie-renden mat-Datei ab.

• Die Option -compress dient der komprimierten Speicherung (ab Ver-sion 7); Kompression und Unicode sind dort Defaults.

• save('<Dateiname>', ...) ist die äquivalente funktionale Form.

2. Einlesen (Laden) einer Binärdatei <Dateiname>.mat :loadload <Dateiname>load <Dateiname> var1 var2 ...load -mat <Dateiname><Variablenname> = load('<Dateiname>', ...)

liest (lädt) Variablen aus der binären Datei <Dateiname>.mat in denWorkspace.• load liest alle Variablen des MAT-Files matlab.mat in den Works-

pace.• load <Dateiname> liest alle Variablen des MAT-Files

<Dateiname>.mat in den Workspace.

Page 76: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 71

• Die 3. Form liest nur die aufgelisteten Variablen. Wildcard * ist mög-lich.

• Mit Option -mat wird die Datei als MAT-File behandelt, unabhängigvon der Datei-Extension.

• Die funktionale Form<Variablenname> = load('<Dateiname>', ...) speichert diegenannten (bzw. alle) Variablen in eine Struktur <Variablenname>.

3.15.3 Schreiben/ Lesen von ASCII-Textdateien

Ziel: Externe Speicherung von Variablen des Workspace zwecks Wei-terverarbeitung oder Korrektur mit allen Matlab -Versionen und mitanderen Programm-Umgebungen bzw. Editoren!Syntax:

save <Dateiname> var1 var2 ... -ASCIIsave <Dateiname> var1 var2 ... -ASCII -doubleload <Dateiname>load <Dateiname> -ASCII<Feldname> = load('<Dateiname>')

Semantik:• 1.Form: Speicherung im 8-bit ASCII-Format• 2.Form: Speicherung im 16-bit ASCII-Format• 3.Form: Falls Extension .mat, so erfolgt Lesen als Binätdatei, an-

dernfalls als ASCII-Datei• 4.Form: Lesen erfolgt stets als ASCII-Datei• 5.Form: Funktionale Form, die die Datei in eine Variable <Feldname>

einliest.

Page 77: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 72

Ergänzende Literatur zur Arbeit mit weiteren Dateiformaten:

1. Schweizer, W.:MATLAB kompakt. 4. aktualisierte Auflage, Oldenbourg Verlag,München 2009. Kap. 20 (File Handling und Datenverwaltung).

2. MATLAB 7 – Programming:Tutorial (pdf-Datei), TheMathWorks, 2007. Kap. 6 (Data Importand Export) und Kap. 7 (Working with Scientific Data Formats).

3.16 Symbolische Algorithmen und Grafik

Einer der Hauptzwecke der Computerentwicklung war stets das wissen-schaftliche Rechnen. Obwohl Computer die Fabrikation, Verwaltung,Kommunikation und den Kommerz vollkommen durchdrungen haben,werden die leistungsfähigsten Computer für das wissenschaftliche Rech-nen entwickelt.

Wissenschaftliches Rechnen (Scientific Computing)ist die Computer–Simulation technischer, naturwissenschaftlicher odersozialwissenschaftlicher Systeme mit Hilfe mathematischer Methoden.Es ist ein interdisziplinär orientiertes Gebiet, das insbesondere• numerische Verfahren entwickelt und testet,• effiziente Algorithmen auf leistungsfähigen Rechnern implementiert,• numerisches und symbolisches Rechnen einsetzt und die• Computersimulation komplizierter Prozesse unterstützt.

Bedeutung des Scientific Computing:• Simulation als Alternative zum Bau teurer Prototypen:

– Vermeidung teurer Versuchsanlagen– Luftfahrt- und Raumforschung– Vermeidung von Crashtests

Page 78: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 73

• Simulation nicht durchführbarer Experimente:– Veränderungen des Weltklimas– Zusammenstoß zweier Galaxien– Epidemiemodelle– Fortschritte bei der Lösung der grand challenge-Probleme

• Lösung von Alltagsaufgaben:– Steuerung der Heizanlage von Wohnungen– Konstruktion strom- und wassersparender Waschautomaten– Energiesparwirkung von Dämmmaßnahmen– Vorhersage von Schadstoffausbreitungen etc.

3.16.1 Computeralgebra-Systeme

Moderne Computer sind universelle Maschinen, die prinzipiell jeden belie-big gearteten Algorithmus - z.B. im Sinne von Turing - auszuführen im-stande sind. Algebraische (symbolische) Algorithmen bilden hierbei keineAusnahme - sie können von einem Computer genauso leicht und effizientausgeführt werden wie arithmetische (numerische) Algorithmen.

E : c := (a + b)3

a := 2.00; b := 3.00;

A : (2.00 + 3.00)3 =

125.00

E : c := (a + b)3

expand(c);

A : (a + b)3 =

a3 + 3a2b + 3ab2 + b3

Page 79: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 74

Definition 1 : Computeralgebra (CA)Computeralgebra (symbolisches Rechnen) beinhaltet die Algorithmie-rung, Implementation und Ausführung von endlichen mathematischenTransformationsvorschriften auf mathematischen Ausdrucksklassen mitHilfe von Computern.Computeralgebra ist symbolisches, algebraisches Rechnen, d.h. Rechnenmit Symbolen, die mathematische Objekte darstellen.

4 Vorteile des symbolischen Rechnens (CA)1. Einsparung wertvoller Rechenzeit

• Algebraische Vereinfachung von Formeln vor deren numerischerAuswertung

• Frage: Wann ist der Einsatz eines CA-Systems sinnvoll ?• Beispiel: Nullstellenbestimmung f(x) = 0

2. Exaktheit der Ergebnisse in der CA• Numerische Rechnungen sind mit Rundungsfehlern behaftet, wes-

halb Fehleranalysen erforderlich sind !• Beispiel: Berechnung von Integralen

3. Ingenieure und Naturwissenschaftler wollen Formeln – keine Zahlen• “Der Sinn der Berechnungen liegt darin, Einsichten zu gewinnen

– und nicht Zahlen.“ (Richard W. Hamming)• Beispiel: Parameterabhängigkeit von Reihen

4. Computeralgebra erweitert die “Grenzen des Machbaren“ in den Na-turwissenschaften• Theorie ⇒ Schlußfolgerungen ⇒ Experimentelle Prüfung• Die komplizierten algebraischen Berechnungen sind fehleranfäl-

lig und kaum von anderen nachvollziebar !• Beispiel: Berechnung der Mondbahn durch

Charles E. Delaunay : 20 Jahre !

Page 80: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 75

Definition 2 : Computeralgebra-System (CAS)Ein CAS ist ein Programmsystem, mit dessen Hilfe symbolische mathe-matische Transformationen auf mathematischen Ausdrucksklassenausführbar sind.

Historie der CAS:• 1953 – Diplomarbeit von H.G.Kahrimanian zur analytischen

Differentiation (Assemblerprogramm)• 1962 – LISP Programmers Manual (MIT) von J. McCarthy u.a.• 1967 – Polynom-Manipulationssystem von G.E.Collins (Fortran)• 1968 – REDUCE an der Uni von Utah (A.C.Hearn u.a.) entwickelt• 1969 – MACSYMA am MIT (J. Moses u.a.) auf LISP-Basis

entwickelt• 1974 – SCRATCHPAD (später AXIOM) mit guten algebraischen

Eigenschaften; von IBM vertrieben• 1980 – Erste Version von MAPLE an der Uni Waterloo, Kanada• 1987 – REDUCE 3.3 für Personalcomputer• 1987 – MATHEMATICA (Kern in C) mit bedienerfreundlicher

grafischer Oberfläche von S.Wolfram u.a. vorgestellt• 1988 – DERIVE für 386er PC aus MuMath weiterentwickelt• 1992 – 1. Release von MuPAD an Uni Paderborn (D) vorgestellt;

1994 mit European Academic Software Award prämiiert• 1996 – MATHEMATICA 3.0 mit vielen Verbesserungen (neuer Kern

zahlreiche Paletten etc.) und schneller Numerik• 2000 – MAPLE 6 mit Numerik-Funktionen zur linearen Algebra

aus der exzellenten NAG-Bibliothek• 2002 – MAPLE 8 mit GUI Maplets und mathematischen

Erweiterungen• 2007 – MAPLE 11 mit verbesserter Grafik, Physik-Paket etc.

Page 81: Wissenschaftliches Rechnen – Grundlagen · mit MATLAB Dr. Stefan Brechtken Wissenschaftliches Rechnen – Grundlagen | 2015/2016 14. Oktober 2015 1. Eine Sprache erlernt man nur,

Dr. Stefan Brechtken ♠ Wissenschaftliches Rechnen – Grundlagen ♣ 2015/2016 76

Teilgebiete von CA-Systemen• Exakte Ganzzahl- und Rationalzahl-Arithmetik

• Gleitpunkt-Arithmetik beliebiger Genauigkeit

• Manipulation von rationalen Funktionen

• Vektor- und Matrixalgebra

• Formelmanipulation und Mustervergleich

• Symbolische Lösung von algebraischer Gleichungen

• Elementare Analysis (Differentiation, Integration)

• Symbolische Lösung von Differentialgleichungen

• Höhere Analysis (Vektoranalysis, Tensoranalysis)

Anwendungsgebiete von CA-Systemen• Mathematik:

Algebraische Geometrie, Zahlentheorie, Numerik, Verzweigungstheo-rie, Tensoranalysis etc.

• Physik:Himmelsmechanik, allgemeine Relativitätstheorie, Strukturmecha-nik, Thermodynamik etc.

• Technik:Robotik, Schaltkreisentwurf, Finite-Elemente-Methode, Tragflächen-entwurf, Analyse dynamischer Netzwerke etc.