Matlab:定义一个函数句柄,捕获函数的第二个返回值

Aco*_*rbe 9 matlab function-handle

假设我有一个foo定义为的函数

   [a b] = foo(c ).
Run Code Online (Sandbox Code Playgroud)

如果我考虑一个函数句柄

 f = @(c)foo(c)
Run Code Online (Sandbox Code Playgroud)

例如,在一个cellfun电话中使用,我得到的是一个f等同于foo定义的行为

  a = foo(c)
Run Code Online (Sandbox Code Playgroud)

即,返回的值b丢失.

因此,当这样的一个fcellfun调用时,输出单元将只有as并且将错过bs(我当前关心的).目视

    cellfun(f,input)

  [a(input{1})]           ?
  [a(input{2})]           ?
     ....            b gets killed along the way
Run Code Online (Sandbox Code Playgroud)

问:如何定义一个函数句柄foo捕获只是bS' 即赋予类似的定义行为foo

  b = foo(c)
Run Code Online (Sandbox Code Playgroud)

即^ 2,浪费a秒.

此外,是否可以(有效地)捕获两者ab在一个独特的 cellfun呼叫中?

ang*_*nor 6

来自以下文件cellfun:

[A1,...,Am] = cellfun(func,C1,...,Cn)调用函数句柄func指定的函数,并从单元格数组C1,...,Cn传递元素,其中n是数字函数func的输入.输出数组A1,...,Am,其中m是函数func的输出数,包含函数调用的组合输出.

所以是的,cellfun可以使用多输出功能,在这种情况下,它只返回一些输出.如果您只想使用第二个,可以使用~忽略第一个.匿名函数的多个输出也是如此 - 如果指定多个输出参数,它们将被返回.这是一个简单的代码:

function test
    x{1} = 1;
    x{2} = 2;
    [~, B] = cellfun(@foo, x);
    f=@(c)foo(c);
    [A, B] = f(1);

    function [a b] = foo(x)
        a = x+1;
        b = x+2;
    end
end
Run Code Online (Sandbox Code Playgroud)