2013-05-11 134 views
0

我想在基于两个64x64双向量的matlab中创建一个列向量,并遍历向量中的每个元素,并应用一个方程创建一个新向量,然后应用它。这里是我的代码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 

至于我看这应该工作,但是不是创建创建一个1个* 4096矢量一个64 * 64矢量和,因为载体是不一样的,我得到一个不匹配错误。

回答

0

生成的向量是一个列向量,因为这是linear indexing的输出(索引只有一个下标)。值得注意的是,向列向量的转换是多余的,线性索引是隐含的。

如果你想最终的结果是64×64的矩阵,初始化适当大小的结果数组开始:

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 
+0

是的我同意你的方式更容易,但是,它必须使用迭代出于某种原因。 v2值确实在这里被错误地写下来了,至于它创建一个1 * 4096向量而不是64 * 64的矢量 – user1978826 2013-05-11 23:21:34

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矩阵。