1

假设每个都有长度N向量。我们想要所有可能的总和,范围从. 有这样的数目。除了如下所示之外,还有其他方法可以在 Matlab 中使用内置函数吗?X_1, X_2, ..., X_NkX_1(i1) + X_2(i2) + ... + X_N(iN)i1, i2, ..., iN1...kk^NN for-loops

counter = 1;
for i1=1:k
  for i2=1:k
  .
   .
    .
      for iN=1:k
          res(counter) = X_1(i1) + X_2(i2) + ... + X_N(iN); 
          counter = counter + 1;
      end
    .
   .
  .
  end
end

N此外,根据我们的需要,此代码需要针对 的值进行硬编码N for-loops。我们如何为它的任何一般值编码N

4

2 回答 2

1

N 次迭代的单个循环就足够了。(这里展开)

sums=zeros(1,k^N);
id = 1:k^N;
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_1(i);
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_2(i);
...
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_N(i);
于 2012-10-30T12:46:22.007 回答
0

答案是使用ndgrid

[s{1:N}] = ndgrid(-K:K);
res = zeros(k^N,1);
for i=1:N
   res = res + s{i}(:)
end
于 2012-10-30T14:52:46.747 回答