拉格朗日乘子法

引言

学习支持向量机的原理时,会遇到带约束条件的极值问题。那么理解拉格朗日乘子法就很有必要了。

简单案例

问题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=2x

代入:

S = 2 x − x 2 S=2x-x^2 S=2xx2

求极值:

S ′ = 2 − 2 x = 0 S'=2-2x =0 S=22x=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+ya22xy)

虽然也把条件极值问题成功转化为无条件极值问题了,但是求极值就麻烦多了,涉及多元函数求极值。如果问题进一步复杂,比如有很多个自变量,有很多个约束条件,那将更加爆炸。

时机到了,请出我们今天的主角——拉格朗日乘子法

拉格朗日乘子法

我们有函数 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. xF(x,y,λ)=0yF(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. xF(x,y,z,t,λ1,λ2)=0yF(x,y,z,t,λ1,λ2)=0zF(x,y,z,t,λ1,λ2)=0tF(x,y,z,t,λ1,λ2)=0λ1F(x,y,z,t,λ1,λ2)=0λ2F(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+2yza2=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+2yza2)

分别求偏导,建立方程组:

{ ∂ 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} xF(x,y,z,λ)=yz+λ(2y+2z)=0yF(x,y,z,λ)=xz+λ(2x+2z)=0zF(x,y,z,λ)=xy+λ(2x+2y)=0λF(x,y,z,λ)=2xy+2xz+2yza2=0

求解出:
x = y = z = a 6 x=y=z=\frac{a}{\sqrt 6} x=y=z=6 a

代入体积函数,可得最大体积:

V m a x = 6 a 3 36 V_{max}=\frac{\sqrt 6 a^3}{36} Vmax=366 a3

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
拉格朗日乘子法是一种优化算法,应用于具有约束条件的优化问题。它的原理是基于拉格朗日乘子的概念,在解有约束问题的时候,将约束条件转化为目标函数的一部分,通过解该新的目标函数,得到问题的最优解。 在使用拉格朗日乘子法时,首先根据问题的约束条件构造拉格朗日函数拉格朗日函数是由目标函数约束条件组成的,目标函数会被调整为加入拉格朗日乘子与约束条件的乘积,同时每个约束条件都会有一个对应的拉格朗日乘子。然后,通过拉格朗日函数的偏导数,将其等于0,可以得到一组方程,包括目标函数的梯度和约束条件的梯度。将这些方程联立解,就可以得到问题的最优解。 对于拉格朗日函数解,可以采用数值方法,例如使用fmincon算法。fmincon是一种非线性约束最小化算法,可以解具有非线性约束的优化问题。它的实现基于拉格朗日乘子法,通过迭代的方式逼近最优解。在每一次迭代中,通过解一组子问题,不断调整拉格朗日乘子的值,直到找到最优解为止。 总之,拉格朗日乘子法是一种基于拉格朗日函数的优化算法,通过将约束条件转化为目标函数的一部分,再利用数值方法解最优解。而fmincon算法则是一种具体的数值方法实现,可以应用于解具有非线性约束的优化问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄嘉成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值