matlab 函数参数可变,matlab – 如何使用可变数量的输出参数编写匿名函数?

OP’s solution很好,因为它在很多情况下都很简洁实用.

然而,它有一个主要的缺点,因为它的可扩展性低于其他可能的.之所以提出这个主张,是因为所有函数({x ^ 2,2 * x,2})都被评估,无论它们是否需要作为输出 – 这导致“浪费”计算时间和小于3时的内存消耗请求输出.

在这个问题的例子中,这不是问题,因为函数及其派生非常容易计算,输入x是标量,但在不同的情况下,这可能是一个非常现实的问题.

我正在提供一个修改版本,虽然更加丑陋但是避免了上述问题并且更为一般:

funcs_to_apply = {@(x)x.^2, @(x)2*x, @(x)2};

unpacker = @(x)deal(x{:});

myFun = @(x)unpacker(cellfun(@(c)feval(c,x),...

funcs_to_apply(1:evalin('caller','nargout')),...

'UniformOutput',false)...

);

笔记:

>我使用的附加功能是cellfun,evalin和feval.

>只添加了’UniformOutput’参数,以便cellfun的输出是一个单元格(并且可以“解包”到comma-separated list;我们可以将它包装在num2cell中).> evalin技巧是必需的,因为在myFun范围内,我们不知道从解包器请求了多少输出.>虽然通常不鼓励使用各种形式的eval(例如:evalin),但在这种情况下,我们确切地知道调用者是谁,这是一个安全的操作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值