马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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 编辑 ] |