matlab求解常微分方程组/传染病模型并绘制SIR曲线

本文介绍了如何使用Matlab解决常微分方程组,特别是针对传染病模型,不仅绘制出S-I曲线,还特别展示了如何绘制完整的S-I-R三条曲线,详细阐述了程序实现过程及输出图像。
摘要由CSDN通过智能技术生成

看了很多关于传染病模型的matlab程序,大都是绘制出两条曲线(I、S)的,本文最大的不同是绘出SIR三条曲线。

先给出SIR微分方程组

     


函数文件:

run的程序:

要求微分方程的平衡点,可以通过以下步骤使用MATLAB实现: 1. 定义微分方程的函数,例如: ```matlab function dxdt = myode(t, x) % 定义微分方程 dxdt(1) = x(2); dxdt(2) = -x(1) - x(2); % 定义平衡点 p = [0; 0]; % 计算在平衡点的导数 dpdt = [0; 0]; % 计算在平衡点的雅可比矩阵 A = [0, 1; -1, -1]; % 计算在平衡点的特征值 eig(A) end ``` 2. 使用MATLAB的`fsolve`函数求解平衡点,例如: ```matlab options = optimoptions('fsolve','Display','none'); x0 = [0; 0]; % 初始猜测 [x, fval] = fsolve(@(x) myode(0, x), x0, options); ``` 其中,`fsolve`函数的第一个参数是一个匿名函数,用于求解平衡点;第二个参数是初始猜测;第三个参数是选项,用于控制求解过程。 3. 输出平衡点和特征值,例如: ```matlab disp(['平衡点:(', num2str(x(1)), ', ', num2str(x(2)), ')']); disp(['特征值:', num2str(eig(A))]); ``` 完整代码示例: ```matlab function dxdt = myode(t, x) % 定义微分方程 dxdt(1) = x(2); dxdt(2) = -x(1) - x(2); % 定义平衡点 p = [0; 0]; % 计算在平衡点的导数 dpdt = [0; 0]; % 计算在平衡点的雅可比矩阵 A = [0, 1; -1, -1]; % 计算在平衡点的特征值 eig(A) end options = optimoptions('fsolve','Display','none'); x0 = [0; 0]; % 初始猜测 [x, fval] = fsolve(@(x) myode(0, x), x0, options); disp(['平衡点:(', num2str(x(1)), ', ', num2str(x(2)), ')']); disp(['特征值:', num2str(eig(A))]); ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值