matlab - arrayfun(..)调用,“没有足够的输入参数。”

时间:2012-10-01 04:58:45

标签: matlab

在下面简要说明错误的示例中,函数f_what(..)应该返回数组y中索引处的输入参数ts的值:

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,则此功能正常。但是,如果没有@,我仍然无法理解为什么它不起作用。

1 个答案:

答案 0 :(得分:4)

查看arrayfun文档

  

FUNC

     

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

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

在你工作的示例中,你定义的是一个匿名函数的句柄,这就是它工作的原因。