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
- Variablenzuweisung
- Unterdrueckung der Ausgabe
- Warnung
- Was zu unerwarteten Ergebnissen fuehren kann...
- ... oder zu Fehlern
- Clear
- Und alles funktioniert wieder wie erwartet
- Vektor, Definition, Wertzuweiseung
- Doppelpunkt-Operator
- Transposition
- Zugriff
- Matrix, Definition, Wertzuweisung
- Transponierte Matrix:
- Zugriff auf Matrix-Elemente
- Elementweises Rechnen mit Vektoren
- Elementweises Rechnen mit Matrizen
- Funktionen auf Vektoren...
- ...und Matrizen
- Matrizen II
- Hoehere Dimensionen
- Meshgrid
- Matrixdiagonale
- Vektor Operationen
- Typische Matrixoperationen
- Eigenwerte, Eigenvektoren
- 2 dimensionale Graphen
- 2D Daten visualisieren:
- Parametrische Plots in 3D
- Import von Daten
- Export von Daten
- Funktionen
- Programmieren
- Demo 1
- Demo 2
- Demo 3
- Demo 4
- Demo 5
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
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
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:
[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
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