有谁会编写MATLAB代码解ODE方程组

来源:百度知道 编辑:UC知道 时间:2024/06/20 00:55:35
有方程组: D0(t)=l(Xm(t)+Xb(t)+1);
Dm(t)=l(Xm(t)+Xb(t)+1);
和方程组: dXm/dt=D0(t)X0(t)-Dm(t)Xm(t)/(B-1);
dXb/dt=Dm(t)Xm(t)/(B-1);
其中l和B是已知参数,Xm(0)=Xb(0)=0;X0(0)=N(N已知),我知道方程可用 迭代法来解,但我不知道matlab中怎么编写代码?论文急用,望各路大虾们伸出援助的双手,非常感谢!

也想高分来
其中
X0(t)=N-Xm(t)-Xb(t);
Xm(t1+t2)=Xm(t1)+dXm/dt*t2;
Xb(t1+t2)=Xb(t1)+dXb/dt*t2;
求关于时间t和接收率D0(t)和Db(t)的图形。

QQ:281364295
若有高手敬请不吝赐教,论文需要非诚勿扰!

你的D0与Dm的表达式,好像是一样的,你最好对照一下。对照完,你改下面几处的代码就可以了。 (下午有事,晚上或明天再上来看一下)

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_rk4_njust_2007(t,x)
global N l B;
Xm=x(1);
Xb=x(2);
X0=N-Xm-Xb;

%下面两行,你得对照一下你的运算,看对不对,因为你写的是一样的东西.
D0=l*(Xm+Xb+1);
Dm=l*(Xm+Xb+1);

y=[
D0*X0-Dm*Xm/(B-1); %DXm/dt的右边项
Dm*Xm/(B-1); %DXb/dt的右边项
];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在Matlab下面输入:
global N l B;
l=1;
B=2;
N=10;

t_end=10; %时间计算的终点
x0=[0;0]; %Xm,Xb的初始值
[t,x]=ode45('zhidao_rk4_njust_2007',[0,t_end],x0); %这里计算出的x第一个分量是Xm,第二个Xb

Xm=x(:,1);
Xb=x(:,2);
%下面两行,你得对照一下你的运算,看对不对,因为你写的是一样的东西.
D0=l*(Xm+Xb+1);
Dm=l*(Xm+Xb+1);

plot(t,D0,t,Dm)
legend('D0','Dm')