数学实验与数学建模实践教程(7)

2018-12-22 22:53

图2.2.6 树木花草

计算机绘出树木花草的Mathematica如下:

redotree[ptlist_List] :=

Block[{tmp = {}, i, ptnum = Length[ptlist]/2, midpt1, midpt2, leftpt, rightpt}, For[i = 0, i < ptnum, i = i + 1,

midpt1 = (ptlist[[2i + 1]]*2 + ptlist[[2i + 2]])/3; midpt2 = (ptlist[[2i + 1]] + ptlist[[2i + 2]]*2)/3; leftpt = midpt1 + {{Cos[theta], -Sin[theta]},

{Sin[theta], Cos[theta]}}.{ptlist[[2i + 2]][[1]] - ptlist[[2i + 1]][[1]], ptlist[[2i + 2]][[2]] - ptlist[[2i + 1]][[2]]}/3; rightpt =

midpt2 + {{Cos[theta], Sin[theta]}, {-Sin[theta],

Cos[theta]}}.{ptlist[[2i + 2]][[1]] - ptlist[[2i + 1]][[1]], ptlist[[2i + 2]][[2]] - ptlist[[2i + 1]][[2]]}/3; tmp = Join[tmp, {ptlist[[2i + 1]], midpt1, midpt1, leftpt,

midpt1, midpt2, midpt2, rightpt,midpt2, ptlist[[2i + 2]]}]]; tmp]

showtree[ptlist_List] :=

Block[{tmp = {}, i, ptnum = Length[ptlist]/2}, For[i = 0, i < ptnum, i = i + 1, AppendTo[tmp,

Line[{ptlist[[2i + 1]], ptlist[[2i + 2]]}]]];

Show[Graphics[tmp], AspectRatio -> 3/2/Sin[theta]] ]

theta = 30Degree;

showtree[Nest[redotree, {{0, 0}, {0, 1}}, 4]]

其中,前两种分形图形的生成元比较简单,但后三种分形图形的生成元相对比较复杂。在龙曲线中,生成元将一直线段修改为由两互相垂直的线段构成的折线,但在决定向哪个方向折时存在两种选择(假设线段都有确定的定向,即我们要决定折线是在线段的左边还是在右边)。本生成元规定,折线方向对每条线段依次交替地改变(见图2.2.4)。对Hilbert曲线,虽然它的生成元十分复杂,但其原理与龙曲线类似。在图2.2.5中,每个小线段的左侧或右侧都画了一根短线,它并不是分形图形的组成部分,它表示在下一步迭代时,生成元应位于短线指示的小正方形之内。树木花草的生成元有些特别,它具有所谓的分支结构,其中有一些参数可以改变,如每段树枝的长度以及树枝之间的夹角?。

早在19世纪就有一些数学家对复变函数的迭代进行研究。然而,直到20世纪80年代,B.Mandelbrot才将复变函数的迭代与分形联系起来,并绘制出了第一张以他的名字命名的引人人胜的分形图形,复变函数的迭代由此再一次成为数学家的热

点研究问题。

给定初始复数Z0,考虑如下的迭代

Zk?1?Z2??kk?0,1,2,? (2.2.3)

其中Zk,k?0,1,2,?为复数,?为(复)常数。

对于给定的初始点Z0迭代序列?Zk?有可能有界,也可能发散到无穷。令J?是使得迭代序列?Zk?有界的所有初值Z0构成的集合,即

J?={Z0 |迭代序列?Zk?有界} (2.2.4) 我们称J?在复平面上构成的集合为Julia集。对不同的参数?,Julia集的形状也会不同。特别地,??0对应的Julia集为单位圆盘。

如果固定初值Z0,则对不同的参数?,迭代序列?Zk?的有界性也不相同。令MZ是使得迭代序列?Zk?有界的所有参数值?构成的集合,即

MZ={?|迭代序列?Zk?有界} (2.2.5)

00则称MZ在复平面上构成的集合为Mandelbrot集。

0为了便于在计算机上绘制出Julia集与Mandelbrot集,我们令Zk?xk?iyk,

??p?iq,则(2.2.3)可改写为

2?xk?1?x2k?yk?p ??yk?1?2xkyk?qk?0,1,? (2.2.6)

?rk?有界的初始点?x,y?构成的集合,?y2记rk?x2kk,则Julia集为使得序列

Mandelbrot集为使得序列?rk?有界的参数?p,q?构成的集合。这两种集合的计算机作图方法如下:

Julia集绘制方法。1)设定初值p,q,一个最大的选代次数N,图形的分辨率的大小a,b和使用的颜色数K(如K?16 )(或者给定灰度级 L);2)设定一个上界值M?max2,p2?q2;3)将矩形区域R:???x,y?|?M?x,y?M?分成a?b的网格,分别以每个网格点?fi,gj???,其中fi??M?2Mi2Mji?0,1,?,a,,gi??M?,

ab22j?0,1,?,b作为初值?x0,y0?利用(riter)做迭代(实际上,只需对满足 x0?y0?M222的初始点选代)。如果对所有n?N,xn?yn?M2,则将图形的?i,j?象素点用黑色显

示。否则,如果从迭代的某一步n0开始有xn?yn?M2,则用第n0mod K种颜色显示

0022相应象素(或者用相应的灰度级显示)。

Mandelbrot集的绘制方法。1)设定一个最大的选代次数 N,图形的分辨率的大小a,b在和使用的颜色数K(如K?16 )(或者给定灰度级 L);2)设定一个上界值M?2;3)将矩形区域R:???p,q?|?M?p,q?M?分成a?b的网格,分别以每个网格点?fi,gj?,其中fi??M?2Mi2Mji?0,1,?,a,j?0,1,?,b,,gi??M?ab为作为参数值?p,q?利用(rriter)做迭代(实际上,只需对满足 p2?q2?4的初始点

22迭代),每次选代的初值均取为?x0,y0???0,0?。如果对所有n?N,xn?yn?M2,

则将图形的?i,j?点用黑色显示。否则,如果从迭代的某一步n0开始有。 xn?yn?M2,则用第n0mod K种颜色显示相应象素(或者用相应的灰度级显示)

0022Mandelbrot集以及它的局部放大的Mathematica程序如下:

iter[x_,y_,lim_] := Block[{c,z,ct},c = x +I*y;z = c;ct = 0;

While[(Abs[z] < 2.0) && (ct < lim),++ct;z = z*z + c;];Return[ct];] Mandelbrot1=DensityPlot[iter[x,y,50], {x,-2.0, 1.0},{y,-1.5,1.5}, PlotPoints -> 120,Mesh -> False]

Mandelbrot2 = Show[Mandelbrot1, Graphics[Line[{{-0.9, -0.25}, {-0.7,-0.25}, {-0.7,-0.05},{-0.9,-0.05}, {-0.9,-0.25}}]]]

Mandelbrot3 = DensityPlot[iter[x,y,50],{x,-0.9,-0.7},{y,-0.25,-0.05}, PlotPoints -> 120,Mesh -> False]

Julia集图形的Mathematica程序:

julia[x_,y_,lim_,cx_,cy_] :=Block[{z, ct = 0}, z = x + I*y;

While[(Abs[z] <2.0) && (ct < lim), ++ct; z = z*z + (cx +I*cy);];Return[ct];] julia1=DensityPlot[julia[x, y,50, 0.27334, 0.00742],{x,-1.5,1.5}, {y,-1.5,1.5}, PlotPoints -> 120, Mesh -> False]

julia2 = Show[julia1,Graphics[Line[{{-0.7, -0.1},

{-0.3,-0.1},{-0.3,0.3},{-0.7,0.3},{-0.7,-0.1}}]]]

julia3 = DensityPlot[julia[x,y,50,0.27334,0.00742],{x,-0.7,-0.4},{y,-0.1,0.3}, PlotPoints -> 120,Mesh -> False]

给定一组(仿射)变换?i:

?x ?i??y?iii??a11x?a12y?b1???????aix?aiy?bi???11121?i?1,2,?,n

以及相应的一组概率p1,p2,?,pn(p1?p2???pn?1,pi?0),对于任意选取的初始值Z0??x0,y0?,以概率pi选取变换?i做迭代

Zn?1??xn?1,yn?1???i?xn,yn? , i?1,2,?,n 则点列Zk,i?1,2,?,n收敛的极限图形称为一个IFS吸引子。

IFS迭代绘制分形的方法。设计算机屏幕的可视窗口为 V???x,y?|xmin?x?xmax,ymin?y?ymax?

按分辨率大小的要求将V分成a?b的网格,网格点为?xi,yi?,这里 xi?x yi?y用Vij?min??xmax?xamin?i?j,i?0,1,?,a ,j?0,1,?,b

,yj?y?y?ymaxmin?yamin表示矩形区域??x,y?|xi?x?xi?1j?1?。假设我们采取具有

L(如

L=256)级灰度的黑白图象绘制,总共的迭代次数为 N,其中落Vij中的点的个数为?ij。再记??max?ij,i?0,1,?,a?1,j?0,1,?,b?1,则象素?i,j?的灰度

ijG?i,j?与落于V中的点数成正比:

G?i,j????ij??L

于是即给出了IFS迭代产生的分形的L级灰度图象。

Mathematica程序如下:

pl=0.3;aaa=1/2 +I1//N;f1[z_]:=(z+aaa)/2; p2=0.3;bbb=0//N;f2[z_]:=(z+bbb)/2; p3=0.4;ccc=1//N; f3[z_]:=(z+ccc)/2; f[z_]:=Block[{tmp},tmp=Random[];

Which[tmp

ShowIFS[z0_,MeshRange_List,divi_List,nmax_]:=

Block[{i,j,z=z0,a=divi[[1]],b=divi[[2]],temp1,temp2,mumax=0}, For[i=a,i>=1,i--,For[j=b,j>=1,j--,mu[i, j]= 0]]; For[i=nmax,i>=1,i--,

temp1=Floor[divi[[1]]*(Re[z]- MeshRange[[1]] [[1]])/( MeshRange[[2]] [[1]]- MeshRange[[1]][[1]])]+1; temp2=

Floor[divi[[2]]*(Im[z]- MeshRange[[1]] [[2]])/( MeshRange[[2]] [[2]]- MeshRange[[1]] [[2]])]+1; mu[temp1,temp2]++; z=f[z]; ];

For[i=a,i>=1,i--,

For[j=b,j>= 1,j--,mumax=Max[mumax, mu[i,j]]]]; mul=Table[GrayLevel[1-N[mu[j,i]]/mumax],{i,a},{j,b}]; Show[Graphics[RasterArray[mu1]]] ]

ShowIFS[0+I0,{{-0.1,-0.1},{1.1,1.1}},{150,150},100000]

三、实验方案

3.1迭代序列与不动点

首先对函数y?25x?85研究不动点,需要 x?3 (1)对Plot中{x,-10,20}可改为{x,-50,50};对PlotRange中{ -1,20}可改为{-50,50};

(2)x0=5.5中5.5分别改为-30,-20,-5,-3.001,-2.999,-1,0,1,1.5,2.5,4,4.5,4.9,4.999,5,5.1,5.001,6,10,16,17,18,20,30;

(3)对t=Table[x[i],{i,1,10}]//N中10分别改为100,200,500,1000; (4)对i<=100中100分别改为200,500,1000。

运行程序后观察蛛网图与散点图!一看数列是否收敛?如收敛,极限是多少?收敛速度是快是慢?二看蛛网图中的轨道是否趋于平衡点?与平衡点处曲线的斜率有没有关系?三看初值对结果有没有影响?

其次,分别就f(x)?sinx,f(x)??x?1等函数利用(2.2.1)做迭代序列{xn},观察蛛网图中的轨道是否趋于平衡点和序列的收敛性。

3.2 Logistic映射与混沌

就Logistic映射,对a=0.5,1,1.2,2,2.1,2.9,2.999,3,3.001,3.2,3.235,3.236,3.237,3.44等,分别取x0= 0,0.2,0.5,0.8,1.0运行程序,观察结果。

观察结果就是看数列是否收敛,蛛网图中的轨道是否趋于平衡点,与a的关系!对a的定义范围[0,4]分成若干个区间,就初值(属于(0,1)时)看数列是否收敛,蛛网图中的轨道是否趋于平衡点?可用散点图认识。 对Logistic映射讨论下列问题:

1)找出一个a值,它对应的迭代具有2周期点。这种性质依赖于初值吗?你能找到多个a值具有这种性质吗?

2)你能对任意的k找到一个a值,使得它对应的迭代具有k周期点吗?哪些k值能给出k周期点?在每种情况下,结果是否依赖于初值的选取?

3)如果某个a值能给出周期点,它是否一定是吸引的周期点?你能否找到排斥的周期点?

4)试着从理论上分析:f?x?的不动点是什么?对哪些a值迭代收敛到每个不动点?哪些初值收敛到不动点?哪些初值导致发散?对周期点做类似的分析。 研究锯齿函数和帐篷函数的混沌行为时,分别取x0=0,0.2,0.5,0.8,1.0运行程序(改变函数,要修改函数的定义方式),研究数列及蛛网图中的轨道。

3.3 方程求根

2x?1x3?1对于方程x?2x?1?0,首先分别考虑函数,2,32x?1,取不同的

2x

3初值x0(例如-9,-5,-2,-1,-0.5,0,0.5,1, 2 ,8,10 等),生成相应的数列。若数列有极限,

则极限即为所求根。


数学实验与数学建模实践教程(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国家精品在线开放课程申报书(2017)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: