Poolraum und Computerpraktika der Fakultät für Physik
MATLAB

MATLAB

Eine Kurzeinfuehrung in Matlab

Wurde dieses File durch echodemo vorlesung aufgerufen, kann es Schrittweise ausgefuehrt werden.

Mit den Links oben kann vorwaerts navigiert oder abgebrochen werden. Ist die Ausgabe eines Abschnitts laenger als eine Seite muss man nach oben scrollen um an die Links zu gelangen.

Contents

Vorbereitung

clear all loescht alle gesetzten Werte. Dies verhindert, dass das Skript durch vorherige Definitionen verwirrt wird.

clear all;

Variablenzuweisung

Variablen werden mit = Werte oder Ergebnisse von Berechnungen zugewiesen

x=1
y=2
z=x+y
x =

     1


y =

     2


z =

     3

Unterdrueckung der Ausgabe

Soll das Ergebnis eines Befehls oder einer Zuweisung nicht ausgegeben werden, so muss man ihn einfach mit ; abschliessen

x=1;
sin(x);

Matlab kennt schon typische Groessen wie das komplexe i oder Naturkonstanten wie $\pi$

i
exp(i*pi)
ans =

        0 + 1.0000i


ans =

  -1.0000 + 0.0000i

Warnung

Vorsicht, auch alle internen Variablen und Funktionen lassen sich umdefinieren

i=1
sin=5
i =

     1


sin =

     5

Was zu unerwarteten Ergebnissen fuehren kann...

Gerade i ist ja als Schleifenzaehler beliebt

exp(i*pi)
ans =

   23.1407

... oder zu Fehlern

deren Warnung zwar stimmt aber nicht unbedingt die Ursache erklaert. ein Blick auf die definierten Variablen (-> Workspace) lohnt sich

sin(pi)
Subscript indices must either be real positive integers or logicals.

Error in vorlesung (line 49)
sin(pi)

Clear

Mit clear lassen Variablen oder Funktionen wieder aus dem Speicher loeschen. Vordefinierte Variablen nehmen dann wieder ihre alten Werte an.

clear i
clear sin

Und alles funktioniert wieder wie erwartet

i
sin(pi)

Vektor, Definition, Wertzuweiseung

Zeilenvektor werden mit eckigen Klammern definiert die Eintraege einfach durch Whitespaces oder Kommata getrennt

x=[1 3 4 2]

Doppelpunkt-Operator

Mit dem Doppelpunkt-operator werden fortlaufende, äquidistante Listen/Vektoren erzeugt.

x = 1:4
x = 0:0.1:0.4

Transposition

Vektoren und Matrizen lassen sich durch "dot-Tick" transponieren:

x.'

Der transponierte Vektor ist identisch zum Spaltenvektor bei dem die Einträge durch ; getrennt werden.

x2=[1;3;4;2]
x2'

Zugriff

Auf die einzelnen Elemente des Vektors wird ueber runde Klammern zugegriffen. Dabei koennen die Elemente angezeigt oder ihnen Werte zugewiesen werden

x
x(2)
x(2)=7
x(1:2)=1

Matrix, Definition, Wertzuweisung

Im folgenden werden wir Matrizen-Variablen gross und Vektor-Variablen klein schreiben. Dies dient nur der besseren Lesbarkeit, ist aber keine Konvention von Matlab

Die Reihen von Matrizen werden durch ; getrennt. Ein Spaltenvektor ist somit eigentlich eine n x 1 - Matrix

X=[ 1 3 4 2 ; 2 1 3 2 ] 

Transponierte Matrix:

Auch Matrizen lassen sich mit .' transponieren

X X.' 

mit ' erhält man die adjungierte Matrix

X
X'

Zugriff auf Matrix-Elemente

X=[ 1 3 4 2 ; 2 1 3 2 ; 4 9 2 0 ]
X(2,3)=7

Nicht nur auf einzelne Elemente, auch auf Teilmatrizen Spalten und Zeilen kann gezielt zugegriffen werden:

X(2:3,3:4)
X(:,1)
X(1,:)
x(:,1:2)

Elementweises Rechnen mit Vektoren

Die Grundrechenarten werden eigentlich als Matrixoperationen interpretiert. Stellt man der Operation allerdings ein . voran so wird diese auf jedes Element einzeln angewendet. Die Funktion linspace(X1,X2,N) generiert einen einen aequidistanten Vektor mit N Stuetzstellen zwischen X1, X2.

x=linspace(1,10,9)
y=x.^2

Elementweises Rechnen mit Matrizen

Auf die gleiche Art fuehrt man Berechnungen für jedes Element einer Matrix durch. Mit colon bzw. der Kurzform : kann man Vektoren aus Werten mit angegebenem Abstand erzeugen.

x=(0:0.1:1).^2
X=[ 0:0.1:0.5 ; (0:0.1:0.5).^2 ; 0:0.2:1; (0:0.2:1).^2 ]
X./2

Funktionen auf Vektoren...

Alle üblichen Funktionen sind implementiert. Wird als Option ein Vektor übergeben so wird die Funktion auf jedes Element einzeln angewandt.

x
y=cos(x)
y=cos(X(1,:))

...und Matrizen

ebenso kann man mit den Elementen einer Matrix rechnen

X
Y=cos(X)
Y=exp(-X)

Matrizen II

Matrizen koennen auch definiert werden in dem man ganzen Bereichen Werte zuweist Setzt man nur einen einzelnen Wert, wird der Rest der Matrix mit 0 aufgefuellt.

A(1:4,1:4)=1
clear A
A(4,4)=1
clear A

Hoehere Dimensionen

Neben Vektoren und Matrizen lassen sich Arrays beliebiger Dimension definieren.

A(1:4,1:4,1:2)=1
clear A

Meshgrid

Mit meshgrid koennen komfortabel Gitter erzeugt werden.

[X,Y] = meshgrid(0:0.1:0.5,0:0.2:0.8)
Z=Y.*cos(pi*X)

Matrixdiagonale

diag Diagonale

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
x=diag(A)
B=diag(x)

Nebendiagonalen

clear y
y(1:3)=1
B=diag(y,-1)
B=diag(x)+diag(y,-1)+diag(y,+1)

Vektor Operationen

A,B,x

A*x
A*x'
A/B
A*B^-1
B/A
A^2
A*B(:,1)
B(1,:)*A

Typische Matrixoperationen

A,B
trace(A)
det(B)

Eigenwerte, Eigenvektoren

eig

B
eig(B)
[V,E]=eig(B)
B*V(:,1)
E*V(:,1)

2 dimensionale Graphen

t=0:0.1:2;
x=cos(pi*t);
plot(t,x)
xlabel('t')
ylabel('xi')

plot(t,x,'r')

hold

y=exp(-t);
plot(t,y);
hold on
plot(t,x,'g')
hold off
plot(t,x)
Z,X
plot(X(1,:),Z)

2D Daten visualisieren:

surf mesh

[x,y] = meshgrid(-1:0.1:1,-1:0.1:1);
z = exp(-(x.^2+y.^2));
pcolor(x,y,z);
mesh(x,y,z);
surf(x,y,z);
meshc(x,y,z);
surfc(x,y,z);

Parametrische Plots in 3D

plot3

t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square

Import von Daten

load Matrix von Z-Werten

load SINM.dat
surf(SINM)

Export von Daten

save
x=1:0.1:2; y=x.^2;
save('/tmp/test.dat','-ascii','x')

unix('cat /tmp/test.dat')

Funktionen

open sinc
sinc(1)

Programmieren

open progDemo

Demo 1

plotWindCone

Demo 2

plotWindIso

Demo 3

plotWindStreamtube

Demo 4

windAnimation

Demo 5

teapotdemo