非 线 性 迭 代 实 验 报 告一、实验背景与实验目的迭代是数学研究中的一个非常重要的工具,通过函数或向量函数由初始结点生成迭代结点列,也可通过函数或向量函数由初值(向量)生成迭代数列或向量列。
蛛网图也是一个有用的数学工具,可以帮助理解通过一元函数由初值生成的迭代数列的敛散性,也帮助理解平衡点(两平面曲线交点)的稳定性。
本实验在Mathematica 平台上首先利用蛛网图和迭代数列研究不动点的类型;其次通过蛛网图和迭代数列研究Logistic 映射,探索周期点的性质、认识混沌现象;第三通过迭代数列或向量列求解方程(组)而寻求有效的求解方法;最后,利用结点迭代探索分形的性质。
二、实验材料2.1迭代序列与不动点给定实数域上光滑的实值函数)(x f 以及初值0x ,定义数列)(1n n x f x =+, ,2,1,0=n (2.2.1) }{n x 称为)(x f 的一个迭代序列。
函数的迭代是数学研究中的一个非常重要的思想工具,利用迭代序列可以研究函数)(x f 的不动点。
对函数的迭代过程,我们可以用几何图象来直观地显示它——“蜘蛛网”。
运行下列Mathematica 程序:Clear[f]f[x_] := (25*x - 85)/(x + 3); (实验时需改变函数) Solve[f[x]==x , x] (求出函数的不动点)g1=Plot[f[x], {x, -10, 20}, PlotStyle -> RGBColor[1, 0, 0], DisplayFunction -> Identity];g2=Plot[x, {x, -10, 10}, PlotStyle -> RGBColor[0, 1, 0], DisplayFunction -> Identity]; x0=5.5; r = {};r0=Graphics[{RGBColor[0, 0, 1], Line[{{x0, 0}, {x0, x0}}]}]; For[i = 1, i <= 100, i++,r=Append[r, Graphics[{RGBColor[0, 0, 1], Line[{{x0, x0},{x0, f[x0]}, {f[x0], f[x0]}}] }]]; x0=f[x0] ];Show[g1, g2, r, r0, PlotRange -> {-1, 20}, (PlotRange 控制图形上下范围) DisplayFunction -> $DisplayFunction] x[0]=x0;x[i_]:=f[x[i-1]]; (定义序列) t=Table[x[i],{i,1,10}]//N ListPlot[t] (散点图)观察蜘蛛网通过改变初值,你能得出什么结论?如果只需迭代n 次产生相应的序列,用下列Mathematica 程序: Iterate[f_,x0_,n_Integer]:=Module[{ t={},temp= x0},AppendTo[t,temp]; For[i=1,i <= n, i++,temp= f[temp]; AppendTo[t,temp]]; t ]f[x_]:= (x+ 2/x)/2; Iterate[f,0.7,10]设()x f 是一个定义在实数域上的实值函数,如果存在u 使得()u u f =,则称u 为()x f 的不动点。
我们用u u →表示这件事。
如果所有附近的点在选代过程中都趋向于某个不动点,则该不动点称为吸引点,有时也称该不动点是稳定的。
如果所有附近的点在选代过程中都远离它而去,则该不动点称为排斥点,有时也称该不动点是不稳定的。
如果21)(u u f =,32)(u u f =,…,1)(u u f k =且k j uu ji ,,2,1,=≠,则ku u u ,,,21 形成一个k 循环,用121u u u u k →→→→ 记这个事实。
1u 称为一个k 周期点,k u u u ,,,21 称为一个周期轨道。
显然,不动点就是周期为1的周期点。
类似于不动点,如果所有附近的点在迭代过程中都趋向于某个周期点,则该周期点称为吸引点;如果所有附近的点在迭代过程中都远离它而去,则该周期点称为排斥点。
如果点u 最终落于某个循环之中,则称它是一个预周期点。
例如,l 是1)(2-=x x f 的预周期点。
2.2 Logistic 映射与混沌从形如()()x ax x f -=1的二次函数开始做迭代()k k x f x =+1 ,1,0=k (2.2.2)这里,[]4,0∈a 是一个参数。
对不同的a 系统地观察迭代(2.2.2)的行为。
Mathematica 程序:IterGeo[a_, x0_] :=Module[{p1, p2, i, pointlist = {}, v= x0, fv= a*x0*(1 - x0)},p1=Plot[ {a*x*(1 - x), x}, {x, 0, 1}, DisplayFunction -> Identity]; AppendTo[pointlist, {x0, 0}];For[i = 1, i < 20, i++, AppendTo[pointlist, {v, fv}]; AppendTo[pointlist, {fv, fv}]; v= fv; fv= 4*v*(1 - v)];p2=ListPlot[pointlist, PlotJoined -> True, DisplayFunction -> Identity];Show[{p1, p2}, DisplayFunction -> $DisplayFunction] ]IterGeo[2.6, 0.3]将区间(0,4]以某个步长a ∆离散化,对每个离散的a 值做迭代(2.2.2),忽略前50个迭代值,而把点()51,x a ,()52,x a ,…,()100,x a 显示在坐标平面上,最后形成的图形称为Feigenbaum 图。
Mathematica 程序:Clear[f, a, x]; f[a_, x_] := a*x*(1 - x);x0 = 0.5; r = {}; Do[For[i = 1, i <= 300, i++, x0 = f[a, x0];If[i > 100, r = Append[r, {a, x0}]] ],{a, 3.0, 4.0, 0.01}]; ListPlot[r]从极限分支点之后,Feigenbaum 图显得很杂乱,似乎没有任何规律。
实际上,对任何初始值做迭代都会得到同样的结果。
这就是所谓的混沌现象。
迄今为止,混沌并没有确切的数学定义,但它具有一些基本的特性,如对初值的敏感性以及某种无序性,由此产生类似于随机的现象。
所谓一个迭代对初值是敏感的意思是,无论两个初值如何接近,在迭代过程中它们将渐渐分开。
这是任何一个混沌系统都具有的特性之一,这种特性使得混沌系统会产生似乎是随机的、没有规律的现象。
在Logistic 映射中,取4=a ,任取两个初值使得它们之间的差的绝对值不超过0.l ,运行下列程序,观察结果后回答问题:在迭代过程中它们逐渐分开吗?如果两个初值之间的差的绝对值不超过0.01,0.001,结果会如何?由此得出,函数()()x x x f -=14的迭代对初值是否敏感?其Mathematica 程序:Sensitivity[n_Integer, x01_, x02_] :=Module[{pilist = {}, i, temp1=x01, temp2=x02},For[i=1, i <= n, i++, temp1=4*temp1*(1-temp1); temp2=4*temp2*(1-temp2);AppendTo[pilist, {i, temp2-temp1}]; ];ListPlot[pilist, PlotJoined -> True] ]Sensitivity[50, 0.1, 0.1001]一个简单的、确定的二次选代可以产生非常复杂的、看似随机的行为。
但是,混沌不等于随机。
实际上,在混沌区域之内,蕴涵着许多有序的规律。
这正验证了哲学上的名言:有序中包含了无序,无序中包含着有序。
其Mathematica 程序:distrib[n_Integer,m_Integer,x0_]:=Module[{i,temp=x0,g1,f,k,c=Table[0,{i,m}]},For[i=1,in,i++,temp=4*temp*(1-temp);If[temp1,c[[m]]++,c[[Floor[temp*m]+1]]++]];f[k_]:=Graphics[{GrayLevel[0.5],Rectangle[{k-0.5,0},{k+0.5,c[[k]]}]}]; g1=Table[f[k],{k,1,m}];Show[g1,AxesTrue,PlotLabel->"x0=0.4"];]n=100;m=20;x0=0.4;distrib[n,m,x0]另一个说明混沌不是随机的事实是,混沌区域有许多有序的窗口。
将这些窗口放大可以看到令人振奋的自相似现象,同时还有许多周期轨道。
在 Feigenbaum 图的右部,你应当能看到一个由三条曲线穿过的空白带,它是一个“周期为 3的窗口”。
你能找到其它窗口吗?它们的周期是什么?窗口里有什么图案?这些窗口跟上题的第二问中的k 周期轨道有什么关系?运行下列程序,听一听混沌的声音PlayChaos[n_Integer, x0_] :=Module[{t = {}, i, temp = x0},For[i = 1, i <= n, i++, temp = 4*temp*(1 - temp); AppendTo[t, Floor[temp*100]]];ListPlay[t, PlayRange -> {0, 100}, SampleRate -> 5] ]和函数()()x ax x f -=1一样有着混沌行为的函数还很多。
其中较简单的有“帐篷函数”和“锯齿函数”。
“帐篷函数”()x T 定义为()⎩⎨⎧≤<-≤≤=15.0225.002x xx xx T“锯齿函数”()x S 定义为 ()⎩⎨⎧≤<-≤≤=15.0125.002x x x x x S容易验证,帐篷函数和锯齿函数有下列关系: ()()()()10≤≤=x x S T x T T 令()2sin 2xx h π=,帐篷函数与()()x x x f -=14有下列关系:()()()()x T h x h f k k =2.3 方程求根对于代数方程g (x )=0,其根可用下列程序求得Solve[g(x)= = 0 , x]也可用下列程序求得g[x_]:=exprPlot[g[x],{x,a,b}]FindRoot[g(x)= = 0 , {x,x0}]将方程0)(=x g 改写为等价的方程)(x f x =,然后选取一初值利用(2.2.1)作迭代,迭代数列}{n x 收敛的极限就是方程0)(=x g 的解。