实验六迭代与分形实验.docx

上传人:b****3 文档编号:3750237 上传时间:2022-11-25 格式:DOCX 页数:8 大小:202.64KB
下载 相关 举报
实验六迭代与分形实验.docx_第1页
第1页 / 共8页
实验六迭代与分形实验.docx_第2页
第2页 / 共8页
实验六迭代与分形实验.docx_第3页
第3页 / 共8页
实验六迭代与分形实验.docx_第4页
第4页 / 共8页
实验六迭代与分形实验.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验六迭代与分形实验.docx

《实验六迭代与分形实验.docx》由会员分享,可在线阅读,更多相关《实验六迭代与分形实验.docx(8页珍藏版)》请在冰豆网上搜索。

实验六迭代与分形实验.docx

实验六迭代与分形实验

数学模型选读实验报告

实验六

迭代与分形实验

姓名:

张业尧

学科专业:

创新实验学院创电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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1