数学应用之分形
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/10/14 黄建华制作 11
4.6.2由迭代函数系生成的分形图形
end plot(x(1:n),y(1:n),'.r','markersize',1) ;axis off
2018/10/14
黄建华制作
12
4.6.2由迭代函数系生成的分形图形
sierpinski垫
w
a
b
c
d
e
f
p
1
2 3
2018/10/14 黄建华制作 5
4.6.1由生成元生成的分形图形
lp=rov1*pp; %第一条树枝偏转向量 lp=p1+lp'; %第一条树枝端点C坐标 rp=rov2*pp; %第二条树枝偏转向量 rp=p2+rp'; %第二条树枝端点D坐标 uu=[u(2*m+1,:);p1;p1;lp;p1;p2;p2;rp;p2;u(2*m+2,:)]; %按顺序排列新线段两端点的坐标 uuu=[uuu;uu]; end u=[uuu]; plot(u(:,1),u(:,2)) ; axis([-0.5,0.5,0,1] ); end
0
0.2 0.2 0.2
0.05
0.4 0.4 0.15
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
-0.5
0.5
0.5
-0.5
0.5
0.5百度文库
0
0.5
0
0.5
0.5
0.5
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
0.5
0.5 0.5
0
0 0
0
0 0
0.5
0.5 0.5
0
0.25 0.5
0
0.433 0
0.333
0.333 0.333
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
2018/10/14 黄建华制作 2
4.6.1由生成元生成的分形图形
2018/10/14
黄建华制作
3
4.6.1由生成元生成的分形图形
分形树
生成方法:选取一条直线段F0,将该线段三等分,在等分 点上各画一条长度为原线段长度三分之一的线段,并与原线段 成固定夹角,得到图形F1。再将F1的每一段都按上述方法修改, 直至无穷,则最后得到的极限图象,称为分形树。
程序略。
2018/10/14
黄建华制作
0
4.6.1由生成元生成的分形图形
koch曲线
生成方法:选取一条直线段F0,将该线段三等分,并将中 间一段用以该线段为边的等边三角形的另外两条边代替,得到 图形F1。再将F1的每一段都按上述方法修改,直至无穷,则最 后得到的极限曲线,称为koch曲线。
0.5
2018/10/14 黄建华制作 19
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.5 % 概率p=0.5 x(i)=0.5*(x(i-1)-y(i-1)); y(i)=0.5*(x(i-1)+ y(i-1)); else x(i)=0.5*(x(i-1)+y(i-1))+0.5; y(i)=-0.5*(x(i-1)- y(i-1))+0.5; end end plot(x(1:n),y(1:n),'.m','markersize',1) ;axis off
1 0.9
e c
b
1
d
0.9
0.8
0.8
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
a o
0.3
0.2
0.2
0.1
0.1
0 -0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0 -0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
2018/10/14
0.5
0.5
0.4
0.4
0.4
0.3
0.3
0.3
0.2
0.2
0.2
0.1
0.1
0.1
0
0
0
-0.1
-0.1
-0.1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
2018/10/14 黄建华制作 10
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.01 % 概率p=0.01 y(i)=0.16*y(i-1); elseif vv<0.86 % 概率p=0.85 x(i)=0.85*x(i-1)+0.04*y(i-1); y(i)=1.6-0.04*x(i-1)+0.85*y(i-1); elseif vv<0.93 % 概率p=0.07 x(i)=0.2*x(i-1)-0.26*y(i-1); y(i)=1.6+0.23*x(i-1)+0.22*y(i-1); else x(i)=-0.15*x(i-1)+0.28*y(i-1); y(i)=0.26*x(i-1)+0.24*y(i-1)+0.44; end
0.85 0.07 0.07
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
2018/10/14
黄建华制作
6
4.6.1由生成元生成的分形图形
2018/10/14
黄建华制作
7
4.6.2由迭代函数系生成的分形图形
由迭代函数系(IFS)产生分形的一般算法是:给定平面上的 一组仿射变换wi:
以及相应的一组概率:p1,p2,...,pn(p1+p2+...+pn=1,pi>0) 。 对 于任意选取的初始值z0=(x0,y0),以概率pi选取变换wi做迭代: zk+1=(xk+1,yk+1)=wi(xk,yk),k=0,1,2,... 则点列{zk}收敛的极限图形称为一个IFS吸引子,即分形。 利用IFS迭代可以生成美丽的分形,而且IFS迭代的程序具 有通用性,要想得到不同的分形只需改变变换种的系数和概率 值。
2018/10/14 黄建华制作 13
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.333 % 概率p=0.333 x(i)=0.5*x(i-1); y(i)=0.5*y(i-1); elseif vv<0.666 % 概率p=0.333 x(i)=0.5*x(i-1)+0.25; y(i)=0.433+0.5*y(i-1); else x(i)=0.5*x(i-1)+0.5; y(i)=0.5*y(i-1); end end plot(x(1:n),y(1:n),'.b','markersize',1) ;axis off
2018/10/14 黄建华制作 8
x ai bi x ei wi y y c d f , i 1,2,...,n i i i
4.6.2由迭代函数系生成的分形图形
步骤: (1)设定迭代的可视区域为: V={(x,y)|xmin≤x≤xmax,ymin≤y≤ymax}再按分辨率的大小V分成 a*b的网格,网格点为(xi,yi),其中: xi=xmin+(xmax-xmin)*i/a,i=0,1,2,...,a yi=ymin+(ymax-ymin)*i/b,i=0,1,2,...,b 设迭代N次; (2)设定初始点(x0,y0),不妨取(0,0); (3)在数列{1,2,...,n}中,以概率pi选取变换wi; (4)将变换作用到点(xk,yk) 上,得到新点(xk+1,yk+1) ; (5)画出点(xk,yk) ,直到循环结束。
2018/10/14 黄建华制作 14
4.6.2由迭代函数系生成的分形图形
2018/10/14
黄建华制作
15
4.6.2由迭代函数系生成的分形图形
分形树
w
a
b
c
d
e
f
p
1
2 3 4
0
0.42 0.42 0.1
0
-0.42 0.42 0
0
0.42 -0.42 0
0.5
0.42 0.42 0.1
0
0 0 0
2018/10/14 黄建华制作 9
4.6.2由迭代函数系生成的分形图形
barnsley羊齿叶
w
a
b
c
d
e
f
p
1
2 3 4
0
0.85 0.2 -0.15
0
0.04 -0.26 0.28
0
-0.04 0.23 0.26
0.16
0.85 0.22 0.44
0
0 0 0
0
1.6 1.6 0.44
0.01
2018/10/14
黄建华制作
1
4.6.1由生成元生成的分形图形
程序:clear;clf;new=[0,1];%定义初始线段的两端 kmax=20; %迭代次数 for k=1:kmax old=new; %保存原有各点的坐标 n=length(old)-1; %计算需要改变图形的线段数目 for m=0:n-1 %计算各新线段两端点的坐标(5点) diff=(old(m+2)-old(m+1))/3; %取新线段长度向量 new(4*m+1)=old(m+1); %新线段第一点坐标 new(4*m+2)=old(m+1)+diff; %新线段第二点坐标 new(4*m+3)= new(4*m+2)+diff*((1+sqrt(3)*i)/2); %第三点 new(4*m+4)=old(m+1)+2*diff; %第四点 end new(4*n+1)=old(n+1); %最后一点 plot(new) ; axis equal; end
4.6.1由生成元生成的分形图形
由生成元产生的分形是一种规则分形,是数学家按照一定 规则构造出来的,相当于物理学种的模型。构造特点:最终图 形是按照一定规则R对初始F0不断修改得到的。
cantor三分集
生成方法:选取一条直线段F0,将该线段三等分,去掉中 间一段,剩下两段。将剩下的两段分别再三等分,各去掉中间 的一段,剩下四段。继续这样的操作,直至无穷,则可得到一 个离散的点集,称为cantor三分集。
2018/10/14 黄建华制作 17
4.6.2由迭代函数系生成的分形图形
end plot(x(1:n),y(1:n),'.m','markersize',1) ;axis off
2018/10/14
黄建华制作
18
4.6.2由迭代函数系生成的分形图形
levy曲线
w
a
b
c
d
e
f
p
1
2
0.5
0.5
2018/10/14 黄建华制作 16
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.05 % 概率p=0.05 y(i)=0.5*y(i-1); elseif vv<0.45 % 概率p=0.4 x(i)=0.42*x(i-1)-0.42*y(i-1); y(i)=0.2+0.42*(x(i-1)+y(i-1)); elseif vv<0.85 x(i)=0.42*(x(i-1)+y(i-1)); y(i)=0.42*(y(i-1)-x(i-1))+0.2; else x(i)=0.1*x(i-1); y(i)=0.2+0.1*y(i-1); end
黄建华制作
4
4.6.1由生成元生成的分形图形
程序:clear;clf;th=pi/6;%设置角度
u=[0,0;0,1]; %初始线段坐标 rov1=[cos(th),-sin(th);sin(th),cos(th)] ; rov2=rov1'; %坐标变换矩阵 kmax=15; %循环次数 for k=1:kmax uuu=[]; %建立一空数组,保存点坐标 n=length(u)/2; %计算需要改变图形的线段数目 for m=0:n-1 %计算各新端点的坐标 p1=(u(2*m+1,:)*2+u(2*m+2,:))/3 ; %a点 p2=(u(2*m+1,:) +u(2*m+2,:)*2)/3; %b点 pp=[(u(2*m+2,1)-u(2*m+1,1)); (u(2*m+2,2)-u(2*m+1,2))]/3; %计算新线段向量
4.6.2由迭代函数系生成的分形图形
end plot(x(1:n),y(1:n),'.r','markersize',1) ;axis off
2018/10/14
黄建华制作
12
4.6.2由迭代函数系生成的分形图形
sierpinski垫
w
a
b
c
d
e
f
p
1
2 3
2018/10/14 黄建华制作 5
4.6.1由生成元生成的分形图形
lp=rov1*pp; %第一条树枝偏转向量 lp=p1+lp'; %第一条树枝端点C坐标 rp=rov2*pp; %第二条树枝偏转向量 rp=p2+rp'; %第二条树枝端点D坐标 uu=[u(2*m+1,:);p1;p1;lp;p1;p2;p2;rp;p2;u(2*m+2,:)]; %按顺序排列新线段两端点的坐标 uuu=[uuu;uu]; end u=[uuu]; plot(u(:,1),u(:,2)) ; axis([-0.5,0.5,0,1] ); end
0
0.2 0.2 0.2
0.05
0.4 0.4 0.15
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
-0.5
0.5
0.5
-0.5
0.5
0.5百度文库
0
0.5
0
0.5
0.5
0.5
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
0.5
0.5 0.5
0
0 0
0
0 0
0.5
0.5 0.5
0
0.25 0.5
0
0.433 0
0.333
0.333 0.333
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
2018/10/14 黄建华制作 2
4.6.1由生成元生成的分形图形
2018/10/14
黄建华制作
3
4.6.1由生成元生成的分形图形
分形树
生成方法:选取一条直线段F0,将该线段三等分,在等分 点上各画一条长度为原线段长度三分之一的线段,并与原线段 成固定夹角,得到图形F1。再将F1的每一段都按上述方法修改, 直至无穷,则最后得到的极限图象,称为分形树。
程序略。
2018/10/14
黄建华制作
0
4.6.1由生成元生成的分形图形
koch曲线
生成方法:选取一条直线段F0,将该线段三等分,并将中 间一段用以该线段为边的等边三角形的另外两条边代替,得到 图形F1。再将F1的每一段都按上述方法修改,直至无穷,则最 后得到的极限曲线,称为koch曲线。
0.5
2018/10/14 黄建华制作 19
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.5 % 概率p=0.5 x(i)=0.5*(x(i-1)-y(i-1)); y(i)=0.5*(x(i-1)+ y(i-1)); else x(i)=0.5*(x(i-1)+y(i-1))+0.5; y(i)=-0.5*(x(i-1)- y(i-1))+0.5; end end plot(x(1:n),y(1:n),'.m','markersize',1) ;axis off
1 0.9
e c
b
1
d
0.9
0.8
0.8
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
a o
0.3
0.2
0.2
0.1
0.1
0 -0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0 -0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
2018/10/14
0.5
0.5
0.4
0.4
0.4
0.3
0.3
0.3
0.2
0.2
0.2
0.1
0.1
0.1
0
0
0
-0.1
-0.1
-0.1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
2018/10/14 黄建华制作 10
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.01 % 概率p=0.01 y(i)=0.16*y(i-1); elseif vv<0.86 % 概率p=0.85 x(i)=0.85*x(i-1)+0.04*y(i-1); y(i)=1.6-0.04*x(i-1)+0.85*y(i-1); elseif vv<0.93 % 概率p=0.07 x(i)=0.2*x(i-1)-0.26*y(i-1); y(i)=1.6+0.23*x(i-1)+0.22*y(i-1); else x(i)=-0.15*x(i-1)+0.28*y(i-1); y(i)=0.26*x(i-1)+0.24*y(i-1)+0.44; end
0.85 0.07 0.07
程序:clear;clf;n=100000;%设置迭代次数
v=rand(n,1); %随机数用于每一步做概率系数 x0=0;y0=0 ; x=[x0;zeros(n-1,1)]; y=[y0;zeros(n-1,1)]; %可视区域点数 for i=2:n % 按规则计算下一点坐标
2018/10/14
黄建华制作
6
4.6.1由生成元生成的分形图形
2018/10/14
黄建华制作
7
4.6.2由迭代函数系生成的分形图形
由迭代函数系(IFS)产生分形的一般算法是:给定平面上的 一组仿射变换wi:
以及相应的一组概率:p1,p2,...,pn(p1+p2+...+pn=1,pi>0) 。 对 于任意选取的初始值z0=(x0,y0),以概率pi选取变换wi做迭代: zk+1=(xk+1,yk+1)=wi(xk,yk),k=0,1,2,... 则点列{zk}收敛的极限图形称为一个IFS吸引子,即分形。 利用IFS迭代可以生成美丽的分形,而且IFS迭代的程序具 有通用性,要想得到不同的分形只需改变变换种的系数和概率 值。
2018/10/14 黄建华制作 13
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.333 % 概率p=0.333 x(i)=0.5*x(i-1); y(i)=0.5*y(i-1); elseif vv<0.666 % 概率p=0.333 x(i)=0.5*x(i-1)+0.25; y(i)=0.433+0.5*y(i-1); else x(i)=0.5*x(i-1)+0.5; y(i)=0.5*y(i-1); end end plot(x(1:n),y(1:n),'.b','markersize',1) ;axis off
2018/10/14 黄建华制作 8
x ai bi x ei wi y y c d f , i 1,2,...,n i i i
4.6.2由迭代函数系生成的分形图形
步骤: (1)设定迭代的可视区域为: V={(x,y)|xmin≤x≤xmax,ymin≤y≤ymax}再按分辨率的大小V分成 a*b的网格,网格点为(xi,yi),其中: xi=xmin+(xmax-xmin)*i/a,i=0,1,2,...,a yi=ymin+(ymax-ymin)*i/b,i=0,1,2,...,b 设迭代N次; (2)设定初始点(x0,y0),不妨取(0,0); (3)在数列{1,2,...,n}中,以概率pi选取变换wi; (4)将变换作用到点(xk,yk) 上,得到新点(xk+1,yk+1) ; (5)画出点(xk,yk) ,直到循环结束。
2018/10/14 黄建华制作 14
4.6.2由迭代函数系生成的分形图形
2018/10/14
黄建华制作
15
4.6.2由迭代函数系生成的分形图形
分形树
w
a
b
c
d
e
f
p
1
2 3 4
0
0.42 0.42 0.1
0
-0.42 0.42 0
0
0.42 -0.42 0
0.5
0.42 0.42 0.1
0
0 0 0
2018/10/14 黄建华制作 9
4.6.2由迭代函数系生成的分形图形
barnsley羊齿叶
w
a
b
c
d
e
f
p
1
2 3 4
0
0.85 0.2 -0.15
0
0.04 -0.26 0.28
0
-0.04 0.23 0.26
0.16
0.85 0.22 0.44
0
0 0 0
0
1.6 1.6 0.44
0.01
2018/10/14
黄建华制作
1
4.6.1由生成元生成的分形图形
程序:clear;clf;new=[0,1];%定义初始线段的两端 kmax=20; %迭代次数 for k=1:kmax old=new; %保存原有各点的坐标 n=length(old)-1; %计算需要改变图形的线段数目 for m=0:n-1 %计算各新线段两端点的坐标(5点) diff=(old(m+2)-old(m+1))/3; %取新线段长度向量 new(4*m+1)=old(m+1); %新线段第一点坐标 new(4*m+2)=old(m+1)+diff; %新线段第二点坐标 new(4*m+3)= new(4*m+2)+diff*((1+sqrt(3)*i)/2); %第三点 new(4*m+4)=old(m+1)+2*diff; %第四点 end new(4*n+1)=old(n+1); %最后一点 plot(new) ; axis equal; end
4.6.1由生成元生成的分形图形
由生成元产生的分形是一种规则分形,是数学家按照一定 规则构造出来的,相当于物理学种的模型。构造特点:最终图 形是按照一定规则R对初始F0不断修改得到的。
cantor三分集
生成方法:选取一条直线段F0,将该线段三等分,去掉中 间一段,剩下两段。将剩下的两段分别再三等分,各去掉中间 的一段,剩下四段。继续这样的操作,直至无穷,则可得到一 个离散的点集,称为cantor三分集。
2018/10/14 黄建华制作 17
4.6.2由迭代函数系生成的分形图形
end plot(x(1:n),y(1:n),'.m','markersize',1) ;axis off
2018/10/14
黄建华制作
18
4.6.2由迭代函数系生成的分形图形
levy曲线
w
a
b
c
d
e
f
p
1
2
0.5
0.5
2018/10/14 黄建华制作 16
4.6.2由迭代函数系生成的分形图形
vv=v(i); % 取概率 if vv<0.05 % 概率p=0.05 y(i)=0.5*y(i-1); elseif vv<0.45 % 概率p=0.4 x(i)=0.42*x(i-1)-0.42*y(i-1); y(i)=0.2+0.42*(x(i-1)+y(i-1)); elseif vv<0.85 x(i)=0.42*(x(i-1)+y(i-1)); y(i)=0.42*(y(i-1)-x(i-1))+0.2; else x(i)=0.1*x(i-1); y(i)=0.2+0.1*y(i-1); end
黄建华制作
4
4.6.1由生成元生成的分形图形
程序:clear;clf;th=pi/6;%设置角度
u=[0,0;0,1]; %初始线段坐标 rov1=[cos(th),-sin(th);sin(th),cos(th)] ; rov2=rov1'; %坐标变换矩阵 kmax=15; %循环次数 for k=1:kmax uuu=[]; %建立一空数组,保存点坐标 n=length(u)/2; %计算需要改变图形的线段数目 for m=0:n-1 %计算各新端点的坐标 p1=(u(2*m+1,:)*2+u(2*m+2,:))/3 ; %a点 p2=(u(2*m+1,:) +u(2*m+2,:)*2)/3; %b点 pp=[(u(2*m+2,1)-u(2*m+1,1)); (u(2*m+2,2)-u(2*m+1,2))]/3; %计算新线段向量