您好,欢迎访问三七文档
实验三迭代与分形一、实验目的与要求1.了解分形几何的基本情况;2.了解通过迭代方式产生分形图的方法;3.了解matlab软件中简单的程序结构;4.掌握matlab软件中plot,fill等函数的基本用法;二、问题描述1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。2.自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。三、问题分析1.第一题要求我们利用一个等边三角形然后在三角形的基础上利用理论课上的Koch曲线的画法,产生一朵Koch雪花,由于Koch雪花的产生相当于将三条等长的直线分别产生的Koch曲线按照等边三角形的坐标形式组合起来然后在同一个坐标系中表示出来,这就形成了Koch雪花图案。四、背景知识介绍1.什么是迭代迭代法是常用的一种数学方法,就是将一种规则反复作用在某个对象上,它可以产生非常复杂的行为。我们这里介绍图形迭代和函数迭代两种方式。(1)图形迭代。给定初始图形F0,以及一个替换规则R,将R反复作用在初始图形F0上,产生一个图形序列:R(F0)=F1,R(F1)=F2,R(F2)=F3,…(2)函数迭代。给定初始值x0,以及一个函数f(x),将f(x)反复作用在初始值x0上,产生一个数列:f(x0)=x1,f(x1)=x2,f(x2)=x3,…2.plot函数介绍plot是最重要最基本的二维曲线绘图指令,基本功能是画折线和曲线。基本调用格式如下:(1)plot(Y,LineSpec)。其中,Y一般是数组;而LineSpec是用来指定线型、色彩等的选项字符串,可省略。本功能是以数组Y作为竖坐标,以数组元素的下标为横坐标,画出一条折线。当数组元素很多时,就出现连续曲线的效果。(2)plot(X,Y)。其中,X、Y一般是相同长度的数组。本功能是以数组Y作为竖坐标,以数组X为横坐标,画出一条折线。当数组元素很多时,就出现连续曲线的效果。五、实验过程迭代次数k线段数目ka每一段的长kl面积kS03102/1*60sin*10*1013x413/102/60sin*)3/10(4*32100S224*323/102/60sin*)3/10(*4*32211Skk4*3k3/1060sin*)(*211kkklaS所以4/)9/4(*3751kkkSS所以k=0时,325kS;k0时,])94(1[*315325kkS有一条直线的koch曲线可知,我们可以分别对等边三角形的每一条边进行koch迭代,然后再把每一次迭代的结果进行重叠,就可以得到等边三角形的koch迭代结果。对于每一次迭代后所得的图形的面积计算,我们可以分析其中的规律,分析过程迭代次数k线段数目ka每一段的长kl面积kS03102/1*60sin*10*1013x413/102/60sin*)3/10(4*32100S224*323/102/60sin*)3/10(*4*32211Skk4*3k3/1060sin*)(*211kkklaS所以4/)9/4(*3751kkkSS所以k=0时,325kS;k0时,])94(1[*315325kkS程序代码如下:functionplotkochsnow(k)fora=0:2ifa==0;p=[00;100];%存放等边三角形底边直线的坐标,初始值为底边的坐标elseifa==1;p=[100;55*3.^1/2];%存放等边三角形右腰的坐标,初始值为底边的坐标µãµÄ×ø±êelsea==2;p=[55*3.^1/2;00];%存放等边三角形左腰的坐标,初始值为底边的坐标endn=1;%存放线段的数量,初始值为1A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)];%用于计算新的结点fors=1:k%实现迭代过程,计算所有的结点的坐标j=0;%结点的编号,不能取为1%以下根据线段两个结点的坐标,计算迭代后它们之间增加的三个%结点的坐标,并且将这些点的坐标按次序存暂时放到r中fori=1:n%每条边计算一次q1=p(i,:);%目前线段的起点坐标q2=p(i+1,:);%目前线段的终点坐标d=(q2-q1)/3;%迭代后每条边的长度j=j+1;r(j,:)=q1;%原起点存入rj=j+1;r(j,:)=q1+d;%新1点存入rj=j+1;r(j,:)=q1+d+d*A;%新2点存入rj=j+1;r(j,:)=q1+2*d;%新3点存入rend%原终点作为下条线段的起点,在迭代下条线段时存入rn=4*n;%全部线段迭代一次后,线段数量乘4clearp%清空p,注意:最后一个终点q2不在r中p=[r;q2];%重新装载本次迭代后的全部结点clearrendholdon;plot(p(:,1),p(:,2))%在直角坐标系中分别显示出三条koch曲线,并在同一直角坐标系中表示出来axisequal%各坐标同比例,使坐标的长度单位设成相等endifk==0;S=25*sqrt(3),%求面积elseS=sqrt(3)*25+15*sqrt(3)*[1-(4/9)^k];Send运行结果图K=1:K=2:K=3::练习2.自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。1.利用老师在课堂上所讲的谢尔宾斯基(Sierpinski)地毯的主体程序加以改造形成一个红黄相间小正方形的新的地毯图案。程序源代码:functionplotSierpinski(x,y,d,n);%x为正方形的顶点的横坐标,可取0(一个顶点代表一个小正方形)%y为正方形的顶点的纵坐标,可取0%d为初始正方形边长,可取1%n为迭代次数,可取4forp=1:n%实现迭代过程,计算所有的顶点坐标a1=[];%保存迭代后所有顶点的x坐标b1=[];%保存迭代后所有顶点的y坐标c1=[];d1=[];%根据小正方形的顶点坐标,%计算迭代后形成的8个新的小正方形的顶点坐标forq=1:length(x)%每个小正方形计算一次x1=x(q)+[0,d/3,2*d/3,0,2*d/3,0,d/3,2*d/3];%新的x坐标y1=y(q)+[0,0,0,d/3,d/3,2*d/3,2*d/3,2*d/3];%新的y坐标x2=x(q)+[d/3,0,2*d/3,d/3];y2=y(q)+[0,d/3,d/3,2*d/3];a1=[a1,x1];%所有顶点x坐标存入a1b1=[b1,y1];%所有顶点y坐标存入b1c1=[c1,x2];d1=[d1,y2];endd=d/3;%迭代一次,边长缩小x=a1;%全部的x坐标重新放入xy=b1;%全部的y坐标重新放入yk=c1;h=d1;endfigureholdon%在同一个图形窗口显示forq=1:length(x)%用蓝色注满多边形区域fill(x(q)+[0,d,d,0,0],y(q)+[0,0,d,d,0],'b')fill(k(q)+[0,d,d,0,0],y(q)+h[0,0,d,d,0],'b')endholdoffaxisoff%不要坐标轴axisequal%各坐标轴同比例%不显示这些正方形的边界set(findobj(gcf,'type','patch'),'edgecolor','none')效果图:六、实验总结由于之前已经学过一条直线段进行koch迭代的方法,所以在画雪花图的时候,我将koch迭代方法用于每一段直线上就能够得到雪花的效果图了,在对每一段直线进行迭代需要我们事先确定每条至在坐标系中的初始位置和每次运算满足的关系式,这样就能画出迭代的雪花了。第二个练习是我花了很多时间去想的,但是效果还不是十分好,因为当迭代次数增加后我的这个运算就不能达到很好的效果了,但是还是比较美观的,我实在老师给的练习题上进行改动的。
本文标题:分形与迭代
链接地址:https://www.777doc.com/doc-5009975 .html