柏莱 发表于 2007-11-6 09:08

请教一个微分方程组求解的问题

我想求一个四元一阶的微分方程,但我需要改变积分步长,试着改了一下,不行.是不是方法不对?请高手指点!
下面是我的程序:
function xdot=rossler1(t,x,flag,a,b,c,d)
xdot=[-x(2)-x(3);
    x(1)+a*x(2)+x(4);
    b+x(1)*x(3);
    c*x(4)-d*x(3)];

function data=rossler(length)
a=0.25;
b=3.0;
c=0.05;
d=0.5;          %a,b,c,d为Rossler-hyperchaos的四个参数
h=0.1;         %h为积分时间步长
k1=100;         %k1为前面迭代的点数

t_final=(k1+length)*h;         %t_final为积分的终点时刻

options=odeset;
options.MaxStep=h;             %将求解方程最大允许的步长设置为h

x0=;            %初始值

=ode45('rossler1',,x0,options,a,b,c,d);
plot(t,x);
data=x(k1+1:end,1)';

柏莱 发表于 2007-11-6 09:10

而且好像得到的结果的组数都不稳定,与初始值关系比较大,这又是怎么回事?

octopussheng 发表于 2007-11-6 19:29

k1设置的有点小了,数据计算的还不够长吧,你的结果此时应该还没有达到稳定哦!呵呵!

柏莱 发表于 2007-11-6 21:13

我开始也设得很大,但就这样,当length长度为100时,得到的数据居然上了三万多组,而且积分步长大约是0.008左右,百思不得其解呀!
反正这样修改积分步长好像无效呀!

octopussheng 发表于 2007-11-6 21:41

修改步长无效?
你的在=ode45('rossler1',,x0,options,a,b,c,d);
这句话里面设置的是变步长的,如果要定步长,必须
t0——起始时间
dt——步长
tf——终了时间
这样才对哈!

柏莱 发表于 2007-11-8 09:04

是这样的吗?我试试看,谢谢!!!

柏莱 发表于 2007-11-10 00:22

我改了改程序后,发现运行的特别慢,不知何故?有什么方法可以解决?程序的主体与一楼无异!!!

咕噜噜 发表于 2007-11-10 08:11

程序特别慢可能是步长的原因,有可能是你积分步长太小,而积分时间又很长

octopussheng 发表于 2007-11-10 08:34

:@L
也有可能是方程本身的问题,有可能解不出来的啊!
我以前就遇到过,求解了1周都没有结果,然后自己结束掉了!

柏莱 发表于 2007-11-12 19:23

方程一定是可求解的,这是个rossler-hyperchaos系统!积分步长取0.1也不是很小了,太大怕不合需求!

octopussheng 发表于 2007-11-14 08:16

柏莱,解出来了没有哈?

柏莱 发表于 2007-11-14 09:58

小数据量时可解出,但我要的数据太多,程序太慢。我现在专门用一台机子跑它,已经两天还没出来!

octopussheng 发表于 2007-11-15 18:42

回复 #12 柏莱 的帖子

这样的话我觉得可能会存在一定的问题了!也不会这么慢的吧!

柏莱 发表于 2007-11-19 10:24

我想也是,但不知道问题在哪儿呀!

octopussheng 发表于 2007-11-19 12:43

回复 #14 柏莱 的帖子

可以尝试将a、b、c、d中的一个参数赋0,试试看能不能算!
页: [1] 2
查看完整版本: 请教一个微分方程组求解的问题