2014-10-09 63 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