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(..)应该用一个参数来调用它的第一个参数。并且get(..)有一个输入参数。我不明白为什么这还不够。

编辑:更归结为:

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文档

功能

处理接受 n 个输入参数并返回 m 个输出参数的函数。

matlab 中的句柄使用@ 表示,因此您需要将@get 作为第一个参数传递。否则,matlab 会尝试评估函数 get 而不是获取其句柄,这会导致“参数不足”错误。

在您定义的示例中, get 是匿名函数的句柄,这就是它起作用的原因。

于 2012-10-01T05:45:08.700 回答