当前位置:文档之家› Matlab实验报告:分形迭代

Matlab实验报告:分形迭代

数学实验报告:分形迭代练习11.实验目的:绘制分形图案并分析其特点。

2.实验内容:绘制Koch曲线、Sierpinski三角形和树木花草图形,观察这些图形的局部和原来分形图形的关系。

3.实验思路:利用函数反复调用自己来模拟分形构造时的迭代过程,当迭代指标n为0时运行作图操作,否则继续迭代。

4.实验步骤:(1)Koch曲线function koch(p,q,n) % p、q分别为koch曲线的始末复坐标,n为迭代次数if (n==0)plot([real(p);real(q)],[imag(p);imag(q)]);hold on;axis equalelsea=(2*p+q)/3; % 求出从p 到q 的1/3 处端点ab=(p+2*q)/3; % 求出从p 到q 的2/3 处端点bc=a+(b-a)*exp(pi*i/3);%koch(p, a, n-1); % 对pa 线段做下一回合koch(a, c, n-1); % 对ac 线段做下一回合koch(c, b, n-1); % 对cb 线段做下一回合koch(b, q, n-1); % 对bq 线段做下一回合end(2)Sierpinski三角形function sierpinski(a,b,c,n) % a、b、c为三角形顶点,n为迭代次数if (n==0)fill([real(a) real(b) real(c)],[imag(a) imag(b) imag(c)],'b');% 填充三角形abchold on;axis equalelsea1=(b+c)/2;b1=(a+c)/2;c1=(a+b)/2;sierpinski(a,b1,c1,n-1);sierpinski(a1,b,c1,n-1);sierpinski(a1,b1,c,n-1);end(3)树木花草function grasstree(p,q,n) % p、q分别为树木花草始末复坐标,n为迭代次数plot([real(p);real(q)],[imag(p);imag(q)]);hold on;axis equalif(n>0)a=(2*p+q)/3;b=(p+2*q)/3;c=a+(b-a)*exp(pi*i/6);%d=b+(q-b)*exp(-pi*i/6);%grasstree(a,c,n-1);grasstree(b,d,n-1);endend5.主要输出:指令:koch(0,1,5); soerpinski(0,1,exp(pi*i/3),5); grasstree(0,i,5);Koch曲线Sierpinski三角形树木花草6.实验结论:以上图案的局部形状与原本图形用某种自相似性,这正是分形的特点。

7.问题分析:一般迭代次数大于7,程序运行时间就很长,因此迭代次数建议设定为5。

练习21.实验目的:研究Koah雪花的特征。

2.实验内容:对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。

编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。

3.方法思路:采用Koch曲线的迭代元来绘制。

4.实验步骤:function xuehua(n)koch(0,0.5+(1/2)*sqrt(3)*i,n);koch(0.5+(1/2)*sqrt(3)*i,1,n);koch(1,0,n);endxuehua(1);xuehua(3)5.主要输出:不同n对应不同的图像如下:n=1 n=36.实验结论:每一次迭加,所产生的新三角形的边长变为上一次的1/3,数量为上一次的4倍。

而设原三角形边长为r ,Koch 雪花的面积∑=-⨯⨯⨯+=n i ii r r S 12122]3143[4343, 由此可以推出雪花曲线的边长是无限的,而面积是有限的。

另外,从图像可以看出,随迭代次数n 趋于无穷,图形每一点都没有切线。

7.问题分析:由于没有找到matlab 中相应的计算图形面积与周长的函数,所以这两项计算是由人工完成的。

练习31.实验目的:研究分形维数反映出来的分形的特性。

2.实验内容:利用分形维数公式d=log(n)/log(c)计算雪花曲线,Sierpinski 三角形,Minkowski 香肠的维数并与其图像显现出的性质进行比较。

3.方法思路:只需画出Minkowski 香肠的图像,其他分形利用之前图像与维数进行比较即可。

4.实验步骤:Minkowski 香肠:function Minkowski(p,q,n) if (n==0)plot([real(p);real(q)],[imag(p);imag(q)]); hold on; axis equal elsem=(q-p)/4;m1=real(m);m2=imag(m);a=p+m; b=a+(-m2+m1*i);c=b+m;d0=c+(m2-m1*i); d=c+2*(m2-m1*i);e=d+m;f=e+(-m2+m1*i); Minkowski(p, a, n-1); Minkowski(a, b, n-1); Minkowski(b, c, n-1); Minkowski(c, d0, n-1); Minkowski(d0, d, n-1); Minkowski(d, e, n-1); Minkowski(e, f, n-1);Minkowski(f, q, n-1);5.实验输出:由分形维数公式log(n)/log(c)可计算的个图形的维数。

雪花曲线:log4/log3=1.26Minkowski 香肠:log n/logc=1.5 Sierpinski 三角形:log3/log2=1.58Minkowski 香肠:6.实验结论:可见雪花曲线,Sierpinski 三角形,Minkowski 香肠的维数都在1与2之间,它们的图像的面积都有极限,而图形边长无限长。

维数越接近1,则图形有更多的曲线的性质,维数越接近2,则图形有更多的平面的性质,由此可推算Hilbert 曲线的维数很接近2。

7.问题分析:迭代次数越大,则图像的说明效果越好,但程序的运行时间也越长,建议迭代次数不要超过7。

练习41.实验目的:探索Weierstrass 函数图像的性质2.实验内容:已知Weierstrass 函数如下:()()()21sin ,1,12,s k k k W x x s λλλ∞-==><<∑对不同的s 值,画出函数图像,观察图像的不规则性与s 的关系,并猜测Weierstrass 函数图像的维数与s 的关系 3.方法思路:由于Weierstrass 函数表达式中为无穷项求和,Matlab 中使用无穷项求和花费太 多时间,所以考虑取足够大的项数进行运算,通过变换s 的值,画出不同的图像 进行比较,达到原来的实验目的。

4.实验步骤:syms f xf=0; y=10; s=1.4; %s=1.6; %s=1.8; for i=1:100f=f+y^((s-2)*i)*sin(y^(i)*x); endezplot(f,[0,2])S的取值对应Weierstrass函数的图像S=1.4s=1.6s=1.86.实验结论:Weierstrass函数图像随着s值的增加变得更加不规则猜测随着s取不同的值,Weierstrass函数图像的维数随着s值得增加而变大7.问题分析:考虑到不同项数的做和可能会影响图像的准确性,但在实验了100项、300项和500项的做和后,发现图像改变并不是很大,而当项数改为1000后,发现又要等很长的时间,且得到的结论相同,所以取100项的求和进行实验。

练习61.实验目的:绘制Mandelbrot集和Julia集。

2.实验内容:绘制Mandelbrot集并局部放大,与其不同的部位(内点、外电、边界点及芽孢内点)对应的Julia集形状进行对比。

3.实验思路:按照Mandelbrot集和Julia集的构造方法,先编写好相应函数,观察Mandelbrot 集的局部细节,出几个典型的内点、外电、边界点及芽孢内点,然后画出对应的Julia集并比较。

4.实验步骤:(1)Mandelbrot集function mandelbrot(z,r,k,d)if nargin < 4k = 200; %迭代次数d = 500; %分辨率z=-0.75; %中心r=1.25; %显示半径endx = linspace(real(z)-r,real(z)+r,d);y = linspace(imag(z)-r,imag(z)+r,d);A = ones(d,1)*x+i*(ones(d,1)*y)';C=A;B = zeros(d,d);for s = 1:kB = B+(abs(A)<=2);A = A.*A+C;end;imagesc(flipud(B));colormap(jet);hold off;axis equal;axis off;(2)Julia集function Julia(c,k,v)if nargin < 3c = -0.5; k = 100; v = 500;endr = max(abs(c),2);d = linspace(-r,r,v);A = ones(v,1)*d+i*(ones(v,1)*d)';B = zeros(v,v);for s = 1:kB = B+(abs(A)<=r);A = A.*A+ones(v,v).*c;end;imagesc(B);colormap(jet);hold off;axis equal;axis off;5.主要输出:以下为不同z值的Mandelbrot集的局部放大图形以及对应的Julia集图形Mandelbrot集全局图Mandelbrot集局部对应Julia集z= -1;z为内点。

z= -1+0.5iz为外点。

z= -1+0.3iz为边界点。

z= -1.448z为芽孢的内点z= -1.76z为一个更小的芽孢的内点6..实验结论:当z为Mandelbrot集的内点时,则对应的Julia集有内点,且图形面积很大;当z为Mandelbrot集的外点时,则对应的Julia集为空集;当z为Mandelbrot集的边界点时,则对应的Julia集无内点但连通,且两图形状相似。

当z为Mandelbrot集的芽孢的内点时,则对应的Julia集有内点,且芽孢的面积越大,对应Julia集的面积越大。

另外,Mandelbrot集的芽孢与整个Mandelbrot集有明显的相似性。

7.问题分析:由于分形的结构是无限精细的,要确定Mandelbrot集的边界点并不容易,事实上实验过程中只选取了一个与边界点很接近的点;另外,根据本算法所画的Julia集是不可能为空集的,但可以根据Julia集的收敛速度判断其实际的Julia集是否为空集。

相关主题