数学模型——人口增长模型(基于python)
常用人口增長模型
????????如果已知今年人口為,年增長率為r,一般使用公式這是在增長率r保持不變的情況下做出的,但實(shí)際上,不可能不變,而且還有其他影響因素。說白了,這只是一個(gè)預(yù)測模型,需要我們考慮到會(huì)影響變量的各種因素去優(yōu)化已有模型。
人口增長模型的建立
一、初始模型
????????當(dāng)我們試圖考察一個(gè)國家或地區(qū)的人口隨著時(shí)間延續(xù)而變化的規(guī)律時(shí),就可以利用微積分,將人口看作是連續(xù)時(shí)間t的連續(xù)可微函數(shù)x(t),記初始時(shí)刻(t=0)時(shí)的人口為,假設(shè)單位時(shí)間人口增長率為常數(shù)r,rx(t)就是單位時(shí)間內(nèi)x(t)的增長量。得到微分方程
易得出,此時(shí),當(dāng)r>0,人口將呈指數(shù)增長,這個(gè)模型也被稱為Malthus人口模型。
????????那么,如何用python去解這樣一個(gè)微分方程呢?首先,我們設(shè)置初值,時(shí)間t為0,對應(yīng)的人口為6.0496(單位:百萬)使用python的scipy庫進(jìn)行求解,用matplotlib庫進(jìn)行展示。
from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt import pandas as pddata = pd.read_csv('data.csv') # 導(dǎo)入數(shù)據(jù)'''人口指數(shù)增長模型''' # 初級(jí)模型:dx/dt=rx,x(0)=x0(初始時(shí)刻),x(t)表示t時(shí)刻下的人口 def expbase(x,t):r = 0.2020 # 把人口增長率看做常數(shù)return np.array(r*x+0*t)t = np.arange(0,25,1) # 設(shè)置時(shí)間序列 a = odeint(expbase,6.4096,t) # 設(shè)置初始值x0為6.4096 plt.plot(a) plt.scatter(data['t'],data['x'],c='r') plt.show()?
? ? ? 這里的r和是通過data里的數(shù)據(jù),使用參數(shù)估計(jì)得出來的,常用的就是最小二乘估計(jì),可以利用已知的數(shù)據(jù)來獲取,不過需要我們先把微分方程換成線性方程形式
????????觀察結(jié)果,可以發(fā)現(xiàn),在短期內(nèi),對人口增長的預(yù)測還是比較準(zhǔn)確的,但人口不會(huì)一直指數(shù)增長,所以在時(shí)間后,就可以發(fā)現(xiàn)已經(jīng)明顯偏離,故需要對模型進(jìn)行進(jìn)一步優(yōu)化。
二、對增長率進(jìn)行改進(jìn)的增長模型
????????結(jié)合實(shí)際,把r視為t的函數(shù)r(t),假設(shè)(為什么要設(shè)置成這種形式,實(shí)際上需要我們對已有數(shù)據(jù)進(jìn)行分析進(jìn)行判斷)。所以,此時(shí)的指數(shù)增長模型為
? ? ?利用已知數(shù)據(jù),使用最小二乘法估計(jì)出此時(shí)。
def change(x,t):r = 0.3252R = 0.0114return np.array(r-R*t)*xT = np.arange(0,30,1) x = odeint(change,3.9,T) plt.scatter(data['t'],data['x'],c='r') plt.plot(x) plt.show()?
????????此時(shí),通過觀察縱坐標(biāo)的上限對比一二可以發(fā)現(xiàn),精度確實(shí)比較高了一點(diǎn)(當(dāng)然縱軸區(qū)間都一致),在人口預(yù)測上,已經(jīng)較為擬合(當(dāng)然使用不同的參數(shù)估計(jì)方法,得出不一樣的值,或許可以更好的估計(jì))。但是這還不夠,指數(shù)增長模型不能進(jìn)行長期的預(yù)測,而且影響人口增長率的因素有很多,需要知道阻滯作用較大的因素。
三、logistic模型
????????可以注意到,自然資源,環(huán)境因素對人口的阻滯影響較大,而且,人口越大,阻滯作用越大,此時(shí),指數(shù)增長模型就不適用了,對于長期的預(yù)測,使用logistic模型。為此,設(shè)置最大人口數(shù),當(dāng)達(dá)到資源與環(huán)境所能容納的最大人口時(shí),人口數(shù)量不會(huì)再增長。
????????設(shè)置r隨人口增長而下降的減函數(shù),令x=0時(shí)的增長率為r,即r(0)=r=a,當(dāng)達(dá)到最大人口時(shí),,故此時(shí)。易得此時(shí)的微分方程為
? ? ? 通過以往數(shù)據(jù)和非線性最小二乘法估計(jì)得出
?
? ? ? ? ?對比一二,就可以發(fā)現(xiàn),此時(shí)的預(yù)測就較為符合現(xiàn)實(shí),logistic模型比指數(shù)增長模型作到更好的預(yù)測,適用于長期的預(yù)測。
? ? ? ? ?至于其他影響因素,需要我們查詢相關(guān)文獻(xiàn)資料,來探索,當(dāng)然,并非影響因素越多越好,總會(huì)出現(xiàn)一些意料之外的事。
? ? ? ? 本篇完結(jié)!
總結(jié)
以上是生活随笔為你收集整理的数学模型——人口增长模型(基于python)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于填写软件著作权申请表时源程序量总行数
- 下一篇: python语言和汇编语言_python