Logistic函数(logistic function)[1]一般指函数 N(t)={e^Zover1+e^Z} 其中 Z=alpha+beta t (并没有一个专门的符号来表示这个函数)。
Logistic函数是Logistic微分方程的解,后者最初的目的是作为描述人口增长的模型(当然,描述物种繁衍也可以),更准确地说,是作为Malthus人口模型的修正。Logistic模型最早由比利时数学家Pierre-François Verhulst(1804-1849)于1838-1847年间引入,但后来又被重新发现过(Raymond PearI和Lowell J. Reed,1920),不过两次发现都是缘于人口问题,并得出了相同的结论。[2]
Pierre-François Verhulst 图源:MacTutor
简单地说,可以将Malthus模型看成经典的“J型曲线”而将Logistic函数的图像看作“S型曲线(sigmoid curve)”,因此Logistic函数属于数学中所谓的“S型函数(sigmoid function)”,事实上我们直接将它的图像称为Logistic曲线(logistic curve)毕竟数学中长得像S的函数的确太多了(例如 tanh )。在生物课上学到的知识告诉我们Malthus描述的模型只可能局部地存在,而Logistic模型才是更接近真相的。
Logistic模型,当K=10000, N₀=100, r=1
此后,Logistic函数又被广泛运用在了概率论、机器学习等领域;而由Logistic微分方程衍生出的Logistic差分方程中人们发现了神奇的混沌现象,并催化出了《周期三意味着混沌》这篇混沌理论的“开山之作”(李天岩,Yorke,1977)以及费根鲍姆常数;当然它在一些和人口模型类似的领域里也有直接应用,例如物理学和化学。不过由于本人才疏学浅,就只能在本文中涵盖一些关于“解逻辑斯蒂微分方程”之类浅显的知识点,也希望各位大佬能够提出一些意见建议。下面是正文。
Thomas Robert Malthus 图源:Wikipedia
作为人口学的一个经典结论,Malthus在《人口原理》(1798)中提出了类似于下面这样的数学模型[3]:
研究某地的人口变化,若不考虑移民等不可控因素,而仅考虑出生和死亡的情况:我们可暂且用 N(t) 表示 t 时刻该地的人口数量,用 beta(t) 和 delta(t) 分别表示 t 时刻的出生率(即单位时间内的出生人数与总人口的比值)和死亡率(即单位时间内的死亡人数与总人口的比值),并将初始时刻 t=0 时的人口记作 N_0:=N(0) 作为初始条件。
若在很短的时间 [t,t+Delta t] 内研究,我们就可以列出一个差分方程来近似描述人口变化情况:Delta N=beta(t)N(t)Delta t-delta(t)N(t)Delta t=[beta(t)-delta(t)]N(t)Delta ttag1
将其转化为微分方程,得到: {mathrm dN(t)overmathrm dt}=[beta(t)-delta(t)]N(t)tag2
Malthus理论的关键在于他假设出生率和死亡率都为常数: beta(t)equiv b 、 delta(t)equiv d ,
于是: {mathrm dN(t)overmathrm dt}=(b-d)N(t)tag3 容易解得: N(t)=N_0e^{(b-d)t}tag4 若 b>d (人口持续增长),这就是一个J型曲线:
Malthus模型,当N₀=50, b=0.3, d=0.1
在 t 趋于无穷时,N会不断增大到无穷大,这是不合理的——至少在一个自然生态系统中我们从来没有观察到这种情况。
生物学的知识也告诉我们某地的物种繁衍在经过很长时间后应该会趋于某一个定值,而不是无穷大——也就是S型曲线。
那么,Malthus的理论究竟错在哪儿呢?
Verhulst认为,问题在于出生率和死亡率不应该是定值。
事实上,如果我们在一开始将人口的净增长率设为 rho(t):=beta(t)-delta(t) ,那么根据Malthus的假设, rho(t) 将是一个定值,这已经不符合我们的常识了。我们知道,当人口很大(暂且忽略某些不可控的人为因素)时,该地的资源会不够所有这些人使用,也许还会有疾病发生。总而言之,此时死亡率可能会升高,而出生率将降低,因此净增长率应该也会降低,并不断趋近于 0 ,最终人口数也应该趋近于一个定值,我们将其记作 K ,称之为环境容纳量。
经过试验,Verhulst认为净增长率应该是总人口的一个单调递减的一次函数,例如: rho(t)={r(K-N)over K}tag5
其中 r 是一个正的常数。
将其代入 (2) ,我们就得到了Logistic微分方程(logistic differential equation):{mathrm dN(t)overmathrm dt}={rN(K-N)over K}tag6
(你可能会看到这个方程的不同版本,但实际上它们是等价的)
别忘了初始条件:N(0)=N_0tag7
通常而言,我们只考虑: 0<N_0<Ktag8
可以看到,Logistic微分方程是非线性的,但幸运的是,它很容易解。
下面的任务就是解这个方程:
为了打字方便(打 LaTeX 真的很累),下面我将 N(t) 直接记为 N ,但请记住它是 t 的函数;同时我也会用蓝色的 color{blue}{C_n} 来表示解方程过程中的常数。
首先,将 (6) 变为: {mathrm dNover N(K-N)}={rmathrm dtover K}tag9两边积分:
int{mathrm dNover N(K-N)}=frac{rt}Ktag{10}左边这个积分的关键在于一个裂项: begin{aligned}int{mathrm dNover N(K-N)}&= intfrac1Kleft(frac1N+frac1{K-N}right)mathrm dN/&=frac{int{mathrm dNover N}+int{mathrm dNover K-N}}K/&=frac{ln|N|-ln|K-N|}K/&=frac{lnleft(left|frac N{K-N}right|right)}Kend{aligned}tag{11}代回 (10) ,这就得到: lnleft(left|frac N{K-N}right|right)=rt+color{blue}{C_1}tag{12}化为指数式: frac N{K-N}=pmcolor{blue}{C_2}e^{rt}tag{13}
由于 N 可导必连续且 Kneq N ,因而 K-N 的符号总是不变,可化为:
frac N{K-N}=color{blue}{C_3}e^{rt}tag{14}
于是: N=Kcolor{blue}{C_3}e^{rt}-Ncolor{blue}{C_3}e^{rt}tag{15}Nleft(color{blue}{C_3}e^{rt}+1right)=Kcolor{blue}{C_3}e^{rt}tag{16}最终得到: N={Kcolor{blue}{C_3}e^{rt}overcolor{blue}{C_3}e^{rt}+1}=frac K{1+color{blue}{C_3}e^{-rt}}tag{17} 代入初始条件,解得: color{blue}{C_3}=frac{K-N_0}{N_0}tag{18}
最终得到Logistic函数: N(t)={frac{K-N_0}{N_0}Ke^{rt}overfrac{K-N_0}{N_0}e^{rt}+1}=frac K{1+frac{K-N_0}{N_0}e^{-rt}}tag{19}将其稍微化一化就能变成开头提到的形式了。
Logistic函数,当K=2, N₀=1, r=2
这里简单讨论(水)一下这个函数的性质:
首先, t=0 时 N(t)=N_0enspace(0<N_0<K) ,这是初始条件。
接着, trightarrow-infty 时 e^{-rt}rightarrowinfty ,因此 N(t)rightarrow0 ;
而当 trightarrow+infty 时 e^{-rt}rightarrow0 ,因此 N(t)rightarrow K 。
容易证明,该函数在 0<N_0<K 时严格增且有上下界。
正如我在开头提到的,双曲正切函数 tanh 也是一个S型函数。事实上,它的图像与Logistic曲线长得如此相像以致于我们可以找到合适的参数使得……
K=2,N₀=1,r=2的Logistic曲线与tanh的图像对比
……你能一眼看出这两个函数其实可以互相平移得到(在某些参数下,平移之后还要进行缩放)。
从我们已经得到的Logistic函数的解析式中,你当然可以推出这个结论,但其实Logistic微分方程还有另一种简单的解法,并且这个解法能够直接得到Logistic函数与 tanh 的关系。
我们再回到Logistic微分方程的这个变形:
int{mathrm dNover N(K-N)}=frac{rt}Ktag{10}
只不过这次我们将用配方法解决左边这个积分:
begin{aligned}int{mathrm dNover N(K-N)}&= -intfrac{mathrm dN}{N^2-KN}/&=-int{mathrm dNoverleft(N-frac K2right)^2-frac{K^2}4}/&=-int{mathrm dNoverfrac{K^2}4left[left(frac2KN-1right)^2-1right]}/&=frac4{K^2}int{mathrm dNover1-left(frac2KN-1right)^2}end{aligned}tag{20}
接着,因为 left(tanh^{-1}xright)'=frac1{1-x^2}enspace(|x|<1) ,且有 0<N<K ,于是:
int{mathrm dNover N(K-N)}=frac4{K^2}cdotfrac K2tanh^{-1}left(frac2KN-1right)=frac2Ktanh^{-1}left(frac2KN-1right)tag{21}
代回 (10) ,得: tanh^{-1}left(frac2KN-1right)=frac{rt}2+color{blue}{C_3}tag{22}
化为:
N=frac K2left[tanhleft(frac{rt}2+color{blue}{C_3}right)+1right]tag{23}
代入初始条件,解得:
color{blue}{C_3}=tanh^{-1}left(frac{2N_0}K-1right)tag{24}
就得到另一个形式的Logistic函数:
N(t)=frac K2left{tanhleft[frac{rt}2+tanh^{-1}left(frac{2N_0}K-1right)right]+1right}tag{25}
这样,Logistic函数就不再神秘了:它就是函数 tanh 经过一个简单的放缩和平移之后得到的结果。
容易验证 K=2,space N_0=1,space r=2 时确实有 N(t)-1=tanh(t)
前面我们只考虑了 0<N_0<K 的情况,然而 N_0>K 时确实也有现实意义。然而这时的Logistic曲线就不再是一个S型曲线了。
事实上,在推导式 (19) 的过程中我并没有用到 0<N_0<K 这个条件,因此式 (19) 是永远成立的。而推导式 (25) 的时候我确实用到了这个条件,然而在 N_0>K 时,由于 left(coth^{-1}xright)'=frac1{1-x^2}enspace(|x|>1) ,所以只需要把所有的 tanh 都用 coth 替换掉即可。
以Malthus模型作为引入,我们得出了Logistic(微分)方程: {mathrm dN(t)overmathrm dt}={rN(K-N)over K}
以及它的解——Logistic函数——的表达式: N(t)={frac{K-N_0}{N_0}Ke^{rt}overfrac{K-N_0}{N_0}e^{rt}+1}=frac K{1+frac{K-N_0}{N_0}e^{-rt}}
并得出了该函数与双曲正切函数的关系: N(t)=frac K2left{tanhleft[frac{rt}2+tanh^{-1}left(frac{2N_0}K-1right)right]+1right}
今天讲一个身居高位的国企总经理,享受副厅级待遇,却因为两大爱好,最后落了个被判死刑的可悲结果。说起他的这两个爱好,真 ...
我平时喜欢研究汽车用品,备胎已经被我扔到了床底下,我是 @广哥聊汽车,欢迎关注我,有问题欢迎留言讨论。