用程序实现Koch雪花曲线的渐变 - 副本
- 格式:pdf
- 大小:144.35 KB
- 文档页数:3
Mathematica用法简介(2)——关于“形”的问题本讲要点:一、Mathematica快速入门(2)---基本作图命令二、与作图有关的问题三、分形图及其绘制四、作图练习(1)普通图形作图练习(2)分形图作图练习-------------------------------------------------------------------------一、Mathematica快速入门(2)---基本作图命令0.基本的作图命令:序号 作图命令 功能简介1 Plot[…] 平面显函数作图2 Plot3D[…] 空间显函数作图3 ParametricPlot[…] 平面参数方程作图4 ParametricPlot3D[…] 空间参数方程作图5 ContourPlot[…] 等高线6 DensityPlot[…] 等密度线7 ListPlot[…] 散点图8 Show[…] (合并)显示图形1. Plot[…]Plot[Evaluate[Table[Sin[j*x],{j,5}]],{x,0,2Pi}]2. Plot3D[…]Plot3D[Sin[x]*Cos[y],{x,0,Pi},{y,-Pi,Pi}]或Plot3D[Sin[Sqrt[x^2+y^2]]/(Sqrt[x^2+y^2]),{x,-8,8},{y,-8,8},PlotPoints->60, PlotRange->{-0.2,1}]3. ParametricPlot[…]ParametricPlot[{5Cos[t],3Sin[t]},{t,0,2Pi}]4. ParametricPlot3D[…]ParametricPlot3D[{Sin[u]Cos[v],Sin[u]Sin[v],Cos[u]},{u,0,Pi},{v,0,2Pi}] 或ParametricPlot3D[{Sqrt[t]Cos[t],Sqrt[t]Sin[t],1/2t},{t,0,6Pi}]5. ContourPlot[…]ContourPlot[x^2+y^2-5(Sqrt[x^2+y^2]-y),{x,-10,10},{y,-10,7},PlotPoints->300, Contours->{0}, ContourShading->False]6. DensityPlot[…]DensityPlot[Sin[x+y],{x,0,2Pi},{y,0,2Pi}]7. ListPlot[…]n=40;dots={};For[i=2,i<=n, i++,For[j=1,j<i, j++,If[GCD[i,j]==1,AppendTo[dots,{j/i,1/i}]]]]pp=ListPlot[dots,PlotRange->{0,0.6},AxesLabel->{"x","R(x)"},AspectRatio->0.6]8. Show[…]p1=Plot[x^3+3,{x,0,2}];p2=Plot[x^3-3,{x,-2,0}];Show[p1,p2]二、与作图有关的问题1.Options[…]2. Griphics[…] 与 graphics primitives(图元):序号 作图命令 说明1 Point 点状2 Line 线状3 Rectangle 矩形4 Cuboid 立柱形5 Polygon 填充多边形6 Circle 圆形7 Disk 圆盘形8 Raster 灰色矩形数组图形9 RasterArray 彩色矩形数组图形l2=Line[Table[{Random[ ],Random[ ]},{5}]];Show[Graphics[l2]]或l5=Polygon[Table[{Random[ ],Random[ ]},{5}]];Show[Graphics[{RGBColor[1,0,0],l5}]]三、分形图及其绘制在我们生活的大千世界里,除了有象房屋建筑、公路桥梁、汽车、飞机、轮船以及各种劳动生活工具等这些人造的形态规则的几何形态之外,更广泛地充满了诸如花草树木、山川河流、烟雾云彩等形态极不规则的几何形态。
科赫雪花python代码科赫雪花Python代码科赫雪花是一种非常有趣的几何图形,它由无数个小三角形构成,非常美丽而富有艺术感。
那么如何用Python代码来实现这个图形呢?下面我们就来一步一步地介绍。
我们需要导入turtle库,这个库可以帮助我们画出各种形状,非常方便。
```pythonimport turtle```接着,我们需要定义一个函数,来画出科赫雪花的每一个小三角形。
这个函数的参数包括线段长度和阶数。
```pythondef draw_koch(length, order):if order == 0:turtle.forward(length)else:for angle in [60, -120, 60, 0]:draw_koch(length/3, order-1)turtle.left(angle)```在这个函数中,首先判断当前阶数是否为0,如果是0则直接画出一条长度为length的线段。
如果不是0,则分别在每个线段的中间画出一个等边三角形,然后递归调用函数,将三角形的三条边分别作为新的线段进行处理。
接下来,我们需要定义一个主函数来画出整个科赫雪花。
这个函数的参数包括线段长度和阶数。
```pythondef draw_snowflake(length, order):for i in range(3):draw_koch(length, order)turtle.right(120)```在这个函数中,首先使用一个for循环来画出三个小三角形,然后每次画完一个小三角形之后,将画笔向右旋转120度,以便画出下一个小三角形。
我们只需要调用主函数即可画出整个科赫雪花。
```pythondraw_snowflake(200, 4)```在这个代码中,我们设置了线段长度为200,阶数为4,可以根据需要进行调整。
总结通过上面的代码,我们可以非常简单地实现科赫雪花的绘制,这个过程非常有趣,而且有很多可玩性。
科赫雪花科赫雪花是一种数学图形,由瑞典数学家Helge von Koch于1904年提出。
它是一个自相似的曲线,通过迭代的方式生成。
科赫雪花具有美丽而复杂的几何形状,被广泛应用于数学教育和计算机图形学中。
生成科赫雪花的算法生成科赫雪花的算法相对简单,可以通过递归实现。
下面是一个使用Python编写的生成科赫雪花的代码示例:import turtledef koch_curve(t, length, depth):if depth == 0:t.forward(length)else:koch_curve(t, length/3, depth-1)t.left(60)koch_curve(t, length/3, depth-1)t.right(120)koch_curve(t, length/3, depth-1)t.left(60)koch_curve(t, length/3, depth-1)def koch_snowflake(t, length, depth):for _ in range(3):koch_curve(t, length, depth)t.right(120)def main():# 创建画布和画笔window = turtle.Screen()window.bgcolor("white")pen = turtle.Turtle()# 设置画笔颜色和速度pen.color("blue")pen.speed(0)# 调用函数绘制科赫雪花koch_snowflake(pen, 300, 4)# 隐藏画笔pen.hideturtle()# 关闭画布window.exitonclick()if __name__ == "__main__":main()算法解析上述代码使用了Python的turtle库来绘制图形。
首先,我们定义了两个函数:koch_curve和koch_snowflake。
一、实验目的:1、初步认识迭代,体会迭代思想的重要性。
2、通过在mathematica 环境下编写程序,利用迭代的方法求解方程的根、线性方程组的解、非线性方程组的解。
3、了解分形的的基本特性及利用mathematica 编程生成分形图形的基本方法, 在欣赏由mathematica 生成的美丽的分形图案的同时对分形几何这门学科有一个直观的了解。
从哲理的高度理解这门学科诞生的必然性,激发读者探寻科学真理的兴趣。
4、从一个简单的二次函数的迭代出发,利用mathematica 认识混沌现象及其所 蕴涵的规律。
5、.进一步熟悉Mathematic 软件的使用,复习总结Mathematic 在数学作图中的应用,为便于研究数学图像问题提供方便,使我们从一个新的视角去理解数学问题以及问题的实际意义。
6、在学习和运用迭代法求解过程中,体会各种迭代方法在解决问题的收敛速度上的异同点。
二、实验的环境:学校机房,mathematica4环境三、实验的基本理论和方法:1、迭代(一)—方程求解函数的迭代法思想:给定实数域上光滑的实值函数)(x f 以及初值0x 定义数列1()n n x f x +=, ,3,2,1,0=n , (1)n x , ,3,2,1,0=n ,称为)(x f 的一个迭代序列。
(1)方程求根给定迭代函数)(x f 以及初值0x 利用(1)迭代得到数列n x , ,3,2,1,0=n .如果数列收敛到某个*x ,则有)(**x f x =. (2)即*x 是方程)(x f x =的解。
由此启发我们用如下的方法求方程0)(=x g 的近似解。
将方程0)(=x g 改写为等价的方程)(x f x =, (3) 然后选取一初值利用(1)做迭代。
迭代数列n x 收敛的极限就是方程0)(=x g 的解。
为了使得迭代序列收敛并尽快收敛到方程0)(=x g 的某一解的条件是迭代函数)(x f 在解的附近的导数将的绝对值尽量小,因此迭代方程修订成x x f x h x )1()()(λλ-+== (4) 选取λ使得|)(|x h '在解的附近尽量小. 为此, 我们可以令,01)()(=-+'='λλx f x h得)(11x f '-=λ. 于是 1)()()(-'--=x f x x f x x h . 特别地,如果取x x g x f +=)()(, 则可得到迭代公式 .,1,0,)()(1 ='-=+n x g x g x x n n n n (5) (2)线性方程组的数值解的迭代求解理论与矩阵理论给定一个n 元线性方程组⎪⎩⎪⎨⎧=++=++,,1111111n n nn n n n b x a x a b x a x a (6)或写成矩阵的形式,b Ax = (7) 其中)(ij a A =是n 阶方阵,T n x x x x ),,(21 =及T n b b b b ),,,(21 =均为n 维列向量.熟知,当矩阵A 的行列式非零时,以上的方程组有唯一解.如何有效,快速地寻求大型的线性方程组的数值解释科学工程计算中非常重要的任务.而迭代法常常是求解这些问题的有效方法之一。
(1)Koch曲线程序koch.mfunction koch(a1,b1,a2,b2,n)%koch(0,0,9,0,3)%a1,b1,a2,b2为初始线段两端点坐标,n为迭代次数a1=0;b1=0;a2=9;b2=0;n=3;%第i-1次迭代时由各条线段产生的新四条线段的五点横、纵坐标存储在数组A、B中[A,B]=sub_koch1(a1,b1,a2,b2);for i=1:nfor j=1:length(A)/5;w=sub_koch2(A(1+5*(j-1):5*j),B(1+5*(j-1):5*j));for k=1:4[AA(5*4*(j-1)+5*(k-1)+1:5*4*(j-1)+5*(k-1)+5),BB(5*4*(j-1)+5*(k-1)+1:5*4*(j-1)+5*(k-1)+5)]=sub_koch1(w(k,1),w(k,2),w(k,3),w(k,4));endendA=AA;B=BB;endplot(A,B)hold onaxis equal%由以(ax,ay),(bx,by)为端点的线段生成新的中间三点坐标并把这五点横、纵坐标依次分别存%储在数组A,B中function [A,B]=sub_koch1(ax,ay,bx,by)cx=ax+(bx-ax)/3;cy=ay+(by-ay)/3;ex=bx-(bx-ax)/3;ey=by-(by-ay)/3;L=sqrt((ex-cx).^2+(ey-cy).^2);alpha=atan((ey-cy)./(ex-cx));if (ex-cx)<0alpha=alpha+pi;enddx=cx+cos(alpha+pi/3)*L;dy=cy+sin(alpha+pi/3)*L;A=[ax,cx,dx,ex,bx];B=[ay,cy,dy,ey,by];%把由函数sub_koch1生成的五点横、纵坐标A,B顺次划分为四组,分别对应四条折线段中%每条线段两端点的坐标,并依次分别存储在4*4阶矩阵k中,k中第i(i=1,2,3,4)行数字代表第%i条线段两端点的坐标function w=sub_koch2(A,B)a11=A(1);b11=B(1);a12=A(2);b12=B(2);a21=A(2);b21=B(2);a22=A(3);b22=B(3);a31=A(3);b31=B(3);a32=A(4);b32=B(4);a41=A(4);b41=B(4);a42=A(5);b42=B(5);w=[a11,b11,a12,b12;a21,b21,a22,b22;a31,b31,a32,b32;a41,b41,a42,b42];(2)Levy 曲线程序levy.mfunction levy(n)% levy(16),n为levy曲线迭代次数%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数n=16;x1=0;y1=0;x2=1;y2=0;%第i-1次迭代时由各条线段产生的新两条线段的三端点横、纵坐标存储在数组X、Y中[X,Y]=levy1(x1,y1,x2,y2);for i=1:nfor j=1:length(X)/3w=levy2(X(1+3*(j-1):3*j),Y(1+3*(j-1):3*j));[XX(3*2*(j-1)+1:3*2*(j-1)+3),YY(3*2*(j-1)+1:3*2*(j-1)+3)]=levy1(w(1,1),w(1,2) ,w(1,3),w(1,4));[XX(3*2*(j-1)+3+1:3*2*(j-1)+3+3),YY(3*2*(j-1)+3+1:3*2*(j-1)+3+3)]=levy1(w (2,1),w(2,2),w(2,3),w(2,4));endX=XX;Y=YY;endplot(X,Y)hold onaxis equal%由以(x1,y1),(x2,y2)为端点的线段生成新的中间点坐标并把(x1,y1),(x2,y2)连同新点横、纵坐%标依次分别存储在数组X,Y中function [X,Y]=levy1(x1,y1,x2,y2)x3=1/2*(x1+x2+y1-y2);y3=1/2*(-x1+x2+y1+y2);X=[x1,x3,x2];Y=[y1,y3,y2];%把由函数levy1生成的三点横、纵坐标X,Y顺次划分为两组,分别对应两条折线段中每条线%段两端点的坐标,并依次分别存储在2*4阶矩阵w中,w中第i(i=1,2)行数字代表第i条线段%两端点的坐标function w=levy2(X,Y)a11=X(1);b11=Y(1);a12=X(2);b12=Y(2);a21=X(2);b21=Y(2);a22=X(3);b22=Y(3);w=[a11,b11,a12,b12;a21,b21,a22,b22];(3)分形树程序tree.hfunction tree(n,a,b)% tree(8,pi/8,pi/8),n为分形树迭代次数%a,b为分枝与竖直方向夹角%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数n=8;a=pi/8;b=pi/8;x1=0;y1=0;x2=0;y2=1;plot([x1,x2],[y1,y2])hold on[X,Y]=tree1(x1,y1,x2,y2,a,b);hold onW=tree2(X,Y);w1=W(:,1:4);w2=W(:,5:8);% w为2^k*4维矩阵,存储第k次迭代产生的分枝两端点的坐标,% w的第i(i=1,2,…,2^k)行数字对应第i个分枝两端点的坐标w=[w1;w2];for k=1:nfor i=1:2^k[X,Y]=tree1(w(i,1),w(i,2),w(i,3),w(i,4),a,b);W(i,:)=tree2(X,Y);endw1=W(:,1:4);w2=W(:,5:8);w=[w1;w2];end%由每个分枝两端点坐标(x1,y1),(x2,y2)产生两新点的坐标(x3,y3),(x4,y4),画两分枝图形,并把%(x2,y2)连同新点横、纵坐标分别存储在数组X,Y中function [X,Y]=tree1(x1,y1,x2,y2,a,b)L=sqrt((x2-x1)^2+(y2-y1)^2);if (x2-x1)==0a=pi/2;else if (x2-x1)<0a=pi+atan((y2-y1)/(x2-x1));elsea=atan((y2-y1)/(x2-x1));endendx3=x2+L*2/3*cos(a+b);y3=y2+L*2/3*sin(a+b);x4=x2+L*2/3*cos(a-b);y4=y2+L*2/3*sin(a-b);a=[x3,x2,x4];b=[y3,y2,y4];plot(a,b)axis equalhold onX=[x2,x3,x4];Y=[y2,y3,y4];%把由函数tree1生成的X,Y顺次划分为两组,分别对应两分枝两个端点的坐标,并存储在一维%数组w中function w=tree2(X,Y)a1=X(1);b1=Y(1);a2=X(2);b2=Y(2);a3=X(1);b3=Y(1);a4=X(3);b4=Y(3);w=[a1,b1,a2,b2,a3,b3,a4,b4];(4)IFS算法画Sierpinski三角形程序sierpinski_ifs.h function sierpinski_ifs(n,w1,w2,w3)%sierpinski_ifs(10000,1/3,1/3,1/3)%w1,w2,w3出现频率n=10000;w1=1/3;w2=1/3;w3=1/3;M1=[0.5 0 0 0 0.5 0];M2=[0.5 0 0.5 0 0.5 0];M3=[0.5 0 0.25 0 0.5 0.5];x=0;y=0;% r为[0,1]区间内产生的n维随机数组r=rand(1,n);B=zeros(2,n);k=1;% 当0<r(i)<1/3时,进行M1对应的压缩映射;% 当1/3=<r(i)<2/3时,进行M2对应的压缩映射;% 当2/3=<r(i)<1时,进行M3对应的压缩映射;for i=1:nif r(i)<w1a=M1(1);b=M1(2);e=M1(3);c=M1(4);d=M1(5);f=M1(6);else if r(i)<w1+w2a=M2(1);b=M2(2);e=M2(3);c=M2(4);d=M2(5);f=M2(6);else if r(i)<w1+w2+w3a=M3(1);b=M3(2);e=M3(3);c=M3(4);d=M3(5);f=M3(6);endendendx=a*x+b*y+e;y=c*x+d*y+f;B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)(5)IFS算法画Julia集程序julia_ifs.h function julia_ifs(n,cx,cy)% julia_ifs(100000,-0.77,0.08)% f(z)=z^2+c,cx=real(c);cy=image(c);n=10000;cx=-0.77;cy=0.08;% z^2+c=z0,x=real(z0);y=image(z0);x=1;y=1;B=zeros(2,n);k=1;% A为产生的服从标准正态分布的n维随机数组A=randn(1,n);for i=1:nwx=x-cx;wy=y-cy;if wx>0alpha=atan(wy/wx);endif wx<0alpha=pi+atan(wy/wx);endif wx==0alpha=pi/2;endalpha=alpha/2;r=sqrt(wx^2+wy^2);if A(i)<0r=-sqrt(r);elser=sqrt(r);endx=r*cos(alpha);y=r*sin(alpha);B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)(6) 逃逸时间算法画Sierpinski垫片程序sierpinski.h function sierpinski(a,b,c,d,n,m,r)%sierpinski(0,0,1,1,12,200,200)%(a,b),(c,d)收敛区域左上角和右下角坐标,m为分辨率% n为逃逸时间,需要反复试探,r逃逸半径a=0;b=0;c=1;d=1;n=12;m=200;r=200;B=zeros(2,m*m);w=1;for i=1:mx0=a+(c-a)*(i-1)/m;for j=1:my0=b+(d-b)*(j-1)/m;x=x0;y=y0;for k=1:nif y>0.5x=2*x;y=2*y-1;else if x>=0.5x=2*x-1;y=2*y;elsex=2*x;y=2*y;endif x^2+y^2>rbreak;endendif k==nB(1,w)=i;B(2,w)=j;w=w+1;endendendplot(B(1,:),B(2,:),'.','markersize',0.1)(7) 元胞自动机算法画Sierpinski三角形程序一维元胞自动机sierpinski_ca1.hfunction sierpinski_ca1(m,n)%sierpinski_ca1(1000,3000)m=1000;n=3000;x=1;y=1;t=1;w=zeros(2,m*n);s=zeros(m,n);s(1,fix(n/3))=1;for i=1:m-1for j=2:n-1if (s(i,j-1)==1&s(i,j)==0&s(i,j+1)==0)|(s(i,j-1)==0&s(i,j)==0&s(i,j+1)==1)s(i+1,j)=1;w(1,t)=x+3+3*j;w(2,t)=y+5*i;t=t+1;endendendplot(w(1,:),w(2,:),'.','markersize',1)² 二维元胞自动机sierpinski_ca2.h function sierpinski_ca2(m,n)%sierpinski_ca2(400,400)m=400;n=400;t=1;w=zeros(2,m*n);s=zeros(m,n);s(m/2,n/2)=1;for i=[m/2:-1:2,m/2:m-1]for j=[n/2:-1:2,n/2:n-1]ifmod(s(i-1,j-1)+s(i,j-1)+s(i+1,j-1)+s(i-1,j)+s(i+1,j)+s(i-1,j+1)+s(i,j+1)+s(i+1,j+1),2)== 1s(i,j)=1;w(1,t)=i;w(2,t)=j;t=t+1;endendendplot(w(1,:),w(2,:),'.','markersize',0.1)(8) IFS算法画Helix曲线程序helix_ifs.hfunction helix_ifs(n,w1,w2,w3)%helix_ifs(20000,0.9,0.05,0.05)%w1,w2,w3为出现频率n=20000;w1=0.9;w2=0.05;w3=0.05;M1=[0.787879 -0.424242 1.758647 0.242424 0.859848 1.408065]; M2=[-0.121212 0.257576 -6.721654 0.05303 0.05303 1.377236]; M3=[0.181818 -0.136364 6.086107 0.090909 0.181818 1.568035]; x=0;y=0;% r为[0,1]区间内产生的n维随机数组r=rand(1,n);B=zeros(2,n);k=1;% 当0<r(i)<1/3时,进行M1对应的压缩映射;% 当1/3=<r(i)<2/3时,进行M2对应的压缩映射;% 当2/3=<r(i)<1时,进行M3对应的压缩映射;for i=1:nif r(i)<w1a=M1(1);b=M1(2);e=M1(3);c=M1(4);d=M1(5);f=M1(6);else if r(i)<w1+w2a=M2(1);b=M2(2);e=M2(3);c=M2(4);d=M2(5);f=M2(6);else if r(i)<w1+w2+w3a=M3(1);b=M3(2);e=M3(3);c=M3(4);d=M3(5);f=M3(6);endendendx=a*x+b*y+e;y=c*x+d*y+f;B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)/link?url=CEfKyhT7lmb10gOVen5eSHpjztx2JuN1vJf02qoyK9oXrqfTYE TbwxhPSE7QdgQrzqObbSGfbQixLyP3U09MokUvaST2CcsGP4uFqYi6YF_小宇宙被誉为大自然的几何学的分形(Fractal)理论,是现代数学的一个新分支,但其本质却是一种新的世界观和方法论。
科赫雪花python代码科赫雪花是一种经典的分形图形,它由三条长度相等的线段组成一个等边三角形,并在每条边上重复执行以下过程:将线段分成三等份,去掉中间段,然后在剩余两段之间画出一个新的等边三角形。
这个过程可以无限重复下去,直到达到所需的精度。
Python是一种广泛应用于科学计算、数据分析和人工智能领域的编程语言。
在Python中实现科赫雪花可以通过递归函数来完成。
下面将介绍如何使用Python代码实现科赫雪花。
1. 导入必要的库在Python中,我们需要导入turtle库来绘制图形。
turtle库是Python自带的绘图库,可以通过简单的命令来控制海龟绘制图形。
import turtle2. 定义递归函数接下来我们需要定义一个递归函数来生成科赫雪花。
该函数需要接受三个参数:线段长度、阶数和海龟对象。
def koch(length, order, t):if order == 0:t.forward(length)else:for angle in [60, -120, 60, 0]:koch(length / 3, order - 1, t)t.left(angle)3. 绘制科赫雪花最后,我们需要定义一个主函数来调用递归函数并绘制科赫雪花。
在这个主函数中,我们首先创建一个海龟对象,并设置它的初始位置和朝向。
然后,我们调用递归函数来生成科赫雪花,并使用turtle.done()命令来保持窗口不关闭。
def main():t = turtle.Turtle()t.speed(0)t.penup()t.goto(-150, 90)t.pendown()for i in range(3):t.right(120)turtle.done()完整代码如下:import turtledef koch(length, order, t):if order == 0:t.forward(length)else:for angle in [60, -120, 60, 0]: koch(length / 3, order - 1, t) t.left(angle)def main():t = turtle.Turtle()t.speed(0)t.penup()t.goto(-150, 90)t.pendown()for i in range(3):t.right(120)turtle.done()if __name__ == '__main__':main()总结通过以上Python代码,我们可以轻松地生成科赫雪花。
利用MATLAB生成Koch曲线作者:张笑笑来源:《电子技术与软件工程》2016年第15期摘要分析Koch曲线的构造过程,然后编写生成Koch曲线生成元的M函数,通过该M 函数的递归调用来生成Koch曲线。
通过Koch曲线,便于更直观地理解分形,获得分形带来的艺术美感。
【关键词】分形 Koch曲线递归自然界存在许多复杂事物和现象,如蜿蜒曲折的海岸线、天空中奇形怪状的云朵、错综生长的灌木、太空中星罗棋布的星球等,还有许多社会现象,如人口的分布、物价的波动等,它们呈现异常复杂而毫无规则的形态,但它们具有自相似性。
人们把这些部分与整体以某种方式相似的形体称为分形(fractal),在此基础上,形成了研究分形性质及其应用的科学,称为分形理论。
Koch曲线由瑞典数学家科赫(Koch)于1904年提出,是典型的分形曲线。
MATLAB(MATrix LABoratory)是颇具特色和影响的科学计算软件,它以矩阵运算为基础,将高性能的数值计算和符号计算功能、强大的绘图功能、动态系统仿真功能以及为数众多的应用工具箱集成在一起,在科学研究以及工程设计领域有着十分广泛的应用。
本文以Koch 曲线为例,利用MATLAB作为实现工具,说明分形曲线的生成方法。
1 Koch曲线的构造过程Koch曲线的构造过程是,取一条直线段L0,将其三等分,保留两端的线段,将中间的一段用以该线段为边的等边三角形的另外两边代替,得到曲线L1,如图1所示。
再对L1中的4条线段都按上述方式修改,得到曲线L2,如此继续下去进行n次修改得到曲线Ln,当n→∞时得到一条连续曲线L,这条曲线L就称为Koch曲线。
Koch曲线将每条直线用一条折线替代,这条折线通常称为该Koch曲线的生成元。
曲线的特征完全由生成元决定。
给定不同的生成元,就可以生成各种不同的分形曲线。
分形曲线的构造过程是通过反复用一个生成元来取代每一直线段,因而图形的每一部分都和它本身的形状相同,这就是自相似性,这是分形最为本质的特点。
利用Matlab编程展现数学之美作者:孙慧静王丽英刘丹来源:《课程教育研究》2020年第19期【摘要】利用Matlab编程展示几何图,进而探讨了数学美的特征——简洁性,对称性与奇异性。
通过展示几何图,让学员感受到数学之美,从而提高学员学习数学的积极性,激发学员学习数学的兴趣。
【关键词】Matlab软件 Julia集 Sierpinski三角形 Koch曲线【中图分类号】O192 【文献标识码】A 【文章编号】2095-3089(2020)19-0252-02一、引言高等数学和工程数学(以下简称数学)是理工科军事院校学员必修的公共基础课。
数学是学员学好理工专业课程的基础,该课程除了能够让学员掌握基本的数学理论知识外,更重要的是数学对培养和加强学员的理性思维、思辨能力、分析和解决问题的能力有重要的作用,是开发学员潜在能动性和创造力的重要课程。
但是,数学教员在进行授课时发现许多学员对数学不感兴趣,更有甚者对学习数学有厌倦心理。
经过调查发现这些不爱学习数学的学员总是将数学与“枯燥”、“抽象”、“晦涩”等一些词联系在一起,他们对学习数学有畏难心理,觉得“数学难,难于上青天”。
怎样使学员对学习数学产生兴趣呢?这是广大数学教育工作者亟需解決的问题。
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国Math Works公司开发的一种数学软件,可用于算法开发、数据分析以及数值计算的高级技术计算语言和交互式环境。
本文旨在通过Matlab软件编程展现数学之美,从而达到提高学员学习数学的积极性,激发学员学习数学兴趣的目的[1]。
二、利用Matlab编程展现数学美德国大数学家Gauss说过“数学是科学中的皇后”。
Gauss在这里谈的是一种在形式上高度抽象的美。
一种被数学家所认可却对大多数人来说未曾体验或难以想象的内在美。
直到上个世纪80年代,由于电子计算机特别是图象显示系统的发展,这种逻辑形式、结构与证明所构成的美才通过在计算机屏幕上显示出结果使得人们有目共睹。