MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [MATLAB数学相关] 分段的常微分方程怎么去求解? (https://www.labfans.com/bbs/showthread.php?t=10215)

zlwr454 2009-11-17 13:37

分段的常微分方程怎么去求解?
 
问题大概是这样的:
V2=60;V0=30;Q0=720;Q6=216;Q1=936;Q4=1080; T=4;f=1/2;m=fix(t/T);Vmax=V0+(Q1/24)*(T/4);
mT+T/4 <=t<= T/2+mT时, Q12=Q1 ,其他时间 Q12=0
mT+T/2 <=t<= 3*T/4+mT时,Q42=Q4,其他时间 Q42=0
mT+T/2 <=t<= 3*T/4+mT时,Q22=24*(((Q4/24)*(T/4)+(Vmax-V2))/(T/4)); 其他时间 Q22=0
mT+T <=t<= 5*T/4+mT时, Qe2=24*((f*V2)/(T/4));其他时间 Qe2=0

求这个一介常微分方程:
y'=(Q12+Q42-Q22-Qe2)/24; tspan=[0 20] ;y0=60

(m=fix(t/T)为用于取整的)

我自己写了个常微分方程主程序函数,但是得出结果图形感觉不太对 。
function dydt=VVTY(t,y)
V2=60;V0=30;Q0=720;Q6=216;Q1=936;Q4=1080; T=4;f=1/2;m=fix(t/T);Vmax=V0+(Q1/24)*(T/4);
if t>=T/4+m*T&&t<=T/2+m*T
Q12=Q1;
else
Q12=0;
end

if t>=T/2+m*T&&t<=3*T/4+m*T
Q22=24*(((Q4/24)*(T/4)+(Vmax-V2))/(T/4));
else
Q22=0;
end

if t>=T/2+m*T&&t<=3*T/4+m*T
Q42=Q4;
else
Q42=0;
end

if t>=T+m*T&&t<=5*T/4+m*T
Qe2=24*((f*V2)/(T/4));
else
Qe2=0;
end
dydt=(Q12+Q42-Q22-Qe2)/24;


tspan=[0 20];yo=30;
[t,y]=ode23(@VVTY,tspan,yo);
plot(t,y,'--')
size(t)

麻烦大家看下分段的常微分方程能否如此的解决,谢谢!

laosam280 2009-11-22 14:13

回复: 分段的常微分方程怎么去求解?
 
分段的就是分段处理,你的函数好像没有问题,但是你是怎么求解的,求解的结果是什么样子


所有时间均为北京时间。现在的时间是 14:02

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.