实验五 迭代与分形

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

q1=p(i,:);
q2=p(i+1,:); %目前线段的终点坐标 d=(q2-q1)/3; j=j+1;r(j,:)=q1; j=j+1;r(j,:)=q1+d; %原起点存入 r %新 1 点存入 r
j=j+1;r(j,:)=q1+d+d*A'; %新 2 点存入 r j=j+1;r(j,:)=q1+2*d; end %新 3 点存入 r
四、实验过程
本试验以迭代的方式,来体验生成分形图形的基本方法,并感受美丽的分 形图案,从而对分形几何有一个直观的了解。 1. 科赫(Koch)曲线 Koch 曲线是通过图形迭代的方式产生的,其迭代规则是: 对一条线段,先将它分成三等份,然后将中间的一份替换成以此为底边的 等边三角形的另外两条边。无限次迭代下去,最终形成的曲线就是 Koch 曲线。 第一次迭代得图 4-1-1,第二次迭代得图 4-1-2,具体图形如下:
图 4-3-1
图 4-3-2
(1)编辑实现上述迭代的函数 在 Matlab 中,编制一个函数来实现上述迭代。具体代码如下: function frat3(x,y,d,n); % x 为正方形的顶点的横坐标,可取 0 (一个顶点代表一个小正方形) % y 为正方形的顶点的纵坐标,可取 0 % d 为初始正方形边长,可取 1 % n 为迭代次数,可取 4 for p=1:n; %实现迭代过程,计算所有的顶点坐标
d ln m ln c ,
即c d
m
2
对于通常的几何对象,采用这种方式计算出来的维数,与传统的维数是一致 的,比如对正方形,将它边长 k 等份,则相似形个数 m = k ,每边长放大 k 倍后 与原长相同,即 c = k,显然 d = 2。 人类肺的构造,从气管尖端成倍地反复分叉,是一种典型的分形,其分维数 大约是 2.17。 4. 本实验的思路 分形几何把自然形态看作是具有无限嵌套的层次结构,并且在不同尺度下 保持某种相似的属性,于是,简单的迭代过程,就是描述复杂的自然形态的有效 方法。本实验通过迭代的方式,展示了几种经典分形图形的生成过程。
%原终点作为下条线段的起点,在迭代下条线段时存入 r %全部线段迭代一次后,线段数量乘 4 %清空 p ,注意:最后一个终点 q2 不在 r 中
n=4*n; clear p
p=[r;q2]; %重新装载本次迭代后的全部结点 end plot(p(:,1),p(:,2)) %显示各结点的连线图 axis equal %各坐标轴同比例
%原终点作为下条线段的起点,在迭代下条线段时存入 a %全部线段迭代一次后,线段数量乘 4
n=4*n;
clear p
%清空 p ,注意:最后一个终点 q2 不在 a 中
p=[a;q2]; %重新装载本次迭代后的全部结点 end plot(p(:,1),p(:,2)) ;%显示各结点的连线图 fill(p(:,1),p(:,2),'k') %填充颜色 set(findobj(gcf,'type','patch'),'edgecolor','none') %不显示边界 axis off hold off %不要坐标轴
q1=p(i,:);
q2=p(i+1,:); %目前线段的终点坐标 d=(q2-q1)/3; j=j+1;a(j,:)=q1; j=j+1;a(j,:)=q1+d; %原起点存入 a %新 1 点存入 a
j=j+1;a(j,:)=q1+d+d*A'; %新 2 点存入 a j=j+1;a(j,:)=q1+2*d; end %新 3 点存入 a
d=1.2619。因此,Koch 曲线的维数介于 1 与 2 之间。具体计算如下:
d ln m ln c ln 4 ln 3 1.2619
2. 城堡 将生成 Koch 曲线的迭代方式稍微改动,做如下迭代:
对一条线段,先将它分成三等份,然后将中间的一份替换成以此为底边的等 边三角形,只画三角形。无限次迭代下去,最终形成一个分形图。第一次迭代得 图 4-2-1,第二次迭代得图 4-2-2,具体图形如下:
将这个文件保存,文件名 frat1.m。
(2)绘制科赫(Koch)曲线的图形 代码:frat1(3) 运行结果:图 4-1-3,迭代 3 次的图形。 代码:frat1(5) 运行结果:图 4-1-4,迭代 5 次的图形。
图 4-1-3 (3)计算科赫曲线的长度
图 4-1-4
假设初始线段长度为 1; 迭代一次后共有 4 段, 每段长: 增加的长: 1 3, 总长: 以后每次迭代, 总长度增加 1 3 , 即总长度是原来的 4 3 倍; 1 3, 4 3; 经过 n 次迭代后,总长: (4 3) n 。因此,Koch 曲线的总长度是:无穷大。 (4)计算科赫曲线的维数 根据迭代的规律得到:相似形个数:m=4,边长放大倍数:c=3,故维数
图 4-1-1
图 4-1-2
(1)编辑实现上述迭代的函数 在 Matlab 中,编制一个函数来绘制 Koch 曲线的图形。具体代码如下: function frat1(k) %显示迭代 k 次后的 Koch 曲线图 p=[0,0;10,0]; %存放结点坐标,每行一个点,初始值为两结点的坐标 n=1; %存放线段的数量,初始值为 1
将这个文件保存,文件名 frat2.m。
(2)绘制城堡的图形 代码:frat4(3) 运行结果:图 4-2-3,迭代 3 次的图形。 代码:frat4(5) 运行结果:图 4-2-4,迭代 5 次的图形。
图 4-2-3
图 4-2-4
3. 谢尔宾斯基(Sierpinski)地毯 Sierpinski 地毯也是通过图形迭代的方式产生的,其迭代规则是: 对一个正方形,首先将它分成九个小正方形,然后挖去中间的一个。无限 次迭代下去,最终形成的图形就是 Sierpinski 地毯。第一次迭代得图 4-3-1, 第二次迭代得图 4-3-2,具体图形如下:
A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; %用于计算新的结点 for s=1:k j=0; %以下根据线段两个结点的坐标,计算迭代后它们之间增加的三个 %结点的坐标,并且将这些点的坐标按次序存暂时放到 r 中 for i=1:n %每条边计算一次 %目前线段的起点坐标 %实现迭代过程,计算所有的结点的坐标
a1=[]; %保存迭代后所有顶点的 x 坐标 b1=[]; %保存迭代后所有顶点的 y 坐标 %根据小正方形的顶点坐标, %计算迭代后形成的 8 个新的小正方形的顶点坐标 for q=1:length(x); %每个小正方形计算一次 x1=x(q)+[0,d/3,2*d/3,0,2*d/3,0,d/3,2*d/3]; %新的 x 坐标 y1=y(q)+[0,0,0,d/3,d/3,2*d/3,2*d/3,2*d/3]; %新的 y 坐标 a1=[a1,x1]; %所有顶点 x 坐标存入 a1 b1=[b1,y1]; %所有顶点 y 坐标存入 b1 end d=d/3; %迭代一次,边长缩小 x=a1; %全部的 x 坐标重新放入 x y=b1; %全部的 y 坐标重新放入 y
实验五
迭代与分形
一、实验目的
了解分形几何的基本理论 了解通过迭代方式,产生分形图的方法 了解 matlab 软件中实现迭代的程序结构 了解分形几何的简单应用
二、背景知识
1. Fill 函数介绍 Fill 的作用是颜色填满一个多边形区域。基本调用格式如下: 函数: fill ( X , Y , C ) 功能:用 X 和 Y 中的数据生成多边形,用 C 指定的颜色填充。 说明:X来自百度文库和 Y 是多边形顶点坐标,C 是颜色。 注意:要保证坐标数据首尾重合,使得多边形封闭。
例 2 针对函数 f ( x) 2sin x ,取初始值 x0 1 ,做迭代,并作图观察 在 matlab 的 M 文件编辑器中,编辑以下代码: function ex31(n,x0) fn=[x0]; for i=2:n fn=[fn, 2*sin(fn(i-1)) ]; end plot(fn) %画曲线 %将第 i 项添加到数组 fn 中 %n-迭代次数, x0-初值
例1
用红色填充一个圆形区域
代码:t=0:0.01*pi:2*pi; x = sin(t); y = cos(t); fill(x,y,'r') 运行结果:图 2-1-1。
图 2-1-1
2. 什么是迭代 迭代法是常用的一种数学方法,就是将一种规则反复作用在某个对象上,它 可以产生非常复杂的行为。我们这里介绍图形迭代和函数迭代两种方式: (1)图形迭代 给定初始图形 F0,以及一个替换规则 R,将 R 反复作用在初始图形 F0 上,产生 一个图形序列:R(F0)=F1,R(F1)=F2,R(F2)=F3,… (2)函数迭代 给定初始值 x0,以及一个函数 f(x),将 f(x)反复作用在初始值 x0 上,产生一 个数列:f(x0)=x1,f(x1)=x2,f(x2)=x3,…
将这个文件保存,文件名 ex31.m。调用方式如下: 代码:ex31(20,1) 运行结果:图 2-2-1。 代码:ex31(20,2) 运行结果:图 2-2-2。
图 2-2-1
图 2-2-2
三、问题描述与分析
1. 如何描述复杂的自然形态 几何学研究的对象是客观世界中物体的形状。传统欧氏几何学的研究对象, 都是规则并且光滑的,比如:直线、曲线、曲面等。但客观世界中物体的形状, 并不完全具有规则光滑等性质,因此只能近似当作欧氏几何的对象,比如:将凹 凸不平的地球表面近似为椭球面。虽然多数情况下通过这样的近似处理后,能够 得到符合实际情况的结果,但是对于极不规则的形态,比如:云朵、烟雾、树木 等,传统的几何学就无能为力了。 通常的几何体具有整数维,比如:一维的线段、二维的正方形、三维的立方 体,维数就是几何体在“尺度”上的特征。对于分形中的几何对象,通常意义下 的维数已经没有意义,比如 Koch 曲线(长度是无穷大,面积是零),用一维的 “线段”去量,得数无穷大,“尺子”太小;用二维的“正方形”去量,得数为 零,“尺子”又太大,因此需要定义分形自己的维数(分数维)。 2.分形几何的起源 分形几何的概念是美籍法国数学家曼德尔布罗特(Mandelbrot)于 1975 年 首先提出的,但最早的工作可追朔到 1875 年,德国数学家维尔斯特拉斯 (Weierestrass)构造了处处连续但处处不可微的函数,集合论创始人康托尔 (Cantor,德国数学家)构造了有许多奇异性质的康托尔三分集。1890 年,意 大利数学家皮亚诺(Peano)构造了填充空间的曲线。1904 年,瑞典数学家科赫 (Koch)设计出类似雪花和岛屿边缘的一类曲线。1915 年,波兰数学家谢尔宾 斯基(Sierpinski)设计了象地毯和海绵一样的几何图形。这些都是为解决分析 与拓朴学中的问题而提出的反例,但它们正是分形几何思想的源泉。
end hold on %在同一个图形窗口显示 for q=1:length(x); %用蓝色注满多边形区域 fill(x(q)+[0,d,d,0,0],y(q)+[0,0,d,d,0],'b') % end hold off axis off axis equal % %不要坐标轴 %各坐标轴同比例
图 4-2-1
图 4-2-2
(1)编辑实现上述迭代的函数 本函数主要的思路是,根据线段两个结点的坐标,计算迭代后它们之间增 加的三个结点的坐标。函数代码如下: function frat2(k) %显示等边三角形迭代 k 次后的图形 A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)]; %用于计算新的结点 p=[0 0;10 0]; %存放结点坐标 n=1; for s=1:k j=0; for i=1:n %每条边计算一次 %目前线段的起点坐标 %存放线段的数量,初始值为 1 %实现迭代过程,计算所有的结点的坐标
0.6 0.4 0.2
-1
-0.5 -0.2 -0.4 -0.6
0.5
1
布朗运动轨迹
Weierestrass 函数
3. 分形几何体的维数 分形的维数目前有多种定义,我们这里介绍相似维数。 设分形 F 是自相似的, 即 F 由 m 个子集构成, 每个子集放大 c 倍后同 F 一样, 则定义 F 的维数为:
相关文档
最新文档