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

Python数学建模极简入门(七)几何相似性建模实例介绍

2016-12-07  本文已影响1055人  dalalaa

这一期偏向建模理论

比例性建模


先介绍比例性建模,便于大家理解几何相似性建模。

前面讲过线性拟合,拟合的方程为
![](http://latex.codecogs.com/gif.latex?\Large Y = k X)

在这种情况下,我们可以说 Y与X成正比例关系,即![](http://latex.codecogs.com/gif.latex?\Large Y \propto X)

另外如果有![](http://latex.codecogs.com/gif.latex?\Large Y = k X^2\ or \ Y = k lnX )
可以认为![](http://latex.codecogs.com/gif.latex?\Large Y \propto X^2\ or\ Y \propto lnX)

接下来我们介绍一条重要性质,比例性传递法则

![](http://latex.codecogs.com/gif.latex?\Large if \ Y \propto X\ and\ X \propto Z )
有![](http://latex.codecogs.com/gif.latex?\Large if \ Y \propto Z )

这个性质我们后面会用到。

比例性建模其实就是利用这种式子将比较复杂的问题转换成简单的线性问题来解决,也就是上一篇建模过程中所讲到的将问题分解为多个子模型。

这个方法很简单,就不介绍实例了。

几何相似性建模


这个方法给大家介绍两个有意思的实例:

实例1:雨滴坠落平衡速度模型

看完这个例子基本就知道几何相似性建模是怎么回事了。

为了求雨滴从空中落下的最终速度,我们可以先对雨滴进行受力分析:

雨滴受力分析

根据空气阻力公式:

![](http://latex.codecogs.com/gif.latex?\Large F = \frac{1}{2}C\rho S\nu^2 )

我们先假设
![](http://latex.codecogs.com/gif.latex?\Large F \propto S\nu^2 )
![](http://latex.codecogs.com/gif.latex?\Large G \propto m )

我们假设所有的雨滴都是几何相似的,这样就有:
![](http://latex.codecogs.com/gif.latex?\Large S \propto l^2\ and\ V \propto l^3)
进而得到:
![](http://latex.codecogs.com/gif.latex?\Large S \propto V^\frac{2}{3} )
从而:
![](http://latex.codecogs.com/gif.latex?\Large S \propto m^\frac{2}{3} )
当最终雨滴进入匀速状态时:
![](http://latex.codecogs.com/gif.latex?\Large G - f = 0)

可以得到:
![](http://latex.codecogs.com/gif.latex?\Large m \propto m^\frac{2}{3}\cdot \nu ^2_t)

那么答案就是:
![](http://latex.codecogs.com/gif.latex?\Large m^\frac{1}{3}\propto \nu ^2_t \ or \ m^\frac{1}{6}\propto \nu_t)
即最终速度与质量的1/6次方成正比。

实例2:骇鸟体重估算

看过赵忠祥的《人与自然》没,有一段时间播过外国人做的史前动物的资料,介绍动物的还会介绍身高体重,身高基本是从化石上直接测量得到的,那么体重呢,体重是如何估算的呢?

这里我们简单介绍一下骇鸟(又名恐怖鸟)的体重估算方法。

此估算方法基于一个假设:骇鸟与当今的大鸟是几何相似的。

由几何相似性的假设,我们可以得到骇鸟的体积、质量和任何特征量的立方成正比:
![](http://latex.codecogs.com/gif.latex?\Large m \propto V \propto l^3)
令特征量l为股骨的周长,为何选择股骨呢?因为股骨是支撑骇鸟体重的关键部位。这样我们可以给出模型:
![](http://latex.codecogs.com/gif.latex?\Large m = kl^3)

接下来的工作就是收集现在自然界的各种尺寸的鸟类的体重数据,然后对m和l3进行拟合,得到k值。

最后代码实现:

import numpy as np
def WeightFactor(m,l):
  m = np.array(m)
  l = np.array(l)
  l3 = l*l*l
  F = np.polyfit(l3,m,1)
  P = np.poly1d(F)
  return P

就算是完成了………………

上一篇下一篇

猜你喜欢

热点阅读