《数学实验》报告
学院:电子与信息学院
专业班级:
学号:
姓名:
实验名称:迭代与分形
实验日期
一、实验目的与要求
1.了解分形几何的基本情况;
2.了解通过迭代方式产生分形图的方法;
3.了解matlab软件中简单的程序结构;
4.掌握matlab软件中plot, fill等函数的基本用法;
二、练习
1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。
编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
2.自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制程序绘制出它的图形,并计算其分形维数。
三、过程
1.
图一:1次迭代图二:2次迭代图三:6次迭代
原始三角形的边长d=10cm
面积S=
S0=√3/4d^2 S1=S0+3*√3/4(d/3)^2 S2=S1+12*√3/4(d/9)^2
Sn=Sn-1+3*4^(n-1)*√3/4*(d/3^n)^2
根据等比数列求和可得,n—>∞,Sn=2√3/5d^2
边长放大倍数c=3,相似形个数m=12
所以分维数d=lnm/lnc=ln12/ln3=2.26介于2和3之间
代码如下:
function plotkocht(k) %显示迭代k次后的Koch曲线图
p=[0,0;10,0]; %存放结点坐标,每行一个点,初始值为两结点的坐标
n=3; %存放线段的数量,初始值为3
A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; %用于计算新的结点
r=[];
r(1,:)=(p(2,:)-p(1,:))*A';
p=[0,0;r;10,0;0,0]; %存放首次迭代的坐标
for s=1:k %实现迭代过程,计算所有的结点的坐标
j=0; % 思考:可否取为1
for i=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 %原终点作为下条线段的起点,在迭代下条线段时存入r
n=4*n; %全部线段迭代一次后,线段数量乘4
clear p %清空p ,注意:最后一个终点q2不在r中
p=[r;q2]; %重新装载本次迭代后的全部结点
end
figure
plot(p(:,1),p(:,2)) %显示各结点的连线图
axis equal %各坐标轴同比例
2.
迭代规则:对一个正三角形,首先将它分成4个小正方形,然后挖掉中间的一个。
无限次迭代下去,最终形成的图形就是了。
具体的实现如下:
迭代一次迭代两次
迭代三次迭代六次
1、图形每次减少1/4,无限次迭代后,图形的面积为零
2、相似图形个数m=4 边长放大倍数c=2图形分维数d=ln4/ln2=2
3、程序代码如下:
function plotkocht2(k) %显示迭代k次后的Koch曲线图
p=[0,0;10,0];
A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)];
r=[];
d=[];
r(1,:)=(p(2,:)-p(1,:))*A';
p=[0,0;r;10,0;0,0]; %存放首次迭代的坐标
figure
hold on %在同一个图形窗口显示
fill(p(:,1),p(:,2),'b');
clear r
q=[];
q=p;
for s=1:k
j=0;
for i=1:3^(s-1)
p=[];
p=[p;q(3*(i-1)+1,:)];
p=[p;q(3*(i-1)+2,:)];
p=[p;q(3*(i-1)+3,:)];
q1=p(1,:);
q2=p(2,:);
q3=p(3,:);
d1=(q2-q1)/2;
d2=(q3-q1)/2;
d3=(q3-q2)/2;
j=j+1;
r(j,:)=q1+d2;
j=j+1;
r(j,:)=q1;
j=j+1;
r(j,:)=q1+d1;
d=[d;r(j,:)];
j=j+1;
r(j,:)=q2+d3;
d=[d;r(j,:)];
j=j+1;
r(j,:)=q1+d1;
j=j+1;
r(j,:)=q2;
j=j+1;
r(j,:)=q3;
j=j+1;
r(j,:)=q1+d2;
d=[d;r(j,:)];
j=j+1;
r(j,:)=q2+d3;
hold on %在同一个图形窗口显示
fill(d(:,1),d(:,2),'r');
d=[];
end
clear q
q=r;
clear r
end
hold off
axis off
axis equal %各坐标轴同比例
set(findobj(gcf,'type','patch'),'edgecolor','none')。