寻找帐篷地图的固定点/吸引子/反击者

时间:2011-04-16 03:45:25

标签: matlab wolfram-mathematica fixed-point

我需要找到下面定义给出的帐篷地图功能的固定点和吸引子:

    xt =  (3/2) * xt-1      when 0 <= x <= (2/3)

    and

    xt = 3* (1-xt-1)        when (2/3) <= x <= 1

我正在使用下面的MATLAB代码生成一个蛛网图(如下面的代码所示),看看我是否可以深入了解这个特定的帐篷地图功能。正如你所看到的那样,我通过设置t = 1(和x(1)= 0.2001)开始,但是有很多可能的地方可以开始。如果不测试每个起点,如何确定固定点/吸引子?

clear
close all

% Initial condition 0.2001, must be symbolic.
nmax=200;
t=sym(zeros(1,nmax));t1=sym(zeros(1,nmax));t2=sym(zeros(1,nmax));
t(1)=sym(2001/10000);
mu=2;
halfm=(2/3) *nmax;
axis([0 1 0 1]);
for n=2:nmax
    if (double(t(n-1)))>0 && (double(t(n-1)))<=2/3         % 0 <= x <= (2/3)
            t(n)=sym((3/2)*t(n-1));                        % x(t) = (3/2) * x(t-1)
        else
            if (double(t(n-1)))<1                          % else (2/3) <= x <= 1
                t(n)=sym(3*(1-t(n-1)));                    % x(t) = 3* (1-x(t-1))
            end
    end
end



for n=1:halfm
    t1(2*n-1)=t(n);
    t1(2*n)=t(n);
end


t2(1)=0;t2(2)=double(t(2));
for n=2:halfm
    t2(2*n-1)=double(t(n));
    t2(2*n)=double(t(n+1));
end

hold on
fsize=20;
plot(double(t1),double(t2),'r');


x=[0 (2/3) 1];y=[0 mu/2 0];
plot(x,y,'b');

以下蛛网图用于t(1)= 0.2001 enter image description here

4 个答案:

答案 0 :(得分:8)

这些只是解决问题的一些见解。我现在继续使用Mathematica,因为它更方便(根据上面的代码判断,你应该能够在MATLAB中管理它,如果没有,我会尝试转换它)。但是,如果您有Mathematica,并且可以测试这些将是很好的。

固定点:函数f(x)的固定点是f(x)=x的解的一个点;换句话说,函数将其映射到自身的点。

解决您的功能,您将x=0x=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}] 

固定点的性质

让我们看看固定点的性质。如果它是一个吸引子,那么在固定点的任意小的epsilon大小的邻域中的点停留在类似大小的邻域中(不一定是完全相同的大小),并且如果它是一个驱逐者,则它被排斥并且分散到邻域外的一个完全任意点(我的定义在这里很松散,但猜测会这样做)。

所以尝试以下

eps = 10^-16;
CobwebDiagram[0.75 + eps, 200]

我们得到了

图。 (1)

enter image description here

当然看起来并没有收敛到固定点。实际上,如果你看一下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}]]

图。 (2)

enter image description here

如果你在另一个方向扰动它,结果是相似的,即f[1]=0.75-eps

对于另一个固定点(这次,它只能在一个方向上被扰动,因为函数是为x>=0定义的),你会看到行为是相同的,因此两个固定点似乎是分歧的。

图。 (3)

enter image description here

图。 (4)

enter image description here

现在考虑起点x[1]=18/25

CobwebDiagram[18/25, 200] 

图。 (5)

enter image description here

哇!!这看起来像limit cycle

限制周期:限制周期是系统的闭合轨迹,即使是t->Infinity,也不可能到达不在轨迹上的点。因此,当您查看x[t]时,您会看到类似

的内容

图。 (6)

enter image description here

重复只有3分(图像压缩会产生Moiré pattern,但实际上,如果你为一小部分步骤绘制它,你会看到3分。我太困了,不能去回来并重新绘制它)。这三点是12/2518/2521/25。从这三点中的任何一点开始都将带您进入相同的限制周期。

现在,如果足够接近极限周期的轨迹收敛到它,则它是一个吸引/稳定极限环,否则它是一个排斥/不稳定极限环。因此eps在任何一个方向都如此扰乱,我们看到轨迹发散(我只是在下面显示+ ve方向)。

图。 (7)

enter image description here

图。 (8)

enter image description here

有趣的是,从x[1]=19/25开始,在下一步中将其映射到18/25,然后在极限循环轨迹中无限期地继续。很容易理解为什么会发生这种情况,因为从19/25y=x的行只是从12/25y=x的行的延续(即,从第一行开始)一部分功能)。按照相同的逻辑,应该有与18/2521/25相对应的点,但我现在不会找到它们。鉴于此,我不确定这里的限制周期是否真正吸引或排斥(根据限制周期的严格定义,只需要一个其他轨迹螺旋进入它,我们'我找到了三个!也许有人对此有更多了解可能会对此产生影响)。

更多想法

起点1/2也很有趣,因为它会在下一步中将你带到3/4,这是一个固定的点,因此永远留在那里。同样,点2/3会将您带到0处的另一个固定点。

CobwebDiagram[1/2, 200]

图。 (9)

enter image description here

CobwebDiagram[2/3, 200]

图。 (10)

enter image description here

振荡的行为也告诉你一些关于系统的事情。如果你看一下图中的轨迹。 (2,4),对于固定点0,系统需要更长时间才能进入混乱状态。此外,在两个图中,当轨迹接近0时,恢复所需的时间比3/4更快,在{{1}}处,它只是快速地四处颤动。这些看起来类似于弛豫振荡(想想电容器充电缓慢并通过短路瞬间放电)。

这就是我现在所能想到的。最后,我认为固定点的确切性质必须在Lyapunov stability的一般设置中进行分析,但我不打算这样做。我希望这个答案给你一些选择。

答案 1 :(得分:7)

为了让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]]]}]]

enter image description here

答案 2 :(得分:3)

不知何故,当我第一次看到它时,我认为这是一个功课问题,OP对Yoda的答案的回应验证了这一点。提问作业问题并不一定是错的,但它当然应该清楚地标明。 meta上的这个链接有一些合理的家庭作业政策: https://meta.stackexchange.com/questions/18242/what-is-the-policy-here-on-homework

考虑到“没有家庭作业解决方案;欢迎推动”的政策,我将在迄今为止提供的解决方案讨论中添加一条评论。检查f的迭代图。我的意思是f(f(x)),f(f(f(x)))等的图。例如,f(x)= x ^ 2的第三个迭代是f(f(f(f) X)))= X ^ 8。 f的第n次迭代的图和线y = x之间的交点包括n阶(和更多)的周期轨道。检查这些图片,应该很清楚,有很多令人厌恶的轨道。

对动态进行完全分类的正确方法是使用符号动态,您的课程可能会或可能不会涵盖。

答案 3 :(得分:1)

我不知道CobwebDiagram的哪个部分提前出现,哪个部分出现在后面。我还没有找到真正有效的颜色功能,但沿着这些方面可能会有改进:

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]

您可以使用上面的RandomChoice试验颜色,或者可能是一个不错的选择

colorName="CMYKColors"