声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2146|回复: 3

[分形与混沌] 求教怎样用ode求解多个初始条件的常微方程组?

[复制链接]
发表于 2007-4-2 11:00 | 显示全部楼层 |阅读模式

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

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

x
小弟想用ODE45求解多个初始条件下的微分方程组,请问如何处理?
如:t0=0,tf=2;
tspan=[t0,tf];
Xx=[0.01;0.02;2;1]
[t,YY]=ode45('dydt2',tspan,Xx)
a00=YY(:,3)
b00=YY(:,4)
a01=YY(:,1)
b01=YY(:,2)
subplot(2,1,1),plot(a01,b01,'b','linewidth',2);hold on
subplot(2,1,2),plot(t,a00,'r','linewidth',2);hold on

function yd=dydt2(t,x)
a=250,b=0.3,st=0.2,w=1
yd=[(-a*sin(x(3)+b*sin(w*t))*sin(x(4))-2/3/st)*x(1)+a*cos(x(3)+b*sin(w*t))*cos(x(4))*x(2);
          -a*cos(x(3)+b*sin(w*t))*cos(x(4))*x(1)+(a*sin(x(3)+b*sin(w*t))*sin(x(4))-2/3/st)*x(2);
          x(1)-a*cos(x(3)+b*sin(w*t))*sin(x(4));
          x(2)+a*sin(x(3)+b*sin(w*t))*cos(x(4))]
这样只能求解一个初始条件Xx=[0.01;0.02;2;1]的情况,比如我想求解Xx=[vx;vy;x;y],vx=[0 ,1,2],vy=[1 ,1,1],x=[2,1,2],y=[1,2,3]含多个初始条件下系统的运动情况,请问应该怎么解决,我想用循环肯定是不太现实的,因为我的初始条件得一万多个,即考察某区间内一万个点经过某段时间演化后这一万个点的状态.
想改用数组的形式,把原M文件改为

function yd=dydt2(t,x)
a=100,b=0,st=0.2,w=1
yd=[(-a*sin(x(3,:)+b*sin(w*t)).*sin(x(4,:))-2/3/st).*x(1,:)+a*cos(x(3,:)+b*sin(w*t))*cos(x(4,:)).*x(2,:);
          -a*cos(x(3,:)+b*sin(w*t)).*cos(x(4,:)).*x(1,:)+(a*sin(x(3,:)+b*sin(w*t)).*sin(x(4,:))-2/3/st).*x(2,:);
          x(1,:)-a*cos(x(3,:)+b*sin(w*t)).*sin(x(4,:));
          x(2,:)+a*sin(x(3,:)+b*sin(w*t)).*cos(x(4,:))]

然后Xx=[0,1,2;1 ,1,1;2,1,2;1,2,3],但是老出错误提示:
??? Error using ==> funfun\private\odearguments
Solving DYDT1 requires an initial condition vector of length 4.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in ==> Untitled2 at 8
[t,YY]=ode45('dydt2',tspan,XY)

是不是ODE不能解决数组形式的微分组?
请问该问题如何解决?顺便再求教一下,改成数组格式后,tspan是否需要改变?画图应该如何画?
多谢高人指点,小弟感激涕零,无以为报!

[ 本帖最后由 lyxxl 于 2007-4-6 16:42 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-4-15 07:26 | 显示全部楼层
初值只能以向量的形式给出来,而不能是矩阵
换句话来说,这个问题只能用循环的形式实现
 楼主| 发表于 2007-4-15 15:34 | 显示全部楼层

哦,多谢了!

多谢了!
还有个问题,能不能再请教一下,我想如果不用循环,能不能把这个问题排列在一起求解 ,用的时间会减少吗?
比如原来的点是4维的,我把他改成400维的,每四维之间相互独立,一下求解100个点,这样会不会省时间呢?
发表于 2007-4-16 04:34 | 显示全部楼层
原帖由 lyxxl 于 2007-4-15 15:34 发表
多谢了!
还有个问题,能不能再请教一下,我想如果不用循环,能不能把这个问题排列在一起求解 ,用的时间会减少吗?
比如原来的点是4维的,我把他改成400维的,每四维之间相互独立,一下求解100个点,这样会不会省时间呢?


可以做到,但是对提高效率应该没什么作用
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-4 19:52 , Processed in 0.068293 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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