Teil II Programmierung mit MATLAB

Werbung
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
Herunterladen