2014-10-09 137 views
1

我對MATLAB相對較新,而且我在一個特定問題中陷入困境。將嵌套循環的迭代次數存儲在數組中

我有一個方程,我試圖解決使用while循環。它通過猜測某個參數e_0並將其填充到方程中,直到它收斂爲止。一個例子如下發現,其中的初始猜測值等於100:

clear all 
i=1; 
e_0=100 
e_1= e_0 + log(0.6) - log(exp(e_0)/(exp(e_0)+1)) 

    while(i < 1e10 & abs((e_1 - e_0)) > 1e-12), 
     i = i + 1; 
     e_0=e_1; 
     e_1= e_0+log(0.6)-log(exp(e_0)/(exp(e_0)+1)) 
    end 
i 

現在我想完全相同的程序,但然後在相同的時間,例如E_0的多個值101,102,103等等,並且計算這些將要進行多少次迭代。我認爲我需要爲此做一個for-loop。我想是這樣的:

clear all 
i=1; 

for e_0 = 100:105 
e_1= e_0+log(0.6)-log(exp(e_0)/(exp(e_0)+1)) 
    while(i < 1e10 & abs((e_1 - e_0)) > 1e-12), 
     i = i + 1; 
     e_0=e_1; 
     e_1= e_0+log(0.6)-log(exp(e_0)/(exp(e_0)+1)) 
    end 
end 
    i 

不過,現在一切從不同的猜測值迭代顯示對方的下面,我一共拿到1519次迭代。我怎樣才能例如將每個初始猜測值彼此之間所需的迭代次數存儲到變量中?

我希望已經夠清楚了......謝謝!

回答

0

如何:

i = 0; 
offset = 99; 
for n = 1:6 
e_0 = n + offset; 
e_1 = e_0+log(0.6)-log(exp(e_0)/(exp(e_0)+1)) 
    while(i < 1e10 & abs((e_1 - e_0)) > 1e-12), 
     i = i + 1; 

這部分需要改變,以防止e_0重新定義內環路:

 e_1= e_1+log(0.6)-log(exp(e_1)/(exp(e_1)+1)) 
    end 
    iterations(n)=i; 
end 

注意:不建議使用i作爲循環增量因爲它重新定義了用於複數的i

+0

非常感謝您的快速回復!但是,我收到一條錯誤消息:「試圖訪問(0.405465);索引必須是正整數或邏輯」。 – user3594343 2014-10-09 18:10:59

+1

@ user3594343這是因爲您正在覆蓋嵌套循環內for循環的循環變量。你真的不想那樣做。改用其他變量。 – sobek 2014-10-09 18:12:24

+0

@ user3594343您應該將'i'初始化爲零或您的循環次數將從2開始計數。 – sobek 2014-10-09 18:29:05