2011-09-22 56 views
0

我在存储的,如果循环,存储数据和IF循环

在矩阵中的数据有问题,结果给我只有最后一次迭代的最后一个值。我希望所有迭代的结果都存储在矩阵中作为序列。

这里是我的代码示例:

clear all 

clc 

%%%%%%%%%%%%%% 

for M=1:3; 

    for D=1:5; 

%%%%%%%%%%%%%% 

    if ((M == 1) && (D <= 3)) || ((M == 3) && (2 <= D && D <= 5)) 

     U1=[5 6]; 

    else 

     U1=[0 0]; 

    end 

    % desired output: 

    % U1=[5 6 5 6 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 5 6 5 6 5 6] 

%%%%%%%%%%%%%% 

    if (M == 1) && (D==4) || ((M == 3) && (D == 1)) 

     U2=[8 9]; 

    else 

     U2=[0 0]; 

    end 

    % desired output: 

    % U2=[0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0] 

%%%%%%%%%%%%%% 

    if ((M == 1) && (D == 5)) || ((M == 2) && (1 <= D && D <= 5)) 

     U3=[2 6]; 

    else 

     U3=[0 0]; 

    end 

    % desired output: 

    % U3=[0 0 0 0 0 0 0 0 2 6 2 6 2 6 2 6 2 6 2 6 0 0 0 0 0 0 0 0 0 0] 

%%%%%%%%%%%%%% 

    end 
end 

回答

3

您将要覆盖每一个你写UX=[X Y];时候你的矩阵。

如果您想添加数据,可以预先分配矩阵并在每次分配新值时指定矩阵索引,或者写入UX=[UX X Y];以直接在矩阵末尾添加数据。

clear all 
clc 
U1=[]; 
U2=[]; 
U3=[]; 
for M=1:3 
    for D=1:5 
     if ((M == 1) && (D <= 3)) || ((M == 3) && (2 <= D && D <= 5)) 
      U1=[U1 5 6]; 
     else 
      U1=[U1 0 0]; 
     end 
     % desired output: 
     % U1=[5 6 5 6 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 5 6 5 6 5 6] 
     if (M == 1) && (D==4) || ((M == 3) && (D == 1)) 
      U2=[U2 8 9]; 
     else 
      U2=[U2 0 0]; 
     end 
     % desired output: 
     % U2=[0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0] 
     if ((M == 1) && (D == 5)) || ((M == 2) && (1 <= D && D <= 5)) 
      U3=[U3 2 6]; 
     else 
      U3=[U3 0 0]; 
     end 
     % desired output: 
     % U3=[0 0 0 0 0 0 0 0 2 6 2 6 2 6 2 6 2 6 2 6 0 0 0 0 0 0 0 0 0 0] 
    end 
end 
+0

能否请你告诉我该怎么做,通过简单的例子。祝贺 – user488182

+0

感谢Aabaz,但U1,U2和U3未定义,它给错误:???未定义的函数或变量'U1'。 – user488182

+0

好的,太好了,谢谢Aabaz。关于 – user488182

1

可避免完全的循环:

[M,D] = meshgrid(1:3,1:5); 
M = M(:)'; D = D(:)'; 

idx1 = (M==1 & D<=3) | (M== 3 & 2<=D & D<=5); 
idx2 = (M==1 & D==4) | (M==3 & D==1); 
idx3 = (M==1 & D==5) | (M==2 & 1<=D & D<=5); 

U1 = bsxfun(@times, idx1, [5;6]); U1 = U1(:)'; 
U2 = bsxfun(@times, idx2, [8;9]); U2 = U2(:)'; 
U3 = bsxfun(@times, idx3, [2;6]); U3 = U3(:)'; 
+0

感谢Amro,很好的代码。我的目标是找到U = U1 + U2 + U3,我们可以直接找到这个U而没有发现U1,U2和U3 – user488182

+0

这样做,那么计算U = U1 + U2 + U3并不是那么糟糕。 。 – Amro