马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本人初学用matlab解微分方程,现利用ode45来解一简单的方程。望大侠指教一二! :handshake :hug: function solveyyy d_1=1; %初始值 data_time=[0,1]; %时间段 Ey=2; %参数 x0=[d_1]; tspan=data_time; [t,x]=ode45(@yyydot,tspan,x0,[],Ey); figure; plot(t,x(:,1)); function dy=yyydot(t,y,Ey) i_1=y(1); dy=[Ey*i_1];
图如下,图一: 把初始值改为: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=[0:0.1:1];得图三与图一一样,而把时间改为data_time=[0,0.1,1];得图四: 把时间改为data_time=[0:0.1:1],用disp(length(x(:,1)));看了下个数为11,而对应data_time=[0,1];的为41;这是为何?
问题三:把时间改为data_time=[0:0.1:1],是因为我期望每0.1间隔求一个值,然后把每0.1求出来的值作为下一时间段的初始值,也就是一段一段求解。如何能把0—1的时间段等分,比如用[0:0.1:1],把每一个求解值代入下一个方程,我尝试写过for循环,把每次的时间段划分,然后把解出来的值赋为初始值,如:开始x0=[i_1], 然后i_1=x(num,1);num为循环个数,且递增。这里就出现了个数的问题,有的时候x(num,1)代表的不是那个值,如在t=0.1求出来的值,求助。
到底ode45具体是怎么运算得?不是一步求一解(知道前一时间点的解,求后一时间)吗?我看得书上这么介绍的。
望大侠指教一二!
[ 本帖最后由 ChaChing 于 2009-2-17 14:36 编辑 ] |