2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs
2025年数学建模美赛 A题分析(2)楼梯磨损分析模型
2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型
2025年数学建模美赛 A题分析(4)楼梯使用人数模型
特别提示:
用于建造台阶的石材和其他材料经受着持续的长期磨损,并且这种磨损可能是不均匀的。
问题的任务是:开发一个模型,通过特定楼梯的磨损模式得出以下基本预测:
进一步地,假设已经获得楼梯的建造年代、使用方式以及建筑中日常生活模式的估算信息,需要回答以下问题:
楼梯的使用频率可以通过磨损深度与材料的磨损速率之间的关系推导出来。以下将具体讨论所需数据、假设条件以及模型推导过程。
必须测量的数据
(1)楼梯表面磨损深度
使用激光扫描或高精度3D建模技术,获取每一级台阶的表面高度变化。
关键指标:磨损深度 (),以毫米为单位。
(2)楼梯材料的物理特性
硬度,如通过莫氏硬度或布氏硬度测量。
磨损速率 ():单位人次使用对材料造成的磨损深度(毫米/人次),可通过实验测得。
(3)楼梯使用的时间跨度
建造时间与当前时间的差值(),以年为单位。
非破坏性测量方法
激光扫描技术:测量台阶表面微小的高度变化,精度达到亚毫米级。
材料分析:通过便携式X射线荧光仪(XRF)获取材料成分,结合实验数据确定磨损速率。
其他辅助信息
使用的历史记录:如建筑物的使用时间、功能(宗教场所、住宅等)以及可能的高峰使用时期。
磨损线性性假设
假设材料的磨损随使用人次呈线性关系,即磨损深度与人次成正比。
合理性:对于硬质材料如石材,这一假设在低应力范围内普遍成立。
均匀使用假设
假设楼梯的磨损主要集中在中心区域,所有使用者大致遵循相似的路径。
假设楼梯的磨损随时间均匀分布。
无重大维修假设
假设楼梯在建造后未经历大规模维修或翻新。
磨损深度() 的表达式为:
d = k ∗ N d = k * N d=k∗N
其中:
:楼梯的平均磨损深度(毫米)。
:材料的磨损速率(毫米/人次)。
:楼梯总使用人次。
总使用人次 可通过以下公式计算:
N = f ⋅ T N=f⋅T N=f⋅T
其中:
:楼梯的日平均使用频率(人次/天)。
:楼梯的使用时间(天)。
结合以上两式,得到楼梯日平均使用频率的表达式:
$$ f = \frac{d}{k*T}
若 以年为单位,则需要转换为天:
T d a y = T ∗ 365 T_{day} = T*365 Tday=T∗365
数据采集
(1)使用激光扫描技术,获取楼梯表面高度数据,计算磨损深度 。
(2)分析楼梯材料,通过实验获取磨损速率 。
(3)收集建筑物历史记录,确定楼梯的使用年限 。
参数计算
(1)根据扫描数据,计算每一级台阶的磨损深度 ,取平均值。
(2)使用实验室数据或文献值,确定材料的磨损速率 。
频率计算
将 、 和 代入公式 f = d k ∗ T f = \frac{d}{k*T} f=k∗Td,计算楼梯的日均使用频率 。
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
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
实验验证
在实验室中模拟不同频率的磨损,验证磨损深度与使用人次的线性关系。
历史数据验证
将模型预测值与历史使用记录对比,验证日均使用频率 的合理性。
该模型通过分析楼梯磨损深度、材料特性和历史时间,计算出楼梯的日均使用频率。模型的简单线性结构便于应用,并可扩展至处理更复杂的磨损模式。需要注意的是,模型的准确性依赖于材料磨损速率 和历史数据的准确性。
微分方程是描述系统的状态随时间和空间演化的数学工具。物理中许多涉及变力的运动学、动力学问题,如空气的阻力为速度函数的落体运动等问题,很多可以用微分方程求解。微分方程在化学、工程学、经济学和人口统计等领域也有广泛应用。
具体来说,微分方程是指含有未知函数及其导数的关系式。
求解常微分方程的基本方法,有欧拉法、龙格库塔法等,可以详见各种教材,撰写数模竞赛论文时还是可以抄几段的。本文沿用“编程方案”的概念,不涉及这些算法的具体内容,只探讨如何使用 Python 的工具包、库函数,零基础求解微分方程模型。
我们的选择是 Python 常用工具包三剑客:Scipy、Numpy 和 Matplotlib:
给定初始条件的一阶常微分方程(组)的标准形式是:
{ 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 在常微分方程中是标量,在常微分方程组中是数组向量。
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 的主要参数:
求解标准形式的微分方程(组)主要使用前三个参数:
其它参数简介如下:
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 的主要返回值:
{ 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
以该题为例讲解 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)楼梯方向偏好模型