Main Content

localfunctions

MATLAB ファイル内のすべてのローカル関数の関数ハンドル

説明

fcns = localfunctions は、関数ハンドル fcns の cell 配列を、現在のファイルのすべてのローカル関数に返します。

コマンド ラインまたは無名関数のコンテキストではローカル関数を定義できません。このため、これらのコンテキストから localfunctions を呼び出すと、空の cell 配列が取得されます。cell 配列内で、localfunctions は、順序が未定義の関数ハンドルを返します。

すべて折りたたむ

作業フォルダー内のファイル computeEllipseVals.m に次の関数を作成します。この関数は、すべてのローカル関数のハンドルが含まれた cell 配列を返します。

function fh = computeEllipseVals
fh = localfunctions;
end

function f = computeFocus(a,b)
f = sqrt(a^2-b^2);
end

function e = computeEccentricity(a,b)
f = computeFocus(a,b);
e = f/a;
end

function ae = computeArea(a,b)
ae = pi*a*b;
end

コマンド プロンプトで、ローカル関数のハンドルをもつ cell 配列を取得する関数を呼び出します。

fh = computeEllipseVals
fh =

  3x1 cell array

    {       @computeFocus}
    {@computeEccentricity}
    {        @computeArea}

ハンドルを使用してローカル関数を呼び出し、楕円の面積を求めます。computeArea 関数ハンドルは、cell 配列内の 3 番目の要素です。

fh{3}(3,1)
ans =

    9.4248

R2016b 以降では、スクリプト内にローカル関数を含めることができます。したがって、関数 localfunctions を使用してスクリプトやコマンド プロンプトから呼び出せる関数ハンドルを作成できます。

作業フォルダー内のファイル mystats.m に次のスクリプトを作成します。このスクリプトは、すべてのローカル関数のハンドルが含まれた cell 配列を作成します。

x = [1 3 5 7 9 10 8 6 4 2 0 -2];

avg = mymean(x)

fh = localfunctions;
med = fh{2}(x) % equivalent to med = mymedian(x,n)

function a = mymean(v)
n = length(v);
a = sum(v)/n;
end

function m = mymedian(v)
n = length(v);
w = sort(v);
if rem(n,2) == 1
    m = w((n + 1)/2);
else
    m = (w(n/2) + w(n/2 + 1))/2;
end
end

スクリプトを実行します。MATLAB® はローカル関数 mymean を直接呼び出して平均を計算し、関数ハンドルを介してローカル関数 mymedian を呼び出して中央値を計算します。

mystats
avg =

    4.4167


med =

    4.5000

コマンド プロンプトで、ローカル関数 mymean のハンドルを使用して呼び出します。スクリプトの変数にはコマンド プロンプトからアクセスできます。mymean 関数ハンドルは、cell 配列内の 1 番目の要素です。

x2 = [1 1 2 6 24 120 720 5040];
fh
avg2 = fh{2}(x2)
fh =

  2x1 cell array

    {  @mymean}
    {@mymedian}


avg2 =

    15

バージョン履歴

R2013b で導入