Skripts und Funktionen
Überblick
MATLAB® stellt eine leistungsstarke Programmiersprache und eine interaktive Rechnerumgebung zur Verfügung. Sie können Befehle der Sprache nacheinander in die Befehlszeile von MATLAB eingeben oder eine Reihe von Befehlen in eine Datei schreiben, die Sie anschließend ausführen wie jede andere Funktion von MATLAB. Verwenden Sie den MATLAB Editor oder einen beliebigen anderen Texteditor, um Ihre eigenen Funktionsdateien zu erstellen. Rufen Sie diese Funktionen wie alle anderen MATLAB Funktionen oder Befehle auf.
Es gibt zwei Arten von Programmdateien:
Skripts, die keine Eingabeargumente akzeptieren bzw. keine Ausgabeargumente zurückgeben. Diese werden auf die Daten im Arbeitsbereich angewandt.
Funktionen, die Eingabeargumente akzeptieren und Ausgabeargumente zurückgeben. Interne Variablen sind für die Funktion lokal verfügbar.
Wenn Sie mit der Programmierung in MATLAB noch nicht vertraut sind, erstellen Sie im aktuellen Ordner einfach die Programmdateien, die Sie ausprobieren möchten. Wenn Sie mit der Zeit eine größere Anzahl eigener Dateien entwickeln, werden Sie diese in anderen Ordnern und persönlichen Toolboxen organisieren, die Sie Ihrem MATLAB Suchpfad hinzufügen können.
Wenn Sie Funktionsnamen duplizieren, führt MATLAB die Funktion mit dem ersten Vorkommen im Suchpfad aus.
Wenn Sie den Inhalt einer Programmdatei, zum Beispiel myfunction.m
, anzeigen möchten, geben Sie Folgendes ein:
type myfunction
Skripts
Wenn Sie ein Skript aufrufen, vereinfacht MATLAB die in der Datei gefundenen Befehle. Skripts können auf bestehende Daten im Arbeitsbereich angewandt werden oder sie können neue Daten erstellen, auf die sie angewandt werden. Auch wenn Skripts keine Ausgabeargumente zurückgeben, verbleiben alle Variablen, die sie erstellen, im Arbeitsbereich, sodass sie für nachfolgende Berechnungen verwendet werden können. Zudem können Skripts mithilfe von Funktionen wie plot
grafische Ausgaben erstellen.
Erstellen Sie zum Beispiel eine Datei mit dem Namen magicrank.m
, die die folgenden MATLAB Befehle enthält:
% Investigate the rank of magic squares r = zeros(1,32); for n = 3:32 r(n) = rank(magic(n)); end bar(r)
Wenn Sie die Anweisung
magicrank
eingeben, führt MATLAB die Befehle aus, berechnet den Rang der ersten 30 magischen Quadrate und plottet ein Balkendiagramm des Ergebnisses. Wenn die Datei ausgeführt wurde, verbleiben die Variablen n
und r
im Arbeitsbereich.
Funktionen
Funktionen sind Dateien, die Eingabeargumente akzeptieren und Ausgabeargumente zurückgeben. Die Namen der Datei und der Funktion müssen identisch sein. Funktionen werden auf Variablen innerhalb ihres eigenen Arbeitsbereichs angewandt, also getrennt vom Arbeitsbereich, auf den Sie über die MATLAB Eingabeaufforderung zugreifen.
Ein gutes Beispiel ist die Funktion rank
. Sie finden die Datei rank.m
im Ordner
toolbox/matlab/matfun
Zum Anzeigen der Datei geben Sie Folgendes ein:
type rank
Der Inhalt der Datei sieht wie folgt aus:
function r = rank(A,tol) % RANK Matrix rank. % RANK(A) provides an estimate of the number of linearly % independent rows or columns of a matrix A. % RANK(A,tol) is the number of singular values of A % that are larger than tol. % RANK(A) uses the default tol = max(size(A)) * norm(A) * eps. s = svd(A); if nargin==1 tol = max(size(A)') * max(s) * eps; end r = sum(s > tol);
Die erste Zeile einer Funktion beginnt mit dem Schlüsselwort function
. Sie gibt den Funktionsnamen und die Reihenfolge der Argumente an. In diesem Fall gibt es bis zu zwei Eingabeargumente und ein Ausgabeargument.
Die nächsten Zeilen – bis zur ersten leeren oder ausführbaren Zeile – sind Kommentarzeilen mit dem Hilfetext. Diese Zeilen werden gedruckt, wenn Sie Folgendes eingeben:
help rank
Die erste Zeile des Hilfetexts ist die Zeile H1, die MATLAB anzeigt, wenn Sie den Befehl lookfor
verwenden oder help
in einem Ordner anfordern.
Der übrige Teil der Datei ist der ausführbare MATLAB Programmcode, der die Funktion definiert. Die Variable s
im Funktionsrumpf sowie die Variablen aus der ersten Zeile, r
, A
und tol
, sind lokale Variablen der Funktion. Sie sind von den Variablen im MATLAB Arbeitsbereich getrennt.
Dieses Beispiel veranschaulicht einen Aspekt der MATLAB Funktionen, den andere Programmiersprachen normalerweise nicht bieten: eine variable Anzahl von Argumenten. Die Funktion rank
kann auf unterschiedlichste Weise verwendet werden:
rank(A) r = rank(A) r = rank(A,1.e-6)
Viele Funktionen funktionieren auf diese Weise. Wenn kein Ausgabeargument angegeben ist, wird das Ergebnis in ans
gespeichert. Wenn das zweite Eingabeargument nicht angegeben ist, berechnet die Funktion einen Standardwert. Innerhalb des Funktionsrumpfs stehen zwei Größen mit den Namen nargin
und nargout
zur Verfügung, die angeben, wie viele Ein- und Ausgabeargumente jeweils an der Verwendung der Funktion beteiligt sind. Die Funktion rank
verwendet nargin
, muss jedoch nargout
nicht verwenden.
Funktionstypen
MATLAB stellt verschiedene Funktionstypen zur Verfügung, die für die Programmierung verwendet werden können.
Anonyme Funktionen
Eine anonyme Funktion ist eine einfache Form der MATLAB Funktion, die mit einer einzelnen MATLAB Anweisung definiert ist. Sie besteht aus einem einzelnen MATLAB Ausdruck und einer beliebigen Anzahl von Eingabe- und Ausgabeargumenten. Sie können eine anonyme Funktion direkt in der MATLAB Befehlszeile oder innerhalb einer Funktion bzw. eines Skripts definieren. Auf diese Weise lassen sich einfache Funktionen schnell erstellen, ohne jedes Mal eine Datei für die jeweilige Funktion erstellen zu müssen.
Die Syntax zum Erstellen einer anonymen Funktion aus einem Ausdruck lautet wie folgt:
f = @(arglist)expression
Mit der folgenden Anweisung wird eine anonyme Funktion erstellt, die das Quadrat einer Zahl findet. Wenn Sie diese Funktion aufrufen, weist MATLAB den von Ihnen übergebenen Wert der Variablen x
zu und verwendet anschließend x
in der Gleichung x.^2
:
sqr = @(x) x.^2;
Geben Sie zum Ausführen der Funktion sqr
Folgendes ein:
a = sqr(5) a = 25
Hauptfunktionen und lokale Funktionen
Alle Funktionen, die nicht anonym sind, müssen in einer Datei definiert sein. Jede dieser Funktionsdateien enthält eine erforderliche Hauptfunktion, die zuerst angezeigt wird, und eine beliebige Anzahl lokaler Funktionen, die auf die Hauptfunktion folgen können. Hauptfunktionen haben ein breiteres Anwendungsgebiet als lokale Funktionen. Dies bedeutet, dass Hauptfunktionen außerhalb der Datei, in der sie definiert sind, aufgerufen werden können (zum Beispiel von der MATLAB Befehlszeile oder von Funktionen in anderen Dateien), während dieses für lokale Funktionen nicht möglich ist. Lokale Funktionen sind nur für die Hauptfunktion und die anderen lokalen Funktionen innerhalb ihrer eigenen Datei sichtbar.
Die Funktion rank
, die im Abschnitt Funktionen abgebildet ist, ist ein Beispiel für eine Hauptfunktion.
Private Funktionen
Eine private Funktion ist ein Typ der Hauptfunktion. Ihr Alleinstellungsmerkmal ist, dass sie nur für eine begrenzte Gruppe anderer Funktionen sichtbar ist. Dieser Funktionstyp kann hilfreich sein, wenn Sie den Zugriff auf eine Funktion begrenzen möchten oder wenn Sie die Implementierungen einer Funktion nicht verfügbar machen möchten.
Private Funktionen befinden sich in Unterordnern mit dem speziellen Namen private
. Sie sind nur für Funktionen im übergeordneten Ordner sichtbar. Angenommen, der Ordner newmath
befindet sich zum Beispiel im Suchpfad von MATLAB. Ein Unterordner von newmath
mit dem Namen private
kann Funktionen enthalten, die nur von Funktionen in newmath
aufgerufen werden können.
Da private Funktionen außerhalb des übergeordneten Ordners nicht sichtbar sind, können sie dieselben Namen verwenden wie Funktionen in anderen Ordnern. Das ist nützlich, wenn Sie Ihre eigene Version einer bestimmten Funktion verwenden möchten, während das Original in einem anderen Ordner beibehalten wird. Da MATLAB zunächst nach privaten und dann erst nach Standardfunktionen sucht, wird eine private Funktion mit dem Namen test.m
vor einer nicht privaten Datei mit dem Namen test.m
gefunden.
Verschachtelte Funktionen
Sie können Funktionen innerhalb des Rumpfs einer anderen Funktion definieren. Diese Funktionen gelten als innerhalb der äußeren Funktion verschachtelt. Eine verschachtelte Funktion enthält beliebige oder alle Komponenten einer beliebigen anderen Funktion. In diesem Beispiel ist die Funktion B
in Funktion A
verschachtelt:
function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end
Genau wie andere Funktionen verfügt eine verschachtelte Funktion über ihren eigenen Arbeitsbereich, in dem die von der Funktion verwendeten Variablen gespeichert werden. Allerdings hat sie auch Zugriff auf die Arbeitsbereiche aller Funktionen, in denen sie verschachtelt ist. So kann beispielsweise eine Variable, der ein Wert durch die Hauptfunktion zugewiesen wurde, von einer Funktion gelesen oder überschrieben werden, die auf einer beliebigen Ebene mit der Hauptfunktion verschachtelt ist. Auf ähnliche Weise kann eine Variable, die in einer verschachtelten Funktion zugewiesen ist, von einer der Funktionen, die diese Funktion enthält, gelesen oder überschrieben werden.
Globale Variablen
Wenn mehrere Funktionen eine einzelne Kopie einer Variablen gemeinsam verwenden sollen, deklarieren Sie die Variable einfach in allen Funktionen als global
. Legen Sie dasselbe in der Befehlszeile fest, wenn Sie möchten, dass der Basisarbeitsbereich auf die Variable zugreifen kann. Die globale Deklaration muss vorhanden sein, bevor die Variable tatsächlich in einer Funktion verwendet wird. Auch wenn es nicht erforderlich ist, können Sie für die Namen globaler Variablen Großbuchstaben verwenden, um sie von den anderen Variablen besser unterscheiden zu können. Erstellen Sie zum Beispiel eine neue Funktion in einer Datei mit dem Namen falling.m
:
function h = falling(t) global GRAVITY h = 1/2*GRAVITY*t.^2;
Anschließend geben Sie die folgenden Anweisungen interaktiv ein:
global GRAVITY GRAVITY = 32; y = falling((0:.1:5)');
Die beiden globalen Anweisungen stellen den Wert, der GRAVITY
in der Befehlszeile zugewiesen wurde, innerhalb der Funktion zur Verfügung. Danach können Sie GRAVITY
interaktiv ändern und erhalten so neue Lösungen, ohne Dateien bearbeiten zu müssen.
Befehls- vs. Funktionssyntax
Sie können MATLAB Funktionen schreiben, die Zeichenargumente ohne die Klammern und Anführungszeichen akzeptieren. Das bedeutet, dass MATLAB
foo a b c
wie folgt interpretiert:
foo('a','b','c')
Wenn Sie also die Befehlsform ohne Anführungszeichen verwenden, kann MATLAB keine Ausgabeargumente zurückgeben. Beispielsweise erstellt
legend apples oranges
eine Legende in einem Plot und verwendet dafür die Beschriftungen apples
und oranges
. Wenn Sie möchten, dass der Befehl legend
seine Ausgabeargumente zurückgibt, müssen Sie die Befehlsform mit Anführungszeichen verwenden:
[legh,objh] = legend('apples','oranges');
Außerdem müssen Sie die Form mit Anführungszeichen verwenden, wenn eines der Argumente kein Zeichenvektor ist.
Vorsicht
Zwar ist die Befehlssyntax ohne Anführungszeichen praktisch, sie kann jedoch in einigen Fällen falsch verwendet werden, ohne dass MATLAB einen Fehler generiert.
Konstruieren von Zeichenargumenten in Code
Die Funktionsform mit Anführungszeichen ermöglicht Ihnen das Konstruieren von Zeichenargumenten innerhalb des Codes. Im folgenden Beispiel werden mehrere Datendateien verarbeitet: August1.dat
, August2.dat
usw. Es wird die Funktion int2str
verwendet, die eine Ganzzahl in ein Zeichen konvertiert, um den Dateinamen zu erstellen:
for d = 1:31 s = ['August' int2str(d) '.dat']; load(s) % Code to process the contents of the d-th file end