2014-12-06 77 views
0

這種計算的目的是取一個值(a),並對其執行兩個計算的一個用於循環的每個迭代。每個順序循環都會採用新的計算值並重新計算它。我想保留每個循環的輸出值。下面是一個例子,使用邏輯陣列來決定使用通過每個5環,其計算: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 

這個實例不正確的,因爲它僅用於a而非5.從期望的結果返回1個值這個例子是:

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)'會比'長度比較合適的(B)'。通常你會做'a(end + 1)= a_next'而不是'a = [a,a_next]'。最好將輸出預分配爲'a = NaN([1 numel(b)+1]); a(1)= 0;'然後使用'a(i + 1)= a_next'分配給'a',以避免在循環的每次通過時整個數組的低效重新分配。 – 2014-12-06 01:44:00

相關問題