2011-09-22 3 views
0

제가기억의 행렬 데이터 및 루프

용 및 루프 경우 매트릭스의 데이터를 기억하는 문제가 있다면 그 결과를 내게 마지막 반복의 최종 값을 제공한다. 나는 모든 것을 원한다.

모든 반복의 결과는 행렬의 순서로 저장되어야한다. 당신은 당신의 행렬이 UX=[X Y]; 쓰기 할 때마다 덮어 쓰는

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=[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을 찾고, U1, U2, U3를 찾지 않고이 U를 직접 구할 수 있습니다. – user488182

+0

위의 작업을 수행하고 나서'U = U1 + U2 + U3'를 계산하면 그렇게 나쁘지 않습니다. . – Amro