2011-09-22 41 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