假如你面前有一座山,山上有一条复杂的小路,如果你爬山的时候只能顺着小路走,那么什么时候你发现自己到了某个至高点呢?很明显,当你发现自己不论是往前走,还是往后退时,高度总是下降的,那么这时你就位于一个局部的最高点了。
把这个思想抽象为数学表达,那就是,当函数上某点的梯度在约束曲线切向没有分量时,你就到达局部最高点了;换句话说,如果函数的梯度在约束曲线切向有分量,那么你就可以继续顺着这个分量移动以达到一个更高的高度。我们知道,约束曲线的切向是正交于法向的,所以这实际就是说函数的梯度要和曲线的法向平行。
约束曲线的法向是什么?假如一个约束曲线表达为G=0, 那么所谓曲线的法向,其实是曲面G在等高线G=0处的梯度!所以两个梯度平行,意味着grad(F)=k grad(G). 这个系数k就被称为拉格朗日乘子。
而求函数在约束曲线下的最大值,实际上也就是解方程组:
grad(F) = L grad(G)
G=0
为了简便与形式的统一,我们引入朗格朗日函数: L(F,G,k) = F+kG, 那么以上方程组实际上等价为:
grad_x(L) = 0
dL/dk = 0
值得注意的是,如果我们的约束曲线变成了曲面G>=0,同时要求解只能在G=0上,那么乘子k的符号其实是有限定的,它必须保证两个梯度方向相反(即对偶可行性条件)。为什么要这样?其实很明显,因为我们一方面已经约束了解只能在G=0上,另一方面又允许进一步探索G>0的区域,那么如果 grad(F) 和 grad(G) 同向,则意味着我们可以进入G>0的区域以提高F的取值,这点就与解只能在G=0上相矛盾。所以只有grad(F) 和 grad(G) 反向时,进一步提高F的值意味着步入G<0的领域,但那是不允许的,所以这就保证了解只可能出现在G=0上。