kangarooli 发表于 2011-3-14 17:06

关于用频闪法画分岔图的一点疑问

我用频闪法画系统分岔图,程序如下
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;
=ode45('controlmoxing',0:T/100:200*T,,[],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的维数,请问这是怎么回事呢,是因为参数选取的问题吗,还请各位指教

octopussheng 发表于 2011-3-14 19:45

这是参数的问题,数值积分不收敛了!

kangarooli 发表于 2011-3-15 10:25

回复 2 # octopussheng 的帖子

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

gghhjj 发表于 2011-3-15 16:11

kangarooli 发表于 2011-3-15 10:25 static/image/common/back.gif
回复 2 # octopussheng 的帖子

不收敛是什么意思啊,是参数不合理ode45求解过程中出现了问题吗,但是我画状 ...

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