Matlab:相空间图

时间:2015-05-03 23:01:42

标签: matlab discrete-space

我是混乱和非线性动力学的初学者。我试图用Matlab绘制Tent Map的相空间图。相空间图是其独立变量的图。因此,如果一个系统有一个变量,那么它将是前一个与下一个值的关系图。情节的轮廓类似于帐篷地图,但我得到了几条交叉线。相空间图应该看起来像一个三角形(因此名称Tent)在0和1之间。如果参数是mu,则最高值应为mu / 2。正确的相空间图应为

enter image description here

我也尝试过其他离散地图并获得类似的线条。然而,在书籍和所有书籍中,我看到了一条没有线条的干净曲线。我哪里错了?此外,绘图不是从X轴的零开始。本课题也是从编程和概念的角度出发的。我不知道如何获得维基百科中给出的图中显示的x[n] vs x[n-1]图。

Tent map

以下是Tent地图的Matlab代码,其中参数为mu = 2

N = 256;
x(1) = rand();  % Initial condition

for j=2:N
    if (double(x(j-1)))>0 && (double(x(j-1)))<0.5        
        x(j)=2*x(j-1);                        
    elseif (double(x(j-1)))>=0.5                          
        x(j)=2*(1-x(j-1));                    
    end
end

for k = 2:N
    next(k) = x(k-1);
end

plot(next,x)

2 个答案:

答案 0 :(得分:3)

您的代码中存在几个问题。首先,你的条件过于复杂,并且不需要向double投射内容,因为这是Matlab的默认数据类型。这是计算循环的清理代码:

for j = 2 : N
    if x(j - 1) < 0.5        
        x(j) = 2 * x(j - 1);                        
    else  
        x(j) = 2 * (1 - x(j - 1));                    
    end
end

使用维基百科页面中给出的公式可以使这更简单:

for j = 2 : N
    x(j) = 2 * min(x(j - 1), 1 - x(j - 1));
end

其次,默认情况下,一个简单的plot命令按行连接点;这不是你想要的。此外,计算next的额外循环是不必要的。只需使用Matlab的vector generationindexing功能:

plot(x(1 : end - 1), x(2 : end), '.')
axis equal
axis([0 1 0 1])

你得到了

这可能仍然不是你所期望的:完整的帐篷地图。那是因为你所计算的不是地图本身,而是由地图控制的轨迹,它由你指定的256个点组成。并非{0,1}中x的所有可能值都可以在这256个步骤中出现,因此您只需在地图上获得几个

如果您不想在地图上获取积分,但想要获取帐篷地图本身的图表,请执行以下操作:

x = 0 :0.01: 1;
plot(x, 2 * min(x, 1 - x))
axis equal
axis([0 1 0 1])

请注意,这不是standard sense中的相位图,它是系统状态随时间变化的图,也不是phase portrait,它描述了相空间的结构(并且不是真的适用于地图)。

答案 1 :(得分:1)

我通过两个简单的更改执行了您的代码,一个clear all在开头,disp([j-1 x(j-1)]);在for循环中。以下是我输出的最后一部分。

52.0000    0.7500
53.0000    0.5000
54     1
55     0
Attempted to access x(56); index out of bounds because numel(x)=55.
Error in phaseSpacePlot (line 10)
    disp([j-1 x(j-1)]);

现在很容易理解。如果未定义double(x(j-1)))<=0,则if if if else条件规则。因此,当条件满足时,循环结束。我将= sign添加到您的if条件为if (double(x(j-1)))>=0 && (double(x(j-1)))<0.5,并得到以下图表。代码现在有效,但我不确定它在数学上是否正确。

enter image description here