Contents
Arithmetische Operationen und Variable
% Ausdrücke werden direkt ausgewertet. Dabei gibt es keinen speziellen % ganzzahligen Datentyp, sondern nur reelle (bzw. komplexe, siehe unten): 265/176 % Dieses Ergebnis ist erst mal nirgends gespeichert, nur auf dem Bildschirm % zu sehen. Wenn man später darauf zurückgreifen will, speichert man es am % besten in einer Variablen. x=265/176 % Dies geschieht durch einfache Wertzuweisung. Die zugehörige Variable wird % mit der Wertzuweisung definiert und deklariert. Der Wert ist nun unter % 'x' abrufbar: x % Voreinstellung in Matlab bei der Datenausgabe ist (in dieser Ausgabeform) % vier Nachkommastellen. Intern ist die Genauigkeit höher. In der Ausgabe % kann man dies durch 'format long' umstellen, bzw. durch 'format short' % oder 'format' wieder zurückstellen: format long; x format short; x % Reichen die eine Vorkomma und die vier Nachkommastellen nicht aus, geht % Matlab automatisch zu einer Gleitpunktdarstellung über: 17/675481754 % Will man Bildschirmoutput unterdrücken, schließt man die entsprechende % Zeile mit einem Strichpunkt ab: y=35*12; % Nun ist y berechnet, bekannt und kann in folgenden Ausdrücken verwendet % werden. Es hat aber keinen Output bei der Berechnung von y gegeben. % Inzwischen sind zwei Variable bekannt. Mit diesen kann man nun rechnen: z=x*y % Selbstverständlich können die Ausdrücke auch komplexer sein: z=1.45 + (2/6.4 - 1.01)/3 % Damit haben wir auch z überschrieben. Die alte Information in z ist nicht % mehr vorhanden! % Man kann die alte Information aber auch bei der Berechnung der neuen % verwenden: z=2*z % Bei den Ausdrücken gelten die üblichen arithmetischen Pioritäten: z=15 + 2*3 % und folgender Ausdruck sind natürlich nicht identisch: z=(15 + 2)*3 % Potenzen oder beispielsweise aufeinanderfolgende Divisionen werden von % links nach recht ausgewertet: 2^3^4 % entspricht (2^3)^4 % Will man jedoch 3 hoch 4 zuerst ausgewertet haben, muss man klammern: 2^(3^4) % entspricht 2^81 % Ich empfehle dringend, im Sinne der Lesbarkeit eines Programmes, mit % Klammern nicht zu sparen! % Variablennamen: max. 31 Zeichen: Buchstaben, Zahlen, Unterstriche. Es % wird zwischen Groß- und Kleinschreibung unterschieden: Z=5; Z z % Es gibt vordefinierte Variable: pi % Man kann diese Namen für etwas anderes verwenden, sollte das aber nicht % tun: pi=7; pi % Durch den clear-Befehl wird auf den ursprünglichen Zustand zurückgesetzt, % d.h. pi ist wieder pi, Z gibts nicht mehr: clear pi; clear Z; pi % Der Versuch jetzt Z auszugeben würde zu einer Fehlermeldung und dem % Abbruch dieses Programms führen. Deshalb hier auskommentiert: %Z % Eine weitere Vorbelegung besteht für i und j als komplexe Einheit. Dies % ist etwas unglücklich, da der geübte Programmierer i und j gerne als % Laufvariable benutzt. i % Außerdem hat Matlab die Eigenschaft, dass es automatisch komplex weiter % rechnet, wenn (evtl. aus Versehen) z.B. die Wurzel aus etwas negativem % gezogen wird. Im Normalfall hat man es nicht gleichzeitig mit reellen und % komplexen Größen zu tun, so dass man an dieser stelle lieber eine % Fehlermeldung hätte. sqrt(-4)
ans =
1.5057
x =
1.5057
x =
1.5057
x =
1.505681818181818
x =
1.5057
ans =
2.5167e-08
z =
632.3864
z =
1.2175
z =
2.4350
z =
21
z =
51
ans =
4096
ans =
4096
ans =
2.4179e+24
ans =
2.4179e+24
Z =
5
z =
51
ans =
3.1416
pi =
7
ans =
3.1416
ans =
0 + 1.0000i
ans =
0 + 2.0000i
Dateneingabe
% Im Prinzip kennt Matlab nur Matrizen. Einfache Zahlen sind demnach % 1x1-Matrizen. Bei der Dateneingabe ist zu berücksichtigen, dass sie % zeilenorientiert ist. D.h. einzelne Elemente einer Zeile werden durch ein % Leerzeichen voneinander getrennt. Ein Strichpunkt beendet eine Zeile. Die % ganze Matrix ist durch eckige Klammern eingeschlossen. % Folgendes ergibt demnach einen 1x3 Zeilenvektor: b=[1 2 3] % während folgendes einen 3x1 Spaltenvektor ergibt: c=[1; 2; 3] % Ist man bzgl. der Größe einer Matrix nicht sicher, so kann man über size % abfragen: size(b) % Ist man sicher, dass die Matrix eigentlich ein Vektor ist, so kann man % auch length benutzen. Allerdings sieht man keinen Unterschied zwischen % Zeilen- und Spaltenvektor: length(b) length(c) % Eine echte Matrix ist dann wie folgt einzugeben: A=[1 2 3; 4 5 6; 7 8 9] % Mit diesen Daten kann nun wie bekannt gerechnet werden: A*c b*A % Man ist selbst dafür verantwortlich, dass die Dimensionen passen. % Ansonsten gibt es eine Fehlermeldung. Hier auskommentiert, da das % Programm sonst abbricht. %A*b %b+c % Transposition erfolgt durch Hochkomma: b' A*b' b'+c % Zahl mal Vektor oder Matrix wird wie üblich berechnet: 3*b 5*A % Es gibt jedoch auch die Variante der komponentenweise Verknüpfung, z.B. % wie beim bekannten Skalarprodukt. Spätestens bei der Graphik werden wir % dies dringend brauchen. Diese Art der Verknüpfung erfolgt durch einen % Punkt vor dem Operator (+,-,*,/). Allerdings müssen auch hier die % Matrixdimensionen passen. %b.*c % passt nicht! b'.*c % Vergleichen Sie: A*A A.*A % Ersteres ist das mathematische Matrix-Matrix-Produkt. Zweiteres ist die % komponentenweise Verknüpfung, in diesem Fall also die Quadrierung der % einzelnen Elemente. % Es gibt einige vordefinierte Matrizen. So erzeugt zeros(n,m) eine nxm % Nullmatrix, ones(n,m) eine nxm-Matrix mit lauter Einsen, eye(n) die nxn % Einheitsmatrix, diag(v) liefert eine (quadratische) Diagonalmatrix, die in der % Diagonalen die Elemente des Vektors v trägt und auch dessen Dimension zum % Quadrat erbt. zeros(4,3) ones(2,5) eye(4) diag(b) diag(c) % Man kann auf einzelne Matrix-Elemente zugreifen: A(2,3) % Man kann auch auf einzelne Spalten oder Zeilen zugreifen. Erst die zweite % Spalte: A(:,2) % Dann die dritte Zeile: A(3,:) % Ein besonderes Feature ist die dynamische Erweiterung. Im Moment ist % unser A eine 3x3-Matrix. Ein Zugriff auf A(3,4) wird einen Fehler % erzeugen: %A(3,4) % Fehler! % Allerdings kann man A(3,4) einen Wert zuweisen. Man verändert damit % dynamisch die Größe der Matrix, und zwar so, dass sie rechteckig bleibt. % In diesem Fall wird eine vierte Spalte erzeugt, es bleibt aber bei drei % Zeilen. Nicht angesprochene neue Matrixelemente werden auf Null gesetzt. size(A) A(3,4)=18; size(A) A % Man kann auch einen ganzen Vektor als neue Zeile/Spalte hinzufügen: A(:,5)=c % Dabei kann man auch vorhandenes überschreiben: A(:,4)=c % Auch hier gilt: Die Dimensionen müssen passen: %A(4,:)=b % Fehler! % In Matlab gibt es eine ganze Reihe von vordefinierten Funktionen. Z.B. % die Matrixinversion inv(), das Lösen linearer Gleichungsysteme A*x=c % durch A\c, die Determinante det() ... clear A A=rand(3,3) % erzeugt eine zufällige 3x3 Matrix x=A\c det(A) rank(A) inv(A) %Kontrolle: inv(A)*c-x % sollte der Nullvektor rauskommen, zumindest numerisch % Oder z.B. Eigenwerte und Eigenvektoren. Z.B. listet der Befehl eig(A) die % Eigenwerte von A als Vektor auf. Durch folgenden Befehl werden die % Eigenwerte gleich in einem Spaltenvektor w gespeichert: w=eig(A) % Generelle Hilfe erhält man durch help. Hilfe zu einem Befehl z.B. durch % help inv. Durch help wurd eine ganze Liste von Unterpunkten angezeigt. % Z.B. help elmat zeigt einige der Matrix-Funktionen. % Eine andere Möglichkeit ist das Aufschlagen der Dokumentation. Manchmal % kann man am Ende einer help-Anzeige direkt anklicken. Ansonsten rufe man % im Matlab-Fenster help --> Matlab help oder Product help auf.
b =
1 2 3
c =
1
2
3
ans =
1 3
ans =
3
ans =
3
A =
1 2 3
4 5 6
7 8 9
ans =
14
32
50
ans =
30 36 42
ans =
1
2
3
ans =
14
32
50
ans =
2
4
6
ans =
3 6 9
ans =
5 10 15
20 25 30
35 40 45
ans =
1
4
9
ans =
30 36 42
66 81 96
102 126 150
ans =
1 4 9
16 25 36
49 64 81
ans =
0 0 0
0 0 0
0 0 0
0 0 0
ans =
1 1 1 1 1
1 1 1 1 1
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
ans =
1 0 0
0 2 0
0 0 3
ans =
1 0 0
0 2 0
0 0 3
ans =
6
ans =
2
5
8
ans =
7 8 9
ans =
3 3
ans =
3 4
A =
1 2 3 0
4 5 6 0
7 8 9 18
A =
1 2 3 0 1
4 5 6 0 2
7 8 9 18 3
A =
1 2 3 1 1
4 5 6 2 2
7 8 9 3 3
A =
0.7922 0.0357 0.6787
0.9595 0.8491 0.7577
0.6557 0.9340 0.7431
x =
-3.1496
1.3840
5.0767
ans =
0.1618
ans =
3
ans =
-0.4740 3.7530 -3.3939
-1.3356 0.8875 0.3148
2.0968 -4.4272 3.9447
ans =
1.0e-14 *
-0.1332
0.0222
-0.0888
w =
2.0832
0.1507 + 0.2345i
0.1507 - 0.2345i
Umgang mit dem Matlab-Fenster
% Matlab wird entweder über ein icon oder in der Konsole mit dem Befehl % 'matlab&' aufgerufen. Im zweiten Fall befindet man sich bzgl. Matlab in % dem Directory, in dem Matlab gestartet wurde. Im ersten Fall hängt es von % den Grundeinstellungen ab. % Es öffnet sich ein Fenster, in dem üblicherweise auf der rechten Hälfte % der Befehlseingabemodus zu sehen ist. Hier können Sie direkt % Matlab-Kommandos eingeben. In der linken Hälfte unten ist normalerweise % die 'command history' zusehen, d.h. die zuletzt eingegebenen Befehle. % Oben kann man sich das gegenwärtige Directory anzeigen lassen, oder % alternativ den 'workspace', d.h. alle aktuellen Variable. Doppelklickt man auf % eine davon so öffnet sich der 'variable editor', d.h. ein Fenster, in dem % man zum einen die aktuellen Variablenwerte betrachten kann, und zum % anderen auch recht komfortabel editieren kann. % Matlab-Befehle kann man auch aus einer Datei abrufen. Die Dateiendung muss .m % sein. Z.B. kann man die Befehle dieser Datei durch Aufruf von Lecture1 % abrufen. Man muss sich dazu aber im richtigen directory befinden. Dieses % ist ggf. mit den Betriebssystem-Befehlen 'cd ..' bzw. cd <neues % directory> zu ändern. % Befindet man sich links oben im Directory-Fenster, so kann man durch % Doppelklick ein vorhandenes m-File mit dem Matlab-eigenen Editor öffnen. % Man kann ein m-File grundsätzlich mit jedem Editor bearbeiten, der % Matlab-Editor ist für diesen Zweck aber empfehlenswert. % Ein neues m-File kann man in der Matlab-Menüleiste durch File --> New --> % m-file erzeugen. Es öffnet sich automatisch der Editor. % Achtung: Obige Beschreibungen können unter Umständen bei verschiedenen % Matlab-Versionen etwas variieren, sollten aber immer zumindest ähnlich % sein!