声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1969|回复: 3

[稳定性与分岔] 关于用频闪法画分岔图的一点疑问

[复制链接]
发表于 2011-3-14 17:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我用频闪法画系统分岔图,程序如下
function dy=controlmoxing(t,y,flag,c1)
w1=1.1;w2=1.2;a1=0.3;h1=0.2;g1=0.4;g2=0.5;u1=0.4;u2=0.6;beta1=0.1;beta2=0.1;c2=0.7;d1=-0.1;
d2=-0.1;omega=2.3;l1=0;l2=2.5;

dy=zeros(4,1);
dy(1)=y(2);
dy(2)=-w1^2*y(1)-a1*y(1)*cos(omega*t)+g2*y(3)...
    +u2*y(4)+beta2*y(4)^3-c1*y(2)-d1*y(2)^3-l1*y(2)-l2*y(1)^3;
dy(3)=y(4);
dy(4)=-w2^2*y(3)+g1*y(1)+h1*y(1)*cos(omega*t)...
    +u1*y(2)+beta1*y(2)^3-c2*y(4)-d2*y(4)^3;

clear;
clc;
clear all;
for c1=0:0.01:2
T=2*pi/2.3;
[t,x]=ode45('controlmoxing',0:T/100:200*T,[0.01,0.01,0.01,0.01],[],c1);
plot(c1,x(1500:100:end,1),'k.');
hold on
end
这是一个耦合的系统,按理说程序每次循环得到的x应该都是20001*4的矩阵吧,可是现在怎么得出来的是1432*4的呢,而且提示一下错误
Warning: Failure at t=3.909987e+001.  Unable to meet integration tolerances without reducing the step size below the smallest
value allowed (1.136868e-013) at time t.
> In ode45 at 371
  In fencha at 6
??? Error using ==> plot
Vectors must be the same lengths.

Error in ==> fencha at 7
plot(c1,x(1500:100:end,1),'k.');
这应该是说减小步长吧,可是我改变取样点数或c1都没什么变化,反而改变初值倒是能改变x的维数,请问这是怎么回事呢,是因为参数选取的问题吗,还请各位指教
回复
分享到:

使用道具 举报

发表于 2011-3-14 19:45 | 显示全部楼层
这是参数的问题,数值积分不收敛了!
 楼主| 发表于 2011-3-15 10:25 | 显示全部楼层
回复 2 # octopussheng 的帖子

不收敛是什么意思啊,是参数不合理ode45求解过程中出现了问题吗,但是我画状态变量的时间历程图和相图挺好的啊,达到了想要的效果,虽然也有上面的warning,这是不是说画分岔图时,c1循环过程中取某些值的时候出现了不收敛导致无解呢,是这样吗,主任
发表于 2011-3-15 16:11 | 显示全部楼层

这个问题只能说在设定的迭代次数内无法达到你所设定的精度
这个问题可以从三个角度去考虑
1. 可能是方程自身的问题或者算法的角度去查找问题,比如:可以尝试换成ode23s之类的进行求解看看是否可以消除这个问题;
2. 通过调整InitialStep,MaxStep来增加迭代次数看看是否能够消除这一问题;
3. 就是取巧的办法了,通过调整RelTol、AbsTol等设置来降低计算精度要求,已达到消除这一问题的目的(不推荐)

点评

赞成: 5.0
赞成: 5
回答很专业,谢谢你的回答  发表于 2011-3-15 18:59
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-20 23:48 , Processed in 0.056156 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表