简单分形及维数的研究 (河南大学,物理与电子学院,物理学,河南开封,475004) 摘要:本文介绍了分形、维数的相关知识,并以简单分形做例子进行了演示,又求得了Sierpinski三角分形及埃侬映射的维数。 关键词:分形,维数,程序设计。 一、 分形 分形(fractal)是指由各部分组成的形态,每个部分以某种方式与整体相似。对这一描述加以引伸,它可以包括以下含义: 分形可以是几何图形,也可以是由“功能”或“信息”架起的数理模型;分形可以同时具有形态、功能和信息三方面的自相似性,也可以只有其中某一方面的自相似性。 分形的创建历史: (1)曼德勃罗在美国《科学》杂志上发表论文 《英国的海岸线有多长》震惊学术界(1967年)。 (2)法兰西学院 讲演报 (1973年)。 (3)“病态”“数学怪物”命名——分形(Fractal)(1975年)。 (4)法文版《分形对象:形、机遇和维数》出版(1975年)。 (5)英文版《分形:形、机遇和维数》出版(1977年)。 (6)英文版《大自然的几何学》出版(1982年) 。 分形是由Mandelbrot在20世纪70年代为了表征复杂图形和复杂过程而引入自然领域的。原意是破碎的、不规则的物体。分形分为两类,规则分形,又称决定类的分形,它是按一定的规则构造出的具有严格自相思的分形;另一类是无规则的分形,它是在生长现象中和许多物理问题中产生的分形,其特点是不具备严格意义上的自相似,只是在统计意义上是自相似的。本文研究的是规则分形。 有以上可知,自相似性是分形最大的几何特征。下面我们就科赫曲线和Sierpinski对此进 行讨论。 1、 科赫曲线 科赫曲线的生成方法:把一条曲线三等分,中间的一段用夹角为60的折线替代,得到第一个生成元;把第一个生成元中的每一条直线都用生成元迭代,得到第二个生成元;经过无数次迭代,即可得到科赫曲线。 实现程序如下: s=[0,1];t=[0,0];n=8; for j=1:n x=[];y=[]; for i=1:length(s)-1 d1=s(i+1)-s(i); d2=t(i+1)-t(i); x1=s(i)+[0,d1/3,(s(i+1)+s(i))/2-sqrt(3)/6*d2-s(i),2/3*d1,d1]; y1=t(i)+[0,d2/3,(t(i+1)+t(i))/2+sqrt(3)/6*d1-t(i),2/3*d2,d2]; if i==1 x=[x,x1];y=[y,y1]; else x=[x,x1(2:5)];y=[y,y1(2:5)]; end end s=x;t=y; plot(x,y,'c') end axis equal n取不同值时得到如下图像:
n=1时的科赫曲线 n=2时的科赫曲线 n=3时的科赫曲线 n=7时的科赫曲线 由以上各图,我们很清晰的看到科赫曲线的自相似特征。 2、 Sierpinski三角 生成方法:从一个三角形进行迭代操作:将其4等分,去掉中心部分,无限制的进行此操作即可得到。 实现程序如下: clear;a=1;b=0.5;c=1; k=8; A=zeros(2,3^(k+1));A(:,1:3)=[0 a b;0 0 c]; for n=1:k; B=1/2*A;A(:,1:3^n)=B(:,1:3^n); A(:,3^n+1:2*3^n)=B(:,1:3^n)+1/2*[a;0]*ones(1,3^n); A(:,2*3^n+1:3^(n+1))=B(:,1:3^n)+1/2*[b;c]*ones(1,3^n); end for i=1:3^k; patch(A(1,3*i-2:3*i),A(2,3*i-2:3*i),'b'); end 调整k的大小,即可得到如下三角分形图:
K=1时分形图 K=2时分形图 K=3时分形图 K=7时分形图 上图我们可以知道,Sierpinski三角分形的自相似性存在。 根据上述论述,自相似性是规则分形的必备特征。 二、 维数 无论其起源或构造方法如何,所有的分形都具有一个重要的特征:可通过一个特征数,即分形维数测定其不平度,复杂性或卷积度。 最早将维数从整数推广到非整数中去的是豪斯道夫(Hausdorff)和贝西科维奇(Besicovitch)。豪斯道夫于1919年首先提出连续空间的概念,认为空间维数不是跃变的,而是可以连续变化的,既可以是整数,也可以是分数。而贝西科维奇则证明对任何集合S存在一个实数D,使得d维测度对dD为零,这个临界的D就称为S的豪斯道夫—贝西科维奇维数(或称分形维数),简称分维。分维是定量描写分形的重要参数,有多种定义和计算方法。 一般地,把一个Df维几何物体的每维尺寸放大L倍,就得到一个原来的几何对象,令:K=L^Df 对此式两段取对数得:Df=log(K)/log(L)。 上式中的Df即为豪斯道夫—贝西科维奇维数的定义。 当然,我们缩小几何对象来定义分维。把一个Ds维的几何对象等分成N个小的 几何图形,则每个小图形每维缩小为原来的r倍,而N个小图形的总和应 为: N*r^Ds=1 Ds=log(n)/log(1/r) r称为局部与整体的相似比,Ds即称为相似维数。 本文通过盒子维数法进行维数的计算。 盒子维数 计算相似比复杂图形时,采用小方块(或圆片)去覆盖(或填充)被测对象,统计覆盖所需的方块数来计算其维数。如此方法计算的维数称为容量维数,即盒子维数。 现用长度为 r 尺子去测长度为 L 的线段,L 与 r 之比为N。N 值的大小与 r 长短有关, r 越小N 越大:N (r ) ∝1/ r 取对数得盒子维数:D=lg(N)/lg(1/r)(在r趋近0时) 根据上述叙述可知,有Sierpinski三角分形生成过程可知,边长扩大2倍时,面积扩大3倍,所以维数D=lg(3)/lg(2)=1.585。 下面介绍一下用程序实现盒子维数的基本思路。我们取一个合适的边长做一个正方形,使它包含所有点,然后不变减少正方形边长,最后我们查出有点的盒子数目即N,(如下图)由于我们不可能取到r无限接近0,但根据上诉叙述,边长的对数和盒子数目的对数是呈线性关系的,我们可以多求几组,作图求斜率,而斜率即为维数。
r=1.01 N=4 r=0.5005 N=12 r=0.25025 N=36 r=0.125125 N=126 实现程序如下: clear;a=1;b=0.5;c=1; k=8; A=zeros(2,3^(k+1));A(:,1:3)=[0 a b;0 0 c]; for n=1:k; B=1/2*A;A(:,1:3^n)=B(:,1:3^n); A(:,3^n+1:2*3^n)=B(:,1:3^n)+1/2*[a;0]*ones(1,3^n); A(:,2*3^n+1:3^(n+1))=B(:,1:3^n)+1/2*[b;c]*ones(1,3^n); end for i=1:3^k; patch(A(1,3*i-2:3*i),A(2,3*i-2:3*i),'b'); end a1=1:3^(n+1); b1=1:3^(n+1); for i=1:3^(k+1) a1(i)=A(1,i); b1(i)=A(2,i); end x1=1:20000; x=1:20000; y1=1:20000; y=1:20000; x(1)=0;y(1)=0; r=1;m=1;k1=2; for i=1:4 r=r/2;m=1; for j=1:(k1-1) x1(m)=x(j);y1(m)=y(j);m=m+1; x1(m)=x(j)+r;y1(m)=y(j);m=m+1; x1(m)=x(j);y1(m)=y(j)+r;m=m+1; x1(m)=x(j)+r;y1(m)=y(j)+r;m=m+1; end k2=1;nl=0; for i1=1:(m-1) for j1=1:3^(k+1) if a1(j1)if a1(j1)>= x1(i1) if b1(j1)< y1(i1)+r if b1(j1)>= y1(i1) x(k2)=x1(i1); y(k2)=y1(i1); k2=k2+1; nl=nl+1; break; end end end end
end end k1=k2; end 对k取不同值,可以得到不同变长下N的值,在此程序中用nl表示,经过尝试,r=1时,我们得到了比较准确的维数,下面是得到的结果。 rnllg(1/r)lg(nl)240.301030.602064130.602061.1139438400.903091.60206161211.204122.082785323641.505152.5611016410931.806183.0386212832802.107213.51587425698412.408243.993039512295142.709274.470028
经过处理(表中有9组数据,图中有6个点,因为前几组数据不准确舍去),得到下图:
有上图可知:D=1.5859.和上文计算的很接近。所以,上述盒子维数的求解方法是有效的。我们可以用它求解其他不具备几何特征的图形维数。 下面我们就用这种方法求埃侬映射的维数。 埃侬映射是一个二维映射,是有天文学家埃侬首先计算出来的离散型映射,有两个控制参数,μ和b。 xn+1=1-μxn2+yn
yn+1=bxn
求维数的主体结构和上一个程序相同,在这里不再展示。只写出求埃侬映射的程序。取μ
=1.42,b=0.3 a=1:40000; b=1:40000; a(1)=0.63135448;b(1)=0.18940634; for i=1:40000 a(i+1)=1-1.42*a(i)^2+b(i); b(i+1)=0.3*a(i); end