Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente:...
Transcript of Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente:...
Sommercampus 2007 MATLAB-Kurs 1
Einführung in MATLAB
Sommercampus 2007
Sommercampus 2007 MATLAB-Kurs 2
Ablauf des Kurses
I. Einführung• Grundlegende Sprachelemente
• Programmierung/Kontrollstrukturen
• Ein/Ausgabe, Datenstrukturen
II. Fortgeschrittenes • Mex-Interface
• Image Processing Toolbox
Sommercampus 2007 MATLAB-Kurs 3
Übersicht: Einführung
● Was ist MATLAB?
● Oberfläche/Arbeitsumgebung
● Grundlegende Sprachelemente
– Variablen, Arrays, Matrizen, Lineare Algebra● Programmierung
– Control statements, M-File, Funktionen● Einfache Ein/Ausgabe
– Plotting, File IO● Fortgeschrittene Datenstrukturen
– Structures, Cell Arrays
Sommercampus 2007 MATLAB-Kurs 4
Was ist MATLAB?
● Der Name sagt schon viel: MATrix LABor
● Imperative Programmiersprache, Interpreter
● Für numerische Berechnungen! (keine symbolische/algebraische Funktionen -> Mathematica, Maple)
● Matrizen/Array basiert, Lineare Algebra als Grundelement
● Komfortable Umgebung (Debugger, Profiler, Code- completion, Command History, Variablenüberwachung, ...)
● Einfache GUI-Programmierung
● Eine Vielzahl an Toolboxen, aber auch sehr viel ist built-in
Sommercampus 2007 MATLAB-Kurs 5
Oberfläche/Arbeitsumgebung
● Fenster: Command Window (Prompt ), Workspace, Command History, Editor, ... eigene Fenster/Plots etc.
● Einfacher 'Help Navigator' integriert. (press F1)
● oder von der Kommandozeile
● Suche nach einem Befehl mit
● Befehle sind Built-in oder über M-file definiert, – M-files stehen im akt.Verz. oder im über File->SetPath def.
Verzeichnis. 'Dateinname=Befehlsname'
● Onlinehilfe und Demos unter http://www.mathworks.com/
● Demos
>>help funcname
>>lookfor substr
>>
>>Demos
Sommercampus 2007 MATLAB-Kurs 6
Grundlegende Sprachelemente: Variablen
● Variablen müssen nichtdeklariert werden
● Jede Variable ist auch Array● Die -Klammern für Zugriff und
Zuweisung● Die -Klammern dienen zur
Konstruktion und Konkatenation● Zur Zeilen-konkat. Semikolon● Mehr-dimensionaler Zugriff/
Zuweisung über
>>v=1v = 1
>>v(2) = 2v = 1 2
>> v = [v 3 4]v = 1 2 3 4
>> v = [v ; 4 3 2 1]v = 1 2 3 4 4 3 2 1
>> v(2,1)ans = 4
[]
()
;
(,)
Indizes sind immer 1-basiert!
Sommercampus 2007 MATLAB-Kurs 7
Grundlegende Sprachelemente: Matrizen
>>w=1:2:5w=1 3 5
>>v(2,1:3)ans = 4 3 2
>>A = v(:,[1 3])ans = 1 3 4 2
>>A' ans = 1 4 3 2
>> w * w'ans = 35
>> [1 1] * Aans = 3 1
● Der zum generieren von Listen● Aber auch zum Zugriff per
Index-liste● Transponieren (Zeilen und
Spalten-Index tauschen) mit ● Es sind die normalen Rechen-
operationen für Matrizen bzw. Vektoren definiert,
● Aufgepasst: die Matrix-dimensionen müssen stimmen!(aber: bei Skalaren gibt es Sonderregeln)
:
'
+ * / ^
Sommercampus 2007 MATLAB-Kurs 8
Grundlegende Sprachelemente: Matrizen
>>A = [0 1; 1 0];
>>A < 0ans = 0 0 1 0
>>A * Aans = 1 0 0 1
>>A .* Aans = 0 1 1 0
● Skalare Funktionen wie z.B. sind kompenten-weise definiert
● Auch relationale Operatoren wie z.B. sind komponentenweise definiert.
● Matrizenmultiplikation oder potenzierung kann man perauch kompentenweise benutzen
sqrt,abs,mod
.*.^
um Ausgabe zu unterdrücken !
<
Sommercampus 2007 MATLAB-Kurs 9
Grundlegende Sprachelemente: Matrizen
● Mittles und können Größe des Arrays ermittelt werden.
● Zum 'reshaping' benutze und
● Komplexe Zahlen sind grund-legender Bestandteil
● Erzeugung mittels oder
● Aufpassen bei transponieren!Eine kompl. Konjugation ist mit-inbegriffen
length
reshape
size
(:)
>> size(A)ans = 2 2
>> A(:)'ans = 0 1 0 1
>> reshape(A(:)',2,2)ans = 0 1 1 0
>> z = complex([1 2],[3 4])ans = 1+3i 2+4i
>> z'ans = 13i 24i
complexi
Sommercampus 2007 MATLAB-Kurs 10
Grundlegende Sprachelemente: Matrizen
● Häufig benutzte Befehle:
Hilfe zu gegebenen Befehlsize(A)
ones(n,m)
zeros(n,m)
eye(n)
rand(n,m)
randn(n,m)
sum(A)
mean(A)
sort(A)
find(A)
help cmdname
Gibt Arraydimensionen zurück
n*m-Matrix gefüllt mit Einsen
n*m-Matrix gefüllt mit Nullen
Einheitsmatrix der Dimension n
n*m-Matrix gefüllt Zufallszahlen [0,1]-gl.verteilt
n*m-Matrix gefüllt normalvert. Zufallszahlen
Summe über die erste Arraydimension
Mittelwert über die erste Arraydimension
Sortieren über die erste Arraydimension
Gibt alle Indices i für die A(i) ~= 0
lookfor str Sucht nach Befehl mit Teilstring <str>
whos var Gibt Variableninformation zurück
Sommercampus 2007 MATLAB-Kurs 11
Grundlegende Sprachelemente: LA
● Häufig benutzte Befehle aus der Linearen Algebra:
Determinanteeig(A,B)
eigs(A,B,k)
svd(A)
norm(A)
pinv(A)
chol(A)
lu(A)
qr(A)
sqrtm(A)
expm(A)
det(A)
gesamtes Eigensystem Ax = aBx
k größten Eigenvektoren.
Singulärwertzerlegung
Vektor- und Matrixnormen
Pseudoinverse
Cholskyzerlegung
LU-Zerlegung
QR-Zelegung
Wurzel einer Matrix
Exponential einer Matrix
inv(A) Inverse Matrix
logm(A) Logarithmus einer Matrix
Sommercampus 2007 MATLAB-Kurs 12
Programmierung: M-files/Funktionen
● Ein ausführbares MATLAB- Skript oder Funktion wird in einem M-file (.m) gespeichert.
● Skript– Aufruf über Dateinamen
– darf keine Subfunktionen enthalten
● Funktionen
– Aufruf der Funktion über Dateinamen
– kann beliebig viele Subfunktionen enthalten. (erste Funktion in Dateiist 'Hauptfunktion')
%% Das ist ein MatlabSkript
A = 2*pi * (1:0.1:5);plot(sin(A));
%% oder eine Funktion
function myfun(n) A = 2*pi * (1:0.1:5); plot(derSinus(A));return;
function Y = derSinus(X) Y = sin(X);return;
function [A,B,..] = fun(X,Y,..)
meinefunktion.m
meinscript.m
Sommercampus 2007 MATLAB-Kurs 13
Programmierung: Flow Control
● Schleifen:
● Bedingte:
● Error handling:
>>A = [0 1; 1 0];
>>A < 0ans = 0 0 1 0
>>A * Aans = 1 0 0 1
>>A .* Aans = 0 1 1 0
>>A = [0 1; 1 0];
>>A < 0ans = 0 0 1 0
>>A * Aans = 1 0 0 1
>>A .* Aans = 0 1 1 0
mysum = 0;for k = 1:5, mysum = mysum + k;end;
I = [4 3 2];for k = I, mysum = mysum + k;end;
while true if mysum == 20, break; end;end;
for, while,break, continue
if, else, elsif,switch
try ... catch
Sommercampus 2007 MATLAB-Kurs 14
Ein/Ausgabe: Bildschirm/Tastatur
● Tastatureingabe
● Warten
● formatierte Bildschirmausgabe
C-ähnlicher Syntax!
● Grafische Ausgabe
und viele, viele mehr!
n = inputstring('enter some numval:');str = inputstring('enter string:','s');
pause(delay);
fprintf('Hallo ! Ich bin %i Jahre alt!',age);
plot, plot3, bar, hist, polar, contour, imagesc, surf, mesh, ...
Sommercampus 2007 MATLAB-Kurs 15
Ein/Ausgabe: Grafik
X=2*pi* (0:0.01:2);
plot(sin(X));
plot(X,sin(X),'r',X,cos(X),'g');
[X Y] = meshgrid(2:0.01:2);
R2 = X.^2+Y.^2;
surf( X .* exp(R2) );
Beispiel: 2D-Plots
Beispiel: 3D-Plots
Sommercampus 2007 MATLAB-Kurs 16
Ein/Ausgabe: Datei
● Einfache I/O mit C-ähnlichenBefehlen:
● Komfortables I/O von MatlabVariablen mittels
fopen,fclose,fprintf,fwrite,fread,...
A = rand(4);
% A binär in 'test' speichernfid = fopen('test','wb');fwrite(fid,A,'integer*4');fclose(fid);
% alle Variablen des Workspace% in myvars.mat speichernsave 'myvars';
% Workspace säubernclear All
% Variable A wieder ladenload 'myvars' A;
load,save,open,...
Sommercampus 2007 MATLAB-Kurs 17
Ein/Ausgabe: Datei-Import
● Über File>Import Data, einfaches Importieren von Daten im Tabellenformat.
Sommercampus 2007 MATLAB-Kurs 18
Datenstrukturen: Structures
Student.Name = 'Micky Maus';Student.Note = 1.5;Student.MatrNr = 1234567;
Student(2).Name = 'Donald';Student(2).Note = 3.7;Student(2).MatrNr = 8765432;
%% umständlich:mysum = 0;for i = 1:length(student), mysum = mysum + ...
Student(i).Note;end;
%% einfach:mysum = sum([Student.Note]);
● Strukturen sind Sammlungen von Daten verschiedenen Typs
● Strukturarrays beinhalten alleStrukturen gleichen Typs
● Strukturarrays verhalten sichwie numerische Arrays
● Um simultan auf alle Werteeines Feldes zuzugreifen,lasse Arrayindex einfach weg
StudentName
MatrNr
Note Double
Integer
String
Sommercampus 2007 MATLAB-Kurs 19
Datenstrukturen: Structures
● Es gibt eine Vielzahl von Funktionen um Strukturen zumanipulieren und zu erzeugen:
fieldnames
getfield
isfield
isstruct
rmfield
setfield
struct
AnonymStudent = rmfield(Student,'Name');
wetter(2) = struct('temp',20,'regen',0.0);wetter = struct('temp',{20,21},... 'regen',{0.0,1.0});
Nested = struct('Name','Donald',... 'Adresse',struct('Strasse','Querstr.',...
'Ort,''Entenhausen') );
>> Nested.Adresse.Ortans = 'Entenhausen'
Beispiele:
Sommercampus 2007 MATLAB-Kurs 20
Datenstrukturen: Cell Arrays
● Ähnlich wie Strukturen, dienenCell-Arrays zum Verwalten vonDaten verschiedener Typen
● Grundbestandteil ist eine Cell,die beliebige Matlab-Datenaufnehmen kann
● Erstellen einer Cell durch Kapseln in geschweiften Kl.
● Zugriff erfolgt auch mit
● Cell-Array Verhalten ähnlichdem Verhalten normalerArrays
{}
>> carr(1) = {[1 2]};>> carr(2) = {3};>> carr{3} = 4;>> carr(3) = {4};
>> carr(3) ans = [4]
>> carr{3}ans = 4
>> X = {1,2,3}X = [1] [2] [3]
>> [X{:}]ans = 1 2 3
>> [carr{:}]ans = 1 2 3 4
{}
Sommercampus 2007 MATLAB-Kurs 21
Datenstrukturen: Cell Arrays
● Es gibt eine Vielzahl von Funktionen um Cell-Arrayszu manipulieren und zu erzeugen:
Beispiele:cell
cell2struct
celldisp
cellfun
cellplot
deal
iscell
>> A = cell(3,4);>> size(A)ans = 3 4
>> A = cell(2,2);>> A{2,2} = cell(3,3);>> A{2,2}{3,3} = 23;
>> A = cell{2,2,3,3};>> A{2,2,3,3} = 2233;
>> [x1,x2] = deal(X{1:2})x1 = 1x2 = 2
Sommercampus 2007 MATLAB-Kurs 22
Allgemeine Programmier Tips
● Vermeide so gut es Schleifen über große Arrays=> sehr langsam (Interpreter)
● Auswege:
– nutze vektorisierte built-in Funktionen. (sum,find,...)– nutze Indexarrays
● Iterative Speicherallokation kann sehr langsam sein
● Ausweg: Speicher im voraus allozieren.
Sommercampus 2007 MATLAB-Kurs 23
Übungen
Übungen 1. TagÜbungen 1. Tag