Matlab ist ein (kommerzielles, teures) Programmpaket, das es auf einfache Weise erlaubt, nummerische Rechnungen interaktiv durchzuführen und Daten grafisch darzustellen. Der Umgang mit Vektoren und Matrizen wird in natürlicher Weise unterstützt, ebenso das Rechnen mit komplexen Größen. Umfangreichere Programme können als Matlab-Skripte abgelegt werden. Viele effiziente Funktionen sind eingebaut und erlauben auch die Ausführung anspruchsvoller Rechnungen.
Frei verfügbare Programme mit ähnlicher Zielrichtung sind GNU Octave und Scilab.
Eine schnelle Auskunft zu einem bekannten Befehl erhält man auch so:
>> help sqrt
Matlab wird beendet durch
Mit Hilfe der Rechenzeichen
+ - * / ^ ( )
kann man einfache Rechenaufgaben am Matlab-Prompt eingeben,
die Antwort wird unmittelbar angezeigt. Zunächst erscheinen nur ca.
5 Dezimalstellen, wer es genauer wissen will, kann umstellen mit
format long
r = (3^2 + 2*5.5)^4 | reele Arithmetik |
z = (5 + 2i)/(3 + 4i) | komplexe Arithmetik |
u = z/r komplexe Arithmetik
| |
zeile = [1 2 3] | Zeilenvektor mit 3 Werten |
spalte = [4; 5; 6; 7] | Spaltenvektor mit 4 Werten |
matrix = [1 2 3; 4 5 6] | (2x3)-Matrix |
x = [0:.1:10] | Zeilenvektor mit 101 Werten
[0 .1 .2 .. 9.9 10] |
zeros(m,n) Nullmatrix
| ones(m,n) | Matrix aus Einsen
| eye(m,n) | Einheitsmatrix
| rand(m,n) | Zufallszahlen aus [0,1]
| |
clear x | löscht x |
clear | löscht alle Variablen |
clear all | löscht/initialisiert alles (Variablen, Funktionen, ...) |
Arithmetische Operationen zwischen Matrizen versucht Matlab, im Sinne
der Matrizenrechnung auszuführen. Das gilt z.B. für Potenzen wie
A^2 (die so nur mit quadratischen Matrizen funktionieren) und sogar
für die Division, die als Matrixinversion interpretiert wird:
A/B gibt A*B^(-1), A\B bedeutet A^(-1)*B !
Einfache Verknüpfungen mit einem Skalar s werden elementweise
ausgeführt: s*A, A/s, A+s, A-s.
Ansonsten muss man elementweise Ausführung oft ausdrücklich
verlangen, dazu dienen die Rechenzeichen
.* ./ .^
z.B. quadriert [1:10].^2 die Zahlen von 1 bis 10.
Einige nützliche Operationen mit Matrizen und Vektoren:
A.' | transponierte Matrix, z.B. Zeile <-> Spalte | ||||||||||||
A' | Hermitesch konjugierte Matrix | ||||||||||||
size(A) Größe von A
| size(A,1) | Zeilenzahl von A
| size(A,2) | Spaltenzahl von A
| length(v) | Länge eines Vektors
| sum(v) | Summe über Vektorelemente
| prod(v) | Produkt über Vektorelemente
| max(v) | Maximalwert
| |
Zugriff auf einzelne Elemente eines Vektors oder einer Matrix erhält man durch Angabe von Indizes (beginnend mit 1), z.B. x(3) oder matrix(3,5) . Um einen Teilvektor zu spezifizieren, gibt man einen Indexbereich an wie in x(2:4) . Ein blanker `:' (Doppelpunkt) bezeichnet den gesamten Indexbereich - damit ist also matrix(2,:) die zweite Zeile der Matrix, und matrix(:,2:4) ist eine kleinere Matrix, bestehend aus den Spalten 2-4 von matrix.
sqrt exp log log2 log10 sin cos tan cot asin acos atan acotJe nach Bedarf rechnen sie reell oder komplex. Auf eine Matrix angewandt, wirken sie elementweise. Die trigonometrischen Funktionen arbeiten durchweg im Bogenmaß.
log(2) | |
sqrt([1:10]) | Wurzeln aus den Zahlen 1 bis 10 |
cos(pi) | gibt (-1) |
x = [0:.1:4]; y = x.^2; plot(x,y)Der Befehl plot erwartet (im einfachsten Falle) zwei gleich lange Zeilenvektoren als Argumente und trägt sie gegeneinander auf. Die Punkte werden zu einem Polygonzug verbunden. Über ein drittes Argument (Zeichenkette) kann man den Linientyp angeben: - -- : -. . Die Angabe eines Punktsymbols, z.B. o + x * , unterdrückt den Linienzug. Ausserdem kann noch die Farbe spezifiziert werden als r g b etc.
plot(x,y,'r:') rote, punktierte Linie plot(x,y,'bo') blaue KreissymboleUm Datenpunkte mit Fehlerbalken (in y-Richtung) zu plotten, setzt man die Fehler in einen dritten Vektor dy und ruft z.B. auf:
errorbar(x,y,dy,'o')Eine Funktion zweier Variablen z = f(x,y) stellt man so dar: zunächst bildet man zwei Vektoren x und y, die ein Gitternetz von Stützpunkten in der Ebene definieren, und setzt die zugehörigen Funktionswerte in eine Matrix Z passender Größe: Z(i,j) = f(x(j),y(i)) (sic!). Damit plottet man
contour(x,y,Z) ebener Kontour-Plot (Hoehenlinien) mesh(x,y,Z) 3D-Plot mit farbigem Gitternetz surf(x,y,Z) 3D-Plot mit farbiger FlaecheDer Aufruf einer Plotfunktion löscht i.a. die letzte Grafik. Um etwas hinzuzufügen, hält man sie mit hold on fest, mit hold off hebt man diesen Zustand wieder auf.
s = 0; for k = 1:10 s = s + k; % summiert die Zahlen von 1 bis 10 end z = 1; n = 0; while z > 0 % sucht die kleinste darstellbare positive Zahl... z = z/2; n = n + 1; end disp(2^(-n+1)) % ...und gibt sie aus. for j = 0:100 if j == 50 break % bricht bei j=50 ab end endVergleichsoperatoren:
Text hinter "%" ist ein Kommentar und wird von Matlab ignoriert.
Statt aus dem Kommando-Fenster kann man ein Matlab-Programm auch aus einer Datei
aufrufen. Ein solches Skript muss die Endung ".m" haben.
Wenn man z.B. eines der obigen Beispiele mit einem Texteditor in die Datei
testprogramm.m schreibt (und abspeichert!), ist es zu starten mit
testprogramm
Es läuft dann so ab, als ob man es direkt eingetippt hätte.
(Ggf. muss man noch in Matlab mit cd ins richtige
Verzeichnis wechseln - mit pwd wird das aktuelle Verzeichnis
angezeigt.)
function [r] = radius(x,y) % berechnet r = sqrt(x^2 + y^2) % funktioniert auch mit (gleich grossen!) Vektoren/Matrizen x,y r = sqrt(x.^2 + y.^2);Dies schreibt man in eine Datei radius.m.
Der Aufruf lautet dann
radius(x,y);
z = input('Frage'); % fragt nach Eingabe und speichert sie unter "z" disp(x) % gibt Matrix oder Text aus sprintf('format', x, ..); % schreibt Text und Daten formatiert
save -ascii a.dat m % schreibt Matrix m in Datei a.dat (einfach genau) save -ascii -double a.dat m % schreibt Matrix m in Datei a.dat (doppelt genau) load -ascii a.dat % belegt Matrix a mit Daten aus a.dat m = load('-ascii', 'a.dat') % belegt Matrix m mit Daten aus a.dat fid = fopen('datei', 'w'); % oeffnet Datei und definiert fid (file identifier) fprintf(fid, 'format', x, ..) % schreibt formatiert in Datei fscanf(fid, 'format', x, ..) % liest formatierte Daten aus Datei fclose(fid); % schliesst DateiBei Zugriffen auf Dateien kann man mit absoluten Pfadnamen arbeiten, bequemer sind aber relative Angaben, bezogen auf das aktuelle Arbeitsverzeichnis. Das wiederum kann man anzeigen, wechseln etc, indem man (am Matlab-Prompt) die üblichen Unix-Befehle (pwd, cd, ls ...) verwendet.