数模(5):Malthus和Logistic模型

Malthus拟合和Logistic拟合是两种最典型、应用最广泛的拟合模型。它们分别被用于预测人口增长和物种增长,因此被广泛应用于社会学与生物学领域。

Malthus拟合

通常情况下,每年的人口死亡率与出生率是相同的。因此可以设每年的人口增长率为常数,我们记时刻t的人口数目为x(t),记初始时刻的人口数目为x_0,则有:
\begin{cases} \frac{dx}{dt}=rx(t)\\ x(0)=x_0 \end{cases}
解微分方程可得x(t)=x_0e^{rt},因此只要确定r的值即可利用Malthus模型拟合数据。

实例

如表给出的近两个世纪美国人口统计数据(以百万为单位),用Malthus模型拟合,并用它预报2010年的美国人口:

年份 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
人口/百万 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4

python代码如下:

import numpy as np
from scipy import optimize
from matplotlib import pyplot

x0=3.9

def f(t,r):
    return x0*np.exp(r*t)

x=np.array([3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4
])
t=np.arange(0,220,10)
fita,fitb=optimize.curve_fit(f,t,x,[0],maxfev=5000000)
pyplot.plot(t,x,'.')
x=f(t,fita[0])
pyplot.plot(t,x)
pyplot.show()
print(f(220,fita[0]))

预测结果为413.1,函数图像如下所示:


Snipaste_2019-08-14_05-43-38.png

我们发现,函数并没有很好地拟合,这是因为我们在建立模型时假设的是人口增长率恒定不变。然而实际情况下,随着社会因素的变化,人口增长率是会出现变化的。我们应该选取近期的数据来作为衡量标准计算人口增长率,这将会使得我们对人口的预测变得更加精确。

使用1900年后的数据进行拟合,修改python代码如下:

import numpy as np
from scipy import optimize
from matplotlib import pyplot

x0=76.0

def f(t,r):
    return x0*np.exp(r*t)

x=np.array([76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4
])
t=np.arange(0,110,10)
fita,fitb=optimize.curve_fit(f,t,x,[0],maxfev=5000000)
pyplot.plot(t,x,'.')
x=f(t,fita[0])
pyplot.plot(t,x)
pyplot.show()
print(f(110,fita[0]))

预测结果为333.2,函数图像如下所示:


Snipaste_2019-08-14_05-50-47.png

可以看到此时的拟合效果较好

Logistic拟合

在自然条件下考查一个种群的个体数目变化规律,由于自然条件的限制,个体数目的增长率r应该是一个和个体数目k负相关的函数。对于一个种群来说环境的最大容纳量被称为K值,达到K值之后个体数目便不再增长。我们不妨设增长率r满足方程r=r_0(1-\frac{x}{K}),记初始时刻的个体数目为x_0,则有:
\begin{cases} \frac{dx}{dt}=r_0(1-\frac{x}{K})x\\ x(0)=x_0 \end{cases}
解微分方程可得x(t)=\frac{K}{1+(\frac{K}{x_0}-1)e^{-rt}},这就是Logistic模型,通过拟合确定系数K和r即可使用该模型预测自然条件下的种群个体数目变化情况。

实例

依然以美国人口为例,使用Logistic模型来拟合1900年后的人口数据。python代码如下所示:

import numpy as np
from scipy import optimize
from matplotlib import pyplot

x0=76.0

def f(t,r,K):
    return K/(1+(K/x0-1)*np.exp(-r*t))

x=np.array([76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4
])
t=np.arange(0,110,10)
fita,fitb=optimize.curve_fit(f,t,x,[0,400],maxfev=5000000)
pyplot.plot(t,x,'.')
x=f(t,fita[0],fita[1])
pyplot.plot(t,x)
pyplot.show()
print(f(110,fita[0],fita[1]))

预测结果为309.4,图像如下所示:


Snipaste_2019-08-14_06-18-53.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容