实验六迭代与分形实验.docx
《实验六迭代与分形实验.docx》由会员分享,可在线阅读,更多相关《实验六迭代与分形实验.docx(8页珍藏版)》请在冰豆网上搜索。
实验六迭代与分形实验
数学模型选读实验报告
实验六
迭代与分形实验
姓名:
张业尧
学科专业:
创新实验学院创电1101
学号:
201101228
完成日期:
2012.5.14
大连理工大学
DalianUniversityofTechnology
目录
问题重述3
相关函数命令4
实现过程7
总结与心得体会10
References11
问题重述
自行设计一个生成元,生成一个分形图形,如利用等边三角形作为生成元,产生Koch雪花等。
相关函数命令
●koch
functionkoch(ax,ay,bx,by,limit)
u=[ax,ay;bx,by];
I=sqrt((bx-ax)^2+(by-ay)^2);
ifI>limit
cx=ax+(bx-ax)/3;
cy=ay+(by-ay)/3;
ex=bx-(bx-ax)/3;
ey=by-(by-ay)/3;
I=sqrt((ex-cx)^2+(ey-cy)^2);
alpha=atan((ey-cy)/(ex-cx));
if(ex-cx)<0
alpha=alpha+pi;
end
dx=cx+cos(alpha+pi/3)*I;
dy=cy+sin(alpha+pi/3)*I;
koch(ax,ay,cx,cy,limit);
koch(ex,ey,bx,by,limit);
koch(cx,cy,dx,dy,limit);
koch(dx,dy,ex,ey,limit);
else
axisequal;
plot(u(:
1),u(:
2),'k')
axisoff;
holdon;
End
●Kochsnow
functionkochsnow(ax,ay,bx,by,cx,cy,limit)
koch(ax,ay,bx,by,limit);
holdon
koch(bx,by,cx,cy,limit);
holdon
koch(cx,cy,ax,ay,limit);
holdoff
●Julia.m
functionJulia(x,y,L,c);
ifnargin==3;
c=0.302-0.577i;
end
Nmax=100;
M=100;
[x1,y1]=meshgrid(linspace(x-L,x+L,512),linspace(y-L,y+L,512));
N=ones(size(x1))*Nmax;
z=x1+y1*i;
fork=1:
Nmax;
z=z.^2+c;
N(abs(z)>M)=k;
end
I1=image(linspace(x-L,x+L,512),linspace(y-L,y+L,512),N);
title(['{\itc}=',num2str(c)]);
set(I1,'ButtonDownFcn',['p=get(gca,''currentpoint''),Julia(p
(1),p
(2),p(3),L,c);']);
●mandelbrot.m
functionM_set(x,y,L);
ifnargin==3;
c=0.58-0.97i;
end
[x1,y1]=meshgrid(linspace(x-L,x+L,512),linspace(y-L,y+L,512));
c=x1+i*y1;
z=zeros(size(c));
N=100;
S=ones(size(c))*N;
M=2;
fork=1:
N;
z=z.^2+c;
S(abs(z)>2)=k;
c(abs(z)>2)=0;
z(abs(z)>2)=0;
end
II=image(linspace(x-L,x+L,512),linspace(y-L,y+L,512),S);
set(II,'ButtonDownFcn',['p=get(gca,''currentpoint''),M_set(x,y,L);']);
●IFS_draw.m
functionIFS_draw(M,p);
N=30000;
fork=1:
length(p);
eval(['a',num2str(k),'=reshape(M(',num2str(k),',:
),2,3);']);
end
xy=zeros(2,N);
pp=meshgrid(p);
pp=tril(pp);
pp=sum(pp,2);
fork=1:
N-1;
a=rand-pp;
d=find(a<=0);
xy(:
k+1)=eval(['a',num2str(d
(1)),'(:
1:
2)'])*xy(:
k)+eval(['a',num2str(d
(1)),'(:
3)']);
end
P=complex(xy(1,:
),xy(2,:
));
plot(P,'k.','markersize',2);
axisequal;
●tree1.m
M=[-0.64,0,0,0.5,0.86,0.25;...
-0.04,-0.47,0.07,-0.02,0.49,0.51;...
0.2,0.33,-0.49,0.43,0.44,0.25;...
0.46,-0.25,0.41,0.36,0.25,0.57;...
-0.06,0.45,-0.07,-0.11,0.59,0.1];
p=[0.06,0.22,0.23,0.24,0.25];
IFS_draw(M,p);
axisimage;
实现过程
如资料11.2.2koch曲线编写程序koch.m,用来作为做出雪花图的引用函数。
后编写kochsnow.m文件,在命令窗口中输入snowkoch(0,0,0,1,1,0,0.02)和snowkoch(0,0,0,2,1,sqrt(3),0.02)分别得到图11-1(a)、(b)的图形。
可以看到,得到雪花图案的形状并不规则。
之后由文献[1]得到Julia集图案的原理及matlab实现。
编写julia.m文件,之后在命令窗口中输入
>>subplot(221);Julia(0,0,1);axissquare;xlabel('(a)');
>>subplot(222);Julia(0,0.5,0.5);axissquare;xlabel('(b)');
>>subplot(223);Julia(-0.1,0.5,0.1);axissquare;xlabel('(c)');
>>subplot(224);Julia(-0.1,0.5,0.05);axissquare;xlabel('(d)');
得到如图6-2所示的julia集的图案。
编写mandelbrot.m文件,在命令窗口中输入
>>subplot(221);mandelbrot(0,0,2);axissquare;xlabel('(a)');
>>subplot(222);mandelbrot(0.1,-0.8,0.5);axissquare;xlabel('(b)');
>>subplot(223);mandelbrot(0.15,-0.6,0.125);axissquare;xlabel('(c)');
>>subplot(224);mandelbrot(0.145,0.65,0.03);axissquare;xlabel('(d)');
得到mandelbrot集的图案,如图6-3所示。
编写IFS_draw.m和tree1.m,根据参考文献[1]中所给出的系统参数,画出树形图案如图6-4所示。
总结与心得体会
本次实验中了解到一些基本的分形图案,并且对于复杂的分形图案的生成方法有了一定的了解。
但自己编写出的雪花生成图案并不理想。
希望在今后的学习过程中弄清楚分形迭代系统的原理,最终自己编程实现绘图。
References
[1]刘正君.MATLAB科学计算与可视化仿真宝典.北京:
电子工业出版社,2009.4