Matlab 函数句柄的笛卡尔积

Matlab 函数句柄的笛卡尔积,matlab,function,Matlab,Function,我希望能够构建函数的笛卡尔积。例如,考虑以下两组函数 a = function_handle1; b = function_handle2; c = function_handle3; d = function_handle4; result = cartprod({a b}, {c d}); 结果应该是这样的: result = [a c; a d; b c; b d]; MATLAB中有什么允许我这样做的吗?MATLAB中笛卡尔积的go to函数是(或)。在本例中,技巧是将句柄打包到单

我希望能够构建函数的笛卡尔积。例如,考虑以下两组函数

a = function_handle1;
b = function_handle2;
c = function_handle3;
d = function_handle4;

result = cartprod({a b}, {c d});
结果
应该是这样的:

result = [a c; a d; b c; b d];

MATLAB中有什么允许我这样做的吗?

MATLAB中笛卡尔积的go to函数是(或)。在本例中,技巧是将句柄打包到单元格数组中,并使用
meshgrid
中的索引执行操作。比如说,

>> a=@sum; b=@mean; c=@std; d=@var;
>> handles = {a,b,c,d}
handles = 
    @sum    @mean    @std    @var
现在句柄存储在单元格数组中,您可以通过索引构建输出数组:

>> [II,JJ]=meshgrid(1:2,3:4);
>> result=handles([II(:) JJ(:)])
result = 
    @sum     @std   
    @sum     @var
    @mean    @std   
    @mean    @var
请记住,您需要使用大括号(
{}
)来访问单元格的内容:

>> x = [1 2];
>> result{1,1}(x)
ans =
     3
>> result{1,2}(x)
ans =
    0.7071
>> result{2,2}(x)
ans =
    0.5000
或者您可以使用:


请注意,不能有函数句柄的常规数组。如果您尝试任何形式的连接(例如
horzcat
vertcat
cat
),您会得到错误
不允许使用非标度函数句柄数组;改用单元格数组。
。也可以将句柄分配给
struct
数组的字段,并使用
structfun
,如中所示。

它必须是矩阵吗?那单元格呢,
result={ac;ad;bc;bd}
>> x = [1 2];
>> cellfun(@(c)c(x),result(1,:))
ans =
    3.0000    0.7071