迭代蛛网

为明确起见我们以 xn+1=axn(1-xn)为例谈迭代的具体做法,考虑的参数范围是 a∈[0,4]。

纵坐标记 xn+1,横坐标记 xn,只需考虑第 I 象限的抛物线,注意 45°

角分线。取初始值 xo=0.1,取别的值也是可以的,只要它介于 0 和 1 之间。迭代过程得到序列 xo,x1,x2,x3,x4,⋯。看图 6—5,从几何角度看,不

需要具体计算,可以一步一步画出迭代过程,由 xo,如何得到 x1 和 x2 呢? 首先由初始点 R(xo,0)作纵轴平行线,找到与抛物线的交点 A(xo,x1), A 的纵坐标就是 x1 由点 A(xo,x1)作水平直线,求它与 45°线的交点 B

(x1,x1),经 B 点再作纵轴的平行线,求得与抛物线的交点 C(x1,x2),这样就得到 x2 了。仿此做法可得到所有迭代点。这一套说起来麻烦,做起来十分简单。我们以下的作图都是用微机完成的,你自己可以试试,非常简单,

也很好玩。

迭代过程前 6 步见图 6—5 至图 6—10。图 6—11 是迭代 19 次的结果,

图 6—12 是迭代 70 次的结果。这种迭代过程就像蜘蛛织网一样,所以也叫迭代蛛网。在经济学中也有蛛网模型。学过经济学的人不妨再思考一下,那里讲的迭代是否缺少了什么?是否漏掉了最重要的情形?

下面的源程序是作者用 PASCAL 6.0 编写的,为清晰起见没有考虑优化问题(现在的微机速度很快,在这里根本不存在计算量的问题),你可以把它转化成其它你熟悉的高级语言。

ProgramLog- Map-Iter-Huajie-1995; usesGraph,Crt;

var

X ,y,a:real;

Gd, Gm,n,m, YO, XO, coefx, coefy, XX,YY,YYY: integer;

begin Gd:=VGA;{设置图形方式} Gm:=VGAHi;

InitGraph (Gd, Gm,’D:\PASCAL’);{图形初始化} if GraphResult<>grOKthenHalt (1);{ 测 试 } coefx:=200; coefy:=200;{放大系数}

X O: =150; YO:=370;{选取屏幕坐标原点}

{ 以 下 三 行 画 坐 标 轴 和 45° 直 线 } line(XO—50,Y0,XO+100* coefxdiv80,YO); line(XO,YO+50,XO,YO—100*coefydiv80); lihe(XO—50,YO+50,XO+90*coefx div80, YO—90*coefy div 80); a:=3.8;X:=—0.1;{取参数,准备画抛物线曲线} while x<1.05 do

begin n:=n+1; X:=X+0.001;

y:=a*x*(1-X);

PutPixel (round(x*coefx)+XO, YO—round(y*coefy),15); end;{抛物线画完,准备具体迭代} X:=0.1;{任取一个初始点} m:=0;

while m<19 do{设置迭代次数}

begin m:=m+1;

y:=a*X*(1-X);{计算 X1 的值}

XX: =round (x*coefx);{放大后取整} YY: =round(y*coefy);

line(XX+XO,YO—YY,YY+XO,YO—YY);{连水平线段} X:=y;{为下一次迭代作准备}

y:=a*X*(1—X);{求 X2 的值}

YYY:=round (y*coefy);{准备连垂直线段} line(YY+XO,YO—YY,YY+XO,YO—YYY); end;{重复以上过程}

readln; CloseGraph;{关闭图形方式} end.