个人专题Python建模与NLP工具癖

Python数学建模极简入门(六)--差分方程组

2016-11-28  本文已影响468人  dalalaa

前面已经讲过了差分方程,那差分方程组是个啥就不用我介绍了吧。

今天为大家带来一个差分方程组解实际问题的例子:

特拉法尔加海战

背景介绍来自于百度百科--特拉法尔加海战

此战中,法西联合舰队主帅为维尔纳夫,英国舰队主帅为纳尔逊。

开战初期,法西联合舰队有战列舰33艘,可谓势均力敌,英国有战列舰27艘。两个舰队战力差距并不大,甚至法西联军还有一定优势。

但是最后的结果却是法西联军大败,从此一蹶不振。

我们来分析一下,究竟是为什么会出现这样的结果:

  1. 我们假设所有战斗均是刚正面,没有偷袭。转换成数值之后即是:每一阶段战斗中每一方战舰损失量都是对方的5%(分数值也是有意义的,表示有一艘或多艘战舰不能全力以赴地参加战斗);
  2. 不死不休,每次战斗兼职的标志为某一方军舰数量少于2;

法西联军舰队分为三个战斗编组,编组A有3艘战舰;编组B有17艘战舰;编组C有13艘战舰。

而英军方面,纳尔逊选择的策略是先用13艘战舰去进攻旗舰编组A;战斗之后,留存下来的军舰加上备用的14艘军舰一起去迎战编组B;最后所有剩下的战舰去迎战编组C。


第一战

首先来分析第一次战斗,即英军13艘战舰迎战法西联军旗舰编组A:
在第n个阶段的战斗之后,各方剩余的战舰数量为:
![](http://latex.codecogs.com/gif.latex?\Large B_{n+1} = B_n - 0.05F_n)
![](http://latex.codecogs.com/gif.latex?\Large F_{n+1} = F_n - 0.05B_n)
Python代码如下:
<code>
import matplotlib.pyplot as plt
import matplotlib
def Battle(BritishWarship,FrenchWarship):
Britain = []
France = []
count = []
stage = 0
Britain.append(BritishWarship)
France.append(FrenchWarship)
count.append(0)
while FrenchWarship > 2:
BritishWarship = BritishWarship - 0.05 * FrenchWarship
FrenchWarship = FrenchWarship - 0.05 * BritishWarship
stage += 1
Britain.append(BritishWarship)
France.append(FrenchWarship)
count.append(stage)
plt.scatter(count,Britain)
#plt.scatter(count,France)
plt.show()
Battle(13,3)
</code>

图像如下:

英国战舰 法西战舰

英国战舰数量:13->12.85->12.73
法西战舰数量:3->2.36->1.72


第二战

英国舰队数量:14 + 12.73 = 26.73
法西舰队数量:1.72 + 17 = 18.72

结果如下:

英国战舰 法国战舰

英国战舰数量:26.73->25.79->24.92->24.11->23.36->22.67->22.04->21.46->20.94->20.46->20.04->19.67->19.35->19.07->18.85->18.67->18.54
法西战舰数量:18.72->17.43->16.18->14.97->13.81->12.67->11.57->10.50->9.45->8.43->7.42-> 6.44->5.47->4.52->3.58->2.64->1.72


第三战

哈哈,第三战结果如何呢??

** 实际上当时法国在第二战之后就将C编队的13艘战舰全部撤回了法国 。**

如果打下去结果如何,小伙伴们可以自己算一下,很简单的。

这种军事策略这样分析看起来很简单,就像田忌赛马一样,以强搏弱。

上一篇下一篇

猜你喜欢

热点阅读