Humboldt-Universität zu Berlin - Mathematisch-Naturwissen­schaft­liche Fakultät - Institut für Physik

Einführung in Matlab

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.

Aufruf, Hilfe

Matlab wird aufgerufen

  • aus dem Menü der grafischen Oberfläche;
  • im Terminal-Fenster am Unix-Prompt:
    unix> matlab

In der Regel öffnet sich eine neue Oberfläche zur Bedienung von Matlab. Sie enthält ein Kommando-Fenster mit Matlab-Prompt   >>   und einen Zugang zur Online-Hilfe.

Eine schnelle Auskunft zu einem bekannten Befehl erhält man auch so:
>> help sqrt

Matlab wird beendet durch

  • Schließen der grafischen Oberfläche oder
  • >> quit       am Matlab-Prompt.

Konstanten, Arithmetik

Matlab rechnet durchweg mit Gleitkomma-Zahlen (64 Bit, also auf etwa 16 Dezimalstellen genau), eine Sonderbehandlung für ganze Zahlen gibt es nicht. Das Dezimalkomma ist immer ein Punkt! Auch die Eingabe von Zehnerpotenzen und komplexen Zahlen ist möglich.
Beispiele:   3.5   -5   2.6e9   -3E-5   2.5 + 3.4i

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

Variablen

Variablen sind benannte Speicherplätze für Werte, ihre Namen werden aus Buchstaben (groß/klein!), Ziffern und "_" zusammengesetzt (beginnend mit einem Buchstaben). Bei der Wertzuweisung wird automatisch geeigneter Speicherplatz (für reelle oder komplexe Zahlen) reserviert, z.B.

r = (3^2 + 2*5.5)^4 reele Arithmetik
z = (5 + 2i)/(3 + 4i) komplexe Arithmetik
u = z/r komplexe Arithmetik

Das Ergebnis wird sofort angezeigt, wenn das stört, sollte man die die Zuweisung mit ";" abschließen.
pi und i sind vordefiniert und liefern das Erwartete, solange man sie nicht anderweitig belegt.

Matrizen

In Matlab werden numerische Größen durchweg als Matrizen angesehen, also als rechteckige Anordnungen von (reellen oder komplexen) Zahlen, die in Zeilen und Spalten organisiert sind. Einzelwerte (Skalare), Zeilen- und Spaltenvektoren sind Spezialfälle davon.
Beispiele für direkte Eingabe:

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]

Einige spezielle (mxn)-Matrizen:

zeros(m,n) Nullmatrix
ones(m,n) Matrix aus Einsen
eye(m,n) Einheitsmatrix
rand(m,n) Zufallszahlen aus [0,1]

Die Auslegung der Matrizen wird nicht explizit vereinbart, sondern richtet sich automatisch nach der Wertzuweisung. Auch komplexe Größen entstehen "von selbst".
Die aktuellen Eigenschaften aller belegten Variablen zeigt der Befehl
whos
Gelegentlich möchte man Objekte löschen, dazu dient clear:

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.

Text

Gelegentlich braucht man auch Größen, die Text enthalten (Zeichenketten, "strings"), z.B. für Dateinamen oder zum Beschriften von Grafiken. Der Text wird in Apostrophs eingeschlossen und kann auch Variablen zugewiesen werden, etwa
titel = 'Meine erste Matlab-Grafik'

Eingebaute Funktionen

Viele elementare Funktionen sind in Matlab unmittelbar verfügbar, z.B.

   sqrt exp log log2 log10 sin cos tan cot asin acos atan acot

Je nach Bedarf rechnen sie reell oder komplex. Auf eine Matrix angewandt, wirken sie elementweise. Die trigonometrischen Funktionen arbeiten durchweg im Bogenmaß.
Beispiele:

log(2)  
sqrt([1:10]) Wurzeln aus den Zahlen 1 bis 10
cos(pi) gibt (-1)

Grafiken

Die folgenden Befehle stellen eine Wertetabelle für y = x^2 im Bereich x = 0..4 her und erzeugen damit eine Grafik:

   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.
Beispiele:

   plot(x,y,'r:')             rote, punktierte Linie
   plot(x,y,'bo')             blaue Kreissymbole

Um 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 Flaeche

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

Matlab-Programmierung

Beispiele für Kontrollstrukturen:

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
end

Vergleichsoperatoren:
==   ~=   <   <=   >   >=
siehe   help relop

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

Eigene Funktionen

Beispiel für die Definition einer eigenen Funktion "radius":

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);

Ein- und Ausgabe

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

Dateien lesen und schreiben

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 Datei

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


B. Bunk, 24.02.2014