Hauptinhalt

function

Deklarieren von Funktionsname, Eingaben und Ausgaben

Beschreibung

function [y1,...,yN] = myfun(x1,...,xM) deklariert eine Funktion mit dem Namen myfun, die die Eingaben x1,...,xM akzeptiert und die Ausgaben y1,...,yN zurückgibt. Diese Deklarationsanweisung muss die erste ausführbare Zeile der Funktion sein. Gültige Funktionsnamen beginnen mit einem alphabetischen Zeichen und können Buchstaben, Zahlen oder Unterstriche enthalten.

  • Bei einer Ausgabe sind Klammern optional: function y = myfun(x1,...,xM)

  • Wenn keine Ausgaben vorliegen, lassen Sie das Gleichheitszeichen aus: function myfun(x1,...,xM)

  • Wenn keine Eingaben vorliegen, sind Klammern optional: function [y1,...,yN] = myfun

Sie können Ihre Funktion wie folgt speichern:

  • In einer Funktionsdatei, die ausschließlich Funktionsdefinitionen enthält. Der Name der Datei muss dem Namen der ersten Funktion in der Datei entsprechen.

  • In einer Skriptdatei, die Befehle und Funktionsdefinitionen enthält. Skriptdateien können nicht denselben Namen wie eine Funktion in der Datei haben.

    Vor R2024a: Lokale Funktionen in Skripten müssen am Ende der Datei definiert werden, nach der letzten Zeile des Skriptcodes.

Dateien können mehrere lokale Funktionen oder verschachtelte Funktionen umfassen. Zum Verbessern der Lesbarkeit verwenden Sie das Schlüsselwort end, um das Ende jeder Funktion in einer Datei anzugeben. Das Schlüsselwort end ist in folgenden Fällen erforderlich:

  • Wenn eine beliebige Funktion in der Datei eine verschachtelte Funktion enthält.

  • Wenn die Funktion eine lokale Funktion innerhalb einer Funktionsdatei ist und eine beliebige lokale Funktion in der Datei das Schlüsselwort end verwendet.

  • Wenn die Funktion eine lokale Funktion innerhalb einer Skriptdatei ist.

Beispiel

Beispiele

alle reduzieren

Definieren Sie eine Funktion in einer Datei mit dem Namen calculateAverage.m, die einen Eingabevektor akzeptiert, den Durchschnitt der Werte berechnet und ein einzelnes Ergebnis zurückgibt.

function ave = calculateAverage(x)
    ave = sum(x(:))/numel(x); 
end

Rufen Sie die Funktion über die Befehlszeile auf.

z = 1:99;
ave = calculateAverage(z)
ave = 
50

Definieren Sie eine Funktion in einer Datei mit dem Namen stat.m, die den Mittelwert und die Standardabweichung eines Eingabevektors zurückgibt.

function [m,s] = stat(x)
    n = length(x);
    m = sum(x)/n;
    s = sqrt(sum((x-m).^2/n));
end

Rufen Sie die Funktion über die Befehlszeile auf.

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat(values)
ave = 
47.3400
stdev = 
29.4124

Definieren Sie in einer Datei mit dem Namen plotData.m eine Funktion, die Eingaben mithilfe benutzerdefinierter Parameter darstellt.

function plotData(Xdata,Ydata)
    plot(Xdata,Ydata,Color="black",LineStyle="-.")
end

Rufen Sie die Funktion über die Befehlszeile auf.

Xdata = 1:100;
Ydata = sin(pi/20*Xdata);
plotData(Xdata,Ydata)

Figure contains an axes object. The axes object contains an object of type line.

Definieren Sie ein Skript in einer Datei mit dem Namen integrationScript.m, das den Wert des Integranden bei $2\pi/3$ und die Fläche unter der Kurve von 0 bis $\pi$ berechnet. Schließen Sie eine lokale Funktion ein, die den Integranden definiert, $y = \sin(x)^3$.

% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)

% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)

function y = myIntegrand(x)
    y = sin(x).^3;
end
y =

    0.6495


a =

    1.3333

Definieren Sie zwei Funktionen in einer Datei mit dem Namen stat2.m, sodass die erste Funktion die zweite aufruft.

function [m,s] = stat2(x)
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

Die Funktion avg ist eine lokale Funktion. Lokale Funktionen sind nur für andere Funktionen innerhalb derselben Datei verfügbar.

Rufen Sie die Funktion stat2 über die Befehlszeile auf.

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)
ave =
   47.3400
stdev =
   29.4124

Definieren Sie eine Funktion, die die Eingabe für einen numerischen Vektor einschränkt, der keine Inf- oder NaN-Elemente enthält.

function [m,s] = stat3(x)
    arguments
        x (1,:) {mustBeNumeric, mustBeFinite}
    end
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

Im Codeblock arguments weist (1,:) darauf hin, dass x ein Vektor sein muss. Die Validierungsfunktionen, {mustBeNumeric, mustBeFinite}, beschränken die Elemente in x auf numerische Werte, die nicht Inf oder NaN sind. Weitere Informationen finden Sie unter Function Argument Validation.

Wird die Funktion mit einem Vektor aufgerufen, der ein Element enthält, das NaN ist, verletzt dies die Deklaration des Eingabearguments. Diese Verletzung führt dazu, dass die Validierungsfunktion mustBeFinite einen Fehler ausgibt.

values = [12.7, 45.4, 98.9, NaN, 53.1];
[ave,stdev] = stat3(values)
Invalid input argument at position 1. Value must be finite.

Versionsverlauf

Eingeführt vor R2006a

alle erweitern