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 に答える