论文导读:如果每次迭代时取的3次,4次,5次,6次会是什么样图形呢?会不会画出的图形混沌而没有规律呢?只要对程序中的n值进行赋值就可以了。可以用以上图5、图6所示的分形图看出。迭代,用Mathematica7.0实现二维分形图。
关键词:分形,迭代,Mandelbrot集,Julia集
1 分形
分形理论是当今世界十分风靡和活跃的新理论、新学科。1967年美籍科学家
Mandelbrot在美国权威的《科学》杂志上发表了题为《英国的海岸线有多长?》的著名论文。早20世纪70年代中期以前,Mandelbrot一直使用英文fractional一词来表示他的分形思想,因此,取拉丁词之头,撷英文之尾所合成的fractal,本意是不规则,破碎的,分数的。Mandelbrot是想用此词描述自然界中传统欧式几何学不能描述的一大类复杂无规的几何对象,例如:蜿蜒曲折的海岸线,起伏不定的山脉,粗糙不堪的断面,变幻无常的浮云。它们的特点:极不规则或极不光滑[1]。
1.1 分形维数
对于欧几里得几何所描述的整形来说,可以由长度、面积、体积来测度。论文发表,迭代。但用这种办法对分形的层层细节做出测定是不可能的。曼德尔布罗特放弃了这些测定而转向了维数概念。分形的主要几何特征是关于它的结构的不规则性和复杂性,主要特征量应该是关于它的不规则性和复杂性程度的度量,这可用“维数”来表征。维数是几何形体的一种重要性质,有其丰富的内涵。整形几何学描述的都是有整数维的对象:点是零维的,线是一维的,面是二维的,体是三维的。我们知道0维是点,一维是线,二维是面,三维是空间。论文发表,迭代。那么,谁能告诉我1.5维是什么? 一条直线段是一维的,由四条这样的直线段组成的正方形是二维的。六个这样的正方形组成的正方体是三维的。直线的长度数值,正方形的面积数值和立方体的体积数值都和我们测量的单位有关。测量的单位也往往是我们所能分辨的最小单位。假设我们的分辨能力增加了一倍,因此我们把直线段长度单位减小到原单位的一半,直线段长度的计量值就变为原来的两倍,正方形面积就变为原来的四倍,体积则变为原来的八倍。我们有下式:
log4/log2=2
log8/log2=3
这里的二和三不是巧合,这是另一种维数的定义:测度维的概念。论文发表,迭代。为了定量地描述客观事物的“非规则”程度,1919年,数学家从测度的角度引入了维数概念,将维数从整数扩大到分数,从而突破了一般拓扑集维数为整数的界限[1]。
如果某图形是由把原图缩小为1/λ的相似的b个图形所组成,有:λ^D=k。论文发表,迭代。
D即维数:
D=logk/logλ(其中的λ为线度的放大倍数,K为“体积”的放大倍数)。
我们还可以这样推广:如果把一个物体的边长分成n个相等的小线段,结果可得到与原物形状相同的m个小物体。把m写成以n为底的指数形式:m=n^d (或d=1ogm/1ogn)则指数d=1og m/1og n称为这个物体的维数。由于1ogm/1ogn不一定是整数,因此就会出现维数为分数的情况。
例如: koch曲线,它的维数是d=1og4/1og3≈1.26。Sierpinski垫片,它的维数是d=1og3/1og2≈1.58[1]。
2 Mandelbrot集与Julia集的Mathematica实现
Mandelbrot集与Julia集都是用迭代法作出的分形图,Mandelbrot集的迭代函数是
,而Julia集的迭代函数是 ,其中 为任意的复常数[1],使用迭代法,编写了Mandelbrot集和Julia集的Mathematica程序。Mandelbrot集非常奇特,但它的生成原理却十分简单。这也学体现了数学的简单和谐之美。对 进行这样的迭代: ,给定 为一个初始的复常数,而对不同的 ,迭代序列 有界的所有 值构成的集合,即 ,则称 在复平面上构成的集合为Mandelbrot集[1]。
2.1 程序设计
为了更好的编程绘制Mandelbrot集与Julia集并实现其高阶的迭代,先设如下:
1、选定参数 , , ,取方程为
进行迭代。论文发表,迭代。
2、 的模小于2,迭代次数不超过50。
3、对于 在平面上表示时,设xx为x的初始迭代坐标,yy为y的初始迭代坐标坐标表示。
4、所取的变量范围为(cx,cy),分别为x与y的范围。
Mandelbrot集的Mathematica程序
Mandelbrot [x_, y_, cx_, cy_, n_] := Block[{z, ct = 0}, z = x + y*I;While[(Abs[z] < 2.0) && (ct < 50), ++ct; z = z^n + (cx + cy*I)*(x+ y*I)]; Return[ct]]
Fx1[cx_, cy_, n_, pu_List, po_List, pl_List]:=Block[{kok},kok = DensityPlot[Mandelbrot [xx, yy, cx, cy, n], {xx, pu[[2]],pu[[3]]},{yy, po[[2]], po[[3]]},pl,Mesh -> False, ColorFunction ->Hue];Return[kok]]
取迭代方程为Z =Z2 +C,变量范围为{x,-1.5,0.5},{y,-1.2, 1.2},并画出区域{x, 0.2, 0.4}, {y, -0.1, 0.1}
Md1=Fx1[1,0,2,{x,-1.5,0.5},{y, -1.2, 1.2},{PlotPoints->120, PlotLabel -> 'Mandelbrot'}]
Show[Md1, Graphics[Line[{{0.2, -0.1}, {0.2, 0.1}, {0.4,0.1}, {0.4, -0.1}, {0.2, -0.1}}]]]
取迭代方程为 ,变量范围为{x, 0.2, 0.4}, {y, -0.1, 0.1},为上图的局部放大图。
Md2=Fx1[1,0,2,{x,0.2,0.4},{y,-0.1,0.1},{PlotPoints->120,PlotLabel->''Mandelbrot'}'}]
 
图1 Mandelbrot集图2 前面的局部放大图
Julia集的Mathematica程序
Julia[x_,y_,cx_,cy_,n_]:=Block[{z,ct=0},z=x+y*I;While[(Abs[z] < 2.0) && (ct < 50), ++ct; z = z^n + cx +cy*I];Return[ct]; ]
Fx2[cx_,cy_,n_,pu_List,po_List,pl_List]:=Block[{kok},kok= DensityPlot[Julia[xx, yy, cx, cy, n], {xx, pu[[2]],pu[[3]]}, {yy, po[[2]], po[[3]]}, pl, Mesh -> False, ColorFunction ->Hue];Return[kok]]
Ju1=Fx2[0.27334, 0.00742,2, {x, -1, 1}, {y,-1.3, 1.3},{PlotPoints -> 120, PlotLabel -> 'Julia'}]
Show[Ju1,Graphics[Line[{{0.4, -0.3}, {0.4, 0}, {0.8, 0}, {0.8, -0.3}, {0.4, -0.3}}]]]
取迭代方程为Z =Z2 +C,,固定C值为0.27334+0.00742i变量范围为{x, 0.4,0.8}, {y, -0.3, 0}。为上图的局部放大图。
Ju2=Fx2[0.27334,0.00742,2,{x,0.4,0.8},{y,-0.3,0},{PlotPoints->120,PlotLabel->'Julia'}]

图3 Julia集图4 前面的局部放大图
程序绘出的图形非常美丽,我们进而又思考,如果每次迭代时取的3次,4次,5次,6次会是什么样图形呢?会不会画出的图形混沌而没有规律呢?只要对程序中的n值进行赋值就可以了。
对于Mandelbrot集和Julia集的Mathematica的程序中,在Fx1[cx_,cy_, n_, pu_List, po_List, pl_List]和Fx2[cx_,cy_,n_,pu_List,po_List,pl_List],对n进行不同的赋值,(cx,cy)赋于不同c值,可各式各样的Mandelbrot集和Julia集。论文发表,迭代。参数的不同,产生的图形是不同的,如果要得到更多的图形,可以进行不同的赋值。M2=Fx2[1,0,3, {x, -1, 1}, {y,-1.2, 1.2}, {PlotPoints ->120, PlotLabel -> 'Mandelbrot2'}];
M3=Fx3[1,0,4,{x,-1.3,0.9},{y,-1.2,1.2},{PlotPoints->120,PlotLabel->'Mandelbrot3'}];
M4=Fx4[1,0,5,{x,-1,1},{y,-1,1},{PlotPoints->120,PlotLabel->'Mandelbrot4'}];
1/2 1 2 下一页 尾页 |