Teil II Programmierung mit MATLAB Überblick 1 Grundlagen der Programmierung 2 MATLAB als Programmiersprache 3 Grundlagen: Variablen, Datentypen, Vektoren 4 Funktionen in MATLAB 5 Kontrollstrukturen 6 Nutzerinteraktion und Visualisierung Programmentwicklung: Problem Programm muss von Menschen geschrieben werden und auch für andere Menschen verständlich sein Programm muss vom Prozessor ohne Mehrdeutigkeiten und effizient ausgeführt werden Programmentwicklung: Lösung MATLAB x = input(’x = ’); if (x>0) fprintf(’Positiv.\n’); end if (x==42) fprintf(’Zahl 42. \n’); end Programmierer verfasst Programm in sogenannter Hochsprache Machine Code FA 33C0 8ED0 BC007C 8BF4 50 07 50 1F FB ... Assembler CLI XOR AX,AX MOV SS,AX MOV SP,7C00 MOV SI,SP PUSH AX POP ES PUSH AX POP DS STI Für die Ausführung durch den Prozessor wird das Programm auf eine dem Prozessor eigene Maschinensprache umgesetzt Hochsprache vs. Maschinensprache Programm wird in sogenannten Hochsprachen geschrieben Für die Ausführung durch den Prozessor wird das Programm auf eine dem Prozessor eigene Maschinensprache umgesetzt Zwei Möglichkeiten: Compilierung von Programmen: spezielles Programm (Compiler ) übersetzt Programm vor der Ausführung in Maschinensprache eines gegebenen Prozessors Interpretation von Programmen: spezielles Programm (Interpreter ) setzt Programmbefehle während der Ausführungszeit auf Prozessorbefehle um Compiler vs. Interpreter Compiler Allgemein schnellere Ausführung Ursprünglicher Code in der Regel nicht mehr rekonstruierbar → Schutz des Quelltextes Breiter Einsatz für Programmierung von Betriebssystemen, Anwendungsprogrammen, etc. C, C++, Pascal/Delphi, FORTRAN und zahlreiche weitere Interpreter Langsamere Ausführung wegen Aufwand für Übersetzung Laufzeitfehler durch Syntaxfehler möglich Quelltext des Programmes bleibt sichtbar: kein Schutz, aber offen für beliebige Anpassungen durch dritte Aber: plattformunabhängige Programme (überall wo Interpreter läuft) Einsatz als Skriptsprachen zur Ausführungssteuerung, und im Web etc. MATLAB, Perl, PHP, JavaScript, Python und viele andere Compiler vs. Interpreter /2 In letzten Jahren Mischformen populär, wie z.B. Java (Sun) und .NET (Microsoft) Compiler übersetzt Programme in „maschinennahen“, aber plattformunabhängigen Code Laufzeitumgebung (JRE bei Java, CLR bei .NET) übernimmt letzten Schritt der Umsetzung Zum Teil auch Compiler für interpretierte Sprachen vorhanden Technisch unproblematisch Dient der Steigerung der Performance und/oder dem Schutz der Quelltexte Compiler auch für MATLAB-Programme Algorithmen Aber: was genau macht das Programm? Rückblick: Definition (Informatik) Informatik ist die Wissenschaft von der systematischen und automatischen Verarbeitung von Informationen, insbesondere mit Hilfe von Computern. Die „systematische und automatische Verarbeitung“ wird durch den Begriff Algorithmus präzisiert. Definition (Algorithmus) Ein Algorithmus ist eine eindeutige Beschreibung eines in mehreren Schritten durchzuführenden Vorgangs zur Lösung einer bestimmten Klasse von Problemen. Algorithmusbeispiel: Kuchen Backen Problem: Kuchen Backen Algoritmus: Backrezept Input: Eier, Mehl, ... Output: Kuchen 1. 2. 3. 4. 5. 6. Zutaten vermengen Teig kneten Teig in Backform Backform in Backofen Kuchen 1h backen Kuchen entnehmen Vom Problem zur Lösung Problemanalyse Algorithmus Programmierung Programm in Hochsprache Von der Entwicklung bis zur Ausführung von Programmen Übersetzung Programm in MaschinenSprache Arbeitsschritt Ergebnis Ausführung Durch Prozessor Prozess mit Ausgabe des Resultats Die MATLAB Entwicklungsumgebung Grafische Nutzungsschnittstelle für Interaktives Lösen mathematischer Probleme Verwaltung von Daten in Variablen und Dateien Grafische Ausgabe von Funktionsdiagrammen (Plots) Bearbeitung und Ausführung von Programmen Erweiterungen der Funktionalität Die MATLAB Entwicklungsumgebung Die MATLAB Entwicklungsumgebung: Aufbau Hauptfenster: Befehlsfenster (Command Window): interaktive Eingabe einzelner Befehle Editor: Erstellen und Ausführen von Programmen, gespeichert als .m-Dateien Weitere Fenster: Dateibrowser (Current Folder): Überblick über Programme und andere Dateien Befehlshistorie (Command History): zuletzt eingegebene Befehle Arbeitsumgebung (Workspace): Belegung, Typ und Speichergröße aktuell genutzter Variablen Fenster können durch nach Bedarf angeordnet oder geschlossen werden MATLAB als Programmiersprache MATLAB ist eine interpretierte Programmiersprache: Programme werden zu Laufzeit übersetzt MATLAB ist eine imperative Programmiersprache: ein Algorithmus ist dargestellt als Sequenz von hintereinander auszuführenden Befehlen MATLAB ist eine prozedurale Programmiersprache: zur Strukturierung des Quelltextes kann der Gesamtalgorithmus in inhaltlich zusammenhängende und durch Aufruf verwendbare Prozeduren (Funktionen) zerlegt werden MATLAB ist eine objekt-orientierte Programmiersprache: zur weiteren Strukturierung können Daten von Objekten sowie die zugehörige Funktionalität als Methoden in Klassen zusammengefasst werden MATLAB als Programmiersprache: Grundlagen Variablen halten Werte von Zahlen, Vektoren, Matrizen, Zeichenketten und komplexere Objekten Operatoren können Werte berechnen und Variablen verändern Zahlreiche vordefinierte Funktionen Funktionen können auch vom Nutzer als Teil eines Programms definiert werden Ausdrücke setzen sich aus Variablen, Operatoren und Funktionsaufrufen zusammen Programm besteht aus Sequenz von Ausdrücken Außerdem: Programmablauf über Steueranweisung Bedingte Ausführung/Verzweigungen Programmschleifen Variablen Variable ist (wie aus der Mathematik gewohnt) ein Name/Platzhalter für einen veränderlichen Wert » x = 7; » y = 3.1415926; » z = ’Hello!’; Werte können Zahlen, logische Werte, Zeichen/-ketten, Vektoren, Matrizen und komplexere oder nutzerdefinierte Konstrukte sein Datentypen Dienen der Festlegung, welche Arten von Werten genutzt werden können, wie sie gespeichert, verarbeitet und interpretiert werden Grundlegende Klassen von Datentypen Numerische Datentypen: ganze Zahlen (Integer) und Fließkommazahlen (Floating Point) Textdatentypen: Zeichen (Character), Zeichenketten (String) Logische Datentypen (Logical), meist zweiwertige Bool’schen Logik mit Werten Wahr oder Falsch Für numerische Daten in der Regel Unterklassen verfügbar je nach Anforderungen bzgl. Speicherverbrauch, Datenbereichsgröße und Genauigkeit Typkonstruktoren wie Felder, Strukturen, Klassen, etc. erlauben Zusammensetzen komplexerer Typen, z.B. für Mediendaten (Bilder, Audio, Video) oder anwendungsspezifische Daten Grundlegende Datentypen in MATLAB /1 double für beliebige Fließkommazahlen Wird kein Typ für eine numerische Variable angegeben, ist der Typ automatisch double Verwendet 8 Byte, Werte zwischen 3.4 ∗ 1038 und −3.4 ∗ 1038 Präzision bis ca 15 Dezimalstellen Alternative: single mit 4 Byte Kodierung entsprechend IEEE Standard for Floating-Point Arithmetic (IEEE 754) int32 für ganze Zahlen 4 Byte (32 Bit), Wertebereich von −231 und −231 − 1 Alternativen: int8, int16, int64 bzw. ohne Vorzeichen (unsigned) uint8, uint16, uint32, uint64 Grundlegende Datentypen in MATLAB /2 char für Zeichen und Zeichenketten Unicode: 2 Bytes pro Zeichen Felder für Zeichenktten Automatischer Typ bei Zuweisung mit Hochkommas » s = ’Das ist eine Zeichenkette.’; Alternative: string als Datentyp mit zusätzlichen Funktionen auf textuelle Daten logical für logische Werte Zweiwertige Logik: Werte 0 (false) oder 1 (true) Erlauben logische Verknüpfungen: and, or, not, xor, etc. Datentypen Konvertieren oder Festlegen Spezielle Funktionen mit Namen der Datentypen erlauben Typkonvertierung bzw. Typzuweisung bei Erzeugung Können bei der Variablendeklaration verwendet werden » y = int8(5) y = 5 Vorsicht: Typkonvertierung kann zu Präzisionsverlust » i = int32(3.1415) i = 3 oder Fehlern führen » y = uint32(-5) y = 0 Datentypen Anzeigen Anzeige aktueller Variablen mit Datentypen whos » x = 7; » y = 3.1415926; » z = ’Hello!’; » whos Variables in the current scope: Attr Name Size Bytes Class x y z 1x1 1x1 1x6 8 8 6 double double char oder mit » whos <variablenname> für einzelne Variable Hilfe zu Datentypen mit help datatypes Der Zuweisungsopeator = Zuweisung: Variable auf der linken Seite erhält Wert des evaluierten Ausdrucks auf der rechten Seite Erlaubt z.B. » x = x + 4; Nicht als Gleichung zu verstehen Zu lesen als „der neue Wert von x ergibt sich aus dem alten Wert von x plus 4“ Weitere wichtige Operatoren Standardisierte Rechenoperatoren wie +, −, ∗, ÷ etc. Existieren als Operatoren für Einzelwerte (z.B. .+) oder für alle Werte von Vektoren oder Matrizen (einfach +) Auch definiert als (überladbare) Funktionen z.B. plus() Vergleichsoperatoren wie == (Gleicheit), ∼= (Ungleichheit), <=, >=, >, < etc. Ergebnis der Auswertung ist logischer Wert Logische Operatoren AND (& oder &&), OR (| oder ||) und NOT (∼) Weitere Operatoren für Matrizen und Mengen sowie nutzerdefinierte Operatoren Vektoren Tupel von Fließkommazahlen unterschiedlicher Dimensionalität In der Programmierung auch als Feld (Array) bezeichnet Spaltenvektor (n ∗ 1-Matrix) » v = [1 ; 2 ; 3] v = 1 2 3 Zeilenvektor (1 ∗ n-Matrix) » u = [1 , 2 , 3] u = 1 2 3 Vektoren /2 Neben der Belegung mit literalen Werten auch Hilfsfunktionen vorhanden Vorbelegung mit Nullwerten » v = zeros(1,5) v = 0 0 0 0 0 Vorbelegung mit Zahlenbereich » v = 1:4 v = 1 2 3 4 Array von bestimmtem Datentyp durch Kombination mit Typkonvertierungsfunktion » v = int8(1:5) v = 1 2 3 4 5 Matrizen Matrizen von Fließkommazahlen unterschiedlicher Dimensionalität » m 1 7 m = [ 1, 5 ; 7, 2] = 5 2 Zahlreiche Funktionen zur Definition vorhanden, z.B. » m 0 0 0 m = 0 0 0 = zeros(3,3) 0 0 0 Operationen auf Matrizen Manche Operationen können auf ganze Matrix ∗ oder auf Komponenten .∗ ausgeführt werden » m = [ 1, 5 ; 7, 2]; » m * m ans = 36 15 21 39 » m .* m ans = 1 25 49 4