Main Content

function

関数名、入力および出力の宣言

説明

function [y1,...,yN] = myfun(x1,...,xM) は、入力 x1,...,xM を受け入れ、出力 y1,...,yN を返す myfun という関数を宣言します。この宣言ステートメントは、関数の最初の実行可能行でなければなりません。有効な関数名は、アルファベットで始まり、文字、数字またはアンダースコアを含むことができます。

関数は以下に保存できます。

  • 関数定義のみを含む関数ファイル。ファイルの名前は、ファイル内の最初の関数の名前に一致させる必要があります。

  • コマンドと関数定義を含むスクリプト ファイル。関数は、ファイルの末尾になければなりません。スクリプト ファイルに、ファイル内の関数と同じ名前を付けることはできません。R2016b 以降では、関数はスクリプト内でサポートされます。

ファイルには複数のローカル関数または入れ子関数を含めることができます。可読性を向上させるには、end キーワードを使用して、ファイル内の各関数の終端を示します。end キーワードは、以下の場合に必須です。

  • ファイル内のいずれかの関数が入れ子関数を含んでいる。

  • 関数が関数ファイル内のローカル関数であり、ファイル内のローカル関数のいずれかが end キーワードを使用している。

  • 関数がスクリプト ファイル内のローカル関数である。

すべて折りたたむ

calculateAverage.m というファイル内に、入力ベクトルを受け入れ、値の平均を計算し、単一の結果を返す関数を定義します。

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

コマンド ラインから関数を呼び出します。

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

stat.m というファイル内に入力ベクトルの平均と標準偏差を返す関数を定義します。

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

コマンド ラインから関数を呼び出します。

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

$2\pi/3$ において被積分関数の値を計算し、0 から $\pi$ まで曲線の下の面積を計算するスクリプトを、integrationScript.m という名前のファイル内に定義します。被積分関数 $y = \sin(x)^3$ を定義するローカル関数を含めます。

メモ: スクリプトに関数を含めるには、MATLAB® R2016b 以降が必要です。

% 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

stat2.m というファイル内に 2 つの関数を定義します。最初の関数が 2 番目の関数を呼び出します。

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

関数 avg"ローカル関数" です。ローカル関数は、同じファイル内の他の関数だけが使用できます。

コマンド ラインから関数 stat2 を呼び出します。

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

入力を、Inf 要素または NaN 要素のいずれも含まない数値ベクトルに制限する関数を定義します。この関数では、MATLAB® バージョン R2019b 以降で有効な arguments キーワードを使用します。

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

arguments コード ブロック内の (1,:) は、x がベクトルでなければならないことを示します。検証関数 {mustBeNumeric, mustBeFinite} は、x の要素を Inf または NaN のいずれでもない数値に制限します。詳細については、関数の引数の検証を参照してください。

NaN である要素を含むベクトルを指定して関数を呼び出すと、入力引数の宣言に違反します。この違反の結果、検証関数 mustBeFinite によりエラーがスローされます。

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

バージョン履歴

R2006a より前に導入

すべて展開する