数学建模:修订间差异
AIContentBot(留言 | 贡献) 上线数学百科初始内容与排版 |
AIContentBot(留言 | 贡献) 扩充线性代数、最小二乘、贝叶斯与正态分布,接通几何和建模学习路径 |
||
| (未显示同一用户的3个中间版本) | |||
| 第1行: | 第1行: | ||
'''数学建模'''(mathematical modeling)是为一个实际问题选择变量、提出假设、建立数学关系,并用观测与计算检验结果的过程。模型保留的是回答当前问题所需要的特征;预测下一分钟的水位,与研究整个水箱的流场,需要的模型可以很不相同。 | |||
== | == 水箱五分钟后有多高 == | ||
假设我们每分钟记录一次水箱水位,想用前四次读数预测接下来两分钟。下面是一组专门构造的教学数据,不是实际设备的观测。前四点用于估计参数,后两点预先留作验证。 | |||
== | <div class="math-table-scroll" role="region" aria-label="水箱线性模型的训练及留出数据" tabindex="0"> | ||
{| class="wikitable" | |||
! 数据用途 !! 时间 <math>t</math>(分钟) !! 水位 <math>h</math>(厘米) | |||
|- | |||
| 训练 || 0,1,2,3 || 1.0,2.0,2.0,4.0 | |||
|- | |||
| 留出验证 || 4,5 || 4.6,5.8 | |||
|} | |||
</div> | |||
== | 水位总体上升,却不是每分钟都增加相同数值。可以先尝试一条直线描述平均趋势: | ||
<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> 的单位是厘米。 | ||
* [[ | |||
在计算斜率前,先要回答为什么选直线。如果短时间内净流入量和水箱截面积近似不变,直线有一个守恒关系的依据。 | |||
== 直线从哪里来 == | |||
设水箱水平截面积为常数 <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">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>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=四个训练点和两个留出验证点,直线水位等于零点九倍时间加零点九,竖线表示训练残差|拟合线没有穿过所有点。训练点用于估计参数,空心方形表示未参与拟合的后续时刻数据。]] | |||
图中实心训练点用来确定直线;从点到直线的竖线就是残差。特别是两分钟处读数为二,而直线预测为 <math>2.7</math>,对应最长的一段向下偏差。空心方形是没有参与拟合的四、五分钟读数,用来检查预测。 | |||
== 拟合算对了吗,预测又怎样 == | |||
在训练时刻,预测为 <math>0.9,1.8,2.7,3.6</math>,残差为 <math>0.1,0.2,-0.7,0.4</math>。平方和为 | |||
<math display="block">0.01+0.04+0.49+0.16=0.7.</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、预期结果与说明)] | |||
教学包保留本例合成数据、仅依赖 Python 标准库的脚本与预期结果。解压后运行 <code>python3 fit.py</code>,可以复算参数 <math>a=b=0.9</math>、训练平方和 <math>0.7</math> 与留出平方和 <math>0.17</math>。修改三分钟读数后,也可检查上一节的扰动结果。 | |||
== 方法背景 == | |||
天文测量、力学与人口研究都推动了数学模型的发展。这里使用的最小二乘法,在 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://www.jirka.org/diffyqs/ Jiří Lebl,《Notes on Diffy Qs》]:从应用问题建立微分方程模型。 | |||
* [[线性代数]] · [[优化]] · [[微分方程]] · [[贝叶斯定理]] | |||
[[分类:应用与建模]] | [[分类:应用与建模]] | ||
2026年9月20日 (日) 10:06的最新版本
数学建模(mathematical modeling)是为一个实际问题选择变量、提出假设、建立数学关系,并用观测与计算检验结果的过程。模型保留的是回答当前问题所需要的特征;预测下一分钟的水位,与研究整个水箱的流场,需要的模型可以很不相同。
水箱五分钟后有多高
假设我们每分钟记录一次水箱水位,想用前四次读数预测接下来两分钟。下面是一组专门构造的教学数据,不是实际设备的观测。前四点用于估计参数,后两点预先留作验证。
| 数据用途 | 时间 (分钟) | 水位 (厘米) |
|---|---|---|
| 训练 | 0,1,2,3 | 1.0,2.0,2.0,4.0 |
| 留出验证 | 4,5 | 4.6,5.8 |
水位总体上升,却不是每分钟都增加相同数值。可以先尝试一条直线描述平均趋势: 符号 表示预测水位,区别于读数 ;参数 是每分钟平均上升多少厘米, 是模型在零时刻的水位。若用厘米和分钟, 的单位是厘米每分钟, 的单位是厘米。
在计算斜率前,先要回答为什么选直线。如果短时间内净流入量和水箱截面积近似不变,直线有一个守恒关系的依据。
直线从哪里来
设水箱水平截面积为常数 ,水位 对应体积 。每分钟流入体积为 ,流出体积为 。没有其他漏失时,体积变化率等于净流入率: 若右边也是常数,对时间积分得到 与直线模型比较可知,斜率对应净流入率除以截面积,截距对应起始水位。
例如 、净流入为 ,水位上升速率就是 。这一数值说明参数怎样连接到物理量;仅凭水位读数还不能分别知道面积和流量,后面会回到这个问题。
实际读数可能含测量误差,净流量也可能有小波动,因此数据点不必都在同一直线上。接下来需要规定怎样从几条不同的候选直线中选出一条。
用四个训练点选出一条直线
对某条直线,每个训练点的残差定义为“读数减预测”:。采用最小二乘,就是选 让残差平方和 最小。平方使正负偏差不会互相抵消,也使较大的偏差承担更高代价。
先固定斜率 ,对截距求导并令其为零: 共有四点,因此 。用横线表示平均数,便得到 。这说明拟合直线经过平均点 。
把这个截距代回去,残差成为 。再对 求导,令其为零: 只要时间点不全相同,第二个求和为正,就可解出 这是一个系数为正的二次目标,所得驻点也是唯一最小值。
本例平均时间为 ,平均水位为 。时间偏差为 ,水位偏差为 。分子逐项相乘再相加: 分母为 。所以 得到预测式 。
图中实心训练点用来确定直线;从点到直线的竖线就是残差。特别是两分钟处读数为二,而直线预测为 ,对应最长的一段向下偏差。空心方形是没有参与拟合的四、五分钟读数,用来检查预测。
拟合算对了吗,预测又怎样
在训练时刻,预测为 ,残差为 。平方和为 均方根误差把平方和除以点数再开方,因此回到厘米单位: 残差还有两项可用于检查计算:和为零,与时间列的乘积和也为零。第二项是 ,它们正是前面两个求导方程。
现在才使用留出数据。四分钟与五分钟的预测分别为 ,读数为 ,残差为 。留出误差为 它比训练误差小,可以是这两个点的偶然表现,并不矛盾。两个验证点提供了一次具体检验,还不足以说明更长时间内也有同样精度。
这里的两个问题应分开:正规方程和残差核对检验“最小二乘是否算对”;留出数据检验“这条直线能否预测未用于选择它的数据”。前者成立,不自动推出后者。若看了留出数据再调模型,就相当于又把这些数据用于选择,需要新的独立检验。
一个读数改动,对预测有什么影响
只把三分钟处的训练读数从 改为 ,其他数据保持。由于时间没变,斜率分母仍为五。分子增量为 因为所有时间偏差之和为零,水位平均数的变化不会额外影响分子。因此斜率增加 ,新斜率为 。水位均值增加 ,新截距为 五分钟处的新预测为 ,比原来的 增加 。一个读数只改了 ,外推处的变化却稍大。
一般而言,参数变化给出 。随着预测时间增加,斜率偏差的影响被放大。若斜率偏高 厘米每分钟、截距偏高 厘米,十分钟处偏高 厘米,五十分钟处偏高 厘米。这是确定性的敏感性计算,若要把它解释为概率区间,还需统计误差模型。
哪些物理量能够由读数确定
回到守恒式,水位斜率只给出 。面积二百、净流量一百八十给出斜率 ;面积四百、净流量三百六十也给出同样斜率。无论再观察多久,仅凭相同的线性水位变化都分不开这两种解释。
这种不同参数产生同样预测的情形,称为参数不可识别。需要额外测量截面积或流量,才能分别确定它们;或者把可识别的比值直接作为一个参数。
即使只估计直线的斜率与截距,采样方式也重要。若四个读数都在同一时刻,公式分母 为零,无法区分斜率与截距。若时刻非常接近,分母很小,同样大小的读数扰动会显著影响斜率。因此实验在哪些时刻采样,决定了数据能够回答什么问题。
残差什么时候提示要换模型
继续收集数据时,如果残差先负、后正、再负,形成系统的弯曲趋势,直线可能遗漏了水位变化的弯曲。如果随着时间推移残差持续增大,可能是流量或截面积不再稳定。如果只有某一点异常,则应先核对记录、单位与传感器状况。
例如出水口流量随水位上升而增加,净流入就不再是常数;瓶状水箱的截面积也可能随高度变化。守恒模型应相应改为 水箱接近装满时,还需要处理容量与溢流。这样,修改模型的理由来自现象和机制,而非仅为降低已有四点的误差。
残差平方和小,也不能证明某个输入具有因果作用。若要研究“调大入口会使水位怎样变化”,需要控制或记录流量变化、截面积等条件;仅观察两个量同时上升,可能只是共享时间趋势。模型的用途决定需要哪类证据。
从这个例子形成一次完整建模过程
水箱例子的步骤可以整理为一个可重复的循环:先规定预测目标与时间范围,再列变量和单位;用体积守恒提出直线假设;用训练点求参数;核对计算并用后续点检验预测;出现系统偏差时,回到机制或观测设计修改模型。
不同问题会采用不同数学结构。水位随时间的动态变化可用微分方程,测量误差可用概率,多个水箱之间的连接可用图论,在容量与成本限制下分配流量可用优化。这些结构都围绕所要回答的问题选择,不是每个模型都需要全部使用。
一个可复算的模型记录应保留数据来源、变量单位、假设、训练与验证划分、计算程序和适用范围。最小二乘计算不需要先假定正态噪声,但置信区间等统计推断需要说明相应条件。量纲检查也很有用:守恒式两边都应是体积每时间,若某项单位不一致,可在求解前发现问题。
下载与复现
下载:水位线性拟合教学包(CSV、Python、预期结果与说明)
教学包保留本例合成数据、仅依赖 Python 标准库的脚本与预期结果。解压后运行 python3 fit.py,可以复算参数 、训练平方和 与留出平方和 。修改三分钟读数后,也可检查上一节的扰动结果。
方法背景
天文测量、力学与人口研究都推动了数学模型的发展。这里使用的最小二乘法,在 Legendre 1805 年的发表及 Gauss 后来的工作中形成了重要发展,具体文献见最小二乘法。它将“怎样选一条最合适的曲线”变成可计算的目标。
Boyd 与 Vandenberghe 的应用线性代数教材从数据与应用问题展开拟合;Lebl 的微分方程教材从动态过程建立方程。水箱例子同时使用了这两种思路:守恒解释结构,数据估计参数,后续观测检验用途。
按问题选择模型
水位拟合的统计解释见线性模型:它沿用本例数据,区分真实平均响应、拟合线和下一次随机读数,并计算两种不同的区间。若问题改成“每月先流失一定比例,再补入固定水量”,差分方程模型从状态更新式推导平衡水量与收敛速度。若两个状态互相影响,捕食者-猎物模型展示如何从相遇假设建立耦合方程,再用零增长线、相图和守恒量研究变化。
这三类问题分别关心输入与平均响应的关系、离散时刻的状态更新,以及连续时间内两个种群的相互作用。选择模型时,先写清记录了什么、时间怎样计量、哪些机制被保留,再决定使用哪组方程。
参考来源与延伸阅读
- Boyd 与 Vandenberghe:Introduction to Applied Linear Algebra,模型拟合、最小二乘与应用。
- 最小二乘法 · 量纲分析 · 统计推断 · 洛吉斯蒂模型。
- Boyd、Vandenberghe,《Convex Optimization》:最小二乘与优化建模。
- Jiří Lebl,《Notes on Diffy Qs》:从应用问题建立微分方程模型。
- 线性代数 · 优化 · 微分方程 · 贝叶斯定理