解 微分方程组
dy1/dx=M-(k2-(1-2*r)*x* Q/v)*y1+A1*y2
dy2/dx=B1*y1-B2*y2
请问:1,怎么用runge_kutta的方法求解出它在(0,1000)内的数值解。原程序怎么编?
2,请问步长能设为1吗?
3,如果不用runge_kutta的方法,用其他方法也可以。
这是我编的程序,但是画出的图很不合理,请指点一下?是不是解的思路不对,我就是用runge_kutta的方法解的。
下面是程序
k1=0.95;k2=5.0;k3=0.5
Q0=0.00005;v1=0.0251;c0=0.001;r=1;n=1
M=Q0*c0/v1;A1=k1;B2=k1+k3;c1=zeros(1,8001);c2=zeros(1,8001);c1(1,1)=20000;c2(1,1)=300000;
r1=zeros(4,201);r2=zeros(4,201);h=0.1;t=1:8001;
for i=1:h:800
A2=(k2+(1-2*r)*(i+h/2)*Q0/v1)
A22=(k2+(1-2*r)*(i+h)*Q0/v1)
r1(1,n)=M-A2*c1(n)+A1*c2(n);
r2(1,n)=A1*c1(n)-B2*c2(n);
r1(2,n)=M-A2*(c1(n)+h/2*r1(1,n))+A1*(c2(n)+h/2*r2(1,n));
r2(2,n)=A1*(c1(n)+h/2*r1(1,n))-B2*(c2(n)+h/2*r2(1,n));
r1(3,n)=M-A2*(c1(n)+h/2*r1(2,n))+A1*(c2(n)+h/2*r2(2,n));
r2(3,n)=A1*(c1(n)+h/2*r1(2,n))-B2*(c2(n)+h/2*r2(2,n));
r1(4,n)=M-A22*(c1(n)+h*r1(3,n))+A1*(c2(n)+h*r2(3,n));
r2(4,n)=A1*(c1(n)+h*r1(3,n))-B2*(c2(n)+h*r2(3,n));
c1(n+1)=c1(1,n)+h/6*(r1(1,n)+2*r1(2,n)+2*r1(3,n)+r1(4,n));
c2(n+1)=c2(1,n)+h/6*(r2(1,n)+2*r2(2,n)+2*r2(3,n)+r2(4,n));
n=n+1
end
plot(t,c1,'r+');hold on;xlabel('时间/d'),ylabel('渗滤液BOD浓度/(mg/L)') |