APP下载

Matlab在分形中的应用研究

2017-04-12金能智者建武文洮杨博超李葆光

科技创新导报 2017年2期
关键词:分形

金能智 者建 武文洮 杨博超 李葆光

摘 要:Matlab具有强大的科学运算和灵活的程序设计,可提供高质量的图像可视化,已经在很多领域得到广泛应用。分形是非线性科学的重要分支,分形几何学却具有尺度上的对称性,分型图形是计算机图形学和分形理论相结合的产物。该文利用Matlab强大的编程工具和图形显示功能实现Cantor集、Koch曲线、分形树图形,这对数学类、计算机图形学和相关专业类研究人员有一定的参考价值。

关键词:分形 Matlab Cantor集 Koch曲线

中图分类号:TP312 文献标识码:A 文章编号:1674-098X(2017)01(b)-0105-02

Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。Matlab提供了强大的科学运算、灵活的程序设计、高质量的图像可视化以及便捷地与其他程序和语言接口的功能[1,2]。目前,Matlab已經应用到很多科研领域,如,生物信息学[3]、统计学[4]、信号处理[5]、小波分析[6]等。

分形(Fractal)是非线性科学的一个重要分支,应用于自然科学和社会科学的众多领域[7-9]。1973年,数学家Mandelbrot在法兰西学院讲课时,首次提出了分形的思想。他给分形下的定义就是:一个集合形状,可以细分为若干部分,而每一部分都是整体的精确或不精确的相似形。分形的基本特征是具有标度不变性。其研究的图形是非常不规则和不光滑的,已失去了通常的几何对称性。但是,在不同的尺度下进行观测时,分形几何学却具有尺度上的对称性或称标度不变性。

分形图形是计算机图形学和分形理论相结合的产物,在电脑模拟研究具有分形特征物体的图像。分形的计算机生成问题具有明显的挑战性,它使传统数学中无法表达的形态(如,山脉、花草等)得以表达。分形图案在自然界真实物体模拟、仿真形体生成、计算机动画、艺术装饰纹理、图案设计和创意制作等具有广泛的应用价值。

该文中利用强大的编程工具Matlab来实现Cantor集、Koch曲线、分形树图形,这对数学类、计算机图形学和相关专业类研究人员有一定的参考价值。

1 Cantor集

取一条长度为1的直线段,将它三等分,去掉中间一段,留剩下两段,再将剩下的两段再分别三等分,各去掉中间一段,剩下更短的四段,将这样的操作一直继续下去,直至无穷,由于在不断分割舍弃过程中,所形成的线段数目越来越多,长度越来越小,在极限的情况下,得到一个离散的点集,称为Cantor集。具体代码如下。

function f=cantor(ax,ay,bx,by)

c=0.2;

d=2;

if (bx-ax)>c

x=[ax,bx];y=[ay,by];hold on;

plot(x,y,LineWidth,5);hold off;

cx=ax+(bx-ax)/3;

cy=ay-d;

dx=bx-(bx-ax)/3;

dy=by-d;

ay=ay-d;

by=by-d;

cantor(ax,ay,cx,cy);

cantor(dx,dy,bx,by);

end

end

执行cantor(1,4,10,4),结果显示如图1。

2 Koch曲线

Koch曲线,设想从一条直线段开始,将线段中间1/3部分用等边三角形的两条边代替,形成具有5个结点的图形,在新的图形中,又将图中每一直线段中间的1/3部分都用一等边三角形的两条边代替,再次形成新的图形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。具体代码如下。

function f=Koch(ax,ay,bx,by,c)

if (bx-ax)^2+(by-ay)^2

x=[ax,bx];y=[ay,by];

plot(x,y,LineWidth,2);

axis equal

hold on;

else

cx=ax+(bx-ax)/3; cy=ay+(by-ay)/3;

ex=bx-(bx-ax)/3; ey=by-(by-ay)/3;

l=sqrt((ex-cx)^2+(ey-cy)^2);

alpha=atan((ey-cy)/(ex-cx));

if (alpha>=0&(ex-cx)<0)|(alpha<=0&(ex-cx)<0)

alpha=alpha+pi;

end

dy=cy+sin(alpha+pi/3)*l;

dx=cx+cos(alpha+pi/3)*l;

Koch(ax,ay,cx,cy,c);

Koch(ex,ey,bx,by,c);

Koch(cx,cy,dx,dy,c);

Koch(dx,dy,ex,ey,c);

end

end

执行Koch(0,0,120,0,10),结果显示如图2。

3 分形树

一条线段,以线段的终点为起点向两边分出一定的角度、长度的两条线段,分出的线段的终点再做相同处理,以此类推,生成一种分形树。具体代码如下。

function fractaltree(n,ax,ay,len,angle)

bx=ax+len*cos(angle);

by=ay+len*sin(angle);

plot([ax,bx],[ay,by]);

angle1=pi/6;

angle2=pi/9;

hold on

if n==0

return;

end

fractaltree(n-1,bx,by,0.6*len,angle+angle1);

fractaltree(n-1,bx,by,0.7*len,angle-angle2);

end

執行fractaltree(12,150,20,50,pi/2),结果显示如图3。

4 结语

分形形态是自然界普遍存在的,研究分形,是探讨自然界的复杂事物的客观规律及其内在联系的需要。分形提供了描述自然形态的几何学方法,使得在计算机上可以从少量数据出发,对复杂的自然景物进行逼真的模拟,并启发人们利用分形技术对信息做大幅度的数据压缩。它以其独特的手段来解决整体与部分的关系问题,利用空间结构的对称性和自相似性,采用各种模拟真实图形的模型,使整个生成的景物呈现出细节的无穷回归的性质,丰富多彩,具有奇妙的艺术魅力。

参考文献

[1] 姜健飞.数值分析及其MATLAB实验[M].北京:清华大学出版社,2015.

[2] 史峰.MATLAB智能算法30个案例分析[M].北京:北京航空航天大学出版社,2015.

[3] 张乐平,黄非,闵波,等.基于MATLAB生物信息学工具箱构建分子系统发生树[J].医学信息学杂志,2010,31(6):34-37.

[4] 张林泉.MATLAB在统计学实验教学中的应用[J].高师理科学刊,2011,31(1):84-87.

[5] 刘波,文忠.MATLAB信号处理[M].北京:电子工业出版社,2006.

[6] 张德丰.MATLAB小波分析[M].北京:机械工业出版社,2009.

[7] 刘莹,胡敏,余桂英,等.分形理论及其应用[J].江西科学,2006,24(2):205-209.

[8] 孙霞,吴自勤,黄畵.分形原理及应用[M].合肥:中国科学技术大学出版社,2003.

[9] 王达.几类复系统分形的特性分析与控制[D].山东大学,2016.

猜你喜欢

分形
柞蚕茧系统分形研究
感受分形
三种群捕食-食饵模型的分形特征与控制
分形之美
分形空间上广义凸函数的新Simpson型不等式及应用
分形——2018芳草地艺术节
分形在建筑造型设计中的应用
分形空间上广义凸函数的新Simpson型不等式及应用
基于混沌分形理论的滚动轴承微小故障诊断
基于分形几何和最小凸包法的肺区域分割算法