MATLAB:如何在所有可能的输入向量组合上计算具有多个输入的函数

MATLAB:如何在所有可能的输入向量组合上计算具有多个输入的函数,matlab,Matlab,假设我有一个有三个输入的简单函数 f=@a,b,c a+b+c 我想在输入组合上评估此函数 A = 1:10 B = 2:2:10 C = 0.1:0.1:1 并将输出存储在矩阵F中 我现在的做法如下: F = NaN(length(A),length(B),length(C)); for ia = 1:length(A) for ib = 1:length(B) for ic = 1:length(C) F(ia,ib,ic) = f(A(ia),B(ib)

假设我有一个有三个输入的简单函数

f=@a,b,c a+b+c

我想在输入组合上评估此函数

A = 1:10
B = 2:2:10
C = 0.1:0.1:1
并将输出存储在矩阵F中

我现在的做法如下:

F = NaN(length(A),length(B),length(C));

for ia = 1:length(A)
   for ib = 1:length(B)
     for ic = 1:length(C)
        F(ia,ib,ic) = f(A(ia),B(ib),C(ic))
     end
   end
end

我想知道是否有一种有效的方法可以做到这一点,而不必使用sloppy for循环,*也不必对函数f进行矢量化。

如果您想要简洁的语法,并且不太关心内存或速度,可以使用:

生成所有组合;然后 要在每个组合上调用f: 第二步利用以下事实:可以使用多个数组作为输入调用arrayfun,在这种情况下,它从每个数组中获取相应的元素:

[aa, bb, cc] = ndgrid(A,B,C);        %// step 1
result = arrayfun(f, aa, bb, cc);    %// step 2
至于我上面提到的内存和速度问题:

如果输入向量很大,步骤1需要相当多的内存,因为所有组合都是一次生成的。 步骤2可能导致代码比使用for循环慢;例如,见。
在我看来,消除循环和向量化f本质上是一回事。您可以将bsxfun与自定义的非矢量化函数一起使用,但我怀疑它会比loops快。您可以将meshgrid用于a、B、C,然后只使用一个循环。它效率不高,但可能看起来更聪明@路易斯门多怎么了?这次速度不是问题,我只是想要更简洁的语法:-@Kamtal你能同时使用meshgrid和bsxfun吗?如果不是为了速度,你为什么要这么做?