加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab在分形模拟上的一些应用

(2010-04-02 17:04:44)
标签:

杂谈

把在形态、功能和信息等方面具有自相似性的对象称为分形。自相似性是指局部的形态与整体的形 态相似,局部与整体相互依赖。由此可以通过局部认识和推及整体。在自然界中,很多的自然景观就具有自相似性。如云彩、山脉、海岸线、火焰、水波等,只要抽 象出这些自然景观的某些特征,再不断放大,就可以得到整体。计算机分形图形就是利用这一原理实现的。

MATLAB作为一种科学计算软件,具有输入简捷、运算高效、内容丰富、扩展性强等特点,并且它还 可与Word结合起来,使含有MATLAB运行内容的文章的编辑变得非常方便。这些特点使MATLAB深受科技人员,特别是非软件专业的人们的喜爱。分形 在所有尺寸下都有无限的细节,因而完全由计算机不可能产生精确的分形,只能给出近似的描绘,即模拟。而这里给出的程序中均有一个控制精度的量,只要计算机 运算速度和屏幕分辨率允许,精度可任意提高。分形可作为双曲迭代函数系统的吸引子,根据程序中迭代的选取,将分形模拟分为确定迭代法和随机迭代法。

Cantor集

选 取一个欧氏长度的直线段,将该线段三等分,去掉中间一段,剩下两段。将剩下的两段分别再三等分,各去掉中间一段,剩下四段。将这样的操作继续下去,直到无 穷,则可得到一个离散的点集。点数趋于无穷多,而欧氏长度趋于零。经无限操作,达到极限时所得到的离散点集称之为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

Koch(科赫)曲 线

在一单位长度的线段上对其三等分,将中间段直线换成一个去掉底边的等边三角形, 再在每条直线上重复以上操作,如此进行下去直到无穷,就得到分形曲线Koch曲线。

模 拟程序

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

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

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

    plot(x,y);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

输入:Koch(0,0,120,0,10);

Koch曲线也可以“随机生成”。在构造的每一步,每次去掉区间中间三分之一的部分,而用与去掉部 分构成等边三角形的另两边来代替,再用抛硬币的方法决定新的部分位于被去掉的“上边”或“下边”。经几步以后,得到一个看起来相当不规则的随机Koch曲 线,它仍然保留了Koch曲线的某些特征,如具有精细的结构,但Koch曲线具有的严格子相似性已被它所具有的“统计自相似性”所取代。

模拟程序

将Koch()中 第13、14行改为:

val=rand();

    if val<0.95

        vv=1;

    else

        vv=-1;

    end

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

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

输 入:Koch(0,0,120,0,10);

Koch snowflake(科赫雪花)

科赫雪花也称为科赫岛,她的构造是三条科赫曲线的 合成,在一个三角形的三条边上,按照科赫曲线的构造过程不断分割替代,就形成科赫雪花。

模拟程序

function f=kochsnow(l,c)

ax=0;ay=0;bx=l;by=0;

cx=l/2;

cy=l*sqrt(3)/2;

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

Koch(cx,cy,bx,by,c);

Koch(bx,by,ax,ay,c);

输入:kochsnow(120,5);

分形树

下面给出树形分形图的MATLAB模拟程序。该分形树是对称 的,利用画线命令line。

模拟程序

h=10;d=0.6;th=pi/4;n=9;

A=zeros(2,2^(n+1)-2);A(:,2)=[0;h];C=[cos(th) -sin(th);sin(th) cos(th)];D=inv(C);

for i=2:n

    B(:,2^(i-1)-1:2^i-2)=A(:,2^(i-1)-1:2^i-2);

    A(:,2^i-1:2^i+2^(i-1)-2)=d*C*B(:,2^(i-1)-1:2^i-2)+[0;h]*ones(1,2^i-2^(i-1));

    A(:,2^i+2^(i-1)-1:2^(i+1)-2)=d*D*B(:,2^(i-1)-1:2^i-2)+[0;h]*ones(1,2^i-2^(i-1));

end

for i=1:2^n-1

    L=line(A(1,[2*i-1 2*i]),A(2,[2*i-1 2*i]));set(L,'LineWidth',2);

end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有