处理数组到函数参数

Deal array to function arguments

我有一个函数(通过符号工具箱创建)接受大量标量输入:

scalarFn = @(a,b,c) a .* b + c

我想更改此函数,使其接受单个输入并将向量的元素处理为上述函数的输入参数:

vectorFn = @(theta) theta(1) .* theta(2) + theta(3)

我尝试过 deal 和/或将 num2cell{:} 索引结合使用,但我还没有弄清楚如何编写此函数。

最终,我想要一个函数,它接受像 scalarFn 这样的函数句柄(但不一定只有 3 个参数——很可能更多)并返回一个新的函数句柄 vectorFn,它只有一个输入作为向量。有什么办法吗?

作为一个笨拙的答案,我知道我可以用 eval 语句来做到这一点:

vectorFn = eval(['@(theta) scalarFn(' strjoin(arrayfun(@(x) ['theta(' num2str(x) ')'], 1:nargin(scalarFn), 'Uniform', false), ', ') ')']);

scalarFn(1,2,3)
vectorFn([1 2 3])

但这似乎是一个特别不稳健的解决方案。