Matlab 寻找帐篷映射的不动点/吸引子/排斥子
我需要找到帐篷映射函数的不动点和吸引子,定义如下: xt = (3/2) * xt-1 when 0 <= x <= (2/3) and xt = 3* (1-xt-1) when (2/3) <= x <= 1Matlab 寻找帐篷映射的不动点/吸引子/排斥子,matlab,wolfram-mathematica,fixed-point-iteration,Matlab,Wolfram Mathematica,Fixed Point Iteration,我需要找到帐篷映射函数的不动点和吸引子,定义如下: xt = (3/2) * xt-1 when 0 <= x <= (2/3) and xt = 3* (1-xt-1) when (2/3) <= x <= 1 xt=(3/2)*xt-1当0时,为了让精通Mathematica的人更容易回答问题,以下是Mathematica对上述代码的翻译: CobwebDiagram[xstart_, steps_] := Module[
xt=(3/2)*xt-1当0时,为了让精通Mathematica的人更容易回答问题,以下是Mathematica对上述代码的翻译:
CobwebDiagram[xstart_, steps_] := Module[{path, x, t},
path = RecurrenceTable[{x[t] ==
Piecewise[{{3/2 x[t - 1], 0 <= x[t - 1] <= 2/3}},
3 (1 - x[t - 1])], x[1] == xstart}, x, {t, 1, steps}];
Plot[Piecewise[{{3/2 x, 0 <= x < 2/3}}, 3 (1 - x)], {x, 0, 1},
Epilog -> {Red,
Line[Riffle[Partition[path, 2, 1], {#, #} & /@ Rest[path]]]}]]
CobwebDiagram[xstart,steps]:=Module[{path,x,t},
路径=递归表[{x[t]==
分段[{{3/2x[t-1],0这些只是围绕这个问题的一些见解。我现在将继续使用Mathematica,因为它更方便(从上面的代码判断,您应该能够在MATLAB中管理它,如果不能,我将尝试转换它).然而,如果你有Mathematica,并且可以测试这些,那就太好了
固定点:函数f(x)
的固定点是f(x)=x的解;换句话说,函数映射到自身的点
对函数进行求解,得到x=0
和x=3/4
作为固定点
In:= Solve[Min[3/2 x, 3 - 3 x] - x == 0, x]
Out= {{x -> 0}, {x -> 3/4}}
事实上,从这些点开始的轨迹将永远停留在这些点上
Manipulate[
CobwebDiagram[xstart, steps], {xstart, 0, 1, 1/1000}, {steps, 1, 200,
1}]
固定点的性质
让我们看看不动点的性质。如果它是吸引子,不动点任意小ε大小的邻域中的点保持在相似大小的邻域中(不一定是完全相同的大小),如果它是排斥者,它会被排斥并发散到邻域外的完全任意点(我的定义在这里很松散,但猜测就可以了)
因此,尝试以下方法
eps = 10^-16;
CobwebDiagram[0.75 + eps, 200]
我们得到
图(1)
这显然不像是收敛到固定点。事实上,如果你看一下x[t]
的演变,你会发现它发散了
Clear[f]
f[1] = 0.75 + eps;
f[t_] := f[t] =
Piecewise[{{3/2 f[t - 1], 0 <= f[t - 1] <= 2/3}}, 3 (1 - f[t - 1])];
ListLinePlot[Table[f[n], {n, 1, 200}]]
图(5)
哇!!那看起来像是一场比赛
极限环:极限环是系统的一条闭合轨迹,从中不可能到达轨迹以外的点,即使是t->无穷大
图(6)
只重复了3个点(图像压缩创建了一个,但实际上,如果你用一小步绘制它,你会看到3个点。我太困了,无法返回并重新打印)。这三个点分别是12/25
、18/25
和21/25
。从这三个点中的任何一个开始,您将进入相同的极限循环
现在,如果足够接近极限环的轨迹收敛到它,那么它是吸引/稳定极限环,否则它是排斥/不稳定极限环。所以像以前一样,通过eps
在任意方向上扰动,我们可以看到轨迹发散(我只在下面显示+ve方向)
图(7)
图(8)
有趣的是,从x[1]=19/25
开始,将其映射到下一步中的18/25
,然后在极限循环轨迹中无限期地继续。很容易理解为什么会发生这种情况,因为从19/25
到y=x
的直线只是从12/25
到y=x
的直线的延续(即,从函数的第一部分开始)。根据相同的逻辑,应该有对应于18/25
和21/25
的点,但我现在不打算找到它们。鉴于此,我不确定这里的极限环是真正吸引还是排斥(根据极限环的严格定义,只需要有一条其他的轨迹盘旋进入极限环,我们发现了三条!也许对此有更多了解的人可以参与进来)
还有一些想法
起点1/2
也很有趣,因为它会在下一步将您带到3/4
,这是一个固定点,因此会永远留在那里。同样,点2/3
会将您带到0
的另一个固定点
CobwebDiagram[1/2, 200]
图(9)
图(10)
振荡的行为也告诉你一些关于系统的事情。如果你看一下图中的轨迹。(2,4),在定点0
情况下,系统螺旋进入混沌所需的时间比另一种情况更长。此外,在这两种图中,当轨迹接近0
时,系统恢复所需的时间比在3/4
时要长,此时系统只是快速摆动。这些看起来类似于松弛振荡(想象一个电容器缓慢充电,并通过短路瞬间放电)
这就是我现在所能想到的。最后,我认为不动点的确切性质必须在的一般设置中进行分析,但我不打算就此展开讨论。我希望这个答案为您提供了一些可供研究的选项。我不知道蛛网图的哪一部分来得早,哪一部分来得晚。我还没有找到f颜色功能确实有效,但可能存在以下改进:
Clear[cobWebDiagram, f, x]
f[x_] = Piecewise[{{3/2 x, 0 <= x <= 2/3}, {3 (1 - x), True}}];
colorName = RandomChoice@ColorData["Gradients"]
color = ColorData@colorName
cobWebDiagram[f_, xstart_, steps_, low_, hi_, color_] :=
Module[{path, x, t, range = color[[3]], scale1},
path = Partition[NestList[f, .75 + eps, steps], 2, 1];
scale1 = Rescale[#, {1, Length@path}, range] &;
scale2 = Rescale[#, {1, Length@path}, {0, .005}] &;
Show[Plot[f@x, {x, low, hi}],
Graphics@
Table[{color@scale1@k, Thickness@scale2@k,
Arrow@path[[{k, k + 1}]]}, {k, -1 + Length@path}]]]
eps = 10^-16;
cobWebDiagram[f, .75 + eps, 100, 0, 1, color]
不知怎的,当我第一次看到它时,我认为这是一个家庭作业问题,OP对尤达答案的回答证实了这一点。问家庭作业问题不一定是错误的,但它肯定应该清楚地标记出来。在meta上的这个链接上有一些合理的家庭作业政策:
考虑到“没有家庭作业解决方案;欢迎轻推”的政策,我想在我迄今为止提供的解决方案讨论中添加一条评论。检查f的迭代图。我指的是f(f(x)),f(f(f(x)),等等的图。例如,f(x)=x^2的第三次迭代是f(f(x)))=x^8。f的第n次迭代图和y=x线之间的交点包括n阶的周期轨道(以及更高一点)
CobwebDiagram[1/2, 200]
CobwebDiagram[2/3, 200]
Clear[cobWebDiagram, f, x]
f[x_] = Piecewise[{{3/2 x, 0 <= x <= 2/3}, {3 (1 - x), True}}];
colorName = RandomChoice@ColorData["Gradients"]
color = ColorData@colorName
cobWebDiagram[f_, xstart_, steps_, low_, hi_, color_] :=
Module[{path, x, t, range = color[[3]], scale1},
path = Partition[NestList[f, .75 + eps, steps], 2, 1];
scale1 = Rescale[#, {1, Length@path}, range] &;
scale2 = Rescale[#, {1, Length@path}, {0, .005}] &;
Show[Plot[f@x, {x, low, hi}],
Graphics@
Table[{color@scale1@k, Thickness@scale2@k,
Arrow@path[[{k, k + 1}]]}, {k, -1 + Length@path}]]]
eps = 10^-16;
cobWebDiagram[f, .75 + eps, 100, 0, 1, color]
colorName="CMYKColors"