您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 华工数学实验-作业3-迭代与分形
《数学实验》报告学院:电子与信息学院专业班级:通信工程4班学号:201130301443姓名:李腾辉实验名称:迭代与分形实验日期:2013.04.7第三次实验1.实验内容1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。2.实验过程方法一仿照Koch曲线代码对三角形的每条边进行Koch曲线化,函数的输入参数有三角形的边长R和迭代次数k,输出Koch雪花图形以及雪花所围面积S.KochSnow面积推导如下所示:迭代次数k面积S0:S=234r1:S=34R2+34(13R)2*32:S=34R2+34(13R)2*3+34((13)2R)2*323:S=34R2+34(13R)2*3+34((13)2R)2*32+34((13)3R)2*33``````N:S=34R2+34(13R)2*3+34((13)2R)2*32+34((13)3R)2*33+…34((13)nR)2*3n如此相加下去,当N无穷时,S将为无穷大源代码如下:functionkochsnow(R,k)%R为正三角形边长,k为迭代次数p01=[0,0];p02=[R/2,sqrt(3)*R/2];p03=[R,0];%3个起始点S=0;%S为面积,开始设为0forline=0:2%依次对3条边进行Koch曲线运算ifline==0;p=[p01;p02];elseifline==1;p=[p02;p03];elseline==2;p=[p03;p01];endn=1;%存放线段的数量,初始值为1A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)];%变换矩阵用于计算新的结点fors=1:kj=0;%j为行数fori=1:nq1=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点存入rendn=4*n;%全部线段迭代一次后,线段数量乘4clearp%清空p,注意:最后一个终点q2不在r中p=[r;q2];%一条边的全部结点clearrendifline==0;%把第一条边的全部结点放在aa=p;elseifline==1;%把第二条边的全部结点放在bb=p;elseline==2;%把第三条边的全部结点放在cc=p;endendall=[a;b;c];%三条边全部结点放入allplot(all(:,1),all(:,2))%连接各个结点fill(all(:,1),all(:,2),'g')%填充所围区域fori=0:k%计算KochSnow的面积S=S+(3^(0.5-i))*0.25*(R^2);endSaxisequalKoch雪花图形输入半径R=2K=0时是正三角形此时面积为1.7321K=1时是正六边形此时面积为2.3094K=2时的koch雪花此时面积为2.5019K=3时的Koch雪花此时面积为2.5660K=4时的Koch雪花此时面积为2.5874分形维数:根据迭代的规律得到:相似形个数:m=6边长放大倍数:c=3,lnlnln6ln3dmc1.631方法2只生成一次Koch曲线,然后对生成的Koch曲线进行旋转变换,旋转3次即可得到所需图形。代码略去。图形如下第二题1.实验内容自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。2.实验过程在原来Koch曲线的基础上修改旋转矩阵,并对一个图形进行旋转,得到如下的一些图形图形1:飞镖代码如下functionmyPicture(k)%k取4的效果p=[00;100];%P为初始两个点的坐标,第一列为x坐标,第二列为y坐标n=2;%n为结点数A1=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)];A2=[cos(pi/4),-sin(pi/4);sin(pi/4),cos(pi/4)];A=[0-1;10];%旋转矩阵fori=1:kd=diff(p)/3;%diff计算相邻两个点的坐标之差,得到相邻两点确定的向量%则d就计算出每个向量长度的三分之一,与题中将线段三等分对应m=5*n-4;%迭代公式q=p(1:n-1,:);%以原点为起点,前n-1个点的坐标为终点形成向量p(6:5:m,:)=p(2:n,:);%迭代后处于5k+1位置上的点的坐标为迭代前的相应坐标p(2:5:m,:)=q+d;%用向量方法计算迭代后处于5k+2位置上的点的坐标p(3:5:m,:)=q+d+1*d*A';%用向量方法计算迭代后处于5k+3位置上的点的坐标p(4:5:m,:)=q+2*d+1*d*A';%用向量方法计算迭代后处于5k+4位置上的点的坐标p(5:5:m,:)=q+2*d;%用向量方法计算迭代后处于5k位置上的点的坐标n=m;%迭代后新的结点数目endfori=1:8p=[p;p*A2'];endplot(p(:,1),p(:,2),'b')%绘出每相邻两个点的连线axisequal图形2:叶子代码:functionkochfeibiao(R,k)p01=[0,0];p02=[0,R];p03=[R,R];p04=[R,0];S=0;%A1=[cos(pi/4),-sin(pi/4);sin(pi/4),cos(pi/4)];forline=0:3ifline==0;p=[p01;p02];elseifline==1;p=[p02;p03];elseifline==2;p=[p03;p04];elseifline==3;p=[p04;p01];endn=2;%n为结点数A=[0-1;10];%旋转矩阵fori=1:kd=diff(p)/3;%diff计算相邻两个点的坐标之差,得到相邻两点确定的向量%则d就计算出每个向量长度的三分之一,与题中将线段三等分对应m=5*n-4;%迭代公式q=p(1:n-1,:);%以原点为起点,前n-1个点的坐标为终点形成向量p(6:5:m,:)=p(2:n,:);%迭代后处于5k+1位置上的点的坐标为迭代前的相应坐标p(2:5:m,:)=q+d;%用向量方法计算迭代后处于5k+2位置上的点的坐标p(3:5:m,:)=q+d+0.5*d*A';%用向量方法计算迭代后处于5k+3位置上的点的坐标p(4:5:m,:)=q+2*d+0.5*d*A';%用向量方法计算迭代后处于5k+4位置上的点的坐标p(5:5:m,:)=q+2*d;%用向量方法计算迭代后处于5k位置上的点的坐标n=m;%迭代后新的结点数目endifline==0;a=p;elseifline==1;b=p;elseifline==2;c=p;elseifline==3;d=p;endendall=[a;b;c;d];%all=all*A1';plot(all(:,1),all(:,2),'b')fill(all(:,1),all(:,2),'g')holdonx0=1;y0=1;%画一个圆放置在叶子中间r=0.1;theta=0:pi/100:2*pi;x=x0+r*cos(theta);y=y0+r*sin(theta);plot(x,y,'k');fill(x,y,'w');axissquare;axisequal图形三:地毯在上面叶子的基础上改变了某些参数得出的代码如下functionkochfeibiao(R,k)%R=2;%半径设为2,面积好计算p01=[0,0];p02=[0,R];p03=[R,R];p04=[R,0];S=0;%A1=[cos(pi/4),-sin(pi/4);sin(pi/4),cos(pi/4)];forline=0:3ifline==0;p=[p01;p02];elseifline==1;p=[p02;p03];elseifline==2;p=[p03;p04];elseifline==3;p=[p04;p01];endn=2;%n为结点数A=[0-1;10];%旋转矩阵fori=1:kd=diff(p)/3;%diff计算相邻两个点的坐标之差,得到相邻两点确定的向量%则d就计算出每个向量长度的三分之一,与题中将线段三等分对应m=5*n-4;%迭代公式q=p(1:n-1,:);%以原点为起点,前n-1个点的坐标为终点形成向量p(6:5:m,:)=p(2:n,:);%迭代后处于5k+1位置上的点的坐标为迭代前的相应坐标p(2:5:m,:)=q+d;%用向量方法计算迭代后处于5k+2位置上的点的坐标p(3:5:m,:)=q+d+1*d*A';%用向量方法计算迭代后处于5k+3位置上的点的坐标p(4:5:m,:)=q+2*d+1*d*A';%用向量方法计算迭代后处于5k+4位置上的点的坐标p(5:5:m,:)=q+2*d;%用向量方法计算迭代后处于5k位置上的点的坐标n=m;%迭代后新的结点数目endifline==0;a=p;elseifline==1;b=p;elseifline==2;c=p;elseifline==3;d=p;endendall=[a;b;c;d];%all=all*A1';plot(all(:,1),all(:,2),'b')fill(all(:,1),all(:,2),'g')holdonx0=1;y0=1;%画一个圆放置在叶子中间r=0.1;theta=0:pi/100:2*pi;x=x0+r*cos(theta);y=y0+r*sin(theta);plot(x,y,'k');fill(x,y,'w');axissquare;axisequal过程中还生成了其它有趣的图形,就不一一画出了。
本文标题:华工数学实验-作业3-迭代与分形
链接地址:https://www.777doc.com/doc-4983935 .html