2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs
2025年数学建模美赛 A题分析(2)楼梯磨损分析模型
2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型
2025年数学建模美赛 A题分析(4)楼梯使用人数模型
特别提示:
- 本文针对 2025年 A题进行分析,每天不断更新,建议收藏。
- 其它题目的分析详见【youcans 的数学建模课】 专栏。
文章目录
- 2025年数学建模美赛 A题分析(2)楼梯使用频率数学模型
- 1. 问题概述:
- 2. 楼梯使用频率的数学模型
- 2.1 楼梯使用频率数学模型的建立
- 2.2 所需数据与测量方法
- 2.3 假设条件
- 3. 模型推导
- 3.1 基本公式
- 3.2 楼梯总使用人次
- 3.3 时间跨度的单位换算
- 4. 实施步骤
- 4. 模型扩展
- 5. 模型验证
- 6. 模型结论
- 7. 微分方程数值解法
- 7.1 基本概念
- 7.3 scipy.integrate.odeint() 函数
- 7.4 例题 1:求微分方程的数值解
- 7.5 常微分方程的编程步骤
2025年数学建模美赛 A题分析(2)楼梯使用频率数学模型
1. 问题概述:
用于建造台阶的石材和其他材料经受着持续的长期磨损,并且这种磨损可能是不均匀的。
问题的任务是:开发一个模型,通过特定楼梯的磨损模式得出以下基本预测:
- 楼梯使用的频率。
- 使用楼梯时是否更倾向于某一方向。
- 同时使用楼梯的人数(例如,人们是否成对并排爬楼梯,还是单列行走)。
进一步地,假设已经获得楼梯的建造年代、使用方式以及建筑中日常生活模式的估算信息,需要回答以下问题:
- 磨损是否与现有信息一致?
- 楼梯的年龄及其估算的可靠性如何?
- 楼梯是否经历过维修或翻修?
- 能否确定材料的来源?例如,石材的磨损是否与考古学家认为的原始采石场材料一致?若使用木材,其磨损是否与假定使用的树种和年代相符?
- 有关楼梯典型每日使用人数的信息,以及是否有大量人群在短时间内使用,或少量人群长期使用的情况?
2. 楼梯使用频率的数学模型
2.1 楼梯使用频率数学模型的建立
楼梯的使用频率可以通过磨损深度与材料的磨损速率之间的关系推导出来。以下将具体讨论所需数据、假设条件以及模型推导过程。
2.2 所需数据与测量方法
-
必须测量的数据
(1)楼梯表面磨损深度
使用激光扫描或高精度3D建模技术,获取每一级台阶的表面高度变化。
关键指标:磨损深度 (𝑑),以毫米为单位。
(2)楼梯材料的物理特性
硬度,如通过莫氏硬度或布氏硬度测量。
磨损速率 (𝑘):单位人次使用对材料造成的磨损深度(毫米/人次),可通过实验测得。
(3)楼梯使用的时间跨度
建造时间与当前时间的差值(𝑇),以年为单位。 -
非破坏性测量方法
激光扫描技术:测量台阶表面微小的高度变化,精度达到亚毫米级。
材料分析:通过便携式X射线荧光仪(XRF)获取材料成分,结合实验数据确定磨损速率。 -
其他辅助信息
使用的历史记录:如建筑物的使用时间、功能(宗教场所、住宅等)以及可能的高峰使用时期。
2.3 假设条件
-
磨损线性性假设
假设材料的磨损随使用人次呈线性关系,即磨损深度与人次成正比。
合理性:对于硬质材料如石材,这一假设在低应力范围内普遍成立。 -
均匀使用假设
假设楼梯的磨损主要集中在中心区域,所有使用者大致遵循相似的路径。
假设楼梯的磨损随时间均匀分布。 -
无重大维修假设
假设楼梯在建造后未经历大规模维修或翻新。
3. 模型推导
3.1 基本公式
磨损深度(𝑑) 的表达式为:
d = k ∗ N d = k * N d=k∗N
其中:
𝑑:楼梯的平均磨损深度(毫米)。
𝑘:材料的磨损速率(毫米/人次)。
𝑁:楼梯总使用人次。
3.2 楼梯总使用人次
总使用人次 𝑁 可通过以下公式计算:
N = f ⋅ T N=f⋅T N=f⋅T
其中:
𝑓:楼梯的日平均使用频率(人次/天)。
𝑇:楼梯的使用时间(天)。
结合以上两式,得到楼梯日平均使用频率的表达式:
$$ f = \frac{d}{k*T}
3.3 时间跨度的单位换算
若 𝑇 以年为单位,则需要转换为天:
T d a y = T ∗ 365 T_{day} = T*365 Tday=T∗365
4. 实施步骤
-
数据采集
(1)使用激光扫描技术,获取楼梯表面高度数据,计算磨损深度 𝑑。
(2)分析楼梯材料,通过实验获取磨损速率 𝑘。
(3)收集建筑物历史记录,确定楼梯的使用年限 𝑇。 -
参数计算
(1)根据扫描数据,计算每一级台阶的磨损深度 𝑑,取平均值。
(2)使用实验室数据或文献值,确定材料的磨损速率 𝑘。 -
频率计算
将 𝑑、𝑘 和 𝑇 代入公式 f = d k ∗ T f = \frac{d}{k*T} f=k∗Td,计算楼梯的日均使用频率 𝑓。
4. 模型扩展
- 对复杂磨损模式的改进
若楼梯中央和边缘的磨损显著不同,可分区域计算磨损深度,构建更精细的模型:
f = d c e n t e r + d e d g e 2 ∗ k ∗ T f = \frac{d_{center} + d_{edge}}{2*k*T} f=2∗k∗Tdcenter+dedge
- 非均匀使用的时间分布
若历史记录显示某段时间人流量较大,可引入时间权重因子 w ( t ) w(t) w(t),调整模型:
f = 1 T ∫ 0 T d k ∗ w ( t ) d t f = \frac{1}{T} \int^T_0 \frac{d}{k*w(t)} dt f=T1∫0Tk∗w(t)ddt
5. 模型验证
-
实验验证
在实验室中模拟不同频率的磨损,验证磨损深度与使用人次的线性关系。 -
历史数据验证
将模型预测值与历史使用记录对比,验证日均使用频率 𝑓 的合理性。
6. 模型结论
该模型通过分析楼梯磨损深度、材料特性和历史时间,计算出楼梯的日均使用频率。模型的简单线性结构便于应用,并可扩展至处理更复杂的磨损模式。需要注意的是,模型的准确性依赖于材料磨损速率 𝑘 和历史数据的准确性。
7. 微分方程数值解法
7.1 基本概念
微分方程是描述系统的状态随时间和空间演化的数学工具。物理中许多涉及变力的运动学、动力学问题,如空气的阻力为速度函数的落体运动等问题,很多可以用微分方程求解。微分方程在化学、工程学、经济学和人口统计等领域也有广泛应用。
具体来说,微分方程是指含有未知函数及其导数的关系式。
- 微分方程按自变量个数分为:只有一个自变量的常微分方程(Ordinary Differential Equations)和包含两个或两个以上独立变量的偏微分方程(Partial Differential Equations)。
- 微分方程按阶数分为:一阶、二阶、高阶,微分方程的阶数取决于方程中最高次导数的阶数。
- 微分方程还可以分为:(非)齐次,常(变)系数,(非)线性,初值问题/边界问题…
求解常微分方程的基本方法,有欧拉法、龙格库塔法等,可以详见各种教材,撰写数模竞赛论文时还是可以抄几段的。本文沿用“编程方案”的概念,不涉及这些算法的具体内容,只探讨如何使用 Python 的工具包、库函数,零基础求解微分方程模型。
我们的选择是 Python 常用工具包三剑客:Scipy、Numpy 和 Matplotlib:
- Scipy 是 Python 算法库和数学工具包,包括最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号和图像处理、常微分方程求解等模块。有人介绍 Scipy 就是 Python 语言的 Matlab,所以大部分数学建模问题都可以用它搞定。
- Numpy 提供了高维数组的实现与计算的功能,如线性代数运算、傅里叶变换及随机数生成,另外还提供了与 C/C++ 等语言的集成工具。
- Matplotlib 是可视化工具包,可以方便地绘制各种数据可视化图表,如折线图、散点图、直方图、条形图、箱形图、饼图、三维图,等等。
### 7.2 一阶常微分方程(组)模型
给定初始条件的一阶常微分方程(组)的标准形式是:
{
d
y
d
t
=
f
(
y
,
t
)
y
(
t
0
)
=
y
0
\begin{cases} \begin{aligned} &\frac{dy}{dt} = f(y,t)\\ &y(t_0) = y_0 \end{aligned} \end{cases}
⎩
⎨
⎧dtdy=f(y,t)y(t0)=y0
式中的 y 在常微分方程中是标量,在常微分方程组中是数组向量。
7.3 scipy.integrate.odeint() 函数
SciPy 提供了两种方式求解常微分方程:基于 odeint
函数的 API 比较简单易学,基于 ode
类的面向对象的 API 更加灵活。
**scipy.integrate.odeint() **是求解微分方程的具体方法,通过数值积分来求解常微分方程组。在 odeint
函数内部使用 FORTRAN 库 odepack 中的 lsoda,可以求解一阶刚性系统和非刚性系统的初值问题。官网介绍详见: scipy.integrate.odeint — SciPy v1.6.3 Reference Guide 。
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0, tfirst=False)
odeint 的主要参数:
求解标准形式的微分方程(组)主要使用前三个参数:
- func: callable(y, t, …) 导数函数 f ( y , t ) f(y,t) f(y,t) ,即 y 在 t 处的导数,以函数的形式表示
- y0: array: 初始条件 y 0 y_0 y0,对于常微分方程组 y 0 y_0 y0 则为数组向量
- t: array: 求解函数值对应的时间点的序列。序列的第一个元素是与初始条件 y 0 y_0 y0 对应的初始时间 t 0 t_0 t0;时间序列必须是单调递增或单调递减的,允许重复值。
其它参数简介如下:
-
args: 向导数函数 func 传递参数。当导数函数 f ( y , t , p 1 , p 2 , . . ) f(y,t,p1,p2,..) f(y,t,p1,p2,..) 包括可变参数 p1,p2… 时,通过 args =(p1,p2,…) 可以将参数p1,p2… 传递给导数函数 func。argus 的用法参见 2.4 中的实例2。
-
Dfun: func 的雅可比矩阵,行优先。如果 Dfun 未给出,则算法自动推导。
-
col_deriv: 自动推导 Dfun的方式。
-
printmessg: 布尔值。控制是否打印收敛信息。
-
其它参数用于控制求解算法的参数,一般情况可以忽略。
odeint 的主要返回值:
- y: array 数组,形状为 (len(t),len(y0),给出时间序列 t 中每个时刻的 y 值。
7.4 例题 1:求微分方程的数值解
{ d y d t = s i n ( t 2 ) y ( − 10 ) = 1 \begin{cases} \begin{aligned} &\frac{dy}{dt} = sin(t^2)\\ &y(-10) = 1 \end{aligned} \end{cases} ⎩ ⎨ ⎧dtdy=sin(t2)y(−10)=1
7.5 常微分方程的编程步骤
以该题为例讲解 scipy.integrate.odeint() 求解常微分方程初值问题的步骤:
-
导入 scipy、numpy、matplotlib 包;
-
定义导数函数 f ( y , t ) = s i n ( t 2 ) f(y,t)=sin(t^2) f(y,t)=sin(t2) ;
-
定义初值 y 0 y_0 y0 和 y y y 的定义区间 [ t 0 , t ] [t_0,\ t] [t0, t];
-
调用 odeint() 求 y y y 在定义区间 [ t 0 , t ] [t_0,\ t] [t0, t] 的数值解。
Python 例程
# 1. 求解微分方程初值问题(scipy.integrate.odeint)
from scipy.integrate import odeint # 导入 scipy.integrate 模块
import numpy as np
import matplotlib.pyplot as plt
def dy_dt(y, t): # 定义函数 f(y,t)
return np.sin(t**2)
y0 = [1] # y0 = 1 也可以
t = np.arange(-10,10,0.01) # (start,stop,step)
y = odeint(dy_dt, y0, t) # 求解微分方程初值问题
# 绘图
plt.plot(t, y)
plt.title("scipy.integrate.odeint")
plt.show()
例程运行结果
【未完待续,请继续关注】
2025年数学建模美赛 A题分析(3)楼梯方向偏好模型