【问题标题】:matlab - arrayfun(..) call, "Not enough input arguments."matlab - arrayfun(..) 调用,“没有足够的输入参数。”
【发布时间】:2012-10-01 04:58:44
【问题描述】:

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

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,它会起作用。但我仍然不明白为什么没有@ 就不能工作。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    查看arrayfun 文档

    功能

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

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

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

    【讨论】:

    • 那么当Matlab“试图评估函数get”时到底发生了什么?它不应该说“函数句柄应作为第一个参数”或类似的东西,而不是参考get 的“输入参数不足”吗?
    • @EvgeniSergeev 显示错误的不是函数 arrayfun。它是函数获取。尝试在第 7 行停止调试器中的代码并运行 get,您将得到相同的结果。该代码甚至无法运行arrayfun,您在为arrayfun 建立参数的阶段收到错误。没有参数你不能运行 get - 这就是给你错误的原因。
    • 啊,我明白了!当然,如果错误在arrayfun(..) 中,那么它就会出现在堆栈中。嗯,我忘了 Matlab 有断点...
    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多