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

Bol*_*ver 6 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

我正在使用下面的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');
Run Code Online (Sandbox Code Playgroud)

以下蛛网图用于t(1)= 0.2001 在此输入图像描述

abc*_*bcd 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}}
Run Code Online (Sandbox Code Playgroud)

实际上,从这些点开始的轨迹将永远保持在这些点上.您还可以在使用时更改起点和迭代次数时以交互方式观察效果

Manipulate[
 CobwebDiagram[xstart, steps], {xstart, 0, 1, 1/1000}, {steps, 1, 200,
   1}] 
Run Code Online (Sandbox Code Playgroud)

固定点的性质

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

所以尝试以下

eps = 10^-16;
CobwebDiagram[0.75 + eps, 200]
Run Code Online (Sandbox Code Playgroud)

我们得到

图.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}]]
Run Code Online (Sandbox Code Playgroud)

图(2)

在此输入图像描述

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

对于另一个固定点(这次,它可以仅在一个方向上被扰动,因为定义了函数x>=0),你会看到行为是相同的,因此两个固定点看起来是不同的.

图(3)

在此输入图像描述

图(4)

在此输入图像描述

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

CobwebDiagram[18/25, 200] 
Run Code Online (Sandbox Code Playgroud)

图(5)

在此输入图像描述

哇!这看起来像一个限制周期!

限制周期:限制周期是系统的闭合轨迹,即使是,也不可能到达不在轨迹上的点t->Infinity.所以,当你看到它时x[t],你会看到类似的东西

图(6)

在此输入图像描述

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

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

图(7)

在此输入图像描述

图(8)

在此输入图像描述

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

更多的想法

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

CobwebDiagram[1/2, 200]
Run Code Online (Sandbox Code Playgroud)

图(9)

在此输入图像描述

CobwebDiagram[2/3, 200]
Run Code Online (Sandbox Code Playgroud)

图(10)

在此输入图像描述

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

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

  • @Boliver - 正如我在回答中指出的那样,你可以通过找到f(f(f(x))的固定点来找到周期3的点.这概括了; 例如,x = 3072/176635是周期11的点.使用符号动力学,您可以找到任意大周期的点并证明所有周期点都是合理的.如果您需要更多帮助,您应该询问具体的提示.我当然希望你澄清你的任务的性质. (2认同)

Sas*_*sha 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]]]}]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述