matlab求解微分方程组dy(1)/dt=(e12-y(1)/c13)/r6-A0*y(3)/I16-(y(1)/c13-y(2)/c14)/r8dy(2)/dt=(y(1)/c13-y(2)/c14)/r8+y(3)/(A0*I16)-(y(2)/c14-e15)/r9dy(2)/dt=A0*y(1)/c13-r7*y(3)/I16-Sf-y(1)/(A0*c13)其中:e12=20e6;c13=1.7e-6;c14=1.7e-6;c15=4.4e-6;I
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 08:38:54
matlab求解微分方程组dy(1)/dt=(e12-y(1)/c13)/r6-A0*y(3)/I16-(y(1)/c13-y(2)/c14)/r8dy(2)/dt=(y(1)/c13-y(2)/c14)/r8+y(3)/(A0*I16)-(y(2)/c14-e15)/r9dy(2)/dt=A0*y(1)/c13-r7*y(3)/I16-Sf-y(1)/(A0*c13)其中:e12=20e6;c13=1.7e-6;c14=1.7e-6;c15=4.4e-6;I
matlab求解微分方程组
dy(1)/dt=(e12-y(1)/c13)/r6-A0*y(3)/I16-(y(1)/c13-y(2)/c14)/r8
dy(2)/dt=(y(1)/c13-y(2)/c14)/r8+y(3)/(A0*I16)-(y(2)/c14-e15)/r9
dy(2)/dt=A0*y(1)/c13-r7*y(3)/I16-Sf-y(1)/(A0*c13)
其中:e12=20e6;c13=1.7e-6;c14=1.7e-6;c15=4.4e-6;I16=202.8;
r6=11.5e-6; r7=5e-6; r8=3e-6; r9=12.5e-6;A0=0.049
初始条件:y0=[0;0.049;15e6]
麻烦给出具体的程序,万分感激!这是我论文的一个仿真,但是搞了一个星期搞不出来,
我自己写的程序如下,但是进入了死循环(我是直接把已知量代到方程中去了,其实不应该这样的,但是我不会搞有参数的方程)!
function ydot = lorenzeq(t,y)
ydot=[(20e6-y(1)/1.7e-6)/(11.5e-6)-0.049*y(3)/202.8-(y(1)/(1.7e-6)-y(2)/(1.7e-6))/(3e-6);
(y(1)/(1.7e-6)-y(2)/(1.7e-6))/(3e-6)+y(3)/(0.049*202.8)-(y(2)/(1.7e-6)-2e5)/(12.5e-6);
0.049*y(1)/(1.7e-6)-(5e-6)*y(3)/202.8-2e6-y(1)/(0.049*1.7e-6)]
t_final=10; y0=[0;0.049;15e6];
[t,y]=ode45('luofusheng3',[0,t_final],y0); plot(t,y)
怎样用MATLAB将微分方程组dy(1)/dt=P0-r6*y(1)/I2-y(2)/c7
dy(2)/dt=y(1)/I2-y(2)/(r4*c7)+y(3)/(r4*c8)
dy(3)/dt=y(2)/(r4*c7)-y(3)/(r4*c8)-A0*y(4)/Im
dy(4)/dt=A0*y(3)/c8-Sf-r5*Pm/Im解的表达式求解出来,请各位大侠不吝赐教给出具体步骤,小弟先行谢过了!
matlab求解微分方程组dy(1)/dt=(e12-y(1)/c13)/r6-A0*y(3)/I16-(y(1)/c13-y(2)/c14)/r8dy(2)/dt=(y(1)/c13-y(2)/c14)/r8+y(3)/(A0*I16)-(y(2)/c14-e15)/r9dy(2)/dt=A0*y(1)/c13-r7*y(3)/I16-Sf-y(1)/(A0*c13)其中:e12=20e6;c13=1.7e-6;c14=1.7e-6;c15=4.4e-6;I
程序本身没什么问题,就是算的很慢而已.你想快一点可以用ode15s、ode23s等刚性求解器.
——————————————
A=dsolve('Dy1/dt=P0-r6*y1/I2-y2/c7','Dy2/dt=y1/I2-y2/(r4*c7)+y3/(r4*c8)','Dy3/dt=y2/(r4*c7)-y3/(r4*c8)-A0*y4/Im','Dy4/dt=A0*y3/c8-Sf-r5*Pm/Im')
然后A.y1到A.y4就是解.解里含有rootof的形式,指的是里面的根,因为都是字母,所以写不出显式的根,只能这样表示.
接着楼上的继续说。原因就是“程序本身没什么问题,就是算的很慢而已。你想快一点可以用ode15s、ode23s等刚性求解器。”
对于有参数的方程,可以使用如下方法:
1、函数定义
function ydot = lorenzeq(t,y)
global a b c d %%%你的参数
%%或者直接赋值a=1,b=2..........
全部展开
接着楼上的继续说。原因就是“程序本身没什么问题,就是算的很慢而已。你想快一点可以用ode15s、ode23s等刚性求解器。”
对于有参数的方程,可以使用如下方法:
1、函数定义
function ydot = lorenzeq(t,y)
global a b c d %%%你的参数
%%或者直接赋值a=1,b=2...........
ydot=。。。。。。。。。%%你的方程就可以使用参数了。
2、命令窗口使用
global a b c d %%%你的参数
a=1;b=2....%赋值
t_final=10; y0=[0;0.049;15e6];
[t,y]=ode45('luofusheng3',[0,t_final],y0); plot(t,y)
最后建议多看看help ode45
[T,Y] = ODE45('F',TSPAN,Y0,OPTIONS,P1,P2,...) 表示函数ODE45本身也带有参数传递的功能,你只需要把其中的P1,P2,...用具体数值代替就是了
但是特别注意一下参数的顺序,以免错误
收起
用ode45
可能不是进入死循环了,是ODE45有问题,因为取点过多太慢了,可以用ODE15i试一下