马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 牛小贱 于 2015-3-15 15:09 编辑
这些天都在做自治系统的poincare截面,尝试了不同的方法,可是总得不到理想的结果。现在把我的不同的思路贴出来,请高手相助。
1.采用频闪法。自治系统与非自治系统不同,非自治系统的周期可以确定,如由外激励cos(omega*t)里的omega确定,可是自治系统的周期无法确定,这里我采用频谱分析,将最大幅值的频率作为确定周期的频率,可是当系统出现混沌时,频谱分析到底应该取哪个频率来确定周期呢?取不同的周期,结果完全不一样。应该如何才合理呢?
2.利用垂直平面去截取相平面,思想类似附后程序,可是当我的方程为二维的时候,那么当我选取一个平面截取相平面图,得到的就是一些密集的点,而非一个面。附后的程序是三维的lorenz系统,当用z0=28去截取的时候,就可以得到比较好的结果。因此,我想能否像非自治系统转换为自治系统(添加维数)一样,也将我的二维系统转换为三维的呢,可是具体如何转换,是否可行呢?
下图是我利用方法2求得的图与正确图对比:
正解
附程序:
- %画 Poincare截面
- function dx = LorenzDifEqn2(t,x);
- % Lorenz系统微分方程
- % 方程如下:
- % dx = -σ*(x-y)
- % dy = -x*z+r*x-y
- % dz = x*y-b*z
- sigma = 10;
- b = 8/3;
- r = 20;
- d_x = -sigma*(x(1)-x(2));
- dy = -x(1)*x(3)+r*x(1)-x(2);
- dz = x(1)*x(2)-b*x(3);
- dx = [d_x;dy;dz];
复制代码- % Poincare_section[绘制庞加莱截面图]
- [t,x]=ode45(@LorenzDifEqn2,[0,2800],[0.1,0.1,10]);
- z0=28; % 选择z0=28这个截面
- j = 0;
- for k = 1:length(x(:,3))-1
- d1 = x(k,3)-z0;
- d2 = x(k+1,3)-z0;
- if abs(d1)<1e-8
- j = j+1;
- X1(j) = x(k,1);
- X2(j) = x(k,2);
- continue;
- end
- if sign(d1)*sign(d2)<0
- j = j+1;
- Q=polyfit([x(k,3),x(k+1,3)],[x(k,1),x(k+1,1)],1);
- X1(j)=polyval(Q,z0);
- Q=polyfit([x(k,3),x(k+1,3)],[x(k,2),x(k+1,2)],1);
- X2(j)=polyval(Q,z0);
- end
- end
- figure
- plot(X1,X2,'.');
- xlabel('x','fontsize',14);
- ylabel('dy','fontsize',14);
复制代码
|