kangarooli 发表于 2010-8-13 09:52

大家帮忙给看看这分岔程序

最近做分岔,解微分方程,总是出问题,各位帮忙给看看,指点一下
原系统是这样的
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/2AYXH8$IC8PJ3~{UU{RJ(EP.jpg

程序如下:
function v=yuanxitong(t,x)
%参数取值
g1=9;g2=2;d1=4;d2=3;beta1=4;beta2=7;h1=5;h2=-6;
f2=4;c1=7;c2=5;b1=8;b2=9;l1=9;l2=-7;a2=10;
w2=1;u1=6;u2=5;
a1=-22.9126;   %bifurcation point is a1
w1=0;f1=0;
omega1=sqrt(-44.24268);
omega2=sqrt(-3.33333);
omega=2;

v=zeros(4,1);
v(1)=x(2);
v(2)=-omega1^2*x(1)-a1*x(1)*cos(omega*t)-b1*x(1)*sin(omega*t)+g2*x(3)+h2*x(3)*cos(omega*t)...
    +l2*x(3)*sin(omega*t)+u2*x(4)+beta2*x(4)^3-c1*x(2)-d1*x(2)^3+f1*cos(w1*t);
v(3)=x(4);
v(4)=-omega2^2*x(3)-a2*x(3)*cos(omega*t)-b2*x(3)*sin(omega*t)+g1*x(1)+h1*x(1)*cos(omega*t)...
    +l1*x(1)*sin(omega*t)+u1*x(2)+beta1*x(2)^3-c2*x(4)-d2*x(4)^3+f2*cos(w2*t);

clc
clear all

=ode45(@yuanxitong,,);

figure(1)
plot(x(1,:),x(2,:));
figure(2)
plot(t,x(1,:));   
由于刚做这东西,好多还不明白,高手给运行看看,谢谢

[ 本帖最后由 kangarooli 于 2010-8-13 16:35 编辑 ]

hsfy919 发表于 2010-8-13 10:21

回复 楼主 kangarooli 的帖子

sol=ode45(@yuanxitong,,,);   语法是不是有问题啊,那个表示什么
另外你这个是分岔程序吗?感觉你是想解相图和时间序列

kangarooli 发表于 2010-8-13 10:42

回复 沙发 hsfy919 的帖子

这应该是一系列时间取值吧,我也不是很明白,这个值是我随便取得,你说得对,我是想解相图

kangarooli 发表于 2010-8-13 15:51

回复 楼主 kangarooli 的帖子

程序运行老是提示如下
Warning: Failure at t=1.132377e-001.Unable to meet integration tolerances without reducing the step size below the smallest value allowed (2.220446e-016) at time t.
> In ode45 at 355
In fenchatu at 3

[ 本帖最后由 kangarooli 于 2010-8-13 16:17 编辑 ]

hsfy919 发表于 2010-8-13 16:23

建议你把后面那段改成下面的程序试试
clc
clear all

=ode45(@yuanxitong,,,[]);

figure(1)
plot(x(:,1),x(:,2));
figure(2)
plot(t,x(:,2));


另外请你仔细检查一下你的方程,包括参数设置,为什么你定义了b2,sigma1,sigma2,但在方程里都没出现,至于你所得那个警告我估计是和你方程参数有关

kangarooli 发表于 2010-8-13 16:43

回复 5楼 hsfy919 的帖子

谢谢,是我写错了,不过改过来还是不行

hsfy919 发表于 2010-8-13 16:48

回复 6楼 kangarooli 的帖子

如果你想画相图,那我给你改过的程序模式应该没问题,你可以调试积分时间和初值,如果还是不行,我个人觉得你就应该从方程入手了,比如方程参数是否合理,模型是否符合实际等等

kangarooli 发表于 2010-8-13 17:15

回复 7楼 hsfy919 的帖子

虽然还没得到想要的,但现在有东西了,不过我有点不明白,问什么改成x(:,1)的形式呢,这跟x(1,:)有什么意义

[ 本帖最后由 kangarooli 于 2010-8-13 17:17 编辑 ]

hsfy919 发表于 2010-8-13 22:49

回复 8楼 kangarooli 的帖子

x(:,1)表示矩阵x的第一列,x(1,:)表示矩阵x的第一行
常微分积分出来的x是列向量

dichongli1985 发表于 2010-10-18 09:12

回复 hsfy919 的帖子

是的,有时候时间取到个别值不满足

Vickyvictoria 发表于 2010-10-19 11:22

本帖最后由 Vickyvictoria 于 2010-10-19 11:23 编辑

Warning: Failure at t=1.378812e+000.Unable to meet integration tolerances
without reducing the step size below the smallest value allowed (3.552714e-015)
at time t.

从运行的情况来看,你的程序根本就没有求解成功
根据上面的提示来分析,要嘛是你的方程太特殊,要嘛是你的方程有问题
总之是用ode45无法得到收敛解
页: [1]
查看完整版本: 大家帮忙给看看这分岔程序