华工数学实验作业3迭代与分形.docx

上传人:b****5 文档编号:30010469 上传时间:2023-08-04 格式:DOCX 页数:17 大小:104.75KB
下载 相关 举报
华工数学实验作业3迭代与分形.docx_第1页
第1页 / 共17页
华工数学实验作业3迭代与分形.docx_第2页
第2页 / 共17页
华工数学实验作业3迭代与分形.docx_第3页
第3页 / 共17页
华工数学实验作业3迭代与分形.docx_第4页
第4页 / 共17页
华工数学实验作业3迭代与分形.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

华工数学实验作业3迭代与分形.docx

《华工数学实验作业3迭代与分形.docx》由会员分享,可在线阅读,更多相关《华工数学实验作业3迭代与分形.docx(17页珍藏版)》请在冰豆网上搜索。

华工数学实验作业3迭代与分形.docx

华工数学实验作业3迭代与分形

 

《数学实验》报告

 

学院:

电子与信息学院

专业班级:

通信工程4班

学号:

************

**********

实验名称:

迭代与分形

实验日期:

2013.04.7

第三次实验

1.实验内容

1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。

编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。

2.实验过程

方法一

仿照Koch曲线代码对三角形的每条边进行Koch曲线化,函数的输入参数有三角形的边长R和迭代次数k,输出Koch雪花图形以及雪花所围面积S.

KochSnow面积推导如下所示:

迭代次数k面积S

0:

S=

1:

S=

R2+

R)2*3

2:

S=

R2+

R)2*3+

((

)2R)2*32

3:

S=

R2+

R)2*3+

((

)2R)2*32+

((

)3R)2*33

``````

N:

S=

R2+

R)2*3+

((

)2R)2*32+

((

)3R)2*33+…

((

)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为面积,开始设为0

forline=0:

2%依次对3条边进行Koch曲线运算

ifline==0;

p=[p01;p02];

elseifline==1;

p=[p02;p03];

elseline==2;

p=[p03;p01];

end

n=1;%存放线段的数量,初始值为1

A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)];%变换矩阵用于计算新的结点

fors=1:

k

j=0;%j为行数

fori=1:

n

q1=p(i,:

);%目前线段的起点坐标

q2=p(i+1,:

);%目前线段的终点坐标

d=(q2-q1)/3;

j=j+1;r(j,:

)=q1;%原起点存入r

j=j+1;r(j,:

)=q1+d;%新1点存入r

j=j+1;r(j,:

)=q1+d+d*A';%新2点存入r

j=j+1;r(j,:

)=q1+2*d;%新3点存入r

end

n=4*n;%全部线段迭代一次后,线段数量乘4

clearp%清空p,注意:

最后一个终点q2不在r中

p=[r;q2];%一条边的全部结点

clearr

end

ifline==0;%把第一条边的全部结点放在a

a=p;

elseifline==1;%把第二条边的全部结点放在b

b=p;

elseline==2;%把第三条边的全部结点放在c

c=p;

end

end

all=[a;b;c];%三条边全部结点放入all

plot(all(:

1),all(:

2))%连接各个结点

fill(all(:

1),all(:

2),'g')%填充所围区域

fori=0:

k%计算KochSnow的面积

S=S+(3^(0.5-i))*0.25*(R^2);

end

S

axisequal

Koch雪花图形输入半径R=2

K=0时是正三角形此时面积为1.7321

 

K=1时是正六边形此时面积为2.3094

 

K=2时的koch雪花此时面积为2.5019

K=3时的Koch雪花此时面积为2.5660

 

K=4时的Koch雪花此时面积为2.5874

分形维数:

根据迭代的规律得到:

相似形个数:

m=6边长放大倍数:

c=3,

1.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:

k

d=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;%迭代后新的结点数目

end

fori=1:

8

p=[p;p*A2'];

end

plot(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:

3

ifline==0;

p=[p01;p02];

elseifline==1;

p=[p02;p03];

elseifline==2;

p=[p03;p04];

elseifline==3;

p=[p04;p01];

end

n=2;%n为结点数

A=[0-1;10];%旋转矩阵

fori=1:

k

d=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;%迭代后新的结点数目

end

ifline==0;

a=p;

elseifline==1;

b=p;

elseifline==2;

c=p;

elseifline==3;

d=p;

end

end

all=[a;b;c;d];

%all=all*A1';

plot(all(:

1),all(:

2),'b')

fill(all(:

1),all(:

2),'g')

holdon

x0=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:

3

ifline==0;

p=[p01;p02];

elseifline==1;

p=[p02;p03];

elseifline==2;

p=[p03;p04];

elseifline==3;

p=[p04;p01];

end

n=2;%n为结点数

A=[0-1;10];%旋转矩阵

fori=1:

k

d=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;%迭代后新的结点数目

end

ifline==0;

a=p;

elseifline==1;

b=p;

elseifline==2;

c=p;

elseifline==3;

d=p;

end

end

all=[a;b;c;d];

%all=all*A1';

plot(all(:

1),all(:

2),'b')

fill(all(:

1),all(:

2),'g')

holdon

x0=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

过程中还生成了其它有趣的图形,就不一一画出了。

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

当前位置:首页 > 外语学习 > 日语学习

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

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