今天重温了一遍许久之前出现在BBC上的一部科学纪录片——The.Secret.Life.of.Chaos(神秘的混沌理论)。惊喜的发现自己相比于去年进步很多,一个很明显的证明便是现在我能看完影片有所触动并在matlab上针对自己的想法进行实验,进一步写下这篇文章。

  不得不说看完这部纪录片仍旧感到心潮澎湃,而这次我对Mandelbrot Set产生了极大兴趣,想亲自试试函数迭代后的一系列情形。

  这样凭空说起来很模糊抽象(我的复变老师说:在数学中,很多过程都称为迭代),还是直接写公式来的清晰明了。z=z^2+c(c为常数)。

  就是这样一个公式,每一次运算的得到的z值代入下一次等号的右边(或许借用一下数字电路分析中现态和次态的概念更加清晰)。据我了解,这便是Mandelbrot Set的思想精华所在。

  我对每一次得到的z值与次数所形成的图像蛮有兴趣,于是便随意选了一个c=2进行测试。很有趣的是从第十二次迭代得到的z便inf了。

  这显然是c值选取过大。于是慢慢减小取值,发现到c取0.2的时候,迭代一百次毫无问题。更有意思的是他似乎收敛到0.2764这样一个数字

                                                                                         图1 c=0.2迭代10000次

  之后又慢慢逼近找到一个差一点点便使得100次迭代中出现inf,最终找到它了——0.25117.

  你一定没有忘记主要任务是观察z值与迭代次数的关系吧?那就用这个0.25117画一下图像plot(i, z(i));

 结果出现问题了:

                                                                                 图2 c=0.25117迭代一百次未用对数

  就好像一下子在99-100那里从0跳到了很大的一个数一样!

  仔细观察z的值,发现其在89之前都是小于1的,而93一下子77点多,之后便是e+03,e+07,e+15,e+30,e+60,e+121,e+242了。依次对91-99这九个z值画出其相对应迭代次数(即91-99)的图像:

                                                                     图3 c=0.25117从91-99对应得z值与迭代次数的图像

  显然有值啊!我陷入了迷茫(甚至天真的认为是matlab出bug了),这时我的老师点醒了我(感谢老师!):迭代到最后,每个数字之间差距的太大了,前面9个数分辨不出来;与最后1个数相比,前面9个数太小。老师的意见是取对数(毕竟取了对数之后数值的增长速度便数量级的减少了),再看一下效果:

                                                               图4 c=0.25117迭代100取对数后迭代次数90-100对应的z值

  很有趣的呈现指数型增长的图像,哪怕这还是取对数减缓增长速度之后的结果,很有意思,不是吗?

  这种情形似乎与之前c=0.2时出现的收敛情况不同。我想:这是由于c值取得不同所产生的差别。

  再次实验了c=0.24:

                                                                                    图5 c=0.24迭代10000次图像

                                                                                   图6 c=0.24迭代100次取对数

  这个时候就能看得出来,图像似乎有些像对数图像。当迭代次数很大(1000以上)时,渐渐收敛于一点0.4000(这里看一下matlab里面的变量发现,哪怕第10000次也不够0.4000,而是0.399多)