changran 发表于 2008-12-16 13:23

编辑好的:关于用Matlab——ode45解微分方程的问题

本人初学用matlab解微分方程,现利用ode45来解一简单的方程。望大侠指教一二! :handshake :hug: function solveyyyd_1=1; %初始值data_time=; %时间段Ey=2; %参数x0=; tspan=data_time;=ode45(@yyydot,tspan,x0,[],Ey);figure; plot(t,x(:,1));function dy=yyydot(t,y,Ey)i_1=y(1); dy=;
图如下,图一:把初始值改为:d_1=0,图二;问题1:手解dx/dt=2t;,得x=t^2+C,初值t=0,x=1,有C=1,即x=t^2+1,在t=1时,应该有x=2,为何图示确约为7.389 。

对图二,手解得x=t^2,t=1时,x=1;可是为何是一条直线?
问题2:对应图一的程序中时间段改为:data_time=;得图三与图一一样,而把时间改为data_time=;得图四:把时间改为data_time=,用disp(length(x(:,1)));看了下个数为11,而对应data_time=;的为41;这是为何?
问题三:把时间改为data_time=,是因为我期望每0.1间隔求一个值,然后把每0.1求出来的值作为下一时间段的初始值,也就是一段一段求解。如何能把0—1的时间段等分,比如用,把每一个求解值代入下一个方程,我尝试写过for循环,把每次的时间段划分,然后把解出来的值赋为初始值,如:开始x0=, 然后i_1=x(num,1);num为循环个数,且递增。这里就出现了个数的问题,有的时候x(num,1)代表的不是那个值,如在t=0.1求出来的值,求助。
到底ode45具体是怎么运算得?不是一步求一解(知道前一时间点的解,求后一时间)吗?我看得书上这么介绍的。
望大侠指教一二!


[ 本帖最后由 ChaChing 于 2009-2-17 14:36 编辑 ]

sigma665 发表于 2008-12-16 16:06

回复 楼主 changran 的帖子

建议你直接贴上来,这样效果会更好点

changran 发表于 2008-12-16 20:00

怎麽贴?望高人指点啊。。。自己顶。。。。

[ 本帖最后由 ChaChing 于 2009-2-17 15:52 编辑 ]

ch_j1985 发表于 2008-12-16 21:10

回复 板凳 changran 的帖子

图片上传方法:
【发表回复】或【发表新主题】—>上传附件,浏览—>选择要上传的图片—>插入—>【发表回复】或【发表话题】

changran 发表于 2008-12-16 23:37

不知为何图片黑的。。。。
大致看看吧。。。。

changran 发表于 2008-12-17 11:51

自己顶。。。。真的急需解决。。。
有人清楚吗?回复、短消息都行。。。。。

[ 本帖最后由 ChaChing 于 2009-2-17 15:54 编辑 ]

luck999 发表于 2009-2-17 09:36

我也来看看,谢谢了

ChaChing 发表于 2009-2-17 14:41

楼主要解的函数输入差太多了!
这麽乱且没系统, 怪不得没人理!

function solveyyy
x0=1;tspan=; Ey=2; =ode45(@yyydot,tspan,x0,[],Ey); figure; plot(t,x(:,1));
x0=0;tspan=; Ey=2; =ode45(@yyydot,tspan,x0,[],Ey); figure; plot(t,x(:,1));

function dy=yyydot(t,y,Ey)
dy=Ey*t;

[ 本帖最后由 ChaChing 于 2009-2-17 14:44 编辑 ]
页: [1]
查看完整版本: 编辑好的:关于用Matlab——ode45解微分方程的问题