这里我们以如下SIVRS传染病动力学模型为例,其动力学方程如下所示:
(模型的详细介绍可参考几种经典病毒动力学模型【基于matlab的动力学模型学习笔记_3】_L1234X的博客-CSDN博客)
计算此动力学模型的matlab程序为:
%求特征方程
syms x1 x2 x3 x4 y%定义特征值
x=[x1,x2,x3,x4]
N=1;
a=0.6;%易感者转为感染者系数(感染系数)
b=0.8;%感染者转为免疫者系数(康复系数)
c=0.1;%感染者内部变异
d=0.1;%感染者外部变异
e=0.05;%死亡系数
h=0.2;%免疫者转化为易感者概率
g=0.05;%初始出生率
k=2;%网络平均度(每个个体平均接触其它个体数)
f1=[g*N-a*k*x1*x2+h*x4-e*x1,a*k*x1*x2-d*k*x2*x3-(c+b+e)*x2,d*k*x2*x3+c*x2-e*x3,b*x2-h*x4-e*x4]%定义函数,以矩阵形式展示
j=jacobian(f1,x)%计算雅可比矩阵
n=[1 1 1 1];%构造单位向量
D=y*diag(n)-j%构造得特征矩阵
m=det(D)%计算特征矩阵的值
k=collect(m,y)%得特征方程
计算结果为:
特征矩阵:
特征矩阵值、特征方程结果略(由于含较多字符,结果较复杂,这里就不做过多展示)
补充:
1.特征矩阵由雅可比矩阵构造而来
2.collect函数用于合并同类项(将x1、x2、x3、x3逐项合并)
3.雅可比函数的求解可参考(1条消息) 未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘jacobian‘【matlab问题集_01】_L1234X的博客-CSDN博客