zoukankan      html  css  js  c++  java
  • 混沌图像---洛伦兹的蝴蝶

          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)

    说实话,这几幅洛伦兹蝴蝶的图像颜色看着有些难看。当时我只是随意写了个配色函数,感觉是惨绿惨绿的。下面将帖几张漂亮点的蝴蝶图像:

    相关软件介绍:

    YChaos生成混沌图像

    相关文章:

    混沌数学之Lorenz(洛伦茨)吸引子

  • 相关阅读:
    node设置res.cookie跨域问题解决
    Rails常用插件
    什么是编程基础
    【数学之美】抽屉原理
    时分秒针重合问题
    如何理解【业务逻辑】
    【转】有关环境变量的若干问题?
    关于指针类型转化后在printf输出的问题
    rand * () 之间相互生成总结
    4.14做一个新浪微博的小东东
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/4308445.html
Copyright © 2011-2022 走看看