如何使用匿名函数实现具有不同操作的向量input/output?
How to achieve vector input/output with different operations using anonymous functions?
假设我想创建一个执行以下操作的匿名函数
f: [a, b] -> [a^2, b/2]
由于 a
和 b
上的操作不同,我一直无法弄清楚如何操作。这在 matlab 中完全可行吗?我的函数将具有约束 R^2 -> R^2
查看匿名函数的 matlab 帮助,查看部分 functions with multiple inputs or outputs,我认为您可以执行类似下面代码的操作
第二次编辑 事实证明,如果您使用 deal(由 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
由于具体的限制,它必须是这样的:
f = @(x) [x(1)^2, x(2)/2];
您不能以任何其他方式在匿名函数中显式定义输出。
虽然你已经接受了 your question actually reads like you're looking for this solution using deal
:
f = @(x,y) deal( x^2, y/2 );
[u,v] = f(2,2)
返回:
u =
4
v =
1
假设我想创建一个执行以下操作的匿名函数
f: [a, b] -> [a^2, b/2]
由于 a
和 b
上的操作不同,我一直无法弄清楚如何操作。这在 matlab 中完全可行吗?我的函数将具有约束 R^2 -> R^2
查看匿名函数的 matlab 帮助,查看部分 functions with multiple inputs or outputs,我认为您可以执行类似下面代码的操作
第二次编辑 事实证明,如果您使用 deal(由 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
由于具体的限制,它必须是这样的:
f = @(x) [x(1)^2, x(2)/2];
您不能以任何其他方式在匿名函数中显式定义输出。
虽然你已经接受了deal
:
f = @(x,y) deal( x^2, y/2 );
[u,v] = f(2,2)
返回:
u =
4
v =
1