资料来源《数学模型》第五版,作者:姜启源、谢金星、叶俊等。
第一章 建立数学模型
- 这里主要讨论的数学模型是由数字、字母或其他数学符号组成的、描述现实对象数量规律的数学公式、图形或算法。
- 数学模型可以描述为,对于现实世界的一个特定对象,为了一个特定目的,根据特有的内在规律,做出一些必要的简化假设,运用适当的数学工具,得到的一个数学结构。
建立数学模型的一般步骤
- 模型准备:了解问题背景,明确建模目的,搜集必要信息深入调查研究,虚心请教。
- 模型假设:根据对象的特征和建模的目的,抓住问题的本质,忽略次要因素,做出必要的、合理的简化假设。
- 模型构成:根据所做的假设,用数学符号的语言、符号描述对象的内在规律,建立包含常量、变量的数学模型,如优化模型、微分方程模型、差分方程模型、图的模型等。
- 模型求解:用解方程、画图形、优化方法、数值计算、统计分析等各种方法。特别是数学软件和计算机技术。
- 模型分析:对求解结果进行数据上的分析,对结果的误差分析、统计分析、模型对数据的灵敏性分析、对假设的强健性分析等。
- 模型检验:将求解的模型与实际现象和数据进行比较,检验模型的合理性和适用性。如果结果不实际不符,需要完善模型。
- 模型应用:这里不做讨论。
以上数学模型的求解方法将会应用于后面所示所有数学模型中。
数学模型的分类
- 按应用领域分:人口模型、交通模型、环境模型、生态模型、城镇规划模型、水资源模型、再生资源利用模型、污染模型等。
- 按数学方法分:初等模型、几何模型、微分方程模型、统计回归模型、数学规划模型等。
- 按模型的表现特性:
- 确定性模型和随机性模型:取决于是否考虑随机因素的影响。
- 静态模型和动态模型:取决于是否考虑时间因素引起的变化。
- 线性模型和非线性模型:取决于模型的基本关系。
- 离散模型和连续模型:指模型中的变量取为离散还是连续的。
- 按建模目的分:描述模型、预报模型、优化模型、决策模型、控制模型等。
- 按了解程度分:
- 白箱:模型大多已经确定,需要研究的是优化设计和控制。
- 灰箱:对于机理还有尚不十分清楚的现象,在建立和改善模型方面都还有不同程度的工作要做。
- 黑箱:对一些现象很不清楚,主要在生命科学和社会科学等领域。
例一 包饺子中的数学
参见《数学建模》第五版第5页
模型准备
包饺子中饺子皮和饺子馅之间有什么关系?不同重量的饺子皮能包多少饺子馅?
模型假设
| 数学符号 | 名称 |
|---|---|
| V | 大饺子馅体积 |
| S | 大饺子皮面积 |
| v | 小饺子馅体积 |
| s | 小饺子皮面积 |
| R | 大饺子皮半径 |
| r | 小饺子皮半径 |
假设每个饺子皮一样厚,大饺子皮和小饺子皮面积关系满足:
S=ns
求V与v的关系。
模型求解
由体积,面积分别与半径之间的关系:
V=k_1R^3,~~~S=k_2R^2\\v=k_1r^3~~~s=k_2r^2
整理得:
V=kS^{\frac32},~~~v=ks^{\frac32}
消去S和s得:
V=n^\frac32v=\sqrt n(nv)
例二 路障间距的设计
参见《数学建模》第五版第7页
问题分析
如果要求限制车速不超过40km/h,路障的间距应该是多少?
模型假设
假设汽车通过路障的速度为0,通过后速度逐渐提高,当达到40km/h,开始减速,减到0后正好通过路障。
我们需要搜索信息来找到一般汽车启动时的加速度和减速时的加速度。
假设汽车加速减速都做的是匀加速、匀减速运动。
| 数学符号 | 名称 |
|---|---|
| s_1 | 加速行驶的距离 |
| t_1 | 加速行驶的时间 |
| a_1 | 加速行驶的加速度 |
| s_2 | 减速行驶的距离 |
| t_2 | 减速行驶的时间 |
| a_2 | 减速行驶的加速度 |
模型建立
由物理定律:
s_1=\frac12a_1t_1^2,~~s_2=\frac12a_2t_2^2\\v_{\max}=a_1t_1,~~~v_{\max}=a_2t_2
由行驶的总路程s=s_1+s_2,消去t:
s=\frac{v_{\max}^2}{2}\left(\frac1{a_1}+\frac1{a_2}\right)
import sympy as sy
s_1 = sy.Symbol('s_1')
s_2 = sy.Symbol('s_2')
a_1 = sy.Symbol('a_1')
a_2 = sy.Symbol('a_2')
t_1 = sy.Symbol('t_1')
t_2 = sy.Symbol('t_2')
v_max = sy.Symbol('v_max')
eq1 = 1/2*a_1*t_1**2-s_1
eq2 = 1/2*a_2*t_2**2-s_2
eq3 = a_1*t_1-v_max
eq4 = a_2*t_2-v_max
res = sy.solve([eq1,eq2,eq3,eq4],[t_1,t_2,s_1,s_2])
s = res[0][2]+res[0][3]
print(sy.latex(sy.factor(s)))
\frac{0.5 v_{max}^{2} \left(a_{1} + a_{2}\right)}{a_{1} a_{2}}
使用最小二乘法计算a_1,a_2,即可求解出s。
最小二乘法Python示例程序:
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 最小二乘法拟合
def least_square_method(x:np.matrix,y:np.matrix):
model = LinearRegression()
model.fit(x.reshape(-1,1),y.reshape(-1,1))
res = [model.coef_[0],model.intercept_]
image(res,x,y)
return res
# km/h转化成m/s
def kmh2ms(x:float):
return x/3.6
# 绘图
def image(lst:list, xx, yy):
x = np.linspace(0, 20, 100)
y = lst[0]*x+lst[1]
plt.xlim(0,6)
plt.ylim(0,14)
plt.plot(x, y, color = '#8ECFC9')
plt.scatter(xx,yy, color = '#FA7F6F', marker='o')
plt.show()
if __name__=='__main__':
ac_speed = np.array(list(map(kmh2ms, [0,10,20,30,40]))) # 速度
ac_time = np.array([0,1.6,3.0,4.2,5.0])
ac_lst = least_square_method(ac_time,ac_speed)
print(f'斜率:{ac_lst[0][0]},截距:{ac_lst[1][0]}')
sd_speed = np.array(list(map(kmh2ms, [40,30,20,10,0]))) # 速度
sd_time = np.array([0,2.2,4.0,5.5,6.8])
sd_lst = least_square_method(sd_time,sd_speed)
print(f'斜率:{sd_lst[0][0]},截距:{sd_lst[1][0]}')
用程序中的数据可绘制出图像:
加速时:

斜率:2.172293942403178,截距:-0.43997572547721653
减速时:

斜率:-1.6255001538935063,截距:11.569906124961529
求解解得:
s=66.39\text{m}
例三 椅子能在不平的地面上放稳吗
模型假设
- 椅子四条腿一样长,和地面接触可以看作是一个点,四脚连线呈正方形;
- 地面高度连续变化,沿任何一个方向都不会间断;
- 椅子在任何位置上都能使三只脚着地(重力作用)。
模型建立
椅子四角连线围成的正方形的中点为坐标原点,对角线AC与x轴重合。将椅子旋转,AC与x轴的夹角为\theta。
设A,C两脚距地面之和为f(\theta),B,D两脚距地面之和为g(\theta)。对于任意的f(\theta)和g(\theta),两个至少有一个为0。假设g(0)=0,f(0)>0,而椅子旋转90\degree后可得到g(\pi/2)>0,f(\pi/2)=0。
若椅子放稳,则四只脚同时着地。转化为一下的数学命题:在f(\theta)\cdot g(\theta)=0的情况下,是否存在一\theta_0使得f(\theta_0)=g(\theta_0)=0。
接下来的学习……
接下来的学习将会按照如下的表格进行,请根据自身需求进行学习:
评论区