fty8788 发表于 2009-6-10 19:41

matlab中微分方程组求解求助

我会解非延迟的微分方程组,但现在要将其一个变量改成延迟的,求各位帮帮看看,怎么改,先谢谢了
非延迟的程序:
m文件:
function f=virus(t,x)
Uvir=420;
Kcdv=0.024;
Kva=1;
Kvi=0.002;
Kcdf=0.001;
Kvd=0.003;
Um=0.03;
Cm=1200000;
f(1)=Um*(Cm-x(1)-x(2))*x(1)/Cm-Kcdf*x(1)-Kvi*x(1)*x(3);
f(2)=Kvi*x(1)*x(3)-Kcdv*x(2);
f(3)=Uvir*x(2)-Kvd*x(3)-Kva*x(1)*x(3);
f=f(:);
matlab命令:
clear;=ode23s(@virus,,);
plot(t,x(:,1),':',t,x(:,2));
plot(t,x(:,3));
max(x(:,3))

请达人帮我改以下,f(3)=Uvir*x(2)-Kvd*x(3)-Kva*x(1)*x(3);这个方程改成这个意思:f(3)=Uvir*x(2)(t-4.5)-Kvd*x(3)-Kva*x(1)*x(3);
也就是说,那个x(2)要替换成t-4.5时刻的x(2)的值,求达人帮我改改,谢谢了
t<0时段的值和初值一样。

fty8788 发表于 2009-6-10 19:42

我自己用dde编了一个,但出现错误,程序如下:
%ddefun.m
%延迟微分方程
function dydt=ddefun(t,y,Z)
ylag = Z(:,1);
dydt=zeros(3,1);
Uvir=420;
Kcdv=0.024;
Kva=1;
Kvi=0.002;
Kcdf=0.001;
Kvd=0.003;
Um=0.03;
Cm=1200000;
dydt(1)=Um*(Cm-y(1)-y(2))*y(1)/Cm-Kcdf*y(1)-Kvi*y(1)*y(3);
dydt(2)=Kvi*y(1)*y(3)-Kcdv*y(2);
dydt(3)=Uvir*ylag(2)-Kvd*y(3)-Kva*y(1)*y(3);

sol=dde23(@ddefun,4.5,,);

Error in ==> dde23 at 413
      Z = lagvals(t1,lags,history,X,Y,YP,varargin{:});
页: [1]
查看完整版本: matlab中微分方程组求解求助