混沌图像---洛伦兹的蝴蝶
Lorenz系统作为第一个混沌模型,是混沌学发展史上的一个重要的里程碑,具有举足轻重的地位。我看过很多本关于混沌方面的书,每一本都会有洛伦兹吸引子,并且几乎每一本的封面上都会画上洛伦兹的蝴蝶曲线。虽然我看了这么多书,却始终没明白,这洛伦兹的方程式怎么就跟天气发生了关系。气象学家洛伦兹在1963年论文中提出的它的公式以表示天气模型。天气系统如此复杂,用数百万个变量来描述都不为过,但洛仑兹将其压缩到了三个变量:x,y和z,所以这只是一个玩具模型。这个玩具模型对于他的论点来说,也许恰到好处。之前的天气模型大多是线性的,没有过多考虑各种因素之间的复杂关系,洛伦兹早认为这样的模型无法描述多变的天气。而他的模型,尽管只有三个随着时间变化的变量,但变量之间却有着非线性的联系,能够很好地诠释了因素之间的相互影响。
就在这样简单的Lorenz模型之下,出现了混沌现象。而且这种现象似乎是普遍的,因为在三个变量取值的大部分可能性下,系统演变的轨迹都会渐渐趋近于同一个产生混沌的区域,就像磁铁吸引着图钉,混沌的行为成为了必然。这就是人们发现的第一个混沌吸引子:洛伦兹吸引子。它的形状,就像一只蝴蝶;这大概也是洛伦兹将这种混沌的现象称为“蝴蝶效应”的原因。一只南美洲蝴蝶的扑翼,在蝴蝶效应的放大下,也许引起德克萨斯州的一场飓风。天气不可能准确预测,因为天气是混沌的,微小的扰动在长远看来是不可忽略的,而我们又无力去追踪无数的扰动,只能一边预计,一边修正。
如果不明白上面的话也无所谓,反正这里研究的不是天气、不是雾霾,我只是用洛伦兹吸引子生成漂亮的图像。
这里使用自己定义语法的脚本代码生成混沌图像.相关软件参见:YChaos生成混沌图像.如果你对数学生成图形图像感兴趣,欢迎加入QQ交流群: 367752815
先上脚本代码:
1 [ScriptLines] 2 u=a*(y - x) 3 v=b*x - y - x*z 4 w=x*y - c*z 5 x=x+u*t 6 y=y+v*t 7 z=z+w*t 8 9 [Variables] 10 a=10.000000 11 b=28.000000 12 c=2.666667 13 t=0.001000 14 x=-10.000000 15 y=10.000000 16 z=25.000000
生成如下的图像:
如果你了解洛伦兹的数学公式,你会发现它实际上是三维的,有XYZ三个维度。这里只是生成二维的图像,所以这里需要将三维的数据投影到一个二维平面上。可以先想象一下夏天拍蚊子的情景,将空间中的蚊子拍死在二维的墙面上。如果是拍人呢,可以选择前后拍,左右拍,最残忍的应该是上下拍。记得小说《三体》中有一种很厉害的武器是张小纸条,它能够将三维的世界拍成二维的,于是地球以及整个太阳系就这么被毁灭了。
上述脚本是使用默认的XOY面做为投影面,同样也可以使用XOZ面,YOZ面。
YOZ
[ScriptLines] u=a*(j - i) v=b*i - j - i*k w=i*j - c*k i=i+u*t j=j+v*t k=k+w*t x=i y=j*cos(d) - k*sin(d) z=j*sin(d) + k*cos(d)
XOZ
[ScriptLines] u=a*(j - i) v=b*i - j - i*k w=i*j - c*k i=i+u*t j=j+v*t k=k+w*t x=i*cos(d) - k*sin(d) y=j z=i*sin(d) + k*cos(d)
将三维的物体投影到二维平面上,你可以将其按任意角度,任意平面去投影,下面的公式为将图形以Z轴旋转一定角度:
[ScriptLines] u=a*(j - i) v=b*i - j - i*k w=i*j - c*k i=i+u*t j=j+v*t k=k+w*t x=i*cos(d) - j*sin(d) y=i*sin(d) + j*cos(d) z=k
洛伦兹吸引子是没有随机性的,但我可以强行为其加上随机性:
[ScriptLines] u=a*(y - x) v=b*x - y - x*z w=x*y - c*z x=x+u*t + rand2(-r,r) y=y+v*t + rand2(-r,r) z=z+w*t + rand2(-r,r)
说实话,这几幅洛伦兹蝴蝶的图像颜色看着有些难看。当时我只是随意写了个配色函数,感觉是惨绿惨绿的。下面将帖几张漂亮点的蝴蝶图像:
相关软件介绍:
相关文章: