Matlab在分形模拟上的一些应用
把在形态、功能和信息等方面具有自相似性的对象称为分形。自相似性是指局部的形态与整体的形态相似,局部与整体相互依赖。由此可以通过局部认识和推及整体。在自然界中,很多的自然景观就具有自相似性。如云彩、山脉、海岸线、火焰、水波等,只要抽象出这些自然景观的某些特征,再不断放大,就可以得到整体。计算机分形图形就是利用这一原理实现的。
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
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab.rar_cantor_cantor 分形
共1个文件
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 154 浏览量
2022-09-19
18:33:17
上传
评论
收藏 2KB RAR 举报
温馨提示
Matlab在分形模拟上的一些应用,Cantor集模拟程序,模拟分为确定迭代法和随机迭代法。
资源推荐
资源详情
资源评论
收起资源包目录
Matlab.rar (1个子文件)
Matlab在分形模拟上的一些应用 ).txt 4KB
共 1 条
- 1
资源评论
weixin_42653672
- 粉丝: 93
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功