2

エラーを示す次の要約された例では、関数は配列内のインデックスでf_what(..)入力引数の値を返す必要があります。yts

function Y = f_what(y, ts)

    function get_out = get(t)
        get_out = y(t);
    end

    Y = arrayfun(get, ts);

end

それを呼び出す:

>> f_what(1:10, 1:5)
Error using f_what/get (line 4)
Not enough input arguments.

Error in f_what (line 7)
    Y = arrayfun(get, ts);

また、何らかの理由で、get(..)上記と同じはずの次のものが機能します。

function Y = f_what(y, ts)

    get = @(t) y(t);

    Y = arrayfun(get, ts);

end

それを呼び出す:

>> f_what(1:10, 1:5)

ans =

     1     2     3     4     5

「十分な入力引数がありません」 ...arrayfun(..)この場合、1 つの引数で最初の引数を呼び出す必要があります。またget(..)、1 つの入力引数があります。足りない理由がわかりません。

編集:さらに煮詰めた:

function Y = f_what

    function get_out = get_(t)
        get_out = t;
    end

    Y = arrayfun(get_, 1:5);

end

それでも同じエラーです。

編集 2:の代わりに ,@getの最初の引数を指定すると機能します。しかし、なぜそれがないと機能しないのか、まだわかりません。arrayfun(..)get@

4

1 に答える 1

4

arrayfunのドキュメントを見る

func

n個の入力引数を受け入れ、m個の出力引数を返す関数へのハンドル。

matlabのハンドルは@を使用して示されるため、最初のパラメーターとして@getを渡す必要があります。そうしないと、matlabはハンドルを取得する代わりに、関数getを評価しようとします。その結果、「パラメーターが不足しています」というエラーが発生します。

定義した機能の例では、無名関数へのハンドルになります。これが機能した理由です。

于 2012-10-01T05:45:08.700 に答える