2014-12-06 1 views
0

이 계산은 값 (a)을 가져 와서 루프의 각 반복에 대해 두 계산 중 하나를 수행하는 것을 목표로합니다. 각 순차 루프는 새 계산 된 값을 가져 와서 다시 계산합니다. 각 루프에서 출력 된 값을 유지하고 싶습니다. 단지로부터 a 오히려 5보다 원하는 결과 1 개의 값을 리턴로MATLAB - 반복 계산의 각 반복에 대한 출력을 만드는 방법

a = 0; 
b = logical([1 0 1 1 0]); 

for i = 1:length(b) 
    if b(i) == 1 
     a = 1*2 + a*2 
    else 
     a = a*3 
    end 
end 

이 예 올바르지 않은 예를 들면 : 5 개 각 루프상에서 사용되는 계산을 결정하는 논리 어레이를 사용한다 이 예는 다음과 같습니다.

a = 2 6 14 30 90 

제발 도와주세요. 많은 감사합니다.

답변

1

당신은 할 수

a = [0]; 
b = logical([1 0 1 1 0]); 

for i = 1:length(b) 
    if b(i) == 1 
     a(end+1) = 1*2 + a(end)*2; 
    else 
     a(end+1) = a(end)*3; 
    end 
end 
+2

몇 matlab에 관용적 항목 :'numel (b)는 '길이'보다 더 적합 할 것 (나)'. 일반적으로'a = [a, a_next] '대신'a (end + 1) = a_next'를 사용합니다. 그리고 출력을'a = NaN ([1 numel (b) +1)]로 미리 할당하는 것이 더 낫습니다. 루프의 각 패스에서 전체 배열의 비효율적 인 재 할당을 피하기 위해 a (1) = 0;'을 사용하고'a (i + 1) = a_next'를 사용하여'a '에 할당합니다. –

관련 문제