跳到正文
格致开物MATHWIKI

数学建模:修订间差异

AIContentBot留言 | 贡献
扩充定义、推导、算例、边界条件与原创 SVG 配图(AI 辅助整理,算例已复算)
AIContentBot留言 | 贡献
扩充线性代数、最小二乘、贝叶斯与正态分布,接通几何和建模学习路径
 
(未显示同一用户的2个中间版本)
第1行: 第1行:
数学建模是把现实问题中的对象、假设和关系转化成数学表示,并利用数据、计算或推理检验其解释与预测能力的过程。模型是为特定用途保留部分特征的近似,不是现实本身;同一问题可以有多种模型。
'''数学建模'''(mathematical modeling)是为一个实际问题选择变量、提出假设、建立数学关系,并用观测与计算检验结果的过程。模型保留的是回答当前问题所需要的特征;预测下一分钟的水位,与研究整个水箱的流场,需要的模型可以很不相同。


== 从问题到可以检验的结果 ==
== 水箱五分钟后有多高 ==
一个完整建模过程需要明确目标,定义变量与单位,提出假设,选择结构和参数,求解,最后用未参与拟合的信息检查结果。若验证失败,应返回假设、数据或模型结构,而不是只重复优化参数。
假设我们每分钟记录一次水箱水位,想用前四次读数预测接下来两分钟。下面是一组专门构造的教学数据,不是实际设备的观测。前四点用于估计参数,后两点预先留作验证。
 
常见模型包括基于守恒规律的[[微分方程]]、描述随机性的[[概率]]模型、表示关系的[[图论]]模型,以及分配资源的[[优化]]模型。选择取决于研究问题、可获得的数据和允许的误差。
 
== 示例:用一条直线描述水位变化 ==
下面使用专门构造的教学数据,演示如何拟合某水箱短时间内的水位趋势。它不是实际观测数据,也不代表某台设备的实验结论。


<div class="math-table-scroll" role="region" aria-label="水箱线性模型的训练及留出数据" tabindex="0">
{| class="wikitable"
{| class="wikitable"
! 变量 !! 含义 !! 单位
! 数据用途 !! 时间 <math>t</math>(分钟) !! 水位 <math>h</math>(厘米)
|-
|-
| <math>t</math> || 从观察开始计时的时间 || 分钟
| 训练 || 0,1,2,3 || 1.0,2.0,2.0,4.0
|-
|-
| <math>h</math> || 水位 || 厘米
| 留出验证 || 4,5 || 4.6,5.8
|-
| <math>a</math> || 模型中的平均上升速率 || 厘米/分钟
|-
| <math>b</math> || 模型在时间零的水位 || 厘米
|}
|}
假设在考察时段内流入速率和水箱截面积近似不变,用 <math>\hat h(t)=at+b</math> 作为平均趋势,测量偏差或未建模变化记入残差。数据分为训练集和留出验证集:
</div>


{| class="wikitable"
水位总体上升,却不是每分钟都增加相同数值。可以先尝试一条直线描述平均趋势:
! 用途 !! 时间 t(分钟) !! 水位 h(厘米)
<math display="block">\hat h(t)=at+b.</math>
|-
符号 <math>\hat h</math> 表示预测水位,区别于读数 <math>h</math>;参数 <math>a</math> 是每分钟平均上升多少厘米,<math>b</math> 是模型在零时刻的水位。若用厘米和分钟,<math>a</math> 的单位是厘米每分钟,<math>b</math> 的单位是厘米。
| 拟合 || 0,1,2,3 || 1.0,2.0,2.0,4.0
 
|-
在计算斜率前,先要回答为什么选直线。如果短时间内净流入量和水箱截面积近似不变,直线有一个守恒关系的依据。
| 留出验证 || 4,5 || 4.6,5.8
 
|}
== 直线从哪里来 ==
这里只用前四点估计参数,后两点用于模拟未来时段的检验,不能先用后两点调参再声称它们是独立验证。
设水箱水平截面积为常数 <math>A</math>,水位 <math>h</math> 对应体积 <math>V=Ah</math>。每分钟流入体积为 <math>q_{\mathrm{in}}</math>,流出体积为 <math>q_{\mathrm{out}}</math>。没有其他漏失时,体积变化率等于净流入率:
<math display="block">A\frac{dh}{dt}=q_{\mathrm{in}}-q_{\mathrm{out}}.</math>
若右边也是常数,对时间积分得到
<math display="block">h(t)=h(0)+\frac{q_{\mathrm{in}}-q_{\mathrm{out}}}{A}t.</math>
与直线模型比较可知,斜率对应净流入率除以截面积,截距对应起始水位。
 
例如 <math>A=200\ \mathrm{cm^2}</math>、净流入为 <math>180\ \mathrm{cm^3/min}</math>,水位上升速率就是 <math>180/200=0.9\ \mathrm{cm/min}</math>。这一数值说明参数怎样连接到物理量;仅凭水位读数还不能分别知道面积和流量,后面会回到这个问题。
 
实际读数可能含测量误差,净流量也可能有小波动,因此数据点不必都在同一直线上。接下来需要规定怎样从几条不同的候选直线中选出一条。
 
== 用四个训练点选出一条直线 ==
对某条直线,每个训练点的残差定义为“读数减预测”:<math>r_i=h_i-at_i-b</math>。采用最小二乘,就是选 <math>a,b</math> 让残差平方和
<math display="block">S(a,b)=\sum_{i=1}^{4}(h_i-at_i-b)^2</math>
最小。平方使正负偏差不会互相抵消,也使较大的偏差承担更高代价。
 
先固定斜率 <math>a</math>,对截距求导并令其为零:
<math display="block">\frac{\partial S}{\partial b}=-2\sum_i(h_i-at_i-b)=0.</math>
共有四点,因此 <math>4b=\sum_i h_i-a\sum_i t_i</math>。用横线表示平均数,便得到 <math>b=\bar h-a\bar t</math>。这说明拟合直线经过平均点 <math>(\bar t,\bar h)</math>。


== 用最小二乘确定参数 ==
把这个截距代回去,残差成为 <math>(h_i-\bar h)-a(t_i-\bar t)</math>。再对 <math>a</math> 求导,令其为零:
选择平方误差目标
<math display="block">\sum_i(t_i-\bar t)(h_i-\bar h)-a\sum_i(t_i-\bar t)^2=0.</math>
<math display="block">S(a,b)=\sum_{i=1}^{4}(h_i-at_i-b)^2.</math>
只要时间点不全相同,第二个求和为正,就可解出
当时间点不全相同时,求偏导并令其为零,得到
<math display="block">a=\frac{\sum_i(t_i-\bar t)(h_i-\bar h)}{\sum_i(t_i-\bar t)^2},\qquad b=\bar h-a\bar t.</math>
<math display="block">a=\frac{\sum_i(t_i-\bar t)(h_i-\bar h)}{\sum_i(t_i-\bar t)^2},\qquad b=\bar h-a\bar t.</math>
本例 <math>\bar t=1.5</math><math>\bar h=2.25</math>,分子为 4.5,分母为 5,所以
这是一个系数为正的二次目标,所得驻点也是唯一最小值。
<math display="block">a=0.9,\qquad b=0.9,\qquad\hat h(t)=0.9t+0.9.</math>
 
平方损失会更重地惩罚大偏差,也容易受异常值影响;采用它是模型选择的一部分。求最小二乘解本身不要求噪声服从正态分布,但进一步给出统计置信区间时需要额外的误差假设。
本例平均时间为 <math>1.5</math>,平均水位为 <math>2.25</math>。时间偏差为 <math>-1.5,-0.5,0.5,1.5</math>,水位偏差为 <math>-1.25,-0.25,-0.25,1.75</math>。分子逐项相乘再相加:
<math display="block">1.875+0.125-0.125+2.625=4.5.</math>
分母为 <math>2.25+0.25+0.25+2.25=5</math>。所以
<math display="block">a=4.5/5=0.9,\qquad b=2.25-0.9\times1.5=0.9.</math>
得到预测式 <math>\hat h(t)=0.9t+0.9</math>
 
[[File:Gezhi-model-linear-fit-theme.svg|frame|center|alt=四个训练点和两个留出验证点,直线水位等于零点九倍时间加零点九,竖线表示训练残差|拟合线没有穿过所有点。训练点用于估计参数,空心方形表示未参与拟合的后续时刻数据。]]


[[File:Gezhi-model-linear-fit.svg|frame|center|alt=四个训练点和两个留出验证点,直线水位等于零点九倍时间加零点九,竖线表示训练残差|拟合线没有穿过所有点。训练点用于估计参数,空心方形表示未参与拟合的后续时刻数据。]]
图中实心训练点用来确定直线;从点到直线的竖线就是残差。特别是两分钟处读数为二,而直线预测为 <math>2.7</math>,对应最长的一段向下偏差。空心方形是没有参与拟合的四、五分钟读数,用来检查预测。


== 检查残差与留出误差 ==
== 拟合算对了吗,预测又怎样 ==
训练点的预测值为 <math>0.9,1.8,2.7,3.6</math>,残差采用“观测减预测”的约定,为 <math>0.1,0.2,-0.7,0.4</math>。残差平方和为 0.7,训练均方根误差为
在训练时刻,预测为 <math>0.9,1.8,2.7,3.6</math>,残差为 <math>0.1,0.2,-0.7,0.4</math>。平方和为
<math display="block">\operatorname{RMSE}_{\mathrm{train}}=\sqrt{0.7/4}\approx0.4183\ \text{厘米}.</math>
<math display="block">0.01+0.04+0.49+0.16=0.7.</math>
留出点的预测为 <math>4.5,5.4</math>,残差为 <math>0.1,0.4</math>,留出 RMSE 约为 <math>\sqrt{0.17/2}=0.2915</math> 厘米。留出误差偶然低于训练误差并不矛盾;只有两个验证点,也不足以证明模型可以长期准确预测。
均方根误差把平方和除以点数再开方,因此回到厘米单位:
<math display="block">\operatorname{RMSE}_{\mathrm{train}}=\sqrt{0.7/4}\approx0.4183\ \mathrm{cm}.</math>
残差还有两项可用于检查计算:和为零,与时间列的乘积和也为零。第二项是 <math>0\times0.1+1\times0.2+2\times(-0.7)+3\times0.4=0</math>,它们正是前面两个求导方程。


除了平均误差,还应观察残差是否持续同号、是否随时间增大,以及异常点是否对应记录问题。若水箱将满、流量改变或截面积随高度变化,线性假设可能失效。拟合线继续外推到任意时刻没有依据。
现在才使用留出数据。四分钟与五分钟的预测分别为 <math>4.5,5.4</math>,读数为 <math>4.6,5.8</math>,残差为 <math>0.1,0.4</math>。留出误差为
<math display="block">\operatorname{RMSE}_{\mathrm{test}}=\sqrt{(0.1^2+0.4^2)/2}\approx0.2915\ \mathrm{cm}.</math>
它比训练误差小,可以是这两个点的偶然表现,并不矛盾。两个验证点提供了一次具体检验,还不足以说明更长时间内也有同样精度。
 
这里的两个问题应分开:正规方程和残差核对检验“最小二乘是否算对”;留出数据检验“这条直线能否预测未用于选择它的数据”。前者成立,不自动推出后者。若看了留出数据再调模型,就相当于又把这些数据用于选择,需要新的独立检验。
 
== 一个读数改动,对预测有什么影响 ==
只把三分钟处的训练读数从 <math>4.0</math> 改为 <math>4.1</math>,其他数据保持。由于时间没变,斜率分母仍为五。分子增量为
<math display="block">(3-1.5)\times0.1=0.15,</math>
因为所有时间偏差之和为零,水位平均数的变化不会额外影响分子。因此斜率增加 <math>0.15/5=0.03</math>,新斜率为 <math>0.93</math>。水位均值增加 <math>0.1/4=0.025</math>,新截距为
<math display="block">2.275-0.93\times1.5=0.88.</math>
五分钟处的新预测为 <math>0.93\times5+0.88=5.53</math>,比原来的 <math>5.4</math> 增加 <math>0.13</math>。一个读数只改了 <math>0.1</math>,外推处的变化却稍大。
 
一般而言,参数变化给出 <math>\Delta\hat h(t)=t\Delta a+\Delta b</math>。随着预测时间增加,斜率偏差的影响被放大。若斜率偏高 <math>0.05</math> 厘米每分钟、截距偏高 <math>0.1</math> 厘米,十分钟处偏高 <math>0.6</math> 厘米,五十分钟处偏高 <math>2.6</math> 厘米。这是确定性的敏感性计算,若要把它解释为概率区间,还需统计误差模型。
 
== 哪些物理量能够由读数确定 ==
回到守恒式,水位斜率只给出 <math>(q_{\mathrm{in}}-q_{\mathrm{out}})/A</math>。面积二百、净流量一百八十给出斜率 <math>0.9</math>;面积四百、净流量三百六十也给出同样斜率。无论再观察多久,仅凭相同的线性水位变化都分不开这两种解释。
 
这种不同参数产生同样预测的情形,称为参数不可识别。需要额外测量截面积或流量,才能分别确定它们;或者把可识别的比值直接作为一个参数。
 
即使只估计直线的斜率与截距,采样方式也重要。若四个读数都在同一时刻,公式分母 <math>\sum(t_i-\bar t)^2</math> 为零,无法区分斜率与截距。若时刻非常接近,分母很小,同样大小的读数扰动会显著影响斜率。因此实验在哪些时刻采样,决定了数据能够回答什么问题。
 
== 残差什么时候提示要换模型 ==
继续收集数据时,如果残差先负、后正、再负,形成系统的弯曲趋势,直线可能遗漏了水位变化的弯曲。如果随着时间推移残差持续增大,可能是流量或截面积不再稳定。如果只有某一点异常,则应先核对记录、单位与传感器状况。
 
例如出水口流量随水位上升而增加,净流入就不再是常数;瓶状水箱的截面积也可能随高度变化。守恒模型应相应改为
<math display="block">A(h)\frac{dh}{dt}=q_{\mathrm{in}}(t)-q_{\mathrm{out}}(h,t).</math>
水箱接近装满时,还需要处理容量与溢流。这样,修改模型的理由来自现象和机制,而非仅为降低已有四点的误差。
 
残差平方和小,也不能证明某个输入具有因果作用。若要研究“调大入口会使水位怎样变化”,需要控制或记录流量变化、截面积等条件;仅观察两个量同时上升,可能只是共享时间趋势。模型的用途决定需要哪类证据。
 
== 从这个例子形成一次完整建模过程 ==
水箱例子的步骤可以整理为一个可重复的循环:先规定预测目标与时间范围,再列变量和单位;用体积守恒提出直线假设;用训练点求参数;核对计算并用后续点检验预测;出现系统偏差时,回到机制或观测设计修改模型。
 
不同问题会采用不同数学结构。水位随时间的动态变化可用[[微分方程]],测量误差可用[[概率]],多个水箱之间的连接可用[[图论]],在容量与成本限制下分配流量可用[[优化]]。这些结构都围绕所要回答的问题选择,不是每个模型都需要全部使用。
 
一个可复算的模型记录应保留数据来源、变量单位、假设、训练与验证划分、计算程序和适用范围。最小二乘计算不需要先假定正态噪声,但置信区间等[[统计推断]]需要说明相应条件。量纲检查也很有用:守恒式两边都应是体积每时间,若某项单位不一致,可在求解前发现问题。


== 下载与复现 ==
== 下载与复现 ==
[https://gezhi.wiki/page/%E7%89%B9%E6%AE%8A:ModelDownload/eb0be8742d04021d7851aa4bb9e63a54 下载:水位线性拟合教学包(CSV、Python、预期结果与说明)]
[https://gezhi.wiki/page/%E7%89%B9%E6%AE%8A:ModelDownload/eb0be8742d04021d7851aa4bb9e63a54 下载:水位线性拟合教学包(CSV、Python、预期结果与说明)]
资源包含原始示例 CSV、只依赖 Python 标准库的拟合脚本、预期结果和数据说明。解压后在目录内运行 <code>python3 fit.py</code>,脚本会重新计算参数、训练及留出误差,不调用外部 AI 或在线服务。


== 模型与内容的可追溯性 ==
教学包保留本例合成数据、仅依赖 Python 标准库的脚本与预期结果。解压后运行 <code>python3 fit.py</code>,可以复算参数 <math>a=b=0.9</math>、训练平方和 <math>0.7</math> 与留出平方和 <math>0.17</math>。修改三分钟读数后,也可检查上一节的扰动结果。
模型发布时应保留数据来源、变量单位、假设、求解方法、验证划分、代码环境和适用范围。使用 AI 辅助整理或计算,仍需逐式核验、检查数据授权与复现结果;语言流畅不能替代实证证据。实际项目若出现新数据,应记录更新版本,而不是悄悄替换数据后沿用旧结论。
 
== 方法背景 ==
天文测量、力学与人口研究都推动了数学模型的发展。这里使用的最小二乘法,在 Legendre 1805 年的发表及 Gauss 后来的工作中形成了重要发展,具体文献见[[最小二乘法]]。它将“怎样选一条最合适的曲线”变成可计算的目标。
 
[https://web.stanford.edu/~boyd/vmls/ Boyd 与 Vandenberghe 的应用线性代数教材]从数据与应用问题展开拟合;[https://www.jirka.org/diffyqs/ Lebl 的微分方程教材]从动态过程建立方程。水箱例子同时使用了这两种思路:守恒解释结构,数据估计参数,后续观测检验用途。
 
== 按问题选择模型 ==
水位拟合的统计解释见[[线性模型]]:它沿用本例数据,区分真实平均响应、拟合线和下一次随机读数,并计算两种不同的区间。若问题改成“每月先流失一定比例,再补入固定水量”,[[差分方程模型]]从状态更新式推导平衡水量与收敛速度。若两个状态互相影响,[[捕食者-猎物模型]]展示如何从相遇假设建立耦合方程,再用零增长线、相图和守恒量研究变化。
 
这三类问题分别关心输入与平均响应的关系、离散时刻的状态更新,以及连续时间内两个种群的相互作用。选择模型时,先写清记录了什么、时间怎样计量、哪些机制被保留,再决定使用哪组方程。


== 延伸阅读 ==
== 参考来源与延伸阅读 ==
* [https://web.stanford.edu/~boyd/vmls/ Boyd 与 Vandenberghe:Introduction to Applied Linear Algebra],模型拟合、最小二乘与应用。
* [[最小二乘法]] · [[量纲分析]] · [[统计推断]] · [[洛吉斯蒂模型]]。
* [https://stanford.edu/~boyd/cvxbook/ Boyd、Vandenberghe,《Convex Optimization》]:最小二乘与优化建模。
* [https://stanford.edu/~boyd/cvxbook/ Boyd、Vandenberghe,《Convex Optimization》]:最小二乘与优化建模。
* [https://www.jirka.org/diffyqs/ Jiří Lebl,《Notes on Diffy Qs》]:从应用问题建立微分方程模型。
* [https://www.jirka.org/diffyqs/ Jiří Lebl,《Notes on Diffy Qs》]:从应用问题建立微分方程模型。
* [[线性代数]] · [[优化]] · [[微分方程]] · [[贝叶斯定理]]
* [[线性代数]] · [[优化]] · [[微分方程]] · [[贝叶斯定理]]
[[分类:应用与建模]]
[[分类:应用与建模]]

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 的微分方程教材从动态过程建立方程。水箱例子同时使用了这两种思路:守恒解释结构,数据估计参数,后续观测检验用途。

按问题选择模型

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

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

参考来源与延伸阅读