MATLAB - Funktionen
Eine Funktion ist eine Gruppe von Anweisungen, die zusammen eine Aufgabe ausführen. In MATLAB werden Funktionen in separaten Dateien definiert. Der Name der Datei und der Funktion sollte identisch sein.
Funktionen arbeiten mit Variablen in ihrem eigenen Arbeitsbereich, der auch als bezeichnet wird local workspace, getrennt von dem Arbeitsbereich, auf den Sie an der MATLAB-Eingabeaufforderung zugreifen, die als bezeichnet wird base workspace.
Funktionen können mehr als ein Eingabeargument akzeptieren und mehr als ein Ausgabeargument zurückgeben.
Die Syntax einer Funktionsanweisung lautet -
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
Beispiel
Die folgende Funktion mit dem Namen mymax sollte in eine Datei mit dem Namen mymax.m geschrieben werden . Es werden fünf Zahlen als Argument verwendet und das Maximum der Zahlen zurückgegeben.
Erstellen Sie eine Funktionsdatei mit dem Namen mymax.m und geben Sie den folgenden Code ein:
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
Die erste Zeile einer Funktion beginnt mit dem Schlüsselwort function. Es gibt den Namen der Funktion und die Reihenfolge der Argumente an. In unserem Beispiel verfügt die mymax- Funktion über fünf Eingabeargumente und ein Ausgabeargument.
Die Kommentarzeilen direkt nach der Funktionsanweisung enthalten den Hilfetext. Diese Zeilen werden gedruckt, wenn Sie -
help mymax
MATLAB führt die obige Anweisung aus und gibt das folgende Ergebnis zurück:
This function calculates the maximum of the
five numbers given as input
Sie können die Funktion aufrufen als -
mymax(34, 78, 89, 23, 11)
MATLAB führt die obige Anweisung aus und gibt das folgende Ergebnis zurück:
ans = 89
Anonyme Funktionen
Eine anonyme Funktion ist wie eine Inline-Funktion in traditionellen Programmiersprachen, die in einer einzelnen MATLAB-Anweisung definiert ist. Es 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 oder eines Skripts definieren.
Auf diese Weise können Sie einfache Funktionen erstellen, ohne eine Datei für sie erstellen zu müssen.
Die Syntax zum Erstellen einer anonymen Funktion aus einem Ausdruck lautet
f = @(arglist)expression
Beispiel
In diesem Beispiel schreiben wir eine anonyme Funktion namens power, die zwei Zahlen als Eingabe verwendet und die erste Zahl auf die Potenz der zweiten Zahl zurückgibt.
Erstellen Sie eine Skriptdatei und geben Sie den folgenden Code ein:
power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)
Wenn Sie die Datei ausführen, wird Folgendes angezeigt:
result1 = 343
result2 = 7
result3 = 1.0000e-10
result4 = 9.5459
Primär- und Unterfunktionen
Jede andere Funktion als eine anonyme Funktion muss in einer Datei definiert werden. Jede Funktionsdatei enthält eine erforderliche Primärfunktion, die zuerst angezeigt wird, und eine beliebige Anzahl optionaler Unterfunktionen, die nach der Primärfunktion stehen und von dieser verwendet werden.
Primärfunktionen können von außerhalb der Datei, die sie definiert, entweder über die Befehlszeile oder über andere Funktionen aufgerufen werden. Unterfunktionen können jedoch nicht über die Befehlszeile oder andere Funktionen außerhalb der Funktionsdatei aufgerufen werden.
Unterfunktionen sind nur für die Primärfunktion und andere Unterfunktionen in der Funktionsdatei sichtbar, die sie definiert.
Beispiel
Schreiben wir eine Funktion namens quadratisch, die die Wurzeln einer quadratischen Gleichung berechnet. Die Funktion würde drei Eingaben benötigen, den quadratischen Koeffizienten, den linearen Koeffizienten und den konstanten Term. Es würde die Wurzeln zurückgeben.
Die Funktion Datei quadratic.m wird die primäre Funktion enthält , quadratische und die Unterfunktionsscheibe , die die Diskriminanzfunktionen berechnet.
Erstellen Sie eine Funktionsdatei quadratic.m und geben Sie den folgenden Code ein:
function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
Sie können die obige Funktion an der Eingabeaufforderung wie folgt aufrufen:
quadratic(2,4,-4)
MATLAB führt die obige Anweisung aus und gibt das folgende Ergebnis zurück:
ans = 0.7321
Verschachtelte Funktionen
Sie können Funktionen innerhalb des Körpers einer anderen Funktion definieren. Diese werden als verschachtelte Funktionen bezeichnet. Eine verschachtelte Funktion enthält einige oder alle Komponenten einer anderen Funktion.
Verschachtelte Funktionen werden im Rahmen einer anderen Funktion definiert und teilen sich den Zugriff auf den Arbeitsbereich der enthaltenen Funktion.
Eine verschachtelte Funktion folgt der folgenden Syntax:
function x = A(p1, p2)
...
B(p2)
function y = B(p3)
...
end
...
end
Beispiel
Lassen Sie uns die Funktion quadratisch umschreiben , aus dem vorherigen Beispiel, diesmal ist die Disc-Funktion jedoch eine verschachtelte Funktion.
Erstellen Sie eine Funktionsdatei quadratic2.m und geben Sie den folgenden Code ein:
function [x1,x2] = quadratic2(a,b,c)
function disc % nested function
d = sqrt(b^2 - 4*a*c);
end % end of function disc
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of function quadratic2
Sie können die obige Funktion an der Eingabeaufforderung wie folgt aufrufen:
quadratic2(2,4,-4)
MATLAB führt die obige Anweisung aus und gibt das folgende Ergebnis zurück:
ans = 0.73205
Private Funktionen
Eine private Funktion ist eine primäre Funktion, die nur für eine begrenzte Gruppe anderer Funktionen sichtbar ist. Wenn Sie die Implementierung einer oder mehrerer Funktionen nicht verfügbar machen möchten, können Sie sie als private Funktionen erstellen.
Private Funktionen befinden sich in subfolders mit dem speziellen Namen private.
Sie sind nur für Funktionen im übergeordneten Ordner sichtbar.
Beispiel
Schreiben wir die quadratische Funktion neu. Diesmal ist die Scheibenfunktion , die die Diskriminante berechnet, jedoch eine private Funktion.
Erstellen Sie einen Unterordner mit dem Namen privat im Arbeitsverzeichnis. Speichern Sie die folgende Funktionsdatei disc.m darin -
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
Erstellen Sie eine Funktion quadratic3.m in Ihrem Arbeitsverzeichnis und geben Sie den folgenden Code ein:
function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3
Sie können die obige Funktion an der Eingabeaufforderung wie folgt aufrufen:
quadratic3(2,4,-4)
MATLAB führt die obige Anweisung aus und gibt das folgende Ergebnis zurück:
ans = 0.73205
Globale Variablen
Globale Variablen können von mehr als einer Funktion gemeinsam genutzt werden. Dazu müssen Sie die Variable in allen Funktionen als global deklarieren.
Wenn Sie über den Basisarbeitsbereich auf diese Variable zugreifen möchten, deklarieren Sie die Variable in der Befehlszeile.
Die globale Deklaration muss erfolgen, bevor die Variable tatsächlich in einer Funktion verwendet wird. Es wird empfohlen, Großbuchstaben für die Namen globaler Variablen zu verwenden, um sie von anderen Variablen zu unterscheiden.
Beispiel
Lassen Sie uns eine Funktionsdatei mit dem Namen aver.m erstellen und den folgenden Code eingeben:
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
Erstellen Sie eine Skriptdatei und geben Sie den folgenden Code ein:
global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
Wenn Sie die Datei ausführen, wird das folgende Ergebnis angezeigt:
av = 35.500