如何使用匿名函数实现不同操作的矢量输入/输出?

时间:2016-08-22 04:20:35

标签: matlab function anonymous-function

假设我想创建一个执行以下操作的匿名函数

f: [a, b] -> [a^2, b/2]

由于ab的操作不同,我无法弄清楚如何操作。这在matlab中是否可行?我的函数将具有约束R^2 -> R^2

3 个答案:

答案 0 :(得分:5)

由于具体的限制,它必须是这样的:

f = @(x) [x(1)^2, x(2)/2];

您无法以任何其他方式在匿名函数中明确定义输出。

答案 1 :(得分:3)

查看有关查看functions with multiple inputs or outputs部分的匿名函数的matlab帮助,我认为您可以执行类似下面代码的操作

第二次修改如果您使用交易(由thewaywewalk给出),或者如果您取消引用匿名函数,则可以获得相同的结果。

crazyfunction=@(a,b) {(a^2),(b/2)};
[x y]=crazyfunction(a,b);

快速而肮脏的测试表明这不会产生语法错误

>> f = @(x,y)  {x^2, y/2};
>> f(2,2)

ans = 

    [4]    [1]

编辑解雇了matlab以查看我的原始答案是否真的有效,看起来不像(请参阅第二次编辑,您需要使用{})。

你可以将两个匿名函数连接在一起,使a和b成为匿名函数c的一部分,或者有效地使用匿名函数的结构,如下所示

crazyfunction={@(a) (a^2); @(b) (b/2);}
[crazyfunction{1](7) crazyfunction{2}(9)]
ans = 
    49.0000     4.5

答案 2 :(得分:3)

虽然您已经接受了PQL's answer,但您的问题实际上就像是您正在寻找使用deal的解决方案:

f = @(x,y) deal( x^2, y/2 );

[u,v] = f(2,2)

返回:

u =
     4
v =
     1