
蝴蝶效应的简介及Fortran程序模拟.doc
7页蝴蝶效应的简介及模拟蝴蝶效应( The Butterfly Effect)是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨大的连锁反应这是一种混沌现象,也被称为“确定性混沌”一个可以用确定性混沌来刻画的过程,是由完全确定性系统产生的,但按照标准的时间序列方法又表现为随机性蝴蝶效应的简介1963 年,美国麻省理工学院气象学家劳伦兹( E. Lorenz) 在研究大气对流时,从一个对流模型中发现了“蝴蝶效应”的实验装置是一个两维的流体室(两块很大的平板水平放置,之间充满气体) ,在底部加热、顶部冷却,其中的气体发生对流,采用简化的瑞利- 贝纳尔(Rayleigh2Benard) 对流模型分析气体的运动状态, x 正比于对流运动的强度、y 正比于水平方向温度变化、z 正比于竖直方向温度变化,参数σ、b、r 都是正的常数,得到的一组方程现在被称为劳伦兹方程: 在劳伦兹进行数值模拟天气的时候,他发现初始值微小的差异会导致实验结果的天壤之别他形象地比喻:今天在东京上空的一只蝴蝶扇动翅膀时,某个时刻可能引起澳大利亚的一场暴雨,这种对初始条件的敏感依赖,在气象预报中被称为“蝴蝶效应”。
一般的动力系统,最终都会趋向于某种稳定态,这种稳定态是由点(某一状态) 或点的集合(某种状态序列) 表示的系统的运动只有到达这个点或点集上才能稳定并保持下去,这种点或点集就是“吸引子”,它表示系统的稳定态,是动力系统的最终归宿如果一个吸引子的点集是有限体积中的一条无限长的线,这就是奇怪吸引子奇怪吸引子是相空间中无穷多个点的集合,是一类具有无限嵌套层次的自相似几何结构,是一种分形吸引子具有稳定性(局限于有限的空间区域内) 、低维性(在相空间中有一条低维轨道,或称分维轨道) 、非周期性(运动轨道永不自我重复、永不自我相交,否则就为周期吸引子)和运动对初始条件的敏感依赖性动力学系统中最典型的例子就是劳伦兹吸引子劳伦兹吸引子为σ=10,r=28,b=8/3 图1. 当劳伦兹吸引子为σ=10,r=28,b=8/3,初始值为x=1,y=2,z=3,在时间间隔内的图x-y,图x-y蝴蝶效应的模拟根据劳伦兹方程模拟物体的运动规律,可以得到劳伦兹吸引子,这个吸引子是稳定的,低维的和非周期性的由图1可以看到吸引子局限于有限的空间内,系统的轨迹分为两圈,在右侧转几圈后又随机跳到左侧转几圈,无法预测什么时候从这一侧过渡到另外一侧,并且它环绕各自中心的方式和圈数也是一个明显的随机数。
它们的形状像蝴蝶如图2,为三维空间中数据的分布图,点的分布区域形似一只蝴蝶图2.这是在劳伦兹吸引子下,时间间隔0-200,得到的三维图片,大致形貌像一只蝴蝶蝴蝶效应”说明:事物发展的结果,对初始条件具有极为敏感的依赖性,初始条件的极小偏差,将会引起结果的极大差异我们通过数据的模拟来说明这种现象当劳伦兹吸引子为σ=10,r=28,b=8/3,x、y、z 取值均为20时,t-x的图像如图3(a);x、y、z取值均为20.0001时,t-x的图像如图3(b);由图3(a)图3(b)比较可得:在t为0-6.5范围内,两幅图的相应部分几乎重合,当t约大于6.5以后,两幅图的轨迹完全不一样即使初始值相差很小(此例子中相差0.0001),也会导致结果的大不相同,说明方程的解敏感地依赖于初始值图3(a)初始值x,y,z均为20时,x随t的变化曲线图3(b)初始值x,y,z均为20.0001时,x随t的变化曲线由此可以得到,劳伦兹方程的参数σ、b、r 和初始条件x 0 、y0 、z 0 不同,结果就会完全不同,即方程对初始状态具有高度敏感性但方程的解又是决定性的,只要参数和初始条件完全相同,它的解就是唯一确定的。
蝴蝶效应通常用于天气、股市、物理、天文、气象、社会等在一定时段之内,较为难以预测的复杂系统中,被引申为事物发展的结果对初始条件具有极为敏感的依赖性,初始条件的极小偏差将引起结果的极大差异附:程序!***************************************************!d x/ d t = σ(y-x),σ=10!d y/ d t = - y -x z + rx ,r=28!d z / d t = x y - bz,b=8/3!***************************************************program hudiexiaoyingimplicit none integer:: N real*8:: m1,m2,m3,m4 real*8:: k1,k2,k3,k4 real*8:: n1,n2,n3,n4 real*8:: x0,x1,y0,y1,z0,z1,h,t,t_end real,external:: f1 real,external:: f2 real,external:: f3 write(*,*)"请设定t的初值t,末值t_end" read(*,*) t,t_end write(*,*)"请设定x0,y0,z0的非零初始值" read(*,*) x0,y0,z0 write(*,*)"请输入间隔N,N为偶数" read(*,*) N h=(t_end-t)/N !定义步长 open(10,file="hudie.txt") !建立一个名为"hudie.txt"的文件 do while(abs(t-t_end)>0.0001) !write(10,*) x0,y0,z0 !将数据写入文件"hudie.txt"中 write(10,*) t,x0 k1=h*f1(t+0.5*h,x0,y0,z0) !计算k1,k2,k3,k4,m1,m2,m3,m4 m1=h*f2(t+0.5*h,x0,y0,z0) !注意计算过程中的先后顺序 n1=h*f3(t+0.5*h,x0,y0,z0) k2=h*f1(t+0.5*h,x0+0.5*k1,y0+0.5*m1,z0+0.5*n1) m2=h*f2(t+0.5*h,x0+0.5*k1,y0+0.5*m1,z0+0.5*n1) n2=h*f3(t+0.5*h,x0+0.5*k1,y0+0.5*m1,z0+0.5*n1) k3=h*f1(t+0.5*h,x0+0.5*k2,y0+0.5*m2,z0+0.5*n2) m3=h*f2(t+0.5*h,x0+0.5*k2,y0+0.5*m2,z0+0.5*n2) n3=h*f3(t+0.5*h,x0+0.5*k2,y0+0.5*m2,z0+0.5*n2) k4=h*f1(t+h,x0+k3,y0+m3,z0+n3) m4=h*f2(t+h,x0+k3,y0+m3,z0+n3) n4=h*f3(t+h,x0+k3,y0+m3,z0+n3) x1=x0+(k1+2*k2+2*k3+k4)/6.0 y1=y0+(m1+2*m2+2*m3+m4)/6.0 z1=z0+(n1+2*n2+2*n3+n4)/6.0 t=t+h/2 !t值每次增加半个步长 x0=x1 y0=y1 z0=z1 end do end program function f1(t,x,y,z) implicit none real,parameter::s=10 real*8::f1 real*8::t,x,y,z f1=s*(y-x) return end function f2(t,x,y,z) implicit none real,parameter::r=28 real*8::f2 real*8::t,x,y,z f2=r*x-y-x*z return end function f3(t,x,y,z) implicit none real,parameter::b=8.0/3.0 real*8::f3 real*8::t,x,y,z f3=x*y-b*z return end参考:1. 搜索2. 搜索3. 现代物理知识,《蝴蝶效应及其应用》刘铁驹 宋立平。
