华工数学实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数学实验》报告
学院:电子与信息学院专业班级:14电联
学号:
姓名:
实验名称:迭代与分形
实验日期:2016.05.03
迭代与分形
1.实验目的
-了解分形几何的基本特性。
-了解通过迭代方式产生分形图的方法。
-欣赏美妙的分形艺术。
2.实验要求
对一条横向线段,先将其等分成4段,然后将第2段向上平移,将第3段向下平移,再将4段的相邻端点连接起来,迭代一次后变成下图1。继续迭代得到的分形图,称为Minkowski香肠。编制程序绘制出它的图形,并计算它的分形维数。
图1 Minkowski香肠1次迭代
3.实验过程
实验原理:
本题利用迭代与分形几何的方法进行Minkowski香肠作图。迭代是就是将一种规则反复作用在某个对象上,简单的迭
代过程,就是描述复杂的自然形态的有效方法。分形几何把自
然形态,看作是具有无限嵌套的层次结构。
实验过程:
本实验以迭代的方式,来体验生成分形图的过程,从而对
分形几何有一个直观的了解,并感受美丽的分形图案。
算法与编程:
function Minkowski(k) %显示迭代k次后的Minkowski曲线图
p=[0,0;1,0]; %存放结点坐标,每行一个点,初始值为两结点的坐标n=1; %存放线段的数量,初始值为1
A=[cos(pi/2),-sin(pi/2);sin(pi/2),cos(pi/2)]; %用于计算新的结点
for s=1:k %实现迭代过程,计算所有的结点的坐标
j=0; %以下根据线段两个结点的坐标,计算迭代后它们之间增加的七个结点的坐标,并且将这些点的坐标按次序存暂时放到r中
for i=1:n %每条边计算一次
q1=p(i,:); %目前线段的起点坐标
q2=p(i+1,:); %目前线段的终点坐标
d=(q2-q1)/4;
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+d*A'; %新3点存入r
j=j+1;r(j,:)=q1+2*d; %新4点存入r
j=j+1;r(j,:)=q1+2*d-d*A'; %新5点存入r
j=j+1;r(j,:)=q1+3*d-d*A'; %新6点存入r
j=j+1;r(j,:)=q1+3*d; %新7点存入r
end %原终点作为下条线段的起点,在迭代下条线段时存入r n=8*n; %全部线段迭代一次后,线段数量乘4
clear p %清空p ,注意:最后一个终点q2不在r中
p=[r;q2]; %重新装载本次迭代后的全部结点
end;
figure
plot(p(:,1),p(:,2)) %显示各结点的连线图
axis equal %各坐标轴同比例
结果和图形:
(1)输入Minkowski(1)后,得到图2:
(2)输入Minkowski(2)后,得到图3:
(3)输入Minkowski(3)后,得到图4:
图4 Minkowski 香肠3次迭代
(4) 输入Minkowski(4)后,得到图5:
图5 Minkowski 香肠4次迭代
计算其分形维数:
根据分形维数的定义:设分形 F 是自相似的,F 由 m 个子集构成,每个子集放大 c 倍后同 F 一样,则定义 F 的维数为: ln log ln c m d m c
== 所以Minkowski 香肠的分形维数是4log 8 1.5d ==。
考虑进行代码的简化,毕竟如此简单的问题用了二十多行不是明智的选择,而且不能直接一步实现多图合并打出:
p=[0,i];
for k=1:4 %做四个小图
d=p/4; %类同之前的d=(q2-q1)/4
q=[d,i/4+d*i,d+i/4-1/4,d*(-i)+i/2-1/4,d*(-i)+i/2,d+i/ 2+1/4,i/4+d*i+i/2+1/4,d+i*(3/4)]; %确定新的点集
subplot(2,2,k) %2*2
plot(q*(-i)) %显示各结点的连线图
axis equal %各坐标轴同比例
axis ([0,1,-0.4,0.4]) %确定显示范围
p=q; %重新装载本次迭代后的全部结点
end
得到图像如图6所示
图6 优化后的代码对应的图形
4. 实验总结和实验感悟
本次实验自己做的比较成功,基本上是自己独立打出来的,但是有个别地方参考了课本是关于Koch曲线的代码,因为它们原理上是一样的。比较好的是在完成作业后,我剩余了较多的时间,就上网查阅相关代码,发现有更好更简单的,我拿来学习,发现那个代码的确有高明之处,我学到
了额外的东西,也对自己的表现更加满意,加油!