约束优化与拉格朗日乘子
上一章找无约束极值时,我们习惯先写
∇f=0
这条规则背后的理由是:如果一点真是定义域内部的极大点或极小点,那么你朝任意方向迈一小步,都不该还能让函数值继续上升或下降。既然所有方向都能走,所有方向的一阶变化率都得是零,于是梯度只能是零向量。
可一旦题目加上一条约束,这个理由就断了。
比如要在单位圆 x2+y2=1 上让 f(x,y)=x+y 最大。答案是圆上东北方向的点
(21,
但这里的梯度明明是
∇f=⟨1,1⟩=0
它为什么仍然能是最大点?因为你不能顺着 ⟨1,1⟩ 往外走,那一步会离开圆。约束把“所有方向都能走”改成了“只能沿着圆周走”。最优点只需要保证:沿那些仍然允许的方向,函数的一阶变化全部为零。
拉格朗日乘子法做的事,就是把“哪些方向还允许走”翻译成梯度方程。
老办法卡在了哪里
设目标函数是 f(x,y),约束写成
g(x,y)=k
满足约束的点叫可行点,所有可行点合在一起叫可行集合。在二维问题里,一条光滑的等式约束通常把整个平面压成一条曲线。
站在约束曲线上的点 P,你不能随便选一个小位移 Δr。如果位移把你带离 g=k,它就不属于这个问题。真正允许的瞬时方向,是曲线在 P 点的切向量 v。
沿可行曲线走时,g 的值始终是 k,所以它的变化率为零:
∇g(P)⋅v=0
这说明 ∇g(P) 垂直于可行方向。若 P 是约束下的光滑极值点,目标函数沿同一个可行方向也不能有一阶变化:
∇f(P)⋅v=0
注意这里没有要求 ∇f(P) 对所有方向都垂直,只要求它对约束留下来的切向方向垂直。因此 ∇f(P) 完全可以不是零向量。
无约束极值要求“沿每个方向都走不动”,所以通常有 ∇f=0。等式约束极值只要求“沿可行方向走不动”,所以通常有 ∇f=0。两种条件不同,不是公式突然换了一套,而是允许的运动方向变少了。
用参数曲线把理由写严谨
假设约束附近可以参数化为
r(t)=⟨x(t),y(t)⟩
并且对附近所有 t 都有 g(r(t))=k。若 t=t0 对应约束极值点,那么单变量函数 在 处有极值。链式法则给出
dtdf(r(t))
另一方面,约束值一路不变,因此
dtdg(r(t))
两个梯度都垂直于同一条切线。只要 ∇g(P)=0,约束在这里有明确的切线,平面中的两个非零法向量就只能平行。
等值线相切,梯度才会平行
把目标函数的等值线 f(x,y)=c 想成一组可以移动的轮廓线。我们逐渐改变 c,寻找约束曲线能够碰到的最高或最低一条等值线。
如果某条目标等值线在交点处横穿约束曲线,这个点通常不会是极值。沿约束向交点的一侧走,f 会进入更高的等值区域;向另一侧走,f 会进入更低的等值区域。还有上升或下降的余地,就不能在这里停下。
到了光滑极值点,两条曲线通常刚好相切。目标等值线的法向量是 ∇f,约束曲线的法向量是 ∇g。共同切线意味着法向量平行,所以存在某个实数 λ,使
∇f=λ∇g
这个辅助数 λ 就是拉格朗日乘子。λ>0 表示两个梯度同向,λ<0 表示反向;两种情况都属于平行。只写“方向相同”会漏掉一半可能性。

∇f=λ∇g 是正则点上的必要条件,不是充分条件。解出方程只得到候选点;它可能是约束最大点、约束最小点,也可能只是沿曲线暂时变平的点。最后还要比较函数值或检查沿约束切向的二阶变化。
下面这个交互固定约束圆 x2+y2=1,移动目标函数 f=x2+ 的等值椭圆。先观察横穿时为什么不是极值,再看 与 时的相切和梯度。
从几何条件写成方程组
若约束是 g(x,y)=k,未知量有 x,y,λ。拉格朗日条件给出三条方程:
fx=λgx
fy=λgy
g(x,y)=k
也可以先把约束移到一边,令 G(x,y)=g(x,y)−k,再写 ∇f=λ∇G 与 G。因为常数 的梯度为零,这两种写法完全一样。
三元函数配一条等式约束时,只是多一条分量方程:
fx=λgx,f
拉格朗日函数只是把方程收在一起
定义
L(x,y,λ)=f(x,y)−λ(g(x,y)−k)
令它对三个未知量的偏导数都为零:
Lx=fx−λgx=0
Ly=fy−λgy=0
Lλ=−g+k=0
前两条正是梯度平行,最后一条把原约束带了回来。L 不是一个需要解释成面积、距离或利润的新目标;它只是把目标和约束装进同一个求方程工具。
一套不容易漏点的流程
先列变量的实际范围,再写目标函数。矩形边长要满足 x≥0,y≥0;消费数量也不能是负数。这些范围往往会制造端点或角点,不能只写公式不写定义域。
把每条等式约束写清楚。建议保留 g 的含义,例如“总预算等于 ”,计算时再改写成 。

完整例题:单位圆上的最大值与最小值
在约束
x2+y2=1
下,求
f(x,y)=x2+2y2
的最大值和最小值。
约束圆是闭且有界的,f 又连续,所以最大值和最小值一定存在。这里
∇f=⟨2x,4y⟩,∇g=⟨2x,2y⟩
而 ∇g 在单位圆上从不为零,因此所有极值点都会被常规拉格朗日条件捕捉。
写出方程组:
2x=2λx,4y=2λy,x2
这里还能直接用约束把函数改写成 f=1+y2。代换法更短,但拉格朗日方程展示了一个可以推广到难以消元、变量很多的模型上的结构。
把文字题翻译成目标和约束
真正费脑筋的地方,往往不是求偏导,而是分清“要优化什么”和“哪些量不能自由改变”。下面看三类常见模型。
固定周长的矩形
设矩形边长为 x,y,周长固定为 P>0。目标是最大化面积
A(x,y)=xy
约束和变量范围是
2x+2y=P,x≥0,y≥0
梯度方程为
⟨y,x⟩=λ⟨2,2⟩
因此
y=2λ,x=2λ
光滑候选点满足 x=y。代回周长约束得到
x=y=4P
对应面积为
A=16P2
不过模型里还有 x,y≥0。可行集合其实是直线 2x+2y=P 在第一象限内的一条闭线段,端点为 (0,P/2) 与 ,两处面积都是 。和内部候选点比较后,才能正式得出正方形面积最大。

拖动下面的周长和边长,可以同时看见当前矩形、同周长的正方形以及面积抛物线。这里也能看到“端点面积为零,内部顶点面积最大”的完整比较。
到一个平面最近的点
求平面
x+2y+2z=9
上离原点最近的点。距离有平方根,直接求导会带来不必要的分母。因为平方根严格递增,最小化距离等价于最小化距离平方:
f(x,y,z)=x2+y2+z2
梯度方程是
⟨2x,2y,2z⟩=λ⟨1,2,2⟩
于是
x=2λ,y=λ,z=λ
代回平面方程:
2λ+2λ+2λ=9
得到 λ=2,最近点是 (1,2,2),最近距离为 3。几何上,以原点为球心逐渐放大球面,第一次碰到平面时两者相切;最近点到原点的向量正好沿平面的法向量。
预算内怎样分配两种商品
设两种商品数量为 x,y,价格分别为 2 和 1,预算为 12,效用模型为
U(x,y)=xy
约束是
2x+y=12,x≥0,y≥0
在 x,y>0 的光滑部分,拉格朗日条件为
Ux=2λ,Uy=λ
其中
Ux=21x
两式相除可得
UyUx=2
左边等于 y/x,所以 y=2x。代回预算约束得到
x=3,y=6
两个端点 (6,0) 与 (0,12) 的效用都是 0,而内部候选点的效用是 32,所以它给出最大值。

这个模型还揭示了一个常见解释:最优点处,每一单位货币带来的边际效用相同。因为
2Ux=1Uy
若两边不相等,把一小笔预算从“单位货币收益低”的商品挪到另一种商品上,效用还会继续增加。
乘子到底表示什么
λ 不只是为了把两个梯度写成平行。它还描述最优值对约束水平的局部敏感度。
设约束水平是 k,最优点会随 k 改变,记作 r(k)。对应的最优值记作
V(k)=f(r(k))
沿着这一族最优点求导:
V′(k)=∇f⋅r′(k)
在最优点上,∇f=λ∇g,所以
V′(k)=λ∇g⋅r′(k)
而约束恒有 g(r(k))=k,两边对 k 求导给出
∇g⋅r′(k)=1
因此
V′(k)=λ
换句话说,把约束水平改动一个很小的量 Δk 时,新的最优值近似为
V(k+Δk)≈V(k)+λΔk
固定周长矩形正好可以核对这件事。它的最大面积是
V(P)=16P2
所以
V′(P)=8P
前面的梯度方程给出 x=y=2λ=P/4,同样得到 λ=P/8。
乘子的数值带着单位,也依赖约束的写法。把 g=k 同时乘以 10,最优点不会变,但对应乘子会缩小为原来的十分之一。因此解释 λ 时,必须连同“约束量用什么单位度量”一起说。
如果最优点会突然从一段边界跳到另一段,最优值函数可能出现折点,这时单一的 V′(k) 未必存在。敏感度公式描述的是光滑、稳定分支附近的小变化,不是任意大幅改动后的保证。
多个约束:梯度落在法向空间里
设 f(x,y,z) 同时受到两条等式约束:
g(x,y,z)=k1,h(x,y,z)=k
两个曲面通常交成一条空间曲线。可行方向必须同时沿着两个曲面,因此它既垂直于 ∇g,也垂直于 ∇h。
在约束极值点,∇f 也必须垂直于这条可行曲线。若 ∇g 与 ∇h 线性独立,它们张成这条曲线的法平面,∇f 就必须落在这个平面里:
∇f=λ∇g+μ∇h

完整方程组还要带上原来的两条约束。拉格朗日函数可以写成
L=f−λ(g−k1)−μ(h−k
令它对 x,y,z,λ,μ 的五个偏导数都为零,就得到五个未知量对应的五条方程。
例题:到两平面交线的最近点
在
x+y+z=9
和
x+2y+3z=20
的共同约束下,最小化
f(x,y,z)=x2+y2+z2
两个平面相交成一条直线,问题是在这条直线上找离原点最近的点。设两个乘子为 λ,μ,梯度方程为
⟨2x,2y,2z⟩=λ⟨1,1,1⟩+μ⟨1,2,3⟩
分量形式是
2x=λ+μ,2y=λ+2μ,2z=λ+3μ
把 x,y,z 代回两条约束,得到
3λ+6μ=18
6λ+14μ=40
解得
λ=2,μ=2
再回代可得
(x,y,z)=(2,3,4)
最小距离平方是 29。这里的几何画面是:以原点为球心的球面第一次碰到那条交线,球面的法向量 ∇f 落在两个平面法向量张成的平面中。
多个约束的梯度必须在候选点线性独立,常规公式才有稳定的“法空间”解释。如果两条约束其实在局部重复,或者两个梯度都退化了,方程可能多出无穷多乘子,也可能漏掉极值点。此时应先化简约束、参数化可行集合,或单独检查退化位置。
拉格朗日方程之外还要检查什么
把候选点找全,比把方程解出来更重要。下面四类位置要养成固定检查的习惯。
约束奇异点
考虑约束
g(x,y)=x2−y3=0
和目标函数
f(x,y)=x2+y
约束可以参数化为
x=t3,y=t2
因此沿约束有
f=t6+t2≥0
最小值显然在原点取得。但原点处
∇g(0,0)=⟨0,0⟩
而
∇f(0,0)=⟨0,1⟩
不存在 λ 使 ∇f=λ∇g。原因不是极值有问题,而是约束在原点形成尖点,∇g 已经不能提供有效法向量。
端点、角点和分段连接处
固定周长矩形的可行集合因为 x,y≥0 变成一条线段。线段内部可以用拉格朗日条件,两个端点却必须直接代入比较。
如果可行区域是多边形,通常要分三层检查:区域内部的 ∇f=0,每条边上的单约束极值,以及所有顶点。曲线由几段拼接时,连接处也应像端点一样单独处理。
不等式约束的内部与活动边界
对于
g(x,y)≤k
最优点若满足严格不等式 g<k,这条约束在局部没有挡路,问题退回无约束情形,通常检查 ∇f=0。若最优点落在 g=k 上,约束正在起作用,再把这段边界当作等式约束使用拉格朗日条件。
多条不等式相交时,最优点可能落在某条边上,也可能落在几条边同时起作用的角点。初学阶段最稳妥的做法,是按“内部、各段边界、交点”逐层检查,而不是一开始就猜哪条约束会卡住答案。
无穷远处和不存在的极值
在直线
x+y=1
上考察 f(x,y)=2x+y。代入 y=1−x 后,
f=x+1
当 x→∞ 时 f→∞,当 x→−∞ 时 f→−∞,所以最大值和最小值都不存在。此时拉格朗日方程也没有解,因为 不可能与 平行。
“方程无解”本身还不是不存在极值的证明;真正的证明来自沿可行集合考察函数怎样跑向无穷远。闭且有界的可行集合能替我们排除这类麻烦:连续函数在这种集合上一定能取得最大值和最小值。
怎样判断候选点的类型
若可行集合闭且有界,而且候选点只有有限个,最直接的方法就是把所有候选点、奇异点和边界点代回 f 比较。这个方法判断的是全局最大值和最小值,也最不容易误判。
如果只想判断一个正则候选点附近的类型,可以看沿约束切向的二阶变化。设 v 是任意非零可行切向量,满足
∇g⋅v=0
在候选点取对应乘子 λ,考察
Q(v)=vT(Hf−λHg
如果对每个非零可行切向量都有 Q(v)>0,候选点是约束局部最小点;若始终小于零,则是约束局部最大点;若不同切向方向出现不同符号,它就不是约束极值。若某个非零切向量让 Q(v)=0,二阶信息不够,必须继续看更高阶变化或直接沿约束参数化。
这里检查的是拉格朗日函数在可行方向上的二阶变化,而不是只看 Hf。约束本身会弯,Hg 正是在修正这部分弯曲。若有多个约束,就把矩阵换成 Hf,并只检查同时垂直于所有约束梯度的方向。
常见误区
看到 x(1−λ)=0 就除以 x,会直接丢掉 x=0 这一整支解。拉格朗日方程经常靠“某个变量为零”和“某个乘子取特殊值”产生不同候选点,必须先分支。
等值线相切只说明一阶条件成立。某条约束曲线可能和同一目标等值线在多个位置相切,其中有最大点、最小点,也可能有别的驻点。不要凭一张局部相切图直接宣布答案。
把约束整理成 g=0 后,仍要检查 ∇g=0 的可行点。常规拉格朗日条件默认约束在候选点是光滑的;公式没有找到奇异点,不等于奇异点不可能最优。
乘子不是最大值或最小值本身。目标值必须把候选点代回 f 计算;λ 描述梯度比例,并在光滑条件下描述最优值对约束水平的敏感度。
练习
- 在约束 x2+y2=5 下,求 f(x,y)=x+ 的最大值、最小值以及相应乘子。
设 g=x2+y2。拉格朗日方程为
⟨1,2⟩=λ⟨2x
- 周长为 32 的矩形,面积最大时边长是多少?为什么还要检查退化端点?
令 A=xy,约束为 2x+2y=32,并有 x,y≥0。内部拉格朗日候选满足 x,所以
- 设 (a,b,c)=(0,0,0)。求平面 ax+by+cz 上离原点最近的点和最近距离。
最小化 f=x2+y2+z2,约束为 g。梯度方程给出
- 在约束 x2−y3=0 下最小化 f=x2+。说明为什么普通拉格朗日方程会漏掉答案。
约束可以写成 x=t3,y=t2,所以
f(t)=t
- 在约束 x+y+z=6 与 x−y=0 下,求 x 的最小值。
由 x−y=0 可知 x=y,第一条约束变成 2x+z=6。也可以完整使用两个乘子:
- 固定周长矩形在 P=20 时面积最大。若周长增加到 20.2,用乘子估计最大面积增加多少,并与精确变化比较。
最大面积函数为
V(P)=16P2对应乘子是
λ=V
- 在闭圆盘 x2+y2≤1 上,求 f(x,y)=(x 的最大值和最小值。
无约束临界点是 (2,0),但它不在圆盘内,所以内部没有候选点。边界上令 g=x2+y2=1,有
从“找几个点”走向“累加整片区域”
到这里,我们已经能处理两类极值问题:变量可以自由移动时找 ∇f=0,变量被约束在曲线或曲面上时只消掉可行方向的一阶变化,再用拉格朗日乘子找候选点。
下一章会换一个完全不同的问题。优化关心的是“整片区域里哪几个点最高或最低”,二重积分则要把区域里的每一个小块都算进去。约束曲线不会消失:它会从“限制你能往哪里走”,变成“描述积分区域的边界”。先把可行集合看清楚的习惯,会直接帮助我们写出二重积分的区域和上下限。