在下面简要说明错误的示例中,函数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
,则此功能正常。但是,如果没有@
,我仍然无法理解为什么它不起作用。
答案 0 :(得分:4)
查看arrayfun文档
FUNC
处理接受n个输入参数并返回m个输出参数的函数。
matlab中的句柄用@表示,所以你需要传递@get作为第一个参数。否则,matlab会尝试评估函数get而不是获取其句柄,这会导致“参数不足”错误。
在你工作的示例中,你定义的是一个匿名函数的句柄,这就是它工作的原因。