当前位置: 首页 > news >正文

用Python模拟疫情传播:手把手教你用微分方程实现SIS模型(附完整代码)

用Python模拟疫情传播手把手教你用微分方程实现SIS模型附完整代码在数据科学和流行病学交叉领域数学建模正成为理解复杂传播现象的核心工具。SISSusceptible-Infectious-Susceptible模型作为经典传染病框架特别适合模拟新冠等治愈后仍可能重复感染的疾病。本文将抛开繁琐的理论推导带您用Python从零构建完整的疫情传播模拟器——通过不到100行代码您将掌握微分方程求解、参数调优和动态可视化的全流程实战技能。1. 环境配置与模型原理速览1.1 快速搭建科学计算环境推荐使用Anaconda创建专属建模环境conda create -n epidemic_model python3.8 conda activate epidemic_model conda install numpy scipy matplotlib jupyter1.2 SIS模型核心机制模型将人群划分为两类动态变化的群体易感者(S)可能被感染的健康人群感染者(I)具有传播能力的患病群体关键参数对传播趋势的影响参数物理意义典型取值范围对传播的影响λ日感染率0.1-0.5值越大传播越快μ日治愈率0.05-0.2值越大疫情消退越快提示实际建模时需通过历史数据拟合确定λ和μ的精确值2. 微分方程的数值解法实现2.1 从理论公式到Python函数SIS模型的微分方程表达式def sis_model(y, t, lambda_, mu): i y[0] didt lambda_ * i * (1 - i) - mu * i return [didt]2.2 使用SciPy求解微分方程from scipy.integrate import odeint import numpy as np # 参数设置 lambda_ 0.3 # 感染率 mu 0.1 # 治愈率 i0 0.01 # 初始感染比例 t np.linspace(0, 100, 1000) # 100天内的1000个时间点 # 求解方程 solution odeint(sis_model, [i0], t, args(lambda_, mu)) infected_curve solution[:, 0]3. 动态可视化与参数分析3.1 基础疫情曲线绘制import matplotlib.pyplot as plt plt.figure(figsize(10,6)) plt.plot(t, infected_curve, r, label感染比例) plt.xlabel(时间(天)) plt.ylabel(人群比例) plt.title(SIS模型传播趋势 (λ0.3, μ0.1)) plt.legend() plt.grid() plt.show()3.2 多参数对比实验通过修改λ和μ值观察不同传播模式params_combinations [ {lambda_: 0.2, mu: 0.1, color: b, label: 温和传播}, {lambda_: 0.4, mu: 0.1, color: r, label: 快速传播}, {lambda_: 0.3, mu: 0.2, color: g, label: 强控制} ] plt.figure(figsize(12,7)) for params in params_combinations: sol odeint(sis_model, [i0], t, args(params[lambda_], params[mu])) plt.plot(t, sol[:,0], params[color], labelparams[label]) plt.xlabel(时间(天)) plt.ylabel(感染比例) plt.title(不同参数下的传播趋势对比) plt.legend() plt.grid() plt.show()典型传播模式分析指数增长期感染人数初期快速增长拐点出现易感人群减少导致传播速度下降平衡状态新增感染与治愈人数达到动态平衡4. 模型进阶与实战技巧4.1 关键指标计算计算基本再生数R0和平衡点R0 lambda_ / mu equilibrium max(0, 1 - 1/R0) print(f基本再生数R0: {R0:.2f}) print(f理论平衡点: {equilibrium:.2%})4.2 实时交互式模拟使用IPython widgets创建参数调节面板from ipywidgets import interact interact( lambda_(0.1, 0.5, 0.05), mu(0.01, 0.3, 0.01), i0(0.001, 0.2, 0.01) ) def interactive_sis(lambda_0.3, mu0.1, i00.01): sol odeint(sis_model, [i0], t, args(lambda_, mu)) plt.figure(figsize(10,6)) plt.plot(t, sol[:,0], b) plt.ylim(0, 1) plt.title(fSIS模型动态模拟 (λ{lambda_}, μ{mu})) plt.show()4.3 实际应用中的注意事项数据校准通过真实疫情数据反推参数空间因素考虑地理分布的异质性干预策略模拟隔离、疫苗接种等措施效果# 完整代码示例 def full_sis_simulation(lambda_0.3, mu0.1, i00.01, days100): t np.linspace(0, days, days*10) solution odeint(sis_model, [i0], t, args(lambda_, mu)) plt.figure(figsize(12,6)) plt.plot(t, solution[:,0], b-, linewidth2) plt.xlabel(Time (days)) plt.ylabel(Fraction Infected) plt.title(fSIS Model: λ{lambda_}, μ{mu}, Initial{i0}) plt.grid() plt.show() print(fFinal infected rate: {solution[-1,0]:.2%}) print(fPredicted equilibrium: {max(0, 1 - mu/lambda_):.2%})在多次项目实践中发现当R0接近1时模型对参数变化极为敏感。曾遇到λ仅变化0.02就导致预测结果差异超过30%的情况这提示我们在实际应用中需要高频更新参数估计。
http://www.gsyq.cn/news/1398599.html

相关文章:

  • 【Linux系统编程】进程地址空间
  • ins协议在多账号内容协同里到底起什么作用?从消息归集到任务调度一次说清—115出海收缩摆渡骨骼
  • 保姆级教程:在VMware虚拟机里从零搭建Ubuntu 20.04 + ROS Noetic + Gazebo 11无人船仿真环境
  • OpencvSharp 算子学习教案之 - Cv2.Min 重载3
  • 如何用AutoGen快速搭建Multi-Agent协作系统?实战指南
  • 别再只调sklearn了!手把手教你从零实现K-means聚类(含欧式/曼哈顿/余弦距离对比)
  • 重磅!Erupt 1.14.3 发布:多个 AI 智能体在你的后台开始“组团打工“了
  • 别再让电脑‘睡死’:深入解决Windows WOL远程唤醒失效的终极指南
  • 扫地机器人行业 企业篇-追觅科技
  • UE4开发者必看:解决Nvidia Ansel提示‘必须支持的游戏’错误,保姆级排查指南
  • 避坑指南:Unity中TrailRenderer vs LineRenderer做动态轨迹,到底该怎么选?(附性能测试数据)
  • 扫地机器人行业 企业篇-小米/米家
  • UVa 297 Quadtrees
  • 别再死磕传统变焦了!用Zemax OpticStudio手把手教你设计Alvarez自由曲面变焦镜头
  • 一文教你解决kali docker拉取镜像慢的问题,网络安全零基础入门到精通实战教程!
  • 新手小白入门SRC漏洞挖掘经验分享,网络安全零基础挖SRC漏洞干货分享,SRC 漏洞挖掘实战教程!
  • 如何优雅且暴力的针对APP有校验加密的情况做测试?网络安全零基础入门到精通实战教程!
  • 2026龙鱼灯具品牌哪个好?马印凭复合调光与赛事背书进入候选 - 广州矩阵架构科技公司
  • 有了这个 Agent Skill 之后,只需一句指令,再也不需要手动去翻找 AI 热点新闻了
  • 240L垃圾桶模具技术解析:周转箱模具制造、周转箱模具开发、周转箱注塑模具、垃圾桶塑料垃圾桶模具、垃圾桶塑料模具选择指南 - 优质品牌商家
  • 5G PDCCH盲检不再难:手把手图解CORESET与Search Space配置流程
  • 芯片性能翻倍,实际效率却停滞不前?一组真实数据告诉你真相
  • 用TensorFlow Lite Micro在Arduino上跑第一个AI模型:从模型转换到LED亮度控制
  • Unity ShaderGraph数学节点实战:用Lerp和Remap轻松实现材质渐变与动态遮罩
  • 西南及全国液态金属漆厂家综合实力排行盘点:夯土漆厂家/成都仿石漆厂家/无机涂料价格/无机涂料厂家推荐/无机涂料外墙/选择指南 - 优质品牌商家
  • 微信单向好友检测:三步识别并清理你的无效社交关系
  • 双金属堆焊耐磨管厂家评测:双金属灰水耐磨管、灰水耐磨三通、双金属复合耐磨管、合金双金属耐磨管、电厂输粉双金属耐磨管选择指南 - 优质品牌商家
  • 告别‘yum makecache失败’:openEuler ARM服务器/虚拟机yum源配置的3个关键检查点与避坑指南
  • ShaderGraph避坑指南:从导入URP到属性公开,新手最容易卡住的5个问题及解决
  • 告别Link180!ANSYS Mechanical 2020R2之后,用Cable280单元搞定绳索仿真的正确姿势