我尝试使用dde23解决延迟微分方程,但似乎我没有正确理解它,所以我写的函数有错误,我无法纠正它运行以查看输出是否正确
我无法理解如何将最后五个等式添加到程序中。我必须使用 表1参数 来解决此系统,以获得图像中的 fig 1 等输出。 / p>
这是我写的代码:
clear all;
clc;
lags=1;
sol=dde23(@eq24,lags,@eqh,[0 80]);
plot(sol.x,sol.y)
function v=eqh(t)
v=zeros(6,1);
function v=eq24(t,s,Ia,Is,R,N)
Alfa=0.1;
beta1=0.09;
beta2=0.1;
sigma1=0.3;
sigma2=0.4;
mu=0.01;
alfa=0.2;
rho=0.4;
r1=0.4;
r2=0.2;
d1=0.2;
d2=0.15;
k=0.1;
p=0.8;
tau=1;
T=4;
dsdt=Alfa-beta1*((s*Ia)/(1+sigma1*s))-beta2*((s*Is)/(1+sigma2*s))-mu*s+alfa*R;
dIadt=rho.*exp(-mu*tau).*s(((beta1.*Ia)/(1+sigma1.*s))+((beta2.*Is)/(1+sigma2.*s)))-(r1+d1+mu).*Ia;
dIsdt=(1-rho).*exp(-mu.*tau).*s(((beta1.*Ia)/(1+sigma1.*s))+((beta2.*Is)/(1+sigma2.*s)))+(1-k).*r1.*Ia-(r2+d2+mu).*Is;
dRdt=k.*r1.*Ia+r2.*Is-mu.*R-alfa.*R;
dNdt=Alfa-mu.*N-d1.*Ia-d2.*Is;
答案 0 :(得分:0)
我设法提出了正在运行的代码。但我仍然对t⁺
部分问题感到困惑。我的代码结果几乎与您提供的结果相同。我希望这可以帮助你做任何事情。
function sol = eq242
clf
global lambda beta1 beta2 sigma1 sigma2 mu alpha rho r1 r2 d1 d2 k tau
lambda=0.1;beta1=0.09;beta2=0.1;sigma1=0.3;sigma2=0.4;mu=0.01;alpha=0.2;
rho=0.4;r1=0.4;r2=0.2;d1=0.2;d2=0.15;k=0.1;
opts = ddeset('RelTol',1e-5,'AbsTol',1e-8);
sol = dde23(@eq24,tau,[1, 1, 1, 1, 1],[0, 50],opts);
figure(1)
plot(sol(1).x,sol(1).y(1,:),sol(1).x,sol(1).y(2,:),sol(1).x,sol(1).y(3,:),sol(1).x,sol(1).y(4,:),sol(1).x,sol(1).y(5,:))
function dydt=eq24(t,y,Z)
global lambda beta1 beta2 sigma1 sigma2 mu alpha rho r1 r2 d1 d2 k tau
s = y(1);
Ia = y(2);
Is = y(3);
R = y(4);
N = y(5);
slag1 = Z(1,1);
ialag2 = Z(2,1);
islag3 = Z(3,1);
dsdt=lambda-beta1*((s*Ia)/(1+sigma1*s))-beta2*((s*Is)/(1+sigma2*s))-mu*s+alpha*R;
dIadt=rho*exp(-mu*tau)*slag1*(((beta1*ialag2)/(1+sigma1*slag1))+((beta2*islag3)/(1+sigma2*slag1)))-(r1+d1+mu)*Ia;
dIsdt=(1-rho)*exp(-mu*tau)*slag1*(((beta1*ialag2)/(1+sigma1*slag1))+((beta2*islag3)/(1+sigma2*slag1)))+(1-k)*r1*Ia-(r2+d2+mu)*Is;
dRdt=k*r1*Ia+r2*Is-mu*R-alpha*R;
dNdt=lambda-mu*N-d1*Ia-d2*Is;
dydt= [dsdt; dIadt; dIsdt; dRdt; dNdt];