2025年数学建模国赛集训笔记

Notes

动态过程建模

多项式拟合

利用最小二乘法拟合多项式。通常最多用到三次多项式。

适合小范围内的数据拟合、预测。

Fourier级数拟合

适合具有明显周期性波动特点的数据拟合,例如气温、光照、城市用电等的。

时间序列分析

没有明显多项式特征(不平滑)或周期性,具有一定随机性。

差分方程

元胞自动机

兼顾时间和空间维度,例如生物的迁移,污染物、烟尘、火焰的扩散。

微分方程

几类特殊的微分方程可以求解析解。

常微分方程的稳定点、极限环,可以用于分析稳定性。

最优化方法建模

指派问题(assignment prob.)

最优化问题的一般数学模型

设定\(\vec x\in\mathbb R^n\),在满足约束\(g_i(\vec x)=0\)\(h_i(\vec x)\leq0\)的条件下,求\(\min f(\vec x)\)

不同软件求出的最优解可能不同,因为都是求的局部最优解。

组合/离散最优化问题

寻找离散事件的最优编排、分组、次序或筛选等。大多情况下可行域为有限点集,但往往因为计算量过大而没有可以接受的algorithm。

例如:背包问题、旅行商问题(最短Hamilton回路)、装箱问题。

求近似解(采用heuristic):贪心、邻域搜索、禁忌搜索、遗传、模拟退火、人工神经网络、蚁群。

统计学方法与数据挖掘

探索性分析

假设检验

微分方程及其数值解法

Fourier定律:

\[\mathrm d\frac{\mathrm dQ}{\mathrm dt}=-\kappa\frac{\partial T}{\partial\vec n}\mathrm dS \]

则对于闭区域\(\Omega\subset\mathbb R^3\),有

\[\begin{align*} \frac{\mathrm dQ}{\mathrm dt}&=-\int_{\partial\Omega}\kappa\frac{\partial T}{\partial\vec n}\mathrm dS\\ &=-\int_{\partial\Omega}\kappa(\nabla T)\cdot\mathrm d\vec S\\ &=-\int_\Omega\kappa(\nabla\cdot\nabla T)\mathrm dV&\text{Gauss公式}\\ &=-\int_\Omega\kappa\nabla^2T\ \mathrm dV \end{align*} \]

再对时间积分,得

\[Q=-\int\left(\int_\Omega\kappa\nabla^2T\ \mathrm dV\right)\mathrm dt \]

解一阶常微分方程的前向欧拉法

给定一阶常微分方程

\[\frac{\mathrm dy}{\mathrm dx}=\varphi(x,y) \]

和初值

\[f(x_0)=y_0 \]

求函数\(y=f(x)\)

由导数定义,

\[f'(x)=\lim_{\delta\to0}\frac{f(x+\delta)-f(x)}{\delta} \]

故有近似

\[\varphi(x,f(x))=f'(x)\approx\frac{f(x+\delta)-f(x)}{\delta} \]

因此

\[f(x+\delta)\approx f(x)+\delta\cdot\varphi(x,f(x)) \]

所以有迭代式

\[y_{n+1}\approx y_n+\delta\cdot\varphi(x_n,y_n) \]

其中

\[x_n=\delta\cdot n+x_0,\ y_n=f(x_n),\ n\in\mathbb N \]

特点

简单直观,计算量小,在线算法;精度较低,稳定性差。

在实际的科学和工程计算中,人们通常会使用更高阶、更稳健的方法,如改进欧拉法、龙格-库塔法(Runge-Kutta methods)等。

解一阶常微分方程的改进欧拉法

改进欧拉法也常被称为休恩法(Heun's Method)或二阶龙格-库塔法(RK2),它相对于前向欧拉法显著提升了计算的准确性。其核心思想是,与其只用起点的斜率,不如用一个更具代表性的平均斜率来计算下一步。它通过预测-校正的步骤来获得这个平均斜率。

预测

\((x_n,y_n)\)已知,起点斜率\(k_{n,0}=f'(x_n)=\varphi(x_n,y_n)\)。按照前向欧拉法,可以求出预测值\(\tilde y_{n+1}=y_n+\delta\cdot k_{n,0}\)

校正

计算终点斜率的估计值\(k_{n,1}=f'(x_{n+1})=\varphi(x_{n+1},y_{n+1})\approx\varphi(x_{n+1},\tilde y_{n+1})\)。以平均斜率\(\overline k_n=\frac{1}{2}(k_{n,0}+k_{n,1})\)来作为整个区间的“最佳”斜率。于是得

\[y_{n+1}\approx y_n+\delta\cdot\overline k_n \]

龙格-库塔法

龙格-库塔法不是指某一个特定的方法,而是一个庞大的方法家族。它们的共同思想是通过在当前区间内巧妙地选取几个点进行“探测”,并对这些点上的斜率进行加权平均,从而得到一个精度极高的对整个区间平均斜率的估计。前向欧拉法、改进欧拉法分别可以看作一阶和二阶的龙格-库塔法,简写为RK1和RK2。但通常说的龙格-库塔法特指四阶,即RK4。

改进欧拉法的优化启发我们考虑更优秀的斜率计算方式。RK4和前面方法一样,都是从点\((x_n,y_n)\)出发,计算出下一个点\((x_{n+1},y_{n+1})\)的近似值。但它不像改进欧拉法那样只“预测-校正”一次,而是通过计算4个不同的斜率值来获得一个非常精确的加权平均斜率。

计算起点斜率

\[k_{n,0}=f'(x_n)=f(x_n,y_n) \]

计算第一个中点斜率

\[k_{n,1}=f'\left(x_n+\frac{1}{2}\delta\right)\approx\varphi\left(x_n+\frac{1}{2}\delta,y_n+\frac{1}{2}\delta\cdot k_{n,0}\right) \]

这相当于“预测”向前“走半步”(\(\frac{1}{2}\delta\))到达的位置。

计算第二个中点斜率

\[k_{n,2}=\varphi\left(x_n+\frac{1}{2}\delta,y_n+\frac{1}{2}\delta\cdot k_{n,1}\right) \]

计算终点斜率

\[k_{n,3}=\varphi(x_n+\delta,y_n+\delta\cdot k_{n,2}) \]

这是利用\(k_{n,3}\)估计区间终点位置,并计算斜率。

求加权平均斜率

\[\overline k_n=\frac{1}{6}(k_{n,0}+2k_{n,1}+2k_{n,2}+k_{n,3}) \]

利用这个平均斜率,估计下一个点

\[y_{n+1}\approx y_n+\delta\cdot\overline k_n \]

特点

精度极高,稳定性好,在线算法;计算量较大。

更高级的龙格-库塔法还包括嵌入式方法(如RK45或Dormand-Prince),它们在每一步计算两个不同阶数的结果,通过比较二者的差异来自适应地调整步长\(\delta\),从而在保证精度的前提下,实现最高的计算效率。这些自适应步长的方法是现代ODE求解器的核心。

机器学习

线性回归

普通最小二乘法(ordinary linear square, OLS)

给定输入\(X\in\mathbb F^{n\times m}\)和对应的输出\(\vec y\in\mathbb F^n\),求系数\(\vec a\in\mathbb F^m\)和偏置\(b\in\mathbb F\)使\(\vec y\)\((X\vec a+b\vec1)\)尽可能接近,即误差\(\vec e=\vec y-(X\vec a+b\vec1)\)的模\(\Vert\vec e\Vert\)尽可能小。

当数据满足以下条件时

  • 自变量和因变量之间存在线性关系。
  • \(\tilde X^\top\tilde X\)可逆,此时\(X\)不能多重共线。
  • 自变量与误差项不相关。
  • 误差项具有恒定的方差。
  • 误差项之间相互独立。
  • \(m<n\),即特征数量小于数据组数。

\[\begin{bmatrix} \vec a\\ b \end{bmatrix} =(\tilde X^\top \tilde X)\tilde X^\top\vec y \]

其中增广矩阵\(\tilde X=\begin{bmatrix}X & \vec1\end{bmatrix}\)

正则化方法

如果输入\(X\)有多重共线的情况,或者如果\(n\leq m\)了,OLS就会爆炸。为了让回归模型更稳定,同时缓解过拟合问题,数学家们引入了正则化/惩罚项(regularizer/penalty,这个操作称为正则化(regularization)。引入正则化项后,要最小化的目标函数就变为了

\[obj=loss+penalty \]

L2正则化

引入了L2正则化的线性回归又称为Ridge回归。相比于OLS,Ridge回归允许数据存在多重共线性,也允许\(m\geq n\),但要求对数据进行缩放(scaling)预处理。

采用系数的L2范数的平方\(\Vert\vec a\Vert_2^2\)作为惩罚项,此时目标函数

\[obj(\vec a)=\Vert\vec e\Vert_2^2+\lambda\Vert\vec a\Vert_2^2 \]

其中\(\lambda\)称为正则化强度。可以解得最小值点

\[\vec a=(X_\mathrm C^\top X_\mathrm C+\lambda I)^{-1}X_\mathrm C^\top\vec y_\mathrm C\\ b=\overline y-\overline X^\top\vec a \]

其中

\[\overline X=\left[\frac{1}{n}\sum_{j=0}^{n-1}X_{j,i}\right]_{i=0}^{m-1},\ \overline y=\frac{1}{n}\sum_{i=0}^{n-1}y_i\\ X_\mathrm C=X-\vec1\overline X^\top,\ \vec y_\mathrm C=\vec y-\overline y\vec1 \]

L1正则化

引入了L1正则化的线性回归又称为LASSO(least absolute shrinkage and selection operator)回归。LASSO允许一定程度的共线性,但当共线性较强时可能不稳定。LASSO同样允许\(m\geq n\),要求缩放预处理。

采用L1范数\(\Vert\vec a\Vert_1\)作为惩罚项,此时

\[obj(\vec a)=\Vert\vec e\Vert_2^2+\lambda\Vert\vec a\Vert_1 \]

LASSO回归通常没有解析解。

Elastic Net

同时引入这两种正则化项的回归称为弹性网络(elastic net)回归。它适合处理存在高度相关的特征组,希望进行特征选择,且\(m\gg n\)的情况,同样要求缩放预处理。

同时加上两个惩罚项,得

\[obj(\vec a)=\Vert\vec y-(X\vec a+b\vec1)\Vert^2+\lambda\left(\alpha\Vert\vec a\Vert_1+\frac{1}{2}(1-\alpha)\Vert\vec a\Vert_2^2\right) \]

其中\(\alpha\in[0,1]\)

降维

维数过多会导致计算量大、模型性能下降等问题,需要降维处理。利用LASSO回归可以筛除多余特征量(即系数为\(0\)的特征)。

通常采用两步法回归(Relaxed LASSO):

  1. 计算LASSO的系数估计结果,选出合适的变量。
  2. 对于选出的变量,应用Ridge回归。

数值计算

线性方程组的解法

直接方法

Gauss消元。忽略舍入误差时,经过有限次算术运算即可得到精确解。

迭代法

构造无穷数列逼近精确解,通常在有限步内得不到精确解。

矩阵最大、最小特征值计算

幂法

当我们用一个矩阵\(A\)反复左乘一个初始向量\(\vec v_0\)时,得到的向量序列的方向会逐渐收敛到矩阵\(A\)的主特征向量的方向。

\(A\in\mathbb F^{n\times n}\)可以特征值分解为\(X\Lambda X^{-1}\)\(\vec\lambda=\mathrm{diag}\ \Lambda\),且\(A\)有一个严格的主特征值,即\(\lambda_0>\lambda_1,\ \forall i\in\mathbb N\cap[1,n-1)\ (|\lambda_i|\geq|\lambda_{i+1}|)\)

\(X=[\vec x_i]_{i=0}^{n-1}\)。任取非零初始向量\(\vec x_0\),由矩阵\(A\)构造向量列\(\{\vec v_i\}_{i=0}^n\)使得\(\vec v_{i+1}=A\vec v_i\)。因为这\(n\)个特征向量线性无关,故存在\(\vec c\in\mathbb F^n\backslash\{\vec0\}\)满足

\[\vec v_0=X\vec c \]

于是

\[\vec v_i=A^i\vec v_0=(X\Lambda X^{-1})^iX\vec c=X\Lambda^i\vec c=\lambda_0^iX\left(c_j\left(\frac{\lambda_j}{\lambda_0}\right)^i\right)_{j=0}^{n-1} \]

因为\(\forall i\in\mathbb N\cap[1,n)\ (\lambda_0>\lambda_i)\),所以随着\(i\)增大,\(\vec v_i\)会越来越接近\(\vec x_0\)方向。

基于以上性质设计的求\(\lambda_0\)的算法称为幂法(power iteration)。

\[\begin{array}{l} \textbf{Input.}\ \text{A matrix $A\in\mathbb F^{n\times n}$ that can be eigen decomposed and has exactly one strict main eigenvalue.}\\ \textbf{Output.}\ \text{The very main eigenvalue and its eigenvector.}\\ \textbf{Method.}\\ \begin{array}{rl} 1 & \text{Randomly choose an $\vec x_0\in\mathbb F^n\backslash\{\vec0\}$.}\\ 2 & \textbf{for }i\in\mathbb N\\ 3 & \qquad\vec y_i\gets A\vec x_i\\ 4 & \qquad\vec x_{i+1}\gets\hat y_o\\ 5 & \textbf{return }(\Vert\vec y_\infty\Vert,\vec x_\infty) \end{array} \end{array} \]

\(\vec x_i\)非常已经接近主特征向量时,可以通过瑞利商(Rayleigh quotient)更稳定而精确地求出主特征值:

\[\lambda_0\approx\frac{\vec x_i^\top A\vec x_i}{\vec x_i^\top\vec x_i}=\vec x_i^\top(A\vec x_i)=\vec x_i^\top\vec y_i \]

插值法与逼近

数值积分

非线性方程组的解法

posted @ 2025-08-22 14:32  我就是蓬蒿人  阅读(18)  评论(0)    收藏  举报