0

2 つの 64x64 double ベクトルに基づいて matlab で列ベクトルを作成しようとしています。ベクトルの各要素を反復処理し、方程式を適用して新しいベクトルを作成し、それを適用します。これが私のコードです

for i=1:4096,

vector1 = v1(:); %instead of copying the vector this created a 4096X1 double rather than 64X64 for some reason, same with vector2
vector2 = v1(:);
vector1(i) = vector1(i) + 0.05*vector2(i); %for each element in vector1 apply equation to update values.
end
v1(:) = vector1(:); % replace v1 with the new vector1 created on the equation applied 

私が見る限り、これは機能するはずですが、64*64 ベクトルを作成する代わりに 1*4096 ベクトルが作成され、ベクトルが同じではないため、不一致エラーが発生します。

4

2 に答える 2

0
vector1 = v1;
for i=1:64
    for j = 1:64
        vector1(i, j) = vector1(i, j) + 0.05*v1(i, j);
    end
end
v1 = vector1;     % or v1 = vector1(:, :); if you prefer

このプロセスには vector2 マトリックスは必要ありません。

于 2013-05-11T23:18:02.863 に答える
0

結果のベクトルは列ベクトルです。これは、線形インデックス付け(1 つの添字のみによるインデックス付け) の出力であるためです。列ベクトルへの変換が冗長であることも注目に値します。線形インデックスはそれを暗黙的に行います。

最終結果を 64x64 行列にしたい場合は、最初に適切なサイズで結果配列を初期化します。

result = zeros(size(v1)); %// Same dimensions as v1, i.e 64-by-64

そして、MATLAB が線形インデックスを結果行列の対応する位置に自動的に変換するようにします。または、次のように使用することもできますreshape

result = reshape(v1, 64, 64);

さらに、あなたのループのロジックは実際に複数の場所で壊れていると思います:

  1. 各反復でvector1との値を上書きしています。初期化行をループの前にvector2置きます。
  2. 間違った値を割り当てていますvector2...そうすべきではありませんvector = v2(:)か?

最後のループは次のようになります。

result = zeros(size(v1));
for k = 1:numel(v1),
    result(k) = v1(k) + 0.05 * v2(k);
end
于 2013-05-11T23:14:54.740 に答える