lea*_*vst 23 matlab arguments function anonymous-function
我使用匿名函数进行简单的数据值转换.匿名函数使用以下语法定义
sqr = @(x) x.^2;
Run Code Online (Sandbox Code Playgroud)
我想有一个简单的匿名函数,它返回多个输出,可以按如下方式使用...
[b,a] = myAnonymousFunc(x);
Run Code Online (Sandbox Code Playgroud)
Matlab文档表明这是可能的,但它没有给出定义这样一个函数所需语法的示例.
http://www.mathworks.co.uk/help/techdoc/matlab_prog/f4-70115.html#f4-71162
定义这样一个函数的语法是什么[ 在一行中,就像我帖子顶部的代码示例 ]?
Sam*_*rts 26
这样做你需要的吗?
>> f = @(x)deal(x.^2,x.^3);
>> [a,b]=f(3)
a =
9
b =
27
Run Code Online (Sandbox Code Playgroud)
在这个例子中,您需要确保只f
使用两个输出参数进行调用,否则会出错.
编辑
至少在最新版本的MATLAB中,您只能使用以下~
语法返回一些输出参数:
>> [a,~]=f(3)
a =
9
>> [~,b]=f(3)
b =
27
Run Code Online (Sandbox Code Playgroud)
如果你不想使用tilde~跳过输出也不输出单元格数组,你只需要一个辅助匿名函数:
deal2 = @(varargin) deal(varargin{1:nargout});
myAnonymousFunc = @(x) deal2(x.^2, x.^3);
Run Code Online (Sandbox Code Playgroud)
那么你可以只获得第一个输出参数或第一个和第二个参数:
x = 2;
[b,a] = myAnonymousFunc(x)
b = myAnonymousFunc(x)
Run Code Online (Sandbox Code Playgroud)
结果:
b = 4
a = 8
b = 4
如果被调用的函数返回多个输出,则可以从匿名函数获取多个输出.有关此操作的示例,请参见MathWorks网站上的此博客文章.
有两种方法可以从匿名函数获取多个输出:
调用返回多个输出的函数
从链接到的博客文章中,他们使用了eig
这样的功能
fdoubleEig = @(x) eig(2*x)
[e, v] = fdoubleEig(magic(3))
Run Code Online (Sandbox Code Playgroud)或者,您可以构造一个匿名函数,该deal
函数使用该函数返回多个输出.
这是我编造的一个:
>>> f = @(x, y, z) deal(2*x, 3*y, 4*z)
>>> [a, b, c] = f(1, 2, 3)
a =
2
b =
6
c =
12
Run Code Online (Sandbox Code Playgroud)编辑:正如Sam Roberts所述,在我链接到的博客文章中,您必须在使用时使用正确数量的输出参数deal
,否则会引发错误.解决此问题的一种方法是返回结果单元格.例如
>>> f = @(x, y, z) {2*x, 3*y, 4*z}
>>> t = f(1, 2, 3)
>>> [a, b, c] = t{:}
a =
2
b =
6
c =
12
Run Code Online (Sandbox Code Playgroud)