2013-02-04 6 views
0

주어진 for loop은 새로운 전환 행렬을 계산합니다. 나는 시도하고있다matlab에서 루프를 반복하는 방법

나는 주어진 루프를 현명하게 반복하고 싶다. 그러나 루프를 반복해서 복사/붙여 넣기를 모호하게한다. 도와주세요.

%% generate some weights vector i.e. the probability matrix 
Transition = 
[    
       0.06 0.47 0  0.47 0  0  0; 
       0.47 0.06 0.47 0  0  0  0; 
       0  0.47 0.06 0.47 0  0  0; 
       0.47 0  0.47 0.037 0.023 0  0; 
       0  0  0  0.023 0.037 0.47 0.47; 
       0  0  0  0  0.47 0.06 0.47; 
       0  0  0  0  0.47 0.47 0.06 
]; 

tolerance= 0.01 

Dij= Transition; 
len=length(Transition); 
enter code here 

%% copying the status 
for i=1:7 

    while(1) 
     sel=randi(7); 
     if((Dij(i,sel) ~= 0)) 
      show(i)=sel; 
      break; 
     end 
    end 

    Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel); 
    for i=1:7 
    while(1) 
     sel=randi(7); 
     if((NewDij(i,sel) ~= 0)) 
      show(i)=sel; 
      break; 
     end 
    end 

    NewDij(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel); 
    newnew=NewDij; 
end 

for i=1:7 
    while(1) 
     sel=randi(7); 
     if((newnew(i,sel) ~= 0)) 
      show(i)=sel; 
      break; 
     end 
    end 

    newnew(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel); 

end 

도움을 주시면 감사하겠습니다.

+2

가 왜 그냥 당신이 복사/붙여 넣기하고있는 부분의 주위에 다른 루프를 넣어 쓸 수 있나요? 여기 정확히 무엇을 하려니? – alrikai

+1

루프를 반복하여 무엇을 달성 할 수 있습니까? 전환 행렬을 업데이트하려고하십니까? 또한 코드를 붙이면 도움이되지 않습니다. 당신이하고 싶은 것을 저희에게 말해주십시오. –

답변

0

첫째, 종료 조건이 있습니까? Dij 업데이트를 중지 할시기입니다.

if 조건으로 정의하여 루프 내에서 Dij 업데이트를 추가 할 수 있습니다.

그래서 그 대신

if((Dij(i,sel) ~= 0)) 
    show(i)=sel; 
    break; 

의 당신은

if((Dij(i,sel) ~= 0)) 
    show(i)=sel; 
    Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel); 
1

코드에서 두 번 발생하는 코드 스 니펫이 있음을 확인했습니다. 이것이 반복을 의미하는 것으로 가정하면이 코드가 포함 된 함수 나 스크립트를 정의한 다음 코드를 복사하는 대신이 코드를 두 번 호출 할 수 있습니다. 이렇게하면 한 위치에서 코드를 업데이트 할 위험이 없으며 두 번째 위치에서 코드를 업데이트 할 위험이 없습니다. 함수는 일반적으로 선호 제한 입력 및 출력 인수가

, 나는 while 1 ... break가 정말 나쁜 관행인지 모르지만 나는 그것이 이상하다고 생각하는 (!) 참고로 help function


을 확인 별난.

관련 문제