Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente:...

23
Sommercampus 2007 MATLAB-Kurs 1 Einführung in MATLAB Sommercampus 2007

Transcript of Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente:...

Page 1: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

Sommercampus 2007 MATLAB-Kurs 1

Einführung in MATLAB

Sommercampus 2007

Page 2: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 3: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 4: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 5: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 6: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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!

Page 7: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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)

:

'

+ ­ * / ^

Page 8: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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 !

<

Page 9: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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 = 1­3i      2­4i

complexi

Page 10: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 11: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 12: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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 Matlab­Skript

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

Page 13: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 14: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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, ...

Page 15: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 16: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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,...

Page 17: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

Sommercampus 2007 MATLAB-Kurs 17

Ein/Ausgabe: Datei-Import

● Über File­>Import Data, einfaches Importieren von Daten im Tabellenformat.

Page 18: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 19: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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:

Page 20: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

{}

Page 21: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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

Page 22: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

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.

Page 23: Einführung in - uni-freiburg.deSommercampus 2007 MATLAB-Kurs 7 Grundlegende Sprachelemente: Matrizen >>w=1:2:5 w=1 3 5 >>v(2,1:3) ans = 4 3 2 >>A = v(:,[1 3]) ans = 1 3

Sommercampus 2007 MATLAB-Kurs 23

Übungen

Übungen 1. TagÜbungen 1. Tag