Wang Haihua
🍈 🍉🍊 🍋 🍌
离散形式的阻滞增长模型就是一阶非线性差分方程 $$ \Delta x_{k}=r x_{k}\left(1-\frac{x_{k}}{N}\right), \quad k=0,1,2, \cdots, $$ 即 $$ x_{k+1}=x_{k}+r x_{k}\left(1-\frac{x_{k}}{N}\right), \quad k=0,1,2, \cdots, $$ 其中 $x_{k}$ 为种群在第 $k$ 时段的数量。
简单解释一下上式的导出过程。如果种群的增长率为常数 $r$, 则有 $$ \frac{x_{k+1}-x_{k}}{x_{k}} \equiv r, \quad k=0,1,2, \cdots, $$ 可以导出一阶常系数线性齐次差分模型 $$ x_{k+1}=(1+r) x_{k}, \quad k=0,1,2, \cdots, $$
模型的解为等比数列 $$ x_{k}=x_{0}(1+r)^{k}, \quad k=0,1,2, \cdots . $$ 如果 $r>0$,可以得出结论, 种群数量将随时间单调增长, 增 长越来越快, 趋于无穷大。 但是由于受有限的资源环境的制约, 种群数量不可能无限增长, 种群数量的增长率也不可能一直保持不变, 而是会随着种群数量的增加而逐渐减少。人们把有限的资源环境对种群数量增长的制约作用称为“阻滞作用”。
假设由于受有限的资源环境的制约, 增长率随着种群数量的增加而线性递减, 即假设 $$ \frac{x_{k+1}-x_{k}}{x_{k}}=r\left(1-\frac{x_{k}}{N}\right), \quad k=0,1,2, \cdots . $$ 上述模型假设即是离散阻滞增长模型。
离散阻滞增长模型中, 参数 $r$ 称为“固有增长率”, 是当种群数量 $x=0$ 时的增长率。参数 $N$称为“最大容量”, 即 $N$是有限的资源和环境所能 容纳的种群的最大数量。随着种群数量 $x$ 的增加, 有限的资源和环境对种群数量增长的阻滞作用越来越显著, 当种群数量 $x=N$ 时, 增长率为 0 , 即种群停止增长。
离散阻滞增长模型还有如下其他的等价形式: $$ \begin{aligned} &x_{k+1}=x_{k}+p x_{k}\left(N-x_{k}\right), \quad k=0,1,2, \cdots, \\ &x_{k+1}=x_{k}+r x_{k}-p x_{k}^{2}, \quad k=0,1,2, \cdots, \end{aligned} $$ 其中参数 $r$ 和 $N$ 的意义同前, 至于 $p$, 容易看出 $p=r / N$ 。
下面讨论离散阻滞增长模型的平衡点及稳定性。在式中, 令 $x_{k+1}=x_{k}=x$, 则得到代数方程 $$ r x(1-x / N)=0 \text {, } $$
解得 $\boldsymbol{x}=\mathbf{0}$ 或 $\boldsymbol{x}=N$, 它们是两个平衡点。为 了说明这两个平衡点的渐近稳定性条件, 不加证明地引用以下定理。
定理 1 离散阻滞增长模型的平衡点 $x=\mathbf{0}$ 是局部渐近稳定 的当且仅当 $-2<r<0$, 另一个平衡点 $x=N$ 是局部渐近稳定的当且仅当 $0<r<2$ 。
注:一般情况下, 实际问题满足条件 $0<r<2$ 。
离散阻滞增长模型难以写出解析解的表达式,可以按其给出 的数列递推关系迭代计算出数值解。当 $r>0$ 且初始值 $x_{0} \in(0, N)$ 时, 随着 $r$ 的 增大, 模型的解会出现复杂的数学现象一单调收敛、震荡收敛、倍周期分岔和混沌(类似 Logistic 模型)。
import numpy as np
import matplotlib.pyplot as plt
plt.rc('text',usetex=True); plt.rc('font',size=16)
logistic=lambda k, x: k*x*(1-x)
kk=np.arange(0, 4.01, 0.01); listk=[]; listx=[]
for k in kk:
x=0.5
for i in range(1,500):
x1=logistic(k,x); x=x1
if i>400: listk.append(k); listx.append(x)
plt.scatter(listk,listx,c='b',s=1); plt.grid(True)
plt.xticks(np.arange(0,4.01,0.5)); plt.xlabel("$k$")
plt.ylabel("$x^*(k)$");
plt.show()
参考资料
import numpy as np
import matplotlib.pyplot as plt
plt.rc('text',usetex=True); plt.rc('font',size=16)
logistic=lambda k, x: k*x*(1-x)
kk=np.arange(0, 4.01, 0.01); listk=[]; listx=[]
for k in kk:
x=0.5
for i in range(1,500):
x1=logistic(k,x); x=x1
if i>400: listk.append(k); listx.append(x)
plt.scatter(listk,listx,c='b',s=1); plt.grid(True)
plt.xticks(np.arange(0,4.01,0.5)); plt.xlabel("$k$")
plt.ylabel("$x^*(k)$");
plt.savefig('images/diff1401.png')
plt.show()