跳到正文
格致开物MATHWIKI

数学建模

AIContentBot留言 | 贡献2026年9月20日 (日) 10:06的版本 (扩充线性代数、最小二乘、贝叶斯与正态分布,接通几何和建模学习路径)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

数学建模(mathematical modeling)是为一个实际问题选择变量、提出假设、建立数学关系,并用观测与计算检验结果的过程。模型保留的是回答当前问题所需要的特征;预测下一分钟的水位,与研究整个水箱的流场,需要的模型可以很不相同。

水箱五分钟后有多高

假设我们每分钟记录一次水箱水位,想用前四次读数预测接下来两分钟。下面是一组专门构造的教学数据,不是实际设备的观测。前四点用于估计参数,后两点预先留作验证。

数据用途 时间 t(分钟) 水位 h(厘米)
训练 0,1,2,3 1.0,2.0,2.0,4.0
留出验证 4,5 4.6,5.8

水位总体上升,却不是每分钟都增加相同数值。可以先尝试一条直线描述平均趋势: ĥ(t)=at+b. 符号 ĥ 表示预测水位,区别于读数 h;参数 a 是每分钟平均上升多少厘米,b 是模型在零时刻的水位。若用厘米和分钟,a 的单位是厘米每分钟,b 的单位是厘米。

在计算斜率前,先要回答为什么选直线。如果短时间内净流入量和水箱截面积近似不变,直线有一个守恒关系的依据。

直线从哪里来

设水箱水平截面积为常数 A,水位 h 对应体积 V=Ah。每分钟流入体积为 qin,流出体积为 qout。没有其他漏失时,体积变化率等于净流入率: Adhdt=qinqout. 若右边也是常数,对时间积分得到 h(t)=h(0)+qinqoutAt. 与直线模型比较可知,斜率对应净流入率除以截面积,截距对应起始水位。

例如 A=200 cm2、净流入为 180 cm3/min,水位上升速率就是 180/200=0.9 cm/min。这一数值说明参数怎样连接到物理量;仅凭水位读数还不能分别知道面积和流量,后面会回到这个问题。

实际读数可能含测量误差,净流量也可能有小波动,因此数据点不必都在同一直线上。接下来需要规定怎样从几条不同的候选直线中选出一条。

用四个训练点选出一条直线

对某条直线,每个训练点的残差定义为“读数减预测”:ri=hiatib。采用最小二乘,就是选 a,b 让残差平方和 S(a,b)=i=14(hiatib)2 最小。平方使正负偏差不会互相抵消,也使较大的偏差承担更高代价。

先固定斜率 a,对截距求导并令其为零: Sb=2i(hiatib)=0. 共有四点,因此 4b=ihiaiti。用横线表示平均数,便得到 b=h¯at¯。这说明拟合直线经过平均点 (t¯,h¯)

把这个截距代回去,残差成为 (hih¯)a(tit¯)。再对 a 求导,令其为零: i(tit¯)(hih¯)ai(tit¯)2=0. 只要时间点不全相同,第二个求和为正,就可解出 a=i(tit¯)(hih¯)i(tit¯)2,b=h¯at¯. 这是一个系数为正的二次目标,所得驻点也是唯一最小值。

本例平均时间为 1.5,平均水位为 2.25。时间偏差为 1.5,0.5,0.5,1.5,水位偏差为 1.25,0.25,0.25,1.75。分子逐项相乘再相加: 1.875+0.1250.125+2.625=4.5. 分母为 2.25+0.25+0.25+2.25=5。所以 a=4.5/5=0.9,b=2.250.9×1.5=0.9. 得到预测式 ĥ(t)=0.9t+0.9

四个训练点和两个留出验证点,直线水位等于零点九倍时间加零点九,竖线表示训练残差
拟合线没有穿过所有点。训练点用于估计参数,空心方形表示未参与拟合的后续时刻数据。

图中实心训练点用来确定直线;从点到直线的竖线就是残差。特别是两分钟处读数为二,而直线预测为 2.7,对应最长的一段向下偏差。空心方形是没有参与拟合的四、五分钟读数,用来检查预测。

拟合算对了吗,预测又怎样

在训练时刻,预测为 0.9,1.8,2.7,3.6,残差为 0.1,0.2,0.7,0.4。平方和为 0.01+0.04+0.49+0.16=0.7. 均方根误差把平方和除以点数再开方,因此回到厘米单位: RMSEtrain=0.7/40.4183 cm. 残差还有两项可用于检查计算:和为零,与时间列的乘积和也为零。第二项是 0×0.1+1×0.2+2×(0.7)+3×0.4=0,它们正是前面两个求导方程。

现在才使用留出数据。四分钟与五分钟的预测分别为 4.5,5.4,读数为 4.6,5.8,残差为 0.1,0.4。留出误差为 RMSEtest=(0.12+0.42)/20.2915 cm. 它比训练误差小,可以是这两个点的偶然表现,并不矛盾。两个验证点提供了一次具体检验,还不足以说明更长时间内也有同样精度。

这里的两个问题应分开:正规方程和残差核对检验“最小二乘是否算对”;留出数据检验“这条直线能否预测未用于选择它的数据”。前者成立,不自动推出后者。若看了留出数据再调模型,就相当于又把这些数据用于选择,需要新的独立检验。

一个读数改动,对预测有什么影响

只把三分钟处的训练读数从 4.0 改为 4.1,其他数据保持。由于时间没变,斜率分母仍为五。分子增量为 (31.5)×0.1=0.15, 因为所有时间偏差之和为零,水位平均数的变化不会额外影响分子。因此斜率增加 0.15/5=0.03,新斜率为 0.93。水位均值增加 0.1/4=0.025,新截距为 2.2750.93×1.5=0.88. 五分钟处的新预测为 0.93×5+0.88=5.53,比原来的 5.4 增加 0.13。一个读数只改了 0.1,外推处的变化却稍大。

一般而言,参数变化给出 Δĥ(t)=tΔa+Δb。随着预测时间增加,斜率偏差的影响被放大。若斜率偏高 0.05 厘米每分钟、截距偏高 0.1 厘米,十分钟处偏高 0.6 厘米,五十分钟处偏高 2.6 厘米。这是确定性的敏感性计算,若要把它解释为概率区间,还需统计误差模型。

哪些物理量能够由读数确定

回到守恒式,水位斜率只给出 (qinqout)/A。面积二百、净流量一百八十给出斜率 0.9;面积四百、净流量三百六十也给出同样斜率。无论再观察多久,仅凭相同的线性水位变化都分不开这两种解释。

这种不同参数产生同样预测的情形,称为参数不可识别。需要额外测量截面积或流量,才能分别确定它们;或者把可识别的比值直接作为一个参数。

即使只估计直线的斜率与截距,采样方式也重要。若四个读数都在同一时刻,公式分母 (tit¯)2 为零,无法区分斜率与截距。若时刻非常接近,分母很小,同样大小的读数扰动会显著影响斜率。因此实验在哪些时刻采样,决定了数据能够回答什么问题。

残差什么时候提示要换模型

继续收集数据时,如果残差先负、后正、再负,形成系统的弯曲趋势,直线可能遗漏了水位变化的弯曲。如果随着时间推移残差持续增大,可能是流量或截面积不再稳定。如果只有某一点异常,则应先核对记录、单位与传感器状况。

例如出水口流量随水位上升而增加,净流入就不再是常数;瓶状水箱的截面积也可能随高度变化。守恒模型应相应改为 A(h)dhdt=qin(t)qout(h,t). 水箱接近装满时,还需要处理容量与溢流。这样,修改模型的理由来自现象和机制,而非仅为降低已有四点的误差。

残差平方和小,也不能证明某个输入具有因果作用。若要研究“调大入口会使水位怎样变化”,需要控制或记录流量变化、截面积等条件;仅观察两个量同时上升,可能只是共享时间趋势。模型的用途决定需要哪类证据。

从这个例子形成一次完整建模过程

水箱例子的步骤可以整理为一个可重复的循环:先规定预测目标与时间范围,再列变量和单位;用体积守恒提出直线假设;用训练点求参数;核对计算并用后续点检验预测;出现系统偏差时,回到机制或观测设计修改模型。

不同问题会采用不同数学结构。水位随时间的动态变化可用微分方程,测量误差可用概率,多个水箱之间的连接可用图论,在容量与成本限制下分配流量可用优化。这些结构都围绕所要回答的问题选择,不是每个模型都需要全部使用。

一个可复算的模型记录应保留数据来源、变量单位、假设、训练与验证划分、计算程序和适用范围。最小二乘计算不需要先假定正态噪声,但置信区间等统计推断需要说明相应条件。量纲检查也很有用:守恒式两边都应是体积每时间,若某项单位不一致,可在求解前发现问题。

下载与复现

下载:水位线性拟合教学包(CSV、Python、预期结果与说明)

教学包保留本例合成数据、仅依赖 Python 标准库的脚本与预期结果。解压后运行 python3 fit.py,可以复算参数 a=b=0.9、训练平方和 0.7 与留出平方和 0.17。修改三分钟读数后,也可检查上一节的扰动结果。

方法背景

天文测量、力学与人口研究都推动了数学模型的发展。这里使用的最小二乘法,在 Legendre 1805 年的发表及 Gauss 后来的工作中形成了重要发展,具体文献见最小二乘法。它将“怎样选一条最合适的曲线”变成可计算的目标。

Boyd 与 Vandenberghe 的应用线性代数教材从数据与应用问题展开拟合;Lebl 的微分方程教材从动态过程建立方程。水箱例子同时使用了这两种思路:守恒解释结构,数据估计参数,后续观测检验用途。

按问题选择模型

水位拟合的统计解释见线性模型:它沿用本例数据,区分真实平均响应、拟合线和下一次随机读数,并计算两种不同的区间。若问题改成“每月先流失一定比例,再补入固定水量”,差分方程模型从状态更新式推导平衡水量与收敛速度。若两个状态互相影响,捕食者-猎物模型展示如何从相遇假设建立耦合方程,再用零增长线、相图和守恒量研究变化。

这三类问题分别关心输入与平均响应的关系、离散时刻的状态更新,以及连续时间内两个种群的相互作用。选择模型时,先写清记录了什么、时间怎样计量、哪些机制被保留,再决定使用哪组方程。

参考来源与延伸阅读