请教一个微分方程组求解的问题
我想求一个四元一阶的微分方程,但我需要改变积分步长,试着改了一下,不行.是不是方法不对?请高手指点!下面是我的程序:
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)'; 而且好像得到的结果的组数都不稳定,与初始值关系比较大,这又是怎么回事? k1设置的有点小了,数据计算的还不够长吧,你的结果此时应该还没有达到稳定哦!呵呵! 我开始也设得很大,但就这样,当length长度为100时,得到的数据居然上了三万多组,而且积分步长大约是0.008左右,百思不得其解呀!
反正这样修改积分步长好像无效呀! 修改步长无效?
你的在=ode45('rossler1',,x0,options,a,b,c,d);
这句话里面设置的是变步长的,如果要定步长,必须
t0——起始时间
dt——步长
tf——终了时间
这样才对哈! 是这样的吗?我试试看,谢谢!!! 我改了改程序后,发现运行的特别慢,不知何故?有什么方法可以解决?程序的主体与一楼无异!!! 程序特别慢可能是步长的原因,有可能是你积分步长太小,而积分时间又很长 :@L
也有可能是方程本身的问题,有可能解不出来的啊!
我以前就遇到过,求解了1周都没有结果,然后自己结束掉了! 方程一定是可求解的,这是个rossler-hyperchaos系统!积分步长取0.1也不是很小了,太大怕不合需求! 柏莱,解出来了没有哈? 小数据量时可解出,但我要的数据太多,程序太慢。我现在专门用一台机子跑它,已经两天还没出来!
回复 #12 柏莱 的帖子
这样的话我觉得可能会存在一定的问题了!也不会这么慢的吧! 我想也是,但不知道问题在哪儿呀!回复 #14 柏莱 的帖子
可以尝试将a、b、c、d中的一个参数赋0,试试看能不能算!
页:
[1]
2