日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python小白的数学建模课-B2. 新冠疫情 SI模型

發(fā)布時(shí)間:2025/3/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python小白的数学建模课-B2. 新冠疫情 SI模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳染病的數(shù)學(xué)模型是數(shù)學(xué)建模中的典型問題,常見的傳染病模型有 SI、SIR、SIRS、SEIR 模型。

SI 模型是最簡單的傳染病模型,適用于只有易感者和患病者兩類人群。

我們就從 SI 模型開始吧,從模型、例程、運(yùn)行結(jié)果到模型分析,全都在這個(gè)系列中。

『Python小白的數(shù)學(xué)建模課 @ Youcans』帶你從數(shù)模小白成為國賽達(dá)人。

Python小白的數(shù)學(xué)建模課-A3.12個(gè)新冠疫情數(shù)模競賽賽題及短評(píng)
Python小白的數(shù)學(xué)建模課-B2. 新冠疫情 SI模型
Python小白的數(shù)學(xué)建模課-B3. 新冠疫情 SIS模型
Python小白的數(shù)學(xué)建模課-B4. 新冠疫情 SIR模型
Python小白的數(shù)學(xué)建模課-B5. 新冠疫情 SEIR模型
Python小白的數(shù)學(xué)建模課-B6. 新冠疫情 SEIR改進(jìn)模型



1. 前言

新冠疫情不僅嚴(yán)重影響到全球的政治和經(jīng)濟(jì),深刻和全面地影響著社會(huì)和生活的方方面面,也已經(jīng)成為數(shù)學(xué)建模競賽的背景帝。

傳染病的數(shù)學(xué)模型是數(shù)學(xué)建模中的典型問題,標(biāo)準(zhǔn)名稱是流行病的數(shù)學(xué)模型(Mathematical models of epidemic diseases)。建立傳染病的數(shù)學(xué)模型來描述傳染病的傳播過程,研究傳染病的傳播速度、空間范圍、傳播途徑、動(dòng)力學(xué)機(jī)理等問題,以指導(dǎo)對(duì)傳染病的有效地預(yù)防和控制,具有重要的現(xiàn)實(shí)意義。

不同類型傳染病的傳播具有不同的特點(diǎn),傳染病的傳播模型不是從醫(yī)學(xué)角度分析傳染病的傳播過程,而是按照傳播機(jī)理建立不同的數(shù)學(xué)模型。

首先,把傳染病流行范圍內(nèi)的人群分為 S、E、I、R 四類,具體含義如下:

  • S 類(Susceptible),易感者,指缺乏免疫能力的健康人,與感染者接觸后容易受到感染;

  • E 類(Exposed),暴露者,指接觸過感染者但暫無傳染性的人,適用于存在潛伏期的傳染病;

  • I 類(Infectious),患病者,指具有傳染性的患病者,可以傳播給 S 類成員將其變?yōu)?E 類或 I 類成員;

  • R 類(Recovered),康復(fù)者,指病愈后具有免疫力的人。如果免疫期有限,仍可以重新變?yōu)?S 類成員,進(jìn)而被感染;如果是終身免疫,則不能再變?yōu)?S類、E類或 I 類成員。

常見的傳染病模型按照傳染病類型分為 SI、SIR、SIRS、SEIR 模型等,就是由以上四類人群根據(jù)不同傳染病的特征進(jìn)行組合而產(chǎn)生的不同模型。




2. 疫情傳播 SI 模型

2.1 SI 模型的適用范圍

SI 模型適用于只有易感者和患病者兩類人群,且無法治愈的疾病,例如 T型病、僵尸。

2.2 SI 模型的假設(shè)

  • 考察地區(qū)的總?cè)藬?shù) N 不變,即不考慮生死或遷移;
  • 人群分為易感者(S類)和患病者(I類)兩類;
  • 易感者(S類)與患病者(I類)有效接觸即被感染,變?yōu)榛疾≌?#xff0c;無潛伏期、無治愈情況、無免疫力;
  • 每個(gè)患病者每天有效接觸的易感者的平均人數(shù)(日接觸數(shù))是 λ\lambdaλ,稱為日接觸率;
  • 將第 t 天時(shí) S類、I 類人群的占比記為 s(t)s(t)s(t)i(t)i(t)i(t),數(shù)量為 S(t)S(t)S(t)I(t)I(t)I(t);初始日期 t=0t=0t=0 時(shí), S類、I 類人群占比的初值為 s0s_0s0?i0i_0i0?
  • 2.3 SI 模型的微分方程


    Ndidt=NλsiN\frac{di}{dt} = N\lambda s i Ndtdi?=Nλsi
    得:
    didt=λi(1?i),i(0)=i0\frac{di}{dt} = \lambda i (1-i),\ i(0) = i_0 dtdi?=λi(1?i)?i(0)=i0?
    這是 Logistic 模型,用分離變量法可以求出其解析解為:
    i(t)=11+(1/i0?1)e?λtI(t)=Ni(t)i(t)=\frac{1}{1+(1/i_0 - 1)\ e^{-\lambda t}}\\ I(t)= N\ i(t) i(t)=1+(1/i0??1)?e?λt1?I(t)=N?i(t)



    3. SI 模型的 Python 編程

    3.1 SI 模型的解析解

    上文已經(jīng)得到 SI 模型的解析解,對(duì)此很容易通過 Python 編程實(shí)現(xiàn),詳見本文例程。

    雖然 SI 模型的解析解并不復(fù)雜,而且解的精度當(dāng)然是最好的,但我們?nèi)匀徊还膭?lì)用解析解的方法。原因在于,一是對(duì)于小白求解析解的過程相對(duì)復(fù)雜困難,而且可能出錯(cuò),二是對(duì)于更復(fù)雜的模型是沒有解析解的,即便大神也只能用數(shù)值方法求解。既然如此,不如從一開始就學(xué)習(xí)、掌握數(shù)值求解方法,熟悉數(shù)值解法的編程實(shí)現(xiàn)。

    3.2 SI 模型的數(shù)值解

    SI 模型是常微分方程初值問題,可以使用 Scipy 工具包的 scipy.integrate.odeint() 函數(shù)求數(shù)值解,具體方法可以參考前文《Python小白的數(shù)學(xué)建模課-09 微分方程模型》。

    scipy.integrate.odeint(func, y0, t, args=())

    **scipy.integrate.odeint()**是求解微分方程的具體方法,通過數(shù)值積分來求解常微分方程組。

    odeint() 的主要參數(shù):

    • func: callable(y, t, …)   導(dǎo)數(shù)函數(shù) f(y,t)f(y,t)f(y,t) ,即 y 在 t 處的導(dǎo)數(shù),以函數(shù)的形式表示
    • y0: array:  初始條件 y0y_0y0?,對(duì)于常微分方程組 y0y_0y0? 則為數(shù)組向量
    • t: array:  求解函數(shù)值對(duì)應(yīng)的時(shí)間點(diǎn)的序列。序列的第一個(gè)元素是與初始條件 y0y_0y0? 對(duì)應(yīng)的初始時(shí)間 t0t_0t0?;時(shí)間序列必須是單調(diào)遞增或單調(diào)遞減的,允許重復(fù)值。
    • args: 向?qū)?shù)函數(shù) func 傳遞參數(shù)。當(dāng)導(dǎo)數(shù)函數(shù) f(y,t,p1,p2,..)f(y,t,p1,p2,..)f(y,t,p1,p2,..) 包括可變參數(shù) p1,p2… 時(shí),通過 args =(p1,p2,…) 可以將參數(shù)p1,p2… 傳遞給導(dǎo)數(shù)函數(shù) func。

    odeint() 的返回值:

    • y: array   數(shù)組,形狀為 (len(t),len(y0),給出時(shí)間序列 t 中每個(gè)時(shí)刻的 y 值。

    odeint() 的編程步驟:

  • 導(dǎo)入 scipy、numpy、matplotlib 包;
  • 定義導(dǎo)數(shù)函數(shù) f(i,t)=λi(1?i)f(i,t)=\lambda i (1-i)f(i,t)=λi(1?i)
  • 定義初值 i0i_0i0?iii 的定義區(qū)間 [t0,t][t_0,\ t][t0?,?t]
  • 調(diào)用 odeint() 求 iii 在定義區(qū)間 [t0,t][t_0,\ t][t0?,?t] 的數(shù)值解。

  • 3.3 Python例程:SI 模型的解析解與數(shù)值解

    # 1. SI 模型,常微分非常,解析解與數(shù)值解的比較 from scipy.integrate import odeint # 導(dǎo)入 scipy.integrate 模塊 import numpy as np # 導(dǎo)入 numpy包 import matplotlib.pyplot as plt # 導(dǎo)入 matplotlib包def dy_dt(y, t, lamda, mu): # 定義導(dǎo)數(shù)函數(shù) f(y,t)dy_dt = lamda*y*(1-y) # di/dt = lamda*i*(1-i)return dy_dt# 設(shè)置模型參數(shù) number = 1e7 # 總?cè)藬?shù) lamda = 1.0 # 日接觸率, 患病者每天有效接觸的易感者的平均人數(shù) mu1 = 0.5 # 日治愈率, 每天被治愈的患病者人數(shù)占患病者總數(shù)的比例 y0 = i0 = 1e-6 # 患病者比例的初值 tEnd = 50 # 預(yù)測日期長度 t = np.arange(0.0,tEnd,1) # (start,stop,step)yAnaly = 1/(1+(1/i0-1)*np.exp(-lamda*t)) # 微分方程的解析解 yInteg = odeint(dy_dt, y0, t, args=(lamda,mu1)) # 求解微分方程初值問題 yDeriv = lamda * yInteg *(1-yInteg)# 繪圖 plt.plot(t, yAnaly, '-ob', label='analytic') plt.plot(t, yInteg, ':.r', label='numerical') plt.plot(t, yDeriv, '-g', label='dy_dt') plt.title("Comparison between analytic and numerical solutions") plt.legend(loc='right') plt.axis([0, 50, -0.1, 1.1]) plt.show()

    3.4 解析解與數(shù)值解的比較

    本圖為例程 2.3 的運(yùn)行結(jié)果,圖中對(duì)解析解(藍(lán)色)與使用 odeint() 得到的數(shù)值解(紅色)進(jìn)行比較。在該例中,無法觀察到解析解與數(shù)值解的差異,表明數(shù)值解的誤差很小。

    圖中 di/dtdi/dtdi/dt 具有最大值,最大值表示疫情增長的高潮,達(dá)到最大值后 di/dtdi/dtdi/dt 逐漸減小,但患病者比例很快增長到 100%,表明所有人都被感染成為患者。

    這是特定參數(shù)的結(jié)果,還是模型的必然趨勢(shì),需要對(duì)參數(shù)的影響進(jìn)行更詳細(xì)的研究。



    4. SI 模型參數(shù)的影響

    對(duì)于 SI 模型,只有日接觸率 λ\lambdaλ 和患病者比例的初值 i0i_0i0? 會(huì)影響模型的結(jié)果,其它參數(shù)如總?cè)藬?shù) N 并沒有影響。

    4.1 日接觸率對(duì) SI 模型的影響

    對(duì)不同日接觸率的比較表明:

  • 日接觸率越大,疫情從發(fā)生到爆發(fā)的時(shí)間越短,爆發(fā)過程的增長速度也越快。
  • 不論日接觸率多大,患病者的比例最終都會(huì)增長到 1,表明所有人都被感染成為患者。
  • 不論日接觸率多大,都具有緩慢發(fā)展、爆發(fā)、增長放緩 3 個(gè)階段,進(jìn)入爆發(fā)階段后患病者的比例急劇增長,疫情就很難控制了。

  • 4.2 患病者比例的初值對(duì) SI 模型的影響

    對(duì)患病者比例初值的比較表明,患病者初值的人數(shù)或比例只影響疫情爆發(fā)期到來的快慢,對(duì)疫情傳播的過程和結(jié)果幾乎沒有影響。

    這與我們直觀的經(jīng)驗(yàn)不太一致,一個(gè)原因是 SI 模型本身存在不足,另一方面也說明如果對(duì)傳染病不加控制,即使開始患病人數(shù)很少,經(jīng)過一段時(shí)間的傳播后也終將會(huì)引起爆發(fā)。

    4.3 SI 模型結(jié)果討論

  • i(t)=0.5,I(t)=N/2i(t)=0.5,\ I(t) = N/2i(t)=0.5,?I(t)=N/2 時(shí) $ di/dt$ 達(dá)到最大值,病人數(shù)目 I(t)I(t)I(t) 增加最快。由此可以預(yù)報(bào)傳染病高潮的到來,即為醫(yī)院的門診量最大的一天,衛(wèi)生部門要重點(diǎn)關(guān)注。
  • tmt_mtm?λ\lambdaλ 成反比。日接觸率 λ\lambdaλ 反映衛(wèi)生水平、防控手段,提高衛(wèi)生水平、強(qiáng)化防控手段,降低病人的日接觸率,可以推遲傳染病高潮的到來。
  • 當(dāng) t→∞t \to \inftyt 時(shí) i→1i \to 1i1 ,表明所有人最終都會(huì)被傳染而變成病人。這完全不符合實(shí)際情況,表明該模型太不講 politics 了,只能適用于美帝國家建模。
  • SI 模型非常明顯而嚴(yán)重的缺陷,是該模型沒有考慮患病者可以治愈,因此只能是健康人患病,而患病者不能恢復(fù)健康(甚至也不會(huì)死亡,而是不斷傳播疫情),所以終將全部被傳染。

  • 【本節(jié)完】

    版權(quán)聲明:

    歡迎關(guān)注『Python小白的數(shù)學(xué)建模課 @ Youcans』 原創(chuàng)作品

    原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/117740466)。

    Copyright 2021 Youcans, XUPT

    Crated:2021-06-09


    歡迎關(guān)注『Python小白的數(shù)學(xué)建模課 @ Youcans』系列,每周持續(xù)更新
    Python小白的數(shù)學(xué)建模課-A1.國賽賽題類型分析
    Python小白的數(shù)學(xué)建模課-A2.2021年數(shù)維杯C題探討
    Python小白的數(shù)學(xué)建模課-A3.12個(gè)新冠疫情數(shù)模競賽賽題及短評(píng)
    Python小白的數(shù)學(xué)建模課-B2. 新冠疫情 SI模型
    Python小白的數(shù)學(xué)建模課-01.新手必讀
    Python小白的數(shù)學(xué)建模課-02.數(shù)據(jù)導(dǎo)入
    Python小白的數(shù)學(xué)建模課-03.線性規(guī)劃
    Python小白的數(shù)學(xué)建模課-04.整數(shù)規(guī)劃
    Python小白的數(shù)學(xué)建模課-05.0-1規(guī)劃
    Python小白的數(shù)學(xué)建模課-06.固定費(fèi)用問題
    Python小白的數(shù)學(xué)建模課-07.選址問題
    Python小白的數(shù)學(xué)建模課-09.微分方程模型
    Python數(shù)模筆記-StatsModels 統(tǒng)計(jì)回歸
    Python數(shù)模筆記-Sklearn(5)支持向量機(jī)
    Python數(shù)模筆記-NetworkX(5)關(guān)鍵路徑法
    Python數(shù)模筆記-模擬退火算法(4)旅行商問題


    總結(jié)

    以上是生活随笔為你收集整理的Python小白的数学建模课-B2. 新冠疫情 SI模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。