首页 > 解决方案 > 将数组处理为函数参数

问题描述

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

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

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

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

我玩过deal和或结合num2cell索引{:},但我还没有弄清楚如何编写这个函数。

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

标签: matlabvectorizationanonymous-function

解决方案


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

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

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

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


推荐阅读