华工数学实验实验三迭代与分形
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华工数学实验实验三迭代与分形
华工数学实验实验三迭代与分形
实验三迭代与分形
一、实验目的与要求
(了解分形几何的基本情况; 1
2(了解通过迭代方式产生分形图的方法; 3(了解matlab软件中简单的程序结构;
4(掌握matlab软件中plot, fill等函数的基本用法;
1
二、实验内容
1(对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。编制程序绘制出它的图形,并计算Koch雪花的面积,
以及它的分形维数。
2(自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计
算机编制程序绘制出它的图形,并计算其分形维数。
三、实验过程
1.问题分析
Koch曲线是通过图形迭代的方式产生的,其迭代规则是:对一条线段,首先将它分成三等份,然后将中间的一份替换成以此为底边的等边三角形的另外两条边。无限次迭代下去,最终形成的曲线就是Koch曲线。在本次实验当中,以等边三角形为基本单元进行迭代,从而形成Koch曲线。
在这个实验中,可借助一条线段迭代的代码进行修改,让它对一个等边三角形的每条边都按照Koch曲线的方式进行迭代,产生的分形图就为Koch雪花。编制程序绘制出它的图形时,我们要先规定等边三角形的三个顶点的坐标分别为(0,0)、(20,0)、(10,20*sin(pi/3)). 绘制出它的图形后计算Koch雪花的面积,以及它的分形维数。
2.编程实现
Koch雪花图形编制程序的具体代码如下,程序截图如图1所示
function plotkoch (k) % 显示迭代k次后的Koch曲线图
p=[0,0; 10,20*sin(pi/3); 20,0;0,0]; % 存放等边三角形3个结点坐标初始值 n=3; % 存放线段的数量,初始值为3
A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; % 用于计算新的结点 for s=1:k % 实现迭代过程,计算所有的结点的坐标
j=0;
% 以下根据线段两个结点的坐标,计算迭代后它们之间增加的三个
% 结点的坐标,并且将这些点的坐标按次序存暂时放到r中
for i=1:n % 每条边计算一次
q1=p (i,:); % 目前线段的起点坐标
q2=p (i+1,:); % 目前线段的终点坐标
2
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)) % 显示各结点的连线图 title('Koch雪花') % 显示标题
axis equal % 各坐标轴同比例 xlabel('x'),ylabel('y')
图1.程序截图
这个函数的调用方法是在命令窗口键入plotkoch (5)然后按回车键,结果显示如图2所示。我们也可以通过取不同n值观察对应的迭代图形,如图3-6所示。
3
图2迭代次数k=5的图形
不同k值对应的迭代图形:
K=1
K=3
4
K=5 K=7
3.面积计算
32r4k=0时 S=
3322rr412k=1时 S=+
333222rrr41227k=2时 S=++ 333432222rrrr41227243k=3时 S=++ +
33r33r332(1)2n,2(1)12n,,22r*4*()r*4*()rrnn,14124343k=n时S=++ …++ 1
3每一次迭加,所产生的新三角形的边长变为上一次的,数量为上一次的4倍.
3311122222rr()()()2n(1)n,443334S=+*(3*+12*+……+3**)
n1(1)2i,33[3*4*()]22,irr3i,144=+*
由上式可知,当k取无限大的时候,Koch雪花的曲线总面积趋于无穷大。
5
4.分形维数计算
由迭代规则可知:在Koch雪花中,相似形个数为12,边长放大倍数是3,所以
m=12,c=3,则Koch雪花的分形维度为:d=ln(m)/ln(c)?2.26。
6
第二部分:第二题
一(实验内容
自己构造生成元(要有创意),按照图形迭代的方式产生分形图,用计算机编制
程序绘制出它的图形,并计算其分形维数。
二(实验过程
1.图形构思
经过阅读许多参考资料,以及自己几天的思考,感觉以一个大圆,上下左右各
有四个小圆的组合(其中大圆经过四个小圆的圆心)为初始图案比较简单,也比较好看。
2.编程实现
主要思想是先画一个大圆,接着按照比例及相对位置画出四个小圆,然后以四
个小圆为基准,再画出每个小圆各自对应的四个小圆,以此类推,就可以按照给定的迭代次数画出想要的图形。
具体程序如下:
function cycle(px,py,r,n) %px,py和r分别是大圆圆心坐标和半径,n是迭
代次数 t=linspace(-pi,pi);
plot(r*cos(t)+px,r*sin(t)+py) %以px,py为圆心坐标,r为半径画圆
theta=2*pi/4*(0:3); %每个小圆间隔角度为2π/4
newr=r*3/(3+2*sqrt(3)); %经过计算,小圆的半径为大圆的3/(3+2*3?(1/2)) newpx=px+2*newr*cos(theta); %新的圆心横坐标
newpy=py+2*newr*sin(theta); %新的圆心竖坐标
if n>=0
s=n+2; %开始图形是一个大圆上下左右各有一个小圆,作为迭代的初始图案for i=1:4 %每个大圆都有小圆四个
hold on;cycle3(newpx(i),newpy(i),newr,s-1);
end
end
axis equal %各坐标轴同比例
7
程序运行截图如图1所示: