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

从零到一:用Python+微分方程模拟传染病传播(以SIR模型为例)

从零到一用Python微分方程模拟传染病传播以SIR模型为例在公共卫生领域传染病传播模型一直是预测疫情发展趋势的重要工具。SIR模型作为经典的传染病动力学模型通过微分方程组描述了易感者(S)、感染者(I)和康复者(R)三类人群的动态变化。本文将带你从零开始用Python实现SIR模型的数值求解与可视化让你不仅能理解模型背后的数学原理还能通过代码直观地观察不同参数下疫情发展的趋势。1. 环境准备与模型基础在开始编码之前我们需要先理解SIR模型的基本假设和数学表达。SIR模型将人群分为三类易感者(Susceptible)可能被感染的健康人群感染者(Infectious)已经感染并具有传染性的人群康复者(Recovered)已经康复并获得免疫力的人群模型的基本微分方程组如下ds/dt -β * s * i di/dt β * s * i - γ * i dr/dt γ * i其中β(感染率) λ(接触率) × p(传染概率)γ(康复率) 1/传染期s, i, r分别表示三类人群占总人口的比例(s i r 1)要运行本文的代码示例需要安装以下Python库pip install numpy scipy matplotlib2. 构建SIR模型的微分方程系统我们将使用SciPy库中的odeint函数来求解这个微分方程组。首先定义模型方程import numpy as np from scipy.integrate import odeint def sir_model(y, t, beta, gamma): s, i, r y dsdt -beta * s * i didt beta * s * i - gamma * i drdt gamma * i return [dsdt, didt, drdt]这里我们创建了一个sir_model函数它接受当前状态y(包含s,i,r值)、时间t和参数beta、gamma返回微分方程组的导数。提示在定义微分方程时参数的顺序必须与odeint要求的顺序一致即先状态变量再时间最后是其他参数。3. 设置初始条件与参数接下来我们需要设置模拟的初始条件和参数值# 初始条件假设总人口为1比例表示 s0 0.99 # 初始易感者比例 i0 0.01 # 初始感染者比例 r0 0.0 # 初始康复者比例 y0 [s0, i0, r0] # 模型参数 beta 0.3 # 感染率 gamma 0.1 # 康复率 # 时间点单位天 t np.linspace(0, 200, 200)参数的选择对模型行为有重要影响参数典型范围含义影响因素β0.1-0.5感染率接触频率、传染概率γ0.05-0.2康复率疾病持续时间4. 求解微分方程并可视化现在我们可以求解微分方程并绘制结果了# 求解微分方程 solution odeint(sir_model, y0, t, args(beta, gamma)) s, i, r solution.T # 绘制结果 import matplotlib.pyplot as plt plt.figure(figsize(10,6)) plt.plot(t, s, labelSusceptible) plt.plot(t, i, labelInfected) plt.plot(t, r, labelRecovered) plt.xlabel(Days) plt.ylabel(Proportion of Population) plt.title(SIR Model Simulation) plt.legend() plt.grid() plt.show()运行这段代码你将看到经典的SIR模型曲线图展示了三类人群随时间的变化趋势。5. 参数敏感性分析理解参数如何影响模型行为至关重要。我们可以创建一组不同参数的模拟进行比较# 定义不同参数组合 param_sets [ {beta: 0.2, gamma: 0.1, color: blue, label: Low spread}, {beta: 0.3, gamma: 0.1, color: green, label: Moderate spread}, {beta: 0.4, gamma: 0.1, color: red, label: High spread} ] plt.figure(figsize(12,8)) for params in param_sets: sol odeint(sir_model, y0, t, args(params[beta], params[gamma])) plt.plot(t, sol[:,1], colorparams[color], labelf{params[label]} (β{params[beta]})) plt.xlabel(Days) plt.ylabel(Infected Proportion) plt.title(Infection Curves with Different β Values) plt.legend() plt.grid() plt.show()这个分析展示了感染率β如何影响疫情发展β值越大感染峰值越高且来得越早β值越小疫情发展越平缓基本再生数R0β/γ决定疫情是否会爆发6. 模型扩展与实际应用基础SIR模型可以进一步扩展以适应更复杂的场景。以下是几个常见的扩展方向加入出生和死亡率def sir_birth_death(y, t, beta, gamma, mu): s, i, r y dsdt mu - beta*s*i - mu*s didt beta*s*i - gamma*i - mu*i drdt gamma*i - mu*r return [dsdt, didt, drdt]加入疫苗接种def sir_vaccination(y, t, beta, gamma, p): s, i, r y dsdt -beta*s*i - p*s didt beta*s*i - gamma*i drdt gamma*i p*s return [dsdt, didt, drdt]拟合实际数据 可以使用scipy.optimize.curve_fit来估计模型参数from scipy.optimize import curve_fit def fit_sir(params, t, beta, gamma): return odeint(sir_model, params[0:3], t, args(beta, gamma))[:,1] # 假设real_data是实际感染数据 popt, pcov curve_fit(fit_sir, t, real_data, p0[0.99,0.01,0.0,0.3,0.1])注意在实际应用中模型参数需要通过流行病学数据估计不同疾病的参数差异可能很大。7. 交互式模拟与参数探索为了更直观地理解参数影响我们可以创建一个交互式模拟from ipywidgets import interact def plot_sir_interactive(beta0.3, gamma0.1, s00.99, i00.01): y0 [s0, i0, 1-s0-i0] sol odeint(sir_model, y0, t, args(beta, gamma)) plt.figure(figsize(10,6)) plt.plot(t, sol[:,0], labelSusceptible) plt.plot(t, sol[:,1], labelInfected) plt.plot(t, sol[:,2], labelRecovered) plt.ylim(0,1) plt.legend() plt.show() interact(plot_sir_interactive, beta(0.1,0.5,0.01), gamma(0.01,0.3,0.01), s0(0.8,0.999,0.001), i0(0.001,0.2,0.001))这个交互式工具允许你实时调整参数并观察曲线变化非常适合教学和探索性分析。8. 模型验证与局限性虽然SIR模型提供了传染病传播的有用洞见但它也有若干局限性简化假设均匀混合人群实际中存在社交网络结构常数参数实际中干预措施会改变β值忽略年龄结构、空间因素等验证方法比较模型预测与实际疫情数据进行参数敏感性分析使用AIC/BIC等准则比较不同模型在实际项目中我通常会先运行基础SIR模型建立直觉然后根据具体需求逐步引入更复杂的因素如潜伏期、年龄分层或空间扩散等。

相关文章:

从零到一:用Python+微分方程模拟传染病传播(以SIR模型为例)

从零到一:用Python微分方程模拟传染病传播(以SIR模型为例)在公共卫生领域,传染病传播模型一直是预测疫情发展趋势的重要工具。SIR模型作为经典的传染病动力学模型,通过微分方程组描述了易感者(S)、感染者(I)和康复者(R…...

从‘兔子’到‘钢板’:手把手教你用Open3D和Python为工业零件做‘表面体检’(附完整数据集)

从‘兔子’到‘钢板’:工业级点云缺陷检测实战指南当斯坦福大学的兔子点云模型在学术论文中反复出现时,许多工程师会产生一种错觉——似乎所有三维扫描数据都该如此干净规整。直到第一次拿到车间里沾满油污的金属件扫描结果,那些噪点、缺失和…...

如何快速为你的爱车添加自动驾驶:openpilot完整实战指南

如何快速为你的爱车添加自动驾驶:openpilot完整实战指南 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trend…...

Redux Dynamic Modules最佳实践:避免常见错误的10个技巧

Redux Dynamic Modules最佳实践:避免常见错误的10个技巧 【免费下载链接】redux-dynamic-modules Modularize Redux by dynamically loading reducers and middlewares. 项目地址: https://gitcode.com/gh_mirrors/re/redux-dynamic-modules Redux Dynamic M…...

突破2GB限制:3种高效处理大型ONNX模型的智能方案

突破2GB限制:3种高效处理大型ONNX模型的智能方案 【免费下载链接】onnx Open standard for machine learning interoperability 项目地址: https://gitcode.com/gh_mirrors/onn/onnx ONNX作为机器学习模型交换的开放标准,在实际部署中常遇到模型文…...

AI by Hand Excel:在电子表格中实现损失函数与精度评估的完整指南

AI by Hand Excel:在电子表格中实现损失函数与精度评估的完整指南 【免费下载链接】ai-by-hand-excel 项目地址: https://gitcode.com/gh_mirrors/ai/ai-by-hand-excel 你是否想过,无需编写一行代码就能深入理解人工智能算法的核心原理&#xff…...

如何快速掌握Apache Camel:企业集成模式实战指南

如何快速掌握Apache Camel:企业集成模式实战指南 【免费下载链接】camelinaction2 :camel: This project hosts the source code for the examples of the Camel in Action 2nd ed book :closed_book: written by Claus Ibsen and Jonathan Anstey. 项目地址: htt…...

告别SystemTap:为什么Linux内核开发者更偏爱ftrace?从原理到实战对比

告别SystemTap:为什么Linux内核开发者更偏爱ftrace?从原理到实战对比在Linux内核开发与性能优化领域,调试工具的选型往往决定了问题排查的效率与系统稳定性。当面对偶发的调度延迟或难以复现的内核异常时,开发人员需要在低开销、高…...

ARMv8-A架构调试机制:断点与观察点实现原理

1. AArch64调试机制概述在ARMv8-A架构中,调试功能通过硬件断点和观察点实现程序执行流的精确控制。这些机制依赖于一组专用寄存器,主要包括:断点控制寄存器(DBGBCR_EL1)断点值寄存器(DBGBVR_EL1)观察点控制寄存器(DBGWCR_EL1)观察点值寄存器(…...

Atomic Layout高级技巧:使用Query函数实现自定义媒体查询

Atomic Layout高级技巧:使用Query函数实现自定义媒体查询 【免费下载链接】atomic-layout Build declarative, responsive layouts in React using CSS Grid. 项目地址: https://gitcode.com/gh_mirrors/at/atomic-layout Atomic Layout是一个基于React的声明…...

从安装到精通:BetterTweetDeck完整使用手册(2023最新版)

从安装到精通:BetterTweetDeck完整使用手册(2023最新版) 【免费下载链接】BetterTweetDeck A browser extension to improve TweetDeck with a lot of features 项目地址: https://gitcode.com/gh_mirrors/be/BetterTweetDeck 想要提升…...

FIFA 23生涯模式终极修改指南:免费开源工具打造完美足球世界

FIFA 23生涯模式终极修改指南:免费开源工具打造完美足球世界 【免费下载链接】FIFA-23-Live-Editor FIFA 23 Live Editor 项目地址: https://gitcode.com/gh_mirrors/fi/FIFA-23-Live-Editor 还在为FIFA 23生涯模式中球员成长缓慢、转会困难而烦恼吗&#xf…...

Atomic Layout嵌套布局最佳实践:构建复杂UI系统的完整指南

Atomic Layout嵌套布局最佳实践:构建复杂UI系统的完整指南 【免费下载链接】atomic-layout Build declarative, responsive layouts in React using CSS Grid. 项目地址: https://gitcode.com/gh_mirrors/at/atomic-layout Atomic Layout是一个基于React的声…...

AhMyth短信管理器:远程读取和发送短信的终极技术指南 [特殊字符]

AhMyth短信管理器:远程读取和发送短信的终极技术指南 🚀 【免费下载链接】AhMyth Cross-Platform Android Remote Administration Tool | The only maintained version of AhMyth on github | A revival of the original repository at https://GitHub.c…...

终极Chrome画中画扩展:免费实现多任务视频观看的完整指南

终极Chrome画中画扩展:免费实现多任务视频观看的完整指南 【免费下载链接】picture-in-picture-chrome-extension 项目地址: https://gitcode.com/gh_mirrors/pi/picture-in-picture-chrome-extension 你是否曾经希望在浏览网页、处理文档或使用其他应用时&…...

StableSR vs 传统放大算法:为什么AI超分辨率效果更好?

StableSR vs 传统放大算法:为什么AI超分辨率效果更好? 【免费下载链接】sd-webui-stablesr StableSR for Stable Diffusion WebUI - Ultra High-quality Image Upscaler 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-stablesr StableSR…...

CStealer工作原理揭秘:从Discord令牌到加密货币钱包的窃取技术

CStealer工作原理揭秘:从Discord令牌到加密货币钱包的窃取技术 【免费下载链接】cstealer [BIG UPDATE] A discord token grabber, crypto wallet stealer, cookie stealer, password stealer, file stealer etc. app written in Python. 项目地址: https://gitco…...

WeTextProcessing解决方案:构建企业级多语言文本归一化与逆归一化系统

WeTextProcessing解决方案:构建企业级多语言文本归一化与逆归一化系统 【免费下载链接】WeTextProcessing Text Normalization & Inverse Text Normalization 项目地址: https://gitcode.com/gh_mirrors/we/WeTextProcessing 在当今自然语言处理&#xf…...

探索DeepPurpose预训练模型:10分钟实现SARS-CoV-3CL蛋白酶抑制剂虚拟筛选

探索DeepPurpose预训练模型:10分钟实现SARS-CoV-3CL蛋白酶抑制剂虚拟筛选 【免费下载链接】DeepPurpose A Deep Learning Toolkit for DTI, Drug Property, PPI, DDI, Protein Function Prediction (Bioinformatics) 项目地址: https://gitcode.com/gh_mirrors/de…...

Polyformer配件制作:Polycutter Lite切割器组装与使用教程

Polyformer配件制作:Polycutter Lite切割器组装与使用教程 【免费下载链接】Polyformer Polyformer is an open-source project that aims to recycle plastics into FDM filaments 项目地址: https://gitcode.com/gh_mirrors/po/Polyformer Polyformer是一个…...

3个关键维度重新定义工作价值:科学量化你的职业选择

3个关键维度重新定义工作价值:科学量化你的职业选择 【免费下载链接】worth-calculator Calculating the actual value of your job beyond just salary 项目地址: https://gitcode.com/gh_mirrors/wo/worth-calculator 你是否曾在深夜加班时思考&#xff0c…...

3步快速上手:终极AI图像增强工具Real-ESRGAN完全指南

3步快速上手:终极AI图像增强工具Real-ESRGAN完全指南 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 你是否曾经为模糊…...

AI Agent Harness Engineering 生态系统:基础设施、工具与应用层

AI Agent Harness Engineering 生态系统全解:基础设施、工具链与生产级应用落地 一、引言 钩子 你有没有过这样的经历:花了3天时间调好了一个支持多工具调用的AI Agent Demo,演示的时候能自动查订单、退运费、生成工单,效果惊艳到老板当场拍板要上线。结果真到生产环境跑…...

Akagi麻将AI助手:5分钟搭建你的实时对局分析系统,告别盲目打牌!

Akagi麻将AI助手:5分钟搭建你的实时对局分析系统,告别盲目打牌! 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majs…...

AI Agent的节能与绿色计算:优化计算资源消耗的算法与策略

AI Agent节能与绿色计算实战:从算法优化到工程落地的全栈减碳指南 摘要/引言 你有没有算过,调用一次GPT-4生成1000字的回答,消耗的电量相当于一个普通家庭LED灯亮3个小时?据国际能源署2024年发布的报告,全球数据中心的年碳排放已经达到12亿吨,占全球总碳排放的2.1%,和…...

《当下的力量》4-6章深度解读:从理论到实践,掌握临在的核心技术

《当下的力量》4-6章深度解读:从理论到实践,掌握临在的核心技术续篇:承接前三章"为什么要活在当下",这三章将告诉你"如何真正活在当下"前言 在前三章中,埃克哈特托利向我们揭示了人类痛苦的根源—…...

昇腾NPU实战:vllm-ascend深度解锁大模型推理新境界

昇腾NPU实战:vllm-ascend深度解锁大模型推理新境界 【免费下载链接】vllm-ascend Community maintained hardware plugin for vLLM on Ascend 项目地址: https://gitcode.com/gh_mirrors/vl/vllm-ascend 在AI推理加速的竞技场上,昇腾NPU正以其独特…...

如何让孩子从零开始学习Python编程?BBC micro:bit实战指南

如何让孩子从零开始学习Python编程?BBC micro:bit实战指南 【免费下载链接】Python-For-Kids A FREE comprehensive online Python development tutorial FOR KIDS utilizing an official BBC micro:bit Development Board going step-by-step into the world of Py…...

别再手动调参了!用pmdarima的auto_arima批量预测300家门店销售额,我踩过的坑都在这

批量时间序列预测实战:用auto_arima高效处理300家门店销售数据的避坑指南当面对300家连锁门店的日销售额预测需求时,传统ARIMA建模方法会迅速暴露其局限性——手动调参不仅耗时费力,还会因人为判断差异导致模型效果参差不齐。这正是为什么越来…...

别再手动拷贝了!用Debian 12 + NFSv4把远程服务器硬盘变成‘本地文件夹’(保姆级配置)

别再手动拷贝了!用Debian 12 NFSv4把远程服务器硬盘变成‘本地文件夹’(保姆级配置) 每次在服务器间传输文件都要反复敲scp命令?开发时频繁上传下载代码导致版本混乱?NFSv4协议能让你像操作本地文件夹一样直接编辑远程…...