这是一个流行病SIR模型的变式ODE组,自己在matlab上尝试了好多次了,由于才刚刚接触matlab,各种各样的问题,欲哭无泪,求解答!
其中希腊字母nu,mu和r,l(L小写)都是已知系数可以直接添加数据(不同下标值不一样但都是已知值),Sny,Snn,Iny,Inn,Nny,Nnn也都为已知值可代入数据。beta为感染系数,gamma为康复系数。
这是一个流行病SIR模型的变式ODE组,自己在matlab上尝试了好多次了,由于才刚刚接触matlab,各种各样的问题,欲哭无泪,求解答!
其中希腊字母nu,mu和r,l(L小写)都是已知系数可以直接添加数据(不同下标值不一样但都是已知值),Sny,Snn,Iny,Inn,Nny,Nnn也都为已知值可代入数据。beta为感染系数,gamma为康复系数。
同学,你好!我已经找到出问题的原因了,并且帮你更正了。
clear
tspan=[0,100];
y0=[9000,100,0,0,10000,100];
beta=0.375;
gamma=0.071;
l1=1;
l2=0.5;
r1=1;
r2=0.5;
[T,Y]=ode45(@(t,y)spatialSIRModel(t,y,beta,gamma,l1,l2,r1,r2),tspan,y0);%参数放函数里面
plot(T,Y(:,1),T,Y(:,2),T,Y(:,3),T,Y(:,4),T,Y(:,5),T,Y(:,6));
legend('S1','S2','I1','I2','R1','R2')
function dy=spatialSIRModel(t,y,beta,gamma,l1,l2,r1,r2)%dy为输出,t和y为输入
dy=zeros(6,1);
dy(1)=beta*y(1)*y(3)/y(6)-l2*y(1)+r2*100;
dy(2)=beta*y(2)*y(1)/y(6)+l1*10000-r1*y(2);
dy(3)=beta*10000*y(4)/y(6)-gamma*y(3)-l2*y(3)+r2*10;
dy(4)=beta*y(2)*y(4)/y(6)-gamma*y(2)-r1*y(4);
dy(5)=r2*100-l2*y(5);
dy(6)=l1*10000-r1*y(6);
end
这样就好了
图像