矢量化" for"循环与双向相关的变量

时间:2015-09-23 08:02:41

标签: matlab vectorization

上周我问了以下问题: https://stackoverflow.com/questions/32658199/vectorizing-gibbs-sampler-in-matlab 也许我不想清楚我想做什么,所以这可能会更清楚。 我想向" for"在matlab中循环,其中循环内的一些变量是双向相关的。所以,这是一个例子:

A=2;
B=3;

for i=1:10000

  A=3*B;
  B=exp(A*(-1/2))

end

再次感谢你的时间。

1 个答案:

答案 0 :(得分:2)

快速Excel计算表明这很快收敛到0.483908(经过少于10000次循环后 - 所以加速它的一种方法是检查收敛)。如果 A B 分别始终为2和3,则可以使用此值替换循环。

或者,使用某些系列分析,当 i 很大时,您可以为 B 提供解析表达式 - 尽管嵌套的指数派生这是一个超出我自己的能力!

修改

一些谷歌搜索显示this。维基百科指出,对于 x 到无穷大(即 x ^ x ^ x ^ x ^ x ... )的分类,解决方案 y 满足 y = x ^ y 。在您的情况下,例如,0.483908 = e ^( - 3/2)^ 0.483908,因此0.483908是一个解决方案。不知道如何利用这个。

维基百科也给出了收敛条件,这可能对您有用:x位于e ^ -e和e ^ 1 / e之间。

最终编辑(?)

事实证明,你需要Lambert的W函数来求解 y = x ^ y 形式的方程。似乎没有本机功能,但FileExchange中似乎有一些内容 - 请参阅herehere