学习支持向量机的原理时,会遇到带约束条件的极值问题。那么理解拉格朗日乘子法就很有必要了。
问题1
设有一条绳子有4米长,我们将绳子围成长为x,宽为y的矩形,矩形的最大面积是多少?
大家一看到这个问题,心想这还不简单,直接联立方程,消元,求极值不就完了:
{ S = x y 2 ( x + y ) = 4 \begin{cases} & S = xy \\ & 2(x+y)=4 \end{cases} {S=xy2(x+y)=4
消元:
y = 2 − x y = 2-x y=2−x
代入:
S = 2 x − x 2 S=2x-x^2 S=2x−x2
求极值:
S ′ = 2 − 2 x = 0 S'=2-2x =0 S′=2−2x=0
解得 x = 1 x=1 x=1, y = 1 y=1 y=1,也就是当长为1米,宽为1米时矩形面积最大。
有人会问,这也没见到拉格朗日乘子法啊?没错,如上面这般简单的条件极值问题确实不需要拉格朗日乘子法,但如果问题一旦复杂起来,比如:
问题2
一个长方体的长宽高分别是x,y,z,表面积是 a 2 a^2 a2,问当长宽高具体为多少时,体积最大?
按照上面消元代入法的步骤,你会得到如下的目标函数:
V = x y 2 ( a 2 − 2 x y x + y ) V=\frac{xy}{2}(\frac{a^2-2xy}{x+y}) V=2xy(x+ya2−2xy)
虽然也把条件极值问题成功转化为无条件极值问题了,但是求极值就麻烦多了,涉及多元函数求极值。如果问题进一步复杂,比如有很多个自变量,有很多个约束条件,那将更加爆炸。
时机到了,请出我们今天的主角——拉格朗日乘子法。
我们有函数 f ( x , y ) f(x,y) f(x,y),要找在约束条件 ψ ( x , y ) = 0 \psi(x,y)=0 ψ(x,y)=0下的极值点。我们先构造拉格朗日函数:
F ( x , y , λ ) = f ( x , y ) + λ ψ ( x , y ) F(x,y,\lambda)=f(x,y) +\lambda \psi(x,y) F(x,y,λ)=f(x,y)+λψ(x,y)
然后分别对 x x x、 y y y、 λ \lambda λ求偏导,得方程组:
{ ∂ F ( x , y , λ ) ∂ x = 0 ∂ F ( x , y , λ ) ∂ y = 0 ∂ F ( x , y , λ ) ∂ λ = 0 \left\{ \begin{array}{c} \frac{\partial F(x,y,\lambda)}{\partial x}=0 \\ \frac{\partial F(x,y,\lambda)}{\partial y}=0\\ \frac{\partial F(x,y,\lambda)}{\partial \lambda}=0 \end{array} \right. ⎩⎪⎨⎪⎧∂x∂F(x,y,λ)=0∂y∂F(x,y,λ)=0∂λ∂F(x,y,λ)=0
可求解出 x x x、 y y y,代回原函数就能得出极值。
拉格朗日乘子法也可推广到多元变量和多约束条件的情况,如:
要找函数 f ( x , y , z , t ) f(x,y,z,t) f(x,y,z,t)在约束条件 ψ ( x , y , z , t ) = 0 \psi(x,y,z,t)=0 ψ(x,y,z,t)=0和 Ψ ( x , y , z , t ) = 0 \Psi(x,y,z,t)=0 Ψ(x,y,z,t)=0下的极值。构造拉格朗日函数:
F ( x , y , z , t , λ 1 , λ 2 ) = f ( x , y , z , t ) + λ 1 ψ ( x , y , z , t ) + λ 2 Ψ ( x , y , z , t ) F(x,y,z,t,\lambda_1,\lambda_2)=f(x,y,z,t) +\lambda_1 \psi(x,y,z,t) +\lambda_2 \Psi(x,y,z,t) F(x,y,z,t,λ1,λ2)=f(x,y,z,t)+λ1ψ(x,y,z,t)+λ2Ψ(x,y,z,t)
分别求偏导,建立方程组:
{ ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ x = 0 ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ y = 0 ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ z = 0 ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ t = 0 ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ λ 1 = 0 ∂ F ( x , y , z , t , λ 1 , λ 2 ) ∂ λ 2 = 0 \left\{ \begin{array}{c} \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial x}=0 \\ \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial y}=0\\ \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial z}=0\\ \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial t}=0\\ \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial \lambda_1}=0 \\ \frac{\partial F(x,y,z,t,\lambda_1,\lambda_2)}{\partial \lambda_2}=0 \end{array} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧∂x∂F(x,y,z,t,λ1,λ2)=0∂y∂F(x,y,z,t,λ1,λ2)=0∂z∂F(x,y,z,t,λ1,λ2)=0∂t∂F(x,y,z,t,λ1,λ2)=0∂λ1∂F(x,y,z,t,λ1,λ2)=0∂λ2∂F(x,y,z,t,λ1,λ2)=0
解出 x x x、 y y y、 z z z、 t t t,代回原函数即可得到极值。
如果只放公式似乎太抽象了,我在这里就在具体是案例中使用拉格朗日乘子法计算极值。
还是用上面的问题2:
一个长方体的长宽高分别是x,y,z,表面积是 a 2 a^2 a2,问当长宽高具体为多少时,体积最大?
体积函数:
V = x y z V=xyz V=xyz
约束条件:
2 x y + 2 x z + 2 y z − a 2 = 0 2xy+2xz+2yz-a^2=0 2xy+2xz+2yz−a2=0
构造拉格朗日函数:
F ( x , y , z , λ ) = x y z + λ ( 2 x y + 2 x z + 2 y z − a 2 ) F(x,y,z,\lambda) = xyz+\lambda(2xy+2xz+2yz-a^2) F(x,y,z,λ)=xyz+λ(2xy+2xz+2yz−a2)
分别求偏导,建立方程组:
{ ∂ F ( x , y , z , λ ) ∂ x = y z + λ ( 2 y + 2 z ) = 0 ∂ F ( x , y , z , λ ) ∂ y = x z + λ ( 2 x + 2 z ) = 0 ∂ F ( x , y , z , λ ) ∂ z = x y + λ ( 2 x + 2 y ) = 0 ∂ F ( x , y , z , λ ) ∂ λ = 2 x y + 2 x z + 2 y z − a 2 = 0 \begin{cases} & \frac{\partial F(x,y,z,\lambda)}{\partial x}=yz+\lambda(2y+2z)=0 \\ & \frac{\partial F(x,y,z,\lambda)}{\partial y}=xz+\lambda(2x+2z)=0 \\ & \frac{\partial F(x,y,z,\lambda)}{\partial z}=xy+\lambda(2x+2y)=0 \\ & \frac{\partial F(x,y,z,\lambda)}{\partial \lambda}=2xy+2xz+2yz-a^2=0 \\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧∂x∂F(x,y,z,λ)=yz+λ(2y+2z)=0∂y∂F(x,y,z,λ)=xz+λ(2x+2z)=0∂z∂F(x,y,z,λ)=xy+λ(2x+2y)=0∂λ∂F(x,y,z,λ)=2xy+2xz+2yz−a2=0
求解出:
x = y = z = a 6 x=y=z=\frac{a}{\sqrt 6} x=y=z=6a
代入体积函数,可得最大体积:
V m a x = 6 a 3 36 V_{max}=\frac{\sqrt 6 a^3}{36} Vmax=366a3