数模算法与应用:预测模型(1)美日硫磺岛战役模型

目录

前言

一、微分方程模型

二、美日硫磺岛战役模型

2.1、题目

2.2、过程解析

 2.3、MATLAB建模程序

2.4、结果


前言

        预测学是一门研究预测理论、方法及应用的新兴科学。综观预测的思维方式,其基本理论主要有惯性原理、类推原理和相关原理。预测的核心问题是预测的技术方法,或者说是预测的数学模型。随着经济预测、电力预测、资源预测等各种预测的兴起,预测对各种领域的重要性开始显现,预测模型也随着迅速发展。

        预测的方法种类繁多,从经典的单耗法、弹性系数法、统计分析法,到目前的灰色预测法、专家系统法和模糊数学法,甚至刚刚兴起的神经网络法、优选组合法和小波分析法,据有关资料统计,预测方法多达 200 余种。因此在使用这些方法建立预测模型时,往往难以正确地判断该用哪种方法,从而不能准确地建立模型,达到要求的效果。不过预测的方法虽然很多,但各种方法多有各自的研究特点、优缺点和适用范围。

一、微分方程模型

        当我们描述实际对象的某些特性随时间(或空间)而演变的过程、分析它的变化规律、预测它的未来性态、研究它的控制手段时,通常要建立对象的动态微分方程模型。微分方程大多是物理或几何方面的典型问题,假设条件已经给出,只需用数学符号将已知规律表示出来,即可列出方程,求解的结果就是问题的答案,答案是唯一的,但是有些问题是非物理领域的实际问题,要分析具体情况或进行类比才能给出假设条件。

        做出不同的假设,就得到不同的方程。比较典型的有传染病的预测模型、经济增长预测模型、兰彻斯特( Lanchester )战争预测模型、药物在体内的分布与排除预测模型、人口的预测模型、烟雾的扩散与消失预测模型等。其基本规律随着时间的增长趋势呈指数形式,根据变量的个数建立微分方程模型。微分方程模型的建立基于相关原理的因果预测法。

        该方法的优点是短、中、长期的预测都适合,既能反映内部规律,反映事物的内在关系,也能分析两个因素的相关关系,精度相应的比较高,另外对模型的改进也比较容易理解和实现。该方法的缺点是虽然反映的是内部规律,但是由于方程的建立是以局部规律的独立性假定为基础,故做中长期预测时,偏差有点大。

二、美日硫磺岛战役模型

         J . H . Engel 用二次大战末期美日硫黄岛战役中的美军战地记录,对兰彻斯特作战模型进行了验证,发现模型结果与实际数据吻合得很好。 

2.1、题目

         硫黄岛位于东京以南660英里的海面上,是日军的重要空军基地。美军在1945年2月开始进攻,激烈的战斗持续了一个月,双方伤亡惨重,日方守军21500人全部阵亡或被俘美方投入兵力73000人,伤亡20265人,战争进行到28天时美军宣布占领该岛,实际战斗到36天才停止。美军的战地记录有按天统计的战斗减员和增援情况。日军没有后援,战地记录则全部遗失。

         用 A (t)J(t)表示美军和日军第 t 天的人数,忽略双方的非战斗减员,则

                         (15.1)                          \left\{\begin{matrix}\frac{\mathrm{dA(t)} }{\mathrm{d} t}=-aJ(t)+u(t) & & \\\frac{\mathrm{dJ(t)} }{\mathrm{d} t}=-bA(t) & & \\ A(0)=0,J(0)=21500. & & \end{matrix}\right.

        美军战地记录给出增援 u (t)

                                               u(t)=\left\{\begin{matrix}54000,0<=t<1; & & & \\ 6000,2<=t<3; & & & \\ 13000,5<=t<6; & & & \\ 0,t>=6 & & & \end{matrix}\right.

并可由每天伤亡人数算出 A (t), t =1,2,…,36。下面要利用这些实际数据代入式(15.1),算出 A (t)的理论值,并与实际值比较。 

2.2、过程解析

        利用给出的数据,对参数 a , b 进行估计。对式(15,1)两边积分,并用求和来近似代替积分,有 

为估计 b, 在式(15.3)中取 t =36,因为 J (36)=0,且由 A ( t )的实际数据;

        得 \sum_{t=1}^{36}A(t)=2037000,于是从式(15.3)估计出 b =0.0106。再把这个值代入式(15.3)即可算出 J ( t ), t =1,2,…,36。

         然后从式(15.2)估计 a 。令 t =36,得

 式中:分子是美军的总伤亡人数,为20265人,分母可由已经算出的 J(t)得到,为372500人。

        由式(15.4)有 a =0.0544。把这个值代入式(15.2),得 

         由式(15.5)就能够算出美军人数 A (t)的理论值,与实际数据吻合得很好。可以根据式(15.3)估计日军的人数。当然也可以求微分方程组(15.1)的数值解,估计日军的人数。

 2.3、MATLAB建模程序

下面画出美军人数、日军人数的按时间变化曲线和微分方程组的轨线。

求微分方程组数值解以及画图的MATLAB程序如下:

dxy=@(t,x)[-0.0544*x(2)+54000*(t>=0 & t<1)+...
    6000*(t>=2 & t<3)+13000*(t>=5 & t<6)
    -0.0106*x(1)];  %定义微分方程组右端项
[t,xy]=ode45(dxy,[0:36],[0,21500])
subplot(211), plot(t,xy(:,1),'r*',t,xy(:,2),'gD')
xlabel('时间t'),  ylabel('人数'), legend('美军','日军')
subplot(212),  plot(xy(:,1),xy(:,2))  %画微分方程组的轨线
xlabel('美军人数x'),  ylabel('日军人数y')  

 程序讲解:

dxy=@(t,x)[-0.0544*x(2)+54000*(t>=0 & t<1)+...
    6000*(t>=2 & t<3)+13000*(t>=5 & t<6)
    -0.0106*x(1)];  %定义微分方程组右端项

         表示 dxy 为函数句柄,@是定义句柄的运算符;@(t,x)是匿名函数:t和x都是参数。

[t,xy]=ode45(dxy,[0:36],[0,21500])

        ode是Matlab专门用于解微分方程的功能函数。

ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差。是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。

解决的是Nonstiff(非刚性)常微分方程。

ode45是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,可换用ode15s试试。

2.4、结果

t =

       0       
       1       
       2       
       3       
       4       
       5       
       6       
       7       
       8       
       9       
      10       
      11       
      12       
      13       
      14       
      15       
      16       
      17       
      18       
      19       
      20       
      21       
      22       
      23       
      24       
      25       
      26       
      27       
      28       
      29       
      30       
      31       
      32       
      33       
      34       
      35       
      36       


xy =

       0          21500       
   50540         233425/11    
  245486/5       269008/13    
  481157/9       141063/7     
  637775/12      254562/13    
  260306/5        19025       
  310297/5       184179/10    
  182863/3       177659/10    
  300027/5       102749/6     
   59091          49481/3     
  232843/4        15872       
   57364         289930/19    
  169651/3        58623/4     
  167308/3        28121/2     
  275102/5        40420/3     
  217213/4       244985/19    
  268087/5        12322       
  105925/2        82300/7     
  471043/9       134389/12    
  620927/12      202302/19    
  460616/9        10102       
  151934/3       105186/11    
  701947/14      153480/17    
  148987/3       135989/16    
  196857/4        55827/7     
   97589/2        59647/8     
   48403          27763/4     
  144118/3        51437/8     
  143110/3        82911/14    
  616134/13       48764/9     
  235569/5       127851/26    
  328019/7        57451/13    
  792760/17       66705/17    
  510762/11       17153/5     
  138779/3        58787/20    
  599470/13       12249/5     
  505924/11       80428/41    

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bitter tea seeds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值