Häufig gestellte Fragen

Inhaltsverzeichnis

  1. Matlab
    1. Was ist Matlab?
    2. Wie schreibe ich eine eigene Funktion?
    3. Warum gibt mein Skript so viele Daten aus?
    4. Wie schreibt man beliebige Daten in eine Textdatei?
    5. Wie schreibt man Binärdaten in eine Datei?
    6. Wie entferne ich Elemente aus einem Vektor?
    7. Wie füge ich Elemente in ein Array ein?
    8. Wie wandelt man ein Array in einen Vektor um?
    9. Wie erstellt man n gleichverteilte Punkte in einem bestimmten Intervall?
    10. Wie berechnet man die Laufzeit einer Funktion?
    11. Wie berechnet man in einem Array das Minimum, Maximum, ...?
    12. Wie berechnet man lokale Extremwerte eines Vektors?
    13. Wie verändere ich die Darstellung meiner Ausgaben?
  2. GUIDE
    1. Was ist ein Handle?

Was ist Matlab?

Matlab ist ein kommerzielles Software-Paket von The MathWorks. Es stellt eine komplette Umgebung zur Hochsprachen-Programmierung und zur interaktiven Datenanalyse zur Verfügung. Matlab zeichnet sich durch numerische Berechnungen aus, besonders mit Vektoren und Matrizen. Symbolische Mathematik ist über eine Toolbox verfügbar, die mit einem Maple-Kernel arbeitet.
Der Name Matlab ist zusammengesetzt aus "Matrix laboratory".

Wie schreibe ich eine eigene Funktion?

Matlab kennt verschiedene Funktionsarten.

Warum gibt mein Skript so viele Daten aus?

In Matlab werden einzelne Befehle durch den Beginn einer neuen Zeile getrennt. Dabei wird stets das Ergebnis eines Befehls zurückgegeben. Um zu verhindern, dass dieses Ergebnis auf der Matlab-Kommandozeile ausgegeben wird, muss jedoch ein Semikolon am Ende des Befehls eingefügt werden.

Beispiel:
a = 3                                    % Ausgabe: 'a = 3', wegen fehlendem Semikolon
a = 3;                                   % Keine Ausgabe

Wie schreibt man beliebige Daten in eine Textdatei?

Um Daten in eine Textdatei zu schreiben, gibt es die verschiedensten Funktionen, wie csvwrite, dlmwrite oder wk1write. Diese beschränken sich jedoch stets auf ein bestimmtes Dateiformat. Um die komplette Kontrolle über die Dateiausgabe zu erhalten, gibt es den Befehl fprintf. Damit lassen sich beliebige Daten formatiert in eine Datei (oder auch auf die Matlab-Kommandozeile) ausgeben.
Bevor man mit fprintf jedoch Daten schreiben kann, muss zuerst eine Datei von Hand geöffnet werden. Folgendes Beispiel zeigt einen möglichen Ablauf:
fd = fopen('export.csv', 'w');           % Öffnen der Datei export.csv zum Schreiben
fprintf(fd, '%s,%d\n', 'String', 11);    % Schreiben der Daten mittels fprintf
fclose(fd);                              % Schließen der Datei
Für eine detaillierte Beschreibung der Formatierungsmöglichkeiten, kann die Matlab-Hilfe herangezogen werden.
help fprintf
doc fprintf

Wie schreibt man Binärdaten in eine Datei?

Binärdaten können mit dem Befehl fwrite in eine Datei geschrieben werden. fwrite schreibt dabei ganze Arrays auf einmal. Die Datei zum Schreiben muss wiederum von Hand geöffnet werden:
fd = fopen('export.bin', 'w');           % Öffnen der Datei export.bin zum Schreiben
fwrite(fd, 0:9, 'integer*2');            % Schreiben der Zahlen 0-9 als 2-Byte-Integer
fclose(fd);                              % Schließen der Datei
Das Auslesen der Daten geht dabei analog zum Schreiben:
fd = fopen('export.bin', 'r');           % Öffnen der Datei export.bin zum Lesen
arr = fread(fd, 'integer*2');            % Datei auslesen und Ergebnis in 'arr' speichern
fclose(fd);                              % Schließen der Datei
Eine Liste mit verfügbaren Datenformaten findet man in der Hilfe:
help fread
doc fread

Wie entferne ich Elemente aus einem Vektor?

Elemente können aus einem Vektor entfernt werden, indem ihnen der "Wert" [] zugewiesen wird. Das Ganze sieht dann etwa so aus:
x = 0:9;                                 % Erstellen eines Vektors mit 10 Elementen
x([2, 4, 7]) = []                        % Entfernen des 2., 4. und 7. Elements
Wenn einzelne Elemente aus einem Array entfernt werden, wird dieses in einen Vektor umgewandelt (da dann die Dimensionen natürlich nicht mehr passen). Es ist aber möglich ganze Zeilen und Spalten aus einem Array zu entfernen. Dazu muss ihnen wiederum [] zugewiesen werden:
x = pascal(5);                           % Erstellen eines Pascal-Arrays der Dimension 5x5
x(1, :) = []                             % Entfernen der ersten Zeile
x(:, [3, 5]) = []                        % Entfernen der dritten und fünften Spalte

Wie füge ich Elemente in ein Array ein?

Diese häufig gestellte Frage lässt sich leider nicht pauschal beantworten. Es kommt immer darauf an, mit welchen Daten dass gearbeitet wird. Deshalb hier ein paar kurze Beispiele:
Anfügen einzelner Elemente ans Vektorende.
a = 0:8;                                 % Zeilenvektor
a(end + 1) = 9;                          % Möglichkeit 1
a = [a 9];                               % Möglichkeit 2
a = cat(2, a, 9);                        % Möglichkeit 3

a = (0:8)';                              % Spaltenvektor
a(end + 1) = 9;                          % Möglichkeit 1
a = [a; 9];                              % Möglichkeit 2
a = cat(1, a, 9);                        % Möglichkeit 3
Anfügen mehrerer Elemente ans Vektorende.
a = 0:6;                                 % Zeilenvektor
b = 7:9;                                 % Anzufügender Vektor
a = [a b];                               % Möglichkeit 1
a = cat(2, a, b);                        % Möglichkeit 2

a = (0:6)';                              % Spaltenvektor
b = (7:9)';                              % Anzufügender Vektor
a = [a; b];                              % Möglichkeit 1
a = cat(1, a, b);                        % Möglichkeit 2
Anfügen von Zeilen an ein Array.
a = ones(5);                             % 5x5-Array
a(end + 1, :) = 5:9;                     % Möglichkeit 1
a = [a; 5:9];                            % Möglichkeit 2
a = cat(1, a, 5:9);                      % Möglichkeit 3
Anfügen von Spalten an ein Array.
a = ones(5);                             % 5x5-Array
a(:, end + 1) = 5:9;                     % Möglichkeit 1
a = [a'; 5:9]';                          % Möglichkeit 2
a = cat(2, a, (5:9)');                   % Möglichkeit 3
Alle oben genannten Möglichkeiten können auch dazu verwendet werden, um Elemente am Anfang eines Arrays einzufügen. Dazu muss lediglich die Reihenfolge von einzufügenden Elementen und dem Array vertauscht werden. (Eine Ausnahme ist die Schreibweise mit end. Damit kann wirklich nur am Ende eingefügt werden.)

Wie wandelt man ein Array in einen Vektor um?

a = magic(10);                           % 10x10-Array
a = a(:);                                % Möglichkeit 1
a = reshape(a, prod(size(a)), 1);        % Möglichkeit 2

Wie erstellt man n gleichverteilte Punkte in einem bestimmten Intervall?

n = 100000;                              % Eine Million Punkte
a = linspace(0, 1, n);                   % Möglichkeit 1
a = 0: 1 / (n - 1): 1;                   % Möglichkeit 2
Im Allgemeinen ist Möglichkeit 2 vorzuziehen, da sie um ein Vielfaches schneller arbeitet.

Wie berechnet man die Laufzeit einer Funktion?

tic; linspace(0, 1, 1000000); toc;
Mit dem Befehl tic wird die aktuelle Uhrzeit gespeichert. Mit toc wird dann die Differenz der aktuellen Uhrzeit zur zuvor gespeicherten Uhrzeit berechnet und ausgegeben. Die Dauer aller dazwischen ausgeführten Befehle wird somit gemessen.

Wie berechnet man in einem Array das Minimum, Maximum, ...?

a = magic(10);                           % 10x10-Array
min(a(:));                               % Minimum
max(a(:));                               % Maximum
median(a(:));                            % Mittelwert
std(a(:));                               % Standard-Abweichung
var(a(:));                               % Streuung

prod(a(:));                              % Produkt
sum(a(:));                               % Summe
Eine Erklärung der einzelnen Funktionen ist in der dazugehörenden Hilfe zu finden.

Wie berechnet man lokale Extremwerte eines Vektors?

Lokale Extremwerte lassen sich recht einfach mit folgenden Befehlen finden:
a = [0 -1  1  3  2  1  2  0 -2  0];      % Vektor definieren
d = sign(diff(a));                       % Differenz zum Vorgängerelement bestimmen
find(d ~= [d(1) d(1: end - 1)])          % Indizes der lokalen Extremwerte berechnen
Um lokale Maxima zu erkennen kann statt des ~= ein <, für die Minima ein > verwendet werden.

Wie verändere ich die Darstellung meiner Ausgaben?

Matlab bietet die Möglichkeit die Darstellung der ausgegebenen Zahlen anzupassen. Dafür gibt es den Befehl format. Dieser kennt folgende wichtigen Parameter:
format compact                           % Unterdrückung unnötiger Zeilenumbrüche
format hex                               % Zahlenwerte hexadezimal ausgeben
format rat                               % Zahlenwerte als Brüche ausgeben
format short                             % Zahlenwerte mit 5 Nachkommastellen ausgeben
format long                              % Zahlenwerte mit 15 Nachkommastellen ausgeben
Nähere Informationen können unter help format gefunden werden.

Was ist ein Handle?

In Matlab wird jedem grafischen Objekt (wie Button, Eingabefeld, Checkbox usw.) eine eindeutige Zahl zugewiesen. Diese Zahl wird Handle genannt und dient dazu, auf die grafischen Objekte zugreifen zu können. Viele Funktionen, nutzen Handles, um Objekte eindeutig identifizieren zu können. Die bekanntesten Vertreter sind die Funktionen set und get, mit denen Objekteigenschaften verändert bzw. ausgelesen werden können.