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丢失.
因此,当这样的一个f被cellfun调用时,输出单元将只有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秒.
此外,是否可以(有效地)捕获两者a并b在一个独特的 cellfun呼叫中?
来自以下文件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)