约束优化与拉格朗日乘子
很多优化问题并不是让变量随便取值。矩形的周长已经固定,预算已经给定,点必须落在某个平面上,材料必须满足某个配比,这些限制会把可选范围压成一条曲线、一个曲面,或它们的交集。约束优化研究的就是:在这些限制内,目标函数在哪里达到最大或最小。
本章的主角是拉格朗日乘子法。它把“在约束上找最优点”的几何直觉转成一个可计算的方程组。核心句子很短:在光滑约束上的内部最优点,目标函数的梯度与约束函数的梯度平行。

约束最优点在哪里
先看一个二元目标函数 f(x,y),再给一个约束方程
g(x,y)=0
没有约束时,我们在整个平面上找 f 的极值。加上约束后,可行点只剩下满足 g(x,y)=0 的点。若 g(x,y)=0 是一条曲线,问题就变成:沿着这条曲线走,f 的值在哪里最大或最小。
等值线给出最直接的画面。f(x,y)=c 是目标函数取同一个值的位置。随着 c 改变,等值线像一组轮廓线一样移动。约束曲线能碰到的最高一条等值线,通常不是横穿约束曲线,而是刚好与约束曲线相切。若还横穿,就说明沿约束曲线继续走,一侧会让 f 更大,另一侧会让 f 更小,这个点还不是约束最优点。
“相切”不是装饰性的几何语言。它说的是两个一阶变化方向的关系:在约束允许的切向方向上,目标函数的一阶变化必须为零。否则只要沿着约束曲线走一小步,就能把目标值继续推高或推低。
下面的交互把这个画面具体化。拖动等值线水平,观察它从穿过约束圆到刚好相切,再到完全碰不到约束圆的过程。
梯度平行的理由
设约束曲线可以写成一条光滑参数曲线
r(t)=⟨x(t),y(t)⟩
并且曲线上的点都满足 g(r(t))=0。如果 r(t0) 是约束上的一个内部极值点,那么沿这条可行曲线看,单变量函数 f(r(t)) 在 t0 处有极值,所以
dtdf(r(t))t=t0=0
由链式法则,
∇f(r(t0))⋅r′(t0)=0
这说明 ∇f 垂直于约束曲线的切向量。同时,因为 g(r(t)) 恒等于 0,同样有
dtdg(r(t))t=t0=0
也就是
∇g(r(t0))⋅r′(t0)=0
因此,在二维平面里,只要约束曲线在该点有唯一切线,∇f 和 ∇g 都是这条切线的法向量。两个非零法向量只能平行,于是存在一个数 λ,使得
∇f=λ∇g
这个 λ 就叫拉格朗日乘子。

拉格朗日乘子法的常用形式依赖一个光滑条件:约束梯度 ∇g 在候选点不能为零。若约束有尖点、端点,或者 ∇g=0,最优点仍可能存在,但它不一定会被 ∇f=λ∇g 捕捉到。
从几何到方程组
对一个约束 g(x,y)=0,拉格朗日乘子法把原问题
在 g(x,y)=0 下优化 f(x,y)
转成未知量 x,y,λ 的方程组:
∇f(x,y)=λ∇g(x,y)
g(x,y)=0
如果写成分量形式,就是
fx=λgx,fy=λgy,g(x,y)=0
对于三元函数和一个约束 g(x,y,z)=0,形式完全类似:
∇f(x,y,z)=λ∇g(x,y,z)
g(x,y,z)=0

先明确目标函数和约束函数。目标函数是你要最大化或最小化的量,约束函数要整理成 g=0 的形式。若题目给的是 x2+y2=1,可以写成 g(x,y)=x2+y2−1。
写出梯度方程 ∇f=λ∇g。这一行不是凭空来的,它表达的是目标等值线与约束曲线相切,或者说两个法向量平行。
把梯度方程与原约束联立求候选点。不要把 λ 当成目标,它只是帮助我们表达平行关系的辅助未知量。
把候选点代回 f 比较函数值。若可行集合不是闭有界的,或者约束有端点、尖点、分段边界,还要另外检查这些没有被梯度方程覆盖的位置。
例题:固定周长的矩形
设矩形边长为 x,y,周长固定为 P,求面积最大时的形状。目标函数和约束为
A(x,y)=xy
2x+2y=P
把约束写成
g(x,y)=2x+2y−P=0
梯度分别为
∇A=⟨y,x⟩,∇g=⟨2,2⟩
所以拉格朗日方程为
⟨y,x⟩=λ⟨2,2⟩
也就是
y=2λ,x=2λ
由此得到 x=y。再代入周长约束,
2x+2x=P
所以
x=y=4P
最大面积为
Amax=16P2

这个结论并不意外,但拉格朗日乘子法给了一个统一做法:不用先把 y 消去,也不用猜“对称时最好”。它直接从“面积等值线与周长约束线相切”推出 x=y。
例题:到原点最近的平面点
求平面
x+2y+2z=9
上离原点最近的点。
离原点的距离为 x2+y2+z2。因为平方根单调递增,可以改为最小化
f(x,y,z)=x2+y2+z2
约束写成
g(x,y,z)=x+2y+2z−9=0
写出梯度方程。这里 ∇f=⟨2x,2y,2z⟩,∇g=⟨1,2,2⟩,所以
⟨2x,2y,2z⟩=λ⟨1,2,2⟩由分量方程得到 2x=λ,2y=2λ,2z=2λ,也就是
x=2λ,y=λ,z=λ把这些表达式代入平面约束:
2λ+2λ+2λ=9因此 29λ=9,得到 λ=2。
候选点为 (1,2,2)。它到原点的距离是
12+22+22=3平面是闭但无界集合,不过距离平方在远离原点时会变大,所以这个候选点给出最近距离。
这里的几何解释也很清楚。以原点为球心的球面逐渐变大,第一次碰到平面时正好相切。球面的法向量与平面的法向量平行,这正是拉格朗日方程。
预算约束中的乘子
拉格朗日乘子法在经济学模型中常见。设 U(x,y) 表示消费两种商品得到的效用,价格分别是 px,py,预算为 B。预算约束为
pxx+pyy=B
在预算线内寻找最大效用时,拉格朗日方程给出
∇U=λ⟨px,py⟩
写成分量就是
Ux=λpx,Uy=λpy
若 px,py 都不为零,可以得到
pxUx=pyUy
这句话的意思是:在最优组合处,每花一单位货币买任一商品,带来的边际效用要相等。若某个商品的单位货币边际效用更高,就可以把预算从另一个商品挪过来,效用还会继续增加。

在许多模型中,乘子 λ 还能读成“放宽约束一小点时,最优目标值变化多少”。例如预算增加一点,最大可达效用大约增加 λ 乘以那一点预算。这个解释依赖问题足够光滑,并且最优点没有突然跳到另一个约束位置。
多个约束
有时一个约束不够。空间中的点可能既要落在球面上,又要落在某个平面上;生产方案可能同时受材料、时间和预算限制。
若目标函数是 f(x,y,z),两个约束为
g(x,y,z)=0,h(x,y,z)=0
可行集合通常是一条空间曲线。最优点处,目标函数沿这条可行曲线的一阶变化为零,所以 ∇f 要垂直于可行曲线的切向量。另一方面,∇g 和 ∇h 都垂直于这条曲线。若 ∇g 与 ∇h 独立,它们张成可行曲线的法平面,于是 ∇f 应落在这个法平面内:
∇f=λ∇g+μ∇h
再加上两个约束方程,就是完整的方程组:
∇f=λ∇g+μ∇h
g=0,h=0

下面的交互把“线性组合”单独拿出来看。调节 λ 与 μ,观察 λ∇g+μ∇h 怎样追上目标梯度。
多个约束例题
在约束
x2+y2+z2=1,x−y=0
下,求
f(x,y,z)=x+y+z
的最大值和最小值。
令
g(x,y,z)=x2+y2+z2−1
h(x,y,z)=x−y
拉格朗日方程为
⟨1,1,1⟩=λ⟨2x,2y,2z⟩+μ⟨1,−1,0⟩
再加上两个约束。分量方程是
1=2λx+μ
1=2λy−μ
1=2λz
由 x−y=0 得 x=y。把前两式相加可得
2=2λ(x+y)
又因为第三式给出 1=2λz,结合 x=y 可推出 x=y=z。代入球面约束,
3x2=1
因此候选点为
(31,31,31)
和
(−31,−31,−31)
对应函数值为
3,−3
所以最大值是 3,最小值是 −3。
常见误区
不要把“解出拉格朗日方程”当成“已经找到最大最小”。方程给出的是候选点。最后仍要比较函数值,并检查约束集合的端点、分段处、奇异点,以及题目是否保证最大值或最小值存在。
忽略约束梯度为零
若约束写成 g(x,y)=0,但某个可行点上 ∇g=0,常规拉格朗日方程可能失效。比如约束
x2+y2=0
只包含原点一个可行点。任何目标函数在这个集合上的最大值和最小值都只能发生在原点,但这里
∇g(0,0)=⟨0,0⟩
无法提供有效的法向量。
忘记边界或变量范围
固定周长的矩形例题通常隐含 x>0,y>0。如果允许 x=0 或 y=0,还要检查退化矩形。它们面积为 0,不是最大值,但在别的题里,边界完全可能给出最大或最小。
过早消去变量
代换法当然可以用。例如由 x+y=10 写成 y=10−x,再做单变量优化。但当约束变多、变量变多、约束曲面难以参数化时,代换会变得笨重。拉格朗日乘子法的优势是保留变量之间的对称结构。
练习
- 在约束 x2+y2=1 下,求 f(x,y)=xy 的最大值和最小值。
设 g=x2+y2−1。由 ∇f=λ∇g 得
⟨y,x⟩=λ⟨2x,2y⟩即 y=2λx,x=2λy。若 x,y 都不为零,则 x2=y2。结合单位圆,得到 x=±y。同号时 xy=21,异号时 xy=−21。所以最大值为 21,最小值为 −21。
- 在约束 x2+y2=5 下,求 f(x,y)=x+2y 的最大值和最小值。
拉格朗日方程为
⟨1,2⟩=λ⟨2x,2y⟩因此 (x,y) 与 (1,2) 同向或反向。单位方向 (1,2)/5 乘半径 5 得到 (1,2),反向点为 (−1,−2)。函数值分别为 5 和 −5,所以最大值是 5,最小值是 −5。
- 周长为 20 的矩形,面积最大时边长是多少?
令面积 A=xy,约束 2x+2y=20。由本章例题可知最优时 x=y=P/4。这里 P=20,所以 x=y=5,最大面积为 25。
- 求直线 x+y=6 上离原点最近的点。
最小化 f=x2+y2,约束 g=x+y−6=0。由
⟨2x,2y⟩=λ⟨1,1⟩得到 x=y。再代入 x+y=6,得 x=y=3。最近点是 (3,3),距离为 32。
- 设效用函数 U(x,y)=xy,预算约束为 2x+y=12。在 x>0,y>0 下,求最大效用的消费组合。
有
Ux=21xy,Uy=21yx最优时
UyUx=12左边化简为 y/x,所以 y=2x。代入预算约束 2x+y=12,得 4x=12,所以 x=3,y=6。
- 在约束 x2+y2+z2=1 与 x=y 下,求 f(x,y,z)=x+y+z 的最大值。
可行点满足 x=y,所以可写成 (x,x,z),并有 2x2+z2=1。由多个约束的拉格朗日条件可得最优候选点满足 x=y=z。代入球面约束,3x2=1。最大点为
(31,31,31)最大值为 3。