我对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循环。我想到这样的事情:
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 :(得分: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
。