数学离我们并不遥远, 数学要解决的就是我们生活中会碰到的各种问题, 我们可以用数学 去描述实际碰到的问题, 然后从计算中厘清一些事物间的关系, 并做出预测, 虽然模型并不能完 全代表真实的情况, 但是只要这个模型包含了那些最具影响力的主导向, 我们就可以从计算中 去预测和掌握趋势, 填补了用感觉和经验来做预测的一些缺点和不足, 至少有数学当基础的决 策会让人增添许多信心, 最近常常听到警察和抗议民众发生冲突, 让人开始对两个族群战争的 数学模型感到兴趣, 在此尝试了一些计算来描述和解释。
dxdt = x(a - by) dydt = -y(c - dx)
这类型的方程, 最早由美国统计学家 Alfred James Lotka 和意大利数学家 Vito Volterra 独立发表, 用来描述掠食者与猎物之间数量随时间变化的关系, 而本文则是用来描述两个族群生 长和战争的模型, 所讨论的对象有不同的角色关系。 考虑两个族群, 假设其族群内的个体数不增加, 而且两个族群发生战争, 造成双方个体的 数量下降, 我们将使用以下的模型来进行仿真。
dAdt = - k1 AB dBdt = - k2 AB
其中 A, B 代表两个种族个别的个体数量
A(0) = A0>0,B(0)=B0>0,k1,k2 > 0
为什么这个方程式要这么列呢 ? 先想想看譬如有 10 个种族 A 的个体和 10 个种族 B 的个体, 一单位时间内平均相遇 3 次, 只要种族 A 和种族 B 的单一个体相遇, 就算一次, 那么如 果种族 A 的个体数变成 30 个, 种族 B 的个体数维持不变, 是不是一单位时间内平均相遇次 数就会变成 9 次, 此时如果种族 B 的个体数变成 20 个, 那么一单位时间内平均相遇次数就会 变成 18 次, 也就是说, 一单位时间内平均相遇次数正比于族群 A 和族群 B 的个体数, 我们不 仿假定一单位时间内平均相遇次数为 kAB, 又假设在一次相遇中族群 A 的个体死亡的机率为 PA, 族群 B 的个体死亡的机率为 PB , 那么 PAkAB 和 PBkAB 就可以分别代表族群 A 和 族群 B 一单位时间内平均死亡的个体数, 我们令 PAk = k1, PBk = k2, 就可以列出如下的方程序
dAdt = - k1 AB dBdt = - k2 AB
接下来我们把 A 和 B 解出来:
dAdB=k1k2⇒∫k2dA=∫k1dB⇒k2A+C1=k1B
将 (2) 式带回 (1) 式中, 得:
dAdt=−A(k1A+C1)⇒∫dAA(k2A+C1)=∫−1dt
⇒∫(k2k2A−k2k2A+C1)dAC1=−t+C2
⇒Ln(k2A)−Ln(k2A+C1)=−C1t+C1C2
⇒1+C1k2A=eC1t−C1C2
⇒A=C1k2(eC1t−C1C2−1) 将 A 代回 (2) 式中可得
B(t)=C1eC1t−C1C2k1(eC1t−C1C2−1)
由初始条件可得 C1=k1B0−k2A0.C2=Ln(k2A0k1B0)k1B0−k2A0
其中这个 C1 在这个战争中具有特别的意义,
如果C1>0,则当t→∞,A(t)→0,B(t)→B0−k2k1A0
如果C1>0,则当t→∞,A(t)→A0−k1k2B0,B(t)→0
可以看出C1>0意味着族群B会获胜而族群A将被消灭,
反之若C1>0则族群A会获胜而族群B将被消灭,
所以C1是一个族群A和族群B胜负的判别式,
让我们细细的研究一下C1=k1B0−k2A0,
A0和B0分别是族群A和族群B一开始的个体数量,
k1=PAk,k2=PBk,
PA为族群A的个体在一次的战斗中死亡的机率,换句话说这是族群B个体攻击力的一个指标。PB为族群B的个体在一次的战斗中死亡的机率,这也是族群A个体攻击力的一个指标。
k1=PAk,k2=PBk,
我们可以看出k1,k2亦是族群B和族群A单一个体的战斗力指标,k1B0和k2A0自然就可以看作是族群B与族群A的总体战斗力,至此我们知道C1=k1B0−k2A0即是族群B和族群A总体战斗力的差,当然C1当成是族群A和族群B战斗胜负的判别式也就实至名归了。
如果考虑个体数会增生, 把原本的数学模型修改一下。 考虑两个族群, 假设其族群内的个体数会增加, 而且两个族群发生战争, 造成双方个体的数量下降, 我们将使用以下的模型来进行模拟。
dAdt=mA−k1AB dBdt=mB−k2AB
其中A,B代表两个族群个别的个体数量,A(0)=A0>0,B(0)=B0>0,k1,k2,m>0,在不考虑环境负载和战争的简单情况下,式子中的mA和mB代表着族群的成长速度与族群本身的数量呈正比,如果将式子中的mA和mB改成m1A和m2B,其中m1和m2不相同,那么情况就复杂许多,不在本文的讨论范围中。
解:
k2dAdt−k1dBdt=m(k1A−k2B)⇒d(k2A−k1B)dt=m(k2A−k2B)
⇒(k2A−k1B)=C1emt
dAdtdBdt=dAdB=A(m−k1B)B(m−k2A)⇒∫m−k2AAdA=∫m−k1BBdB
⇒mlnA−k2A=mLnB−k1B+C2
⇒mLn(AB)=k2A−k1B+C2=C1emt+C2
⇒A=BeC1emt+C2m,此式与(3)式进行联立可得
A=C1emt+C1emt+C2mk2eC1emt+C2m−k1,B=(C1emtk2eC1emt+C2m−k1
代入初始值可得 C1=k2A0−k1B0,C2=mln(A0B0)−k2A0+k1B0
C1在这个模型中仍旧是一个胜负的判别式,
如果C1>0,则当t很大时
A=C1emt+C1emt+C2mk2eC1emt+C2m−k1=C1emt(eC1emt+C2mk2eC1emt+C2m−k1)=(A0−k1k2B0)emt
B≈0
如果C1<0,则当t很大时
A≈0
B=C1emtk2eC1emt+C2m−k1≈C1−k1emt=(B0−k2k1A0)emt
解释: C1=k2A0−k1B0>0,指群体A的总体战力大过群体B,在经过一段时间的战斗后,群体A的个体数大概剩A0−B0这么多,并以这个数量继续增生,而群体B几乎被消灭掉,反之C1<0,指群体B的总体战力大过群体A,在经过一段时间的战斗后,群体B的个体数大概剩B0−k2K−1A0这么多,并以这个数量继续增生,而群体A几乎被消灭掉。
数学常常给人一种不食人间烟火的感觉, 其实我们生活中会碰到许多的困难和问题要去解 决或是做决策, 譬如对奕、 经济、 军事、 医学、 民生, 这些都可以从建构数学模型或是进行统计 来帮我们做预测, 弥补经验和感觉的不足, 譬如说我们都知道消息传递快速, 一传十, 十传百, 但是实际上到底有多快? 如果我们没有建立起一个模型进行计算, 我们很难掌握某种我们关心 的量随时间推移其大小的变化, 而这个量的大或小可能就会决定一个策略的成败, 就如同前面 提到的群体 A 和群体 B 的战争模型一样, 打赢的大量增生, 打输的几乎被消灭, 这是天差地远 的结果, 一个决策的好坏影响真的很大。