📄 butterfly.txt
字号:
我们都可能见过像一只振翅的蝴蝶的图片。如果说它是一只蝴蝶,那么它可
能是世界最著名的一只蝴蝶了,因为正是受了这个图片中蝴蝶的启发,美国著名的科学
家洛伦兹才把一种奇怪的物理现象称作“蝴蝶效应”(蝴蝶效应的意思是说:北京的一
只蝴蝶扇动一下翅膀,会引起纽约的一场风暴),也开创了一门新的学科——混沌学。
其实,这只蝴蝶演绎的图形在科学上被称作洛伦兹吸引子,是由下面的一个非线性
方程组决定的:
dx/dt=-10x+10y
dy/dt=-xz+28x-y
dz/dt=xy-8/3*z
我们可以用数值方法求解这个方程组,然后画出z随x的变化曲线,就可以得到图中
的那只蝴蝶了。由这只蝴蝶作为象征的混沌学被称为本世纪继相对论和量子力学后的第
三大科学发现,这几年混沌的研究已进入高潮,也有越来越多的科学家发现一些普通的
非线性方程组可以演绎更加动人的图画。
下面这个用TC2.0编写的小程序就是用迭代的方法求解另一种较为简单但一样魅力四
射的混沌吸引子:米拉吸引子,并以图形的方式在屏幕上记录它们的位置:
#include <graphics.h>
main(){
float x=-0.1,y=0.1,tmpx,tmpy; /*x、y分别表示满足迭代方程的数值*/
int xCord,yCord,nTimes; /*xCord与yCord分别表示x与y的*/
/*值在屏幕上的位置坐标,nTimes表示迭代次数*/
int xMin=-8,xMax=12,yMin=-6,yMax=8; /*x、y的取值范围*/
float xPixel,yPixel;/*一个单位数值的像素数*/
float p=- 0.432656;/*p是一个介于(-0.01,0.99)之间的数*/
/*不同的取值会得到不同的结果,这里取-0.432656*/
int GraphDriver=DETECT,GraphMode; /*图形显示初始化*/
initgraph(&GraphDriver,&GraphMode,“ ");
xPixel=640/(xMax-xMin);
yPixel=480/(yMax-yMin);
for(nTimes=0;nTimes<30000;nTimes++){
tmpx=y+p*x+2*x*x/(1+x*x+y*y); /*一次迭代后的x值*/
tmpy=-x+p*tmpx+2*tmpx*tmpx*(1-p)/(1+tmpx*tmpx);
/*一次迭代后的y值*/
x=tmpx;y=tmpy;
xCord=(x-xMin)*xPixel;/*计算坐标位置*/
yCord=(y-yMin)*yPixel;
putpixel(xCord,yCord,WHITE);}
getch();
}
上面这段程序所使用的迭代方程组是:
xn=yn-1+p* xn-1 +2*xn-12/(1+ xn-12+ yn-12)
yn=-xn-1+p*xn+2* xn2*(1-p)/(1+ xn2)
其中p值是一个设定在-0.01和0.99之间的任意常量,在程序中我们设定p= -0.432
656,如果改变p的值会得到另外一些风格各异的图形。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -