Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 需要:返回1个以上输出的匿名函数的Matlab示例_Function_Matlab_Arguments_Anonymous Function - Fatal编程技术网

Function 需要:返回1个以上输出的匿名函数的Matlab示例

Function 需要:返回1个以上输出的匿名函数的Matlab示例,function,matlab,arguments,anonymous-function,Function,Matlab,Arguments,Anonymous Function,我使用匿名函数进行简单的数据值转换。匿名函数使用以下语法定义 sqr = @(x) x.^2; 我想有一个简单的匿名函数,返回多个输出,可以使用如下 [b,a] = myAnonymousFunc(x); Matlab文档表明这是可能的,但没有给出定义此类函数所需的语法示例 定义这样一个函数的语法是什么[在一行中,如我文章顶部的代码示例]?这能满足您的需要吗 >> f = @(x)deal(x.^2,x.^3); >> [a,b]=f(3) a = 9 b

我使用匿名函数进行简单的数据值转换。匿名函数使用以下语法定义

sqr = @(x) x.^2;
我想有一个简单的匿名函数,返回多个输出,可以使用如下

[b,a] = myAnonymousFunc(x);
Matlab文档表明这是可能的,但没有给出定义此类函数所需的语法示例


定义这样一个函数的语法是什么[在一行中,如我文章顶部的代码示例]?

这能满足您的需要吗

>> f = @(x)deal(x.^2,x.^3);
>> [a,b]=f(3)
a =
     9
b =
    27
在本例中,您需要确保只使用两个输出参数调用f,否则它将出错

编辑

至少在最新版本的MATLAB中,您可以使用~语法仅返回部分输出参数:


如果被调用的函数返回多个输出,则可以从匿名函数获得多个输出。请参见MathWorks网站上的这一示例

有两种方法可以从匿名函数获取多个输出:

 deal2 = @(varargin) deal(varargin{1:nargout});
 myAnonymousFunc = @(x) deal2(x.^2, x.^3);
调用一个返回多个输出的函数

从链接到的博客帖子中,他们使用的函数如下

fdoubleEig = @(x) eig(2*x)
[e, v] = fdoubleEig(magic(3))
或者,您可以构造一个匿名函数,使用该函数返回多个输出

这是我编的一个:

>>> f = @(x, y, z) deal(2*x, 3*y, 4*z)
>>> [a, b, c] = f(1, 2, 3)

a = 
     2
b = 
     6
c = 
     12
编辑:正如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

如果您不希望使用tilde~跳过输出,也不希望输出单元格数组,则只需要一个辅助匿名函数:

 deal2 = @(varargin) deal(varargin{1:nargout});
 myAnonymousFunc = @(x) deal2(x.^2, x.^3);
然后,您可以只获取第一个输出参数,或者同时获取第一个和第二个输出参数:

x = 2;
[b,a] = myAnonymousFunc(x)
b = myAnonymousFunc(x)
结果:

b= 四,

a= 八,

b= 四,


有趣的我甚至没有考虑deal函数。@Chris我添加了一个更好的方法来解决在我的答案中返回其他数量的输出参数的问题。@SamRoberts看起来不错,不过对于返回2个以上值的函数,您需要多个~s。这是我更喜欢Python的地方之一,元组解包可以让您编写,=函数。。。其中可以将任意数量的参数绑定到_。AFAIK MATLAB没有一个等价物。@克里斯,这是真的,你不能在MATLAB中这样做。如果您正在编写一个常规函数,那么可以使用varargout获得与Python方法类似的效果,但是使用匿名函数很难做到这一点。我现在可以很容易地定义和使用单极滤波器函数,就像这个>>opf=@dt,tcdealdt/tc,[1 dt/tc-1];>>[b,a]=opf1/44100,0.0050