研一数学基础复习笔记(八):约束变分与拉格朗日乘子法

1. 为什么面试前要看这个问题?

前两篇主要讲了变分法和多类变量变分。

我们已经知道,很多力学问题可以通过泛函极值来描述:

$$ \delta J = 0 $$

也知道在多类变量变分中,可以把多个物理量同时作为独立变量,例如位移 $w$ 和内力 $N$。

但是实际力学问题中,变量之间往往不是完全自由的,它们需要满足某些约束条件。

例如轴向杆中,应变和位移之间满足:

$$ \varepsilon_z = w' $$

单摆运动中,摆球坐标 $X(t),Y(t)$ 需要满足刚性杆长度不变的约束:

$$ X^2 + Y^2 = L^2 $$

这类问题就不能只简单地对原泛函直接变分,还要保证变分过程中约束条件始终成立。

这就是约束变分问题。

处理约束变分最常用的方法之一是拉格朗日乘子法。

它的核心思想是:

把约束条件加入原泛函中,使有约束问题转化为无约束变分问题。

从面试角度看,这一章很重要,因为它连接了:

  • 约束优化;
  • 混合变分原理;
  • 约束力;
  • 多体动力学;
  • 微分-代数方程;
  • 有限元中的约束处理。

2. 核心概念

2.1 什么是约束变分?

普通变分问题中,我们希望找到一组函数,使泛函取极值。

例如:

$$ J[y] = \int_{x_0}^{x_1}F(x,y,y')\,dx $$

要求:

$$ \delta J = 0 $$

但在约束变分中,未知函数还必须满足额外条件。

例如:

$$ G(x,y,y') = 0 $$

这时问题变成:

在满足约束 $G=0$ 的所有函数中,寻找使泛函 $J$ 取极值的函数。

如果有多个未知函数和多个约束,可以写成:

$$ J[y_1,y_2,\cdots,y_n] = \int_{x_0}^{x_1} F(x,y_1,\cdots,y_n,y_1',\cdots,y_n')\,dx $$

同时满足:

$$ G_1(x,y_1,\cdots,y_n,y_1',\cdots,y_n') = 0 $$ $$ G_2(x,y_1,\cdots,y_n,y_1',\cdots,y_n') = 0 $$

一直到:

$$ G_m(x,y_1,\cdots,y_n,y_1',\cdots,y_n') = 0 $$

这就是多约束变分问题。


2.2 为什么约束会让问题变复杂?

如果没有约束,每个变量的扰动可以认为是任意的。

但有约束时,变量的扰动不能随便取。
因为一旦变量发生扰动,约束条件也必须继续成立。

例如单摆中,坐标 $X,Y$ 不能任意变化,因为它们必须满足:

$$ X^2 + Y^2 = L^2 $$

这说明摆球只能在圆弧上运动,而不能随便跑到平面任意位置。

如果直接对 $X,Y$ 做任意变分,就可能破坏约束。

拉格朗日乘子法的作用,就是把约束条件并入泛函,使我们仍然可以对变量做独立变分。


2.3 拉格朗日乘子法的基本思想

先看普通代数极值问题。

如果要求函数 $f(x,y)$ 的极值,同时满足约束:

$$ x^2 + y^2 = 1 $$

可以构造增广函数:

$$ \bar{f}(x,y,\lambda) = f(x,y) + \lambda(x^2+y^2-1) $$

其中 $\lambda$ 称为拉格朗日乘子。

然后对 $x,y,\lambda$ 分别求偏导,并令其为零:

$$ \frac{\partial \bar{f}}{\partial x} = 0 $$ $$ \frac{\partial \bar{f}}{\partial y} = 0 $$ $$ \frac{\partial \bar{f}}{\partial \lambda} = 0 $$

第三个方程正好恢复原来的约束:

$$ x^2 + y^2 - 1 = 0 $$

所以拉格朗日乘子法的核心是:

把约束条件乘以一个新的未知量,再加入目标函数中。

对于泛函问题也是类似的。
只不过乘子不再是一个常数,而通常是一个函数。


2.4 约束变分中的拉格朗日乘子

对于带约束的泛函:

$$ J[y_1,\cdots,y_n] = \int_{x_0}^{x_1}F(x,y_1,\cdots,y_n,y_1',\cdots,y_n')\,dx $$

如果约束为:

$$ G_i(x,y_1,\cdots,y_n,y_1',\cdots,y_n') = 0,\quad i=1,2,\cdots,m $$

可以构造增广泛函:

$$ \tilde{J} = \int_{x_0}^{x_1} \left[ F + \sum_{i=1}^{m}\lambda_i(x)G_i \right] dx $$

其中:

$$ \lambda_i(x) $$

就是拉格朗日乘子函数。

然后对所有变量和所有乘子分别变分:

$$ \delta \tilde{J} = 0 $$

这样就可以同时得到:

  • 原变量对应的控制方程;
  • 乘子对应的约束方程;
  • 乘子本身可能具有的物理意义。

3. 关键公式

3.1 增广泛函

约束变分中最关键的公式是增广泛函:

$$ \tilde{J} = \int_{x_0}^{x_1} \bar{F}(x,y_1,\cdots,y_n,\lambda_1,\cdots,\lambda_m,y_1',\cdots,y_n')\,dx $$

其中:

$$ \bar{F} = F(x,y_1,\cdots,y_n,y_1',\cdots,y_n') + \sum_{i=1}^{m}\lambda_i(x)G_i(x,y_1,\cdots,y_n,y_1',\cdots,y_n') $$

对增广泛函变分:

$$ \delta \tilde{J} = 0 $$

就可以把有约束问题转化为无约束变分问题。


3.2 对乘子变分恢复约束

因为 $\lambda_i$ 是独立变量,所以对 $\lambda_i$ 变分时,会得到:

$$ G_i(x,y_1,\cdots,y_n,y_1',\cdots,y_n') = 0 $$

这说明乘子变分的结果就是原约束条件。

因此拉格朗日乘子法不会丢失约束,而是把约束作为方程组的一部分一起求解。


3.3 轴向杆中的应变-位移约束

对于轴向杆,位移为 $w(z)$,应变为 $\varepsilon_z(z)$。

它们之间满足几何约束:

$$ \varepsilon_z = w' $$

也可以写成:

$$ \varepsilon_z - w' = 0 $$

如果把 $w$ 和 $\varepsilon_z$ 都作为独立变量,则总势能可以写成:

$$ S[w,\varepsilon_z] = \int_0^L \left[ \frac{1}{2}kw^2 + \frac{1}{2}EF\varepsilon_z^2 \right] dz - Pw(L) $$

但这个泛函还没有包含约束。
利用拉格朗日乘子 $\lambda(z)$,构造增广泛函:

$$ \bar{S}[w,\varepsilon_z,\lambda] = \int_0^L \left[ \frac{1}{2}kw^2 + \frac{1}{2}EF\varepsilon_z^2 + \lambda(\varepsilon_z - w') \right] dz - Pw(L) $$

对 $w,\varepsilon_z,\lambda$ 分别变分,可以得到:

$$ kw + \lambda' = 0 $$ $$ EF\varepsilon_z + \lambda = 0 $$ $$ \varepsilon_z - w' = 0 $$

这说明:

  • 第一个方程对应平衡关系;
  • 第二个方程对应本构关系;
  • 第三个方程对应几何关系。

进一步比较可知:

$$ \lambda = -N $$

也就是说,拉格朗日乘子在这里和轴力有关。

这非常重要,因为它说明:

拉格朗日乘子不只是数学辅助变量,在力学中常常对应约束力或内力。


3.4 单摆中的几何约束

单摆问题中,摆球坐标为:

$$ X(t),\quad Y(t) $$

杆长为 $L$,刚性杆不可伸长,因此有约束:

$$ X^2 + Y^2 = L^2 $$

动能为:

$$ T = \frac{1}{2}m(\dot{X}^2+\dot{Y}^2) $$

重力势能可以写成:

$$ U = -mgY $$

因此作用量可以写成:

$$ S = \int_{t_0}^{t_1} \left[ \frac{1}{2}m(\dot{X}^2+\dot{Y}^2) + mgY \right] dt $$

加入约束后,构造增广作用量:

$$ \bar{S} = \int_{t_0}^{t_1} \left[ \frac{1}{2}m(\dot{X}^2+\dot{Y}^2) + mgY - \lambda(X^2+Y^2-L^2) \right] dt $$

对 $X,Y,\lambda$ 分别变分,可以得到方程组:

$$ m\ddot{X} + 2\lambda X = 0 $$ $$ m\ddot{Y} - mg + 2\lambda Y = 0 $$ $$ X^2 + Y^2 = L^2 $$

这是一个微分-代数方程组。

前两个是动力学微分方程,第三个是代数约束方程。


4. 和力学/数值计算的联系

4.1 拉格朗日乘子可以表示约束力

在力学中,约束通常会产生约束力。

例如单摆中,杆对摆球有拉力。这个拉力保证摆球始终在圆周上运动。

在拉格朗日乘子法中,乘子 $\lambda$ 通常和这个约束力有关。

单摆方程中:

$$ m\ddot{X} + 2\lambda X = 0 $$ $$ m\ddot{Y} - mg + 2\lambda Y = 0 $$

其中含有 $\lambda$ 的项就对应约束产生的作用。

所以拉格朗日乘子法的物理意义是:

通过引入乘子,把约束力作为未知量一起求解。

这比直接消去约束更通用。


4.2 约束变分可以统一处理几何、本构和平衡关系

在轴向杆例子中,使用拉格朗日乘子后,可以同时得到:

几何方程:

$$ \varepsilon_z = w' $$

本构方程:

$$ N = EF\varepsilon_z $$

平衡方程:

$$ N' = kw $$

这说明约束变分可以把多个基本关系统一放在一个变分框架中。

从有限元角度看,这很有意义。

因为不同类型的有限元方法,往往对应不同的变量选择和约束处理方式。例如:

  • 位移型有限元;
  • 混合有限元;
  • 杂交有限元;
  • 拉格朗日乘子法施加边界约束;
  • 罚函数法处理约束;
  • 接触问题中的约束力求解。

4.3 为什么有些问题会变成微分-代数方程?

在单摆问题中,未知量包括:

$$ X(t),\quad Y(t),\quad \lambda(t) $$

方程包括:

$$ m\ddot{X} + 2\lambda X = 0 $$ $$ m\ddot{Y} - mg + 2\lambda Y = 0 $$

以及:

$$ X^2 + Y^2 = L^2 $$

前两个方程含有时间导数,是微分方程。
第三个方程不含最高阶导数,是代数约束。

因此整个系统是微分-代数方程组。

这类方程在多体动力学中很常见,因为多体系统常常包含关节约束、接触约束和刚体约束。

从数值计算角度看,微分-代数方程通常比普通微分方程更难求解,因为数值积分过程中不仅要推进状态,还要保持约束不被破坏。


4.4 约束处理对数值稳定性很重要

如果数值方法不能很好地处理约束,可能会出现约束漂移。

例如单摆理论上应满足:

$$ X^2 + Y^2 = L^2 $$

但数值积分一段时间后,可能出现:

$$ X^2 + Y^2 \ne L^2 $$

这说明摆球逐渐偏离了圆周轨道。

为了避免这种问题,数值方法需要专门处理约束,例如:

  • 拉格朗日乘子法;
  • 罚函数法;
  • 增广拉格朗日法;
  • 投影法;
  • 保辛或保结构算法;
  • 约束稳定化方法。

所以约束变分不只是理论问题,也直接影响动力学仿真和有限元计算的稳定性。


4.5 拉格朗日乘子法和罚函数法的区别

面试中有时会问约束怎么处理。

拉格朗日乘子法是严格引入约束:

$$ G = 0 $$

并通过乘子把它加入方程组中。

罚函数法则是把约束违反程度加入能量中,例如:

$$ J_{\text{penalty}} = J + \frac{\alpha}{2}G^2 $$

其中 $\alpha$ 是罚因子。

两者区别可以简单理解为:

  • 拉格朗日乘子法严格满足约束,但会增加未知量;
  • 罚函数法不增加乘子未知量,但约束通常只能近似满足;
  • 罚因子过大可能导致矩阵病态;
  • 增广拉格朗日法可以看作两者的结合。

这部分在有限元接触、边界约束、多体动力学中都很常见。


5. 面试中可以怎么回答?

如果面试官问:

什么是约束变分?

可以这样回答:

约束变分是指在求泛函极值时,未知函数还必须满足某些约束条件。也就是说,真实解不仅要使泛函取驻值,还要满足几何约束、本构约束或运动约束。常用方法是引入拉格朗日乘子,把约束条件加入泛函中,从而把有约束变分问题转化为无约束变分问题。

如果面试官问:

拉格朗日乘子法的核心思想是什么?

可以这样回答:

拉格朗日乘子法的核心是把约束条件乘以一个新的未知量,再加入原目标函数或泛函中。然后对原变量和乘子一起变分。对乘子变分会恢复原约束,对原变量变分会得到包含约束力或内力的控制方程。这样可以在不显式消去约束的情况下求解有约束问题。

如果面试官问:

拉格朗日乘子有什么物理意义?

可以这样回答:

在数学上,拉格朗日乘子是引入约束的辅助变量。但在力学问题中,它往往有明确物理意义,通常对应约束力、内力或反力。例如轴向杆应变-位移约束中,乘子可以对应轴力;单摆约束中,乘子和杆的约束力有关。

如果面试官问:

为什么单摆问题会得到微分-代数方程组?

可以这样回答:

因为单摆既有动力学微分方程,又有刚性杆长度不变的代数约束。引入拉格朗日乘子后,对坐标变分得到含有加速度的微分方程,对乘子变分得到 $X^2+Y^2=L^2$ 这样的代数约束。因此整个系统是微分-代数方程组。

如果面试官问:

拉格朗日乘子法和罚函数法有什么区别?

可以这样回答:

拉格朗日乘子法通过增加乘子未知量严格施加约束,约束可以精确满足,但系统规模会增大。罚函数法把约束违反程度加入能量泛函中,不需要增加乘子未知量,但约束通常只是近似满足,而且罚因子过大可能导致病态。因此两者在精度、稳定性和计算规模上有不同取舍。


6. 这一篇的核心总结

这一篇主要复习了约束变分和拉格朗日乘子法。

可以总结为三句话:

  1. 约束变分是在满足约束条件的函数集合中寻找使泛函取极值的函数。
  2. 拉格朗日乘子法通过把约束加入泛函,把有约束问题转化为无约束变分问题。
  3. 在力学中,拉格朗日乘子常常对应约束力、内力或反力,因此具有明确物理意义。

所以,拉格朗日乘子法不是单纯的数学技巧,而是一种把约束关系和力学方程统一处理的方法。

从面试角度看,可以这样理解:

拉格朗日乘子把“必须满足的约束”转化为“需要一起求解的方程”,同时把约束力自然引入系统。


7. 下一篇预告

下一篇准备整理:

研一数学基础复习笔记(九):从微分方程反推泛函

下一篇会讨论变分反问题,也就是已知微分方程时,如何寻找对应的泛函。重点理解从泛函推出方程是正问题,而从方程构造泛函是反问题,并介绍分部积分构造法和最小二乘法。


研一数学基础复习笔记(八):约束变分与拉格朗日乘子法
http://zncddh.cn/2026/05/03/研一数学基础复习笔记(八):约束变分与拉格朗日乘子法/
作者
creativity
发布于
2026年5月3日
许可协议