所谓拉格朗日乘子法,就是拉格朗日发明的乘子法。
(逃)
前言
曾经,我被它爆杀;如今,不同的日子,同样的题目,我却不再是曾经的我了。
因为我写模拟退火了。
也不能老是这么混着,还是尝试着学一学这个东西吧。
解析
拉格朗日乘子法通常用于解决如下问题:
给出函数 f ( x 1... n ) f(x_{1...n}) f(x1...n) 与限制 L ( x 1... n ) L(x_{1...n}) L(x1...n),在满足限制的前提下求函数极值。
个人感觉直接讲有些抽象,不如直接以我见到两次不会两次的题目为例:
给出序列 a 1... n a_{1...n} a1...n,最大化 ∑ i a i sin θ i \sum_ia_i\sin \theta_i ∑iaisinθi,使得 ∑ θ i = 2 π \sum\theta_i=2\pi ∑θi=2π。
这里的函数 f f f 就是 ∑ i a i θ i \sum_ia_i\theta_i ∑iaiθi,限制 L L L 就是 ∑ θ i − 2 π = 0 \sum\theta_i-2\pi=0 ∑θi−2π=0。
那咋做啊?
考虑没有限制怎么做?
那不就是
∑
a
i
\sum a_i
∑ai 嘛。我们来想想它的本质:在类似这样连续可导的函数中,最大值必然意味着 导数为0。
注意! 反过来并非如此.,导数为0不一定是最大值,甚至不一定是极值。
那么像这样求多元函数极值的本质其实就是求出每个变量 θ i \theta_i θi 的偏导,然后令其均为0。
有限制了怎么办?
考虑构造如下拉格朗日函数:
F
(
x
)
=
f
(
x
)
+
λ
L
(
x
)
F(x)=f(x)+\lambda L(x)
F(x)=f(x)+λL(x)
这道题就是:
F
(
x
)
=
∑
a
i
sin
θ
i
+
λ
(
∑
θ
i
−
2
π
)
F(x)=\sum a_i\sin\theta_i+\lambda (\sum \theta_i-2\pi)
F(x)=∑aisinθi+λ(∑θi−2π)
这有啥用?
我们要求
∑
θ
i
−
2
π
=
0
\sum \theta_i-2\pi=0
∑θi−2π=0,换句话说,其实也就是
λ
\lambda
λ 的偏导数等于0,我们惊喜的发现这个东西和我们本来最大化需要的东西非常一致!而且,由于后面
λ
\lambda
λ 的系数为0了,其对函数结果的实际大小其实是并不会产生影响的。
那么我们求出这个构造函数
F
(
x
)
F(x)
F(x) 的极值,其实也就是满足要求下原函数的极值了!
求法还是类似:
对每个参数求偏导,令其等于0并联立:
a
i
cos
θ
i
+
λ
=
0
a_i\cos \theta_i+\lambda=0
aicosθi+λ=0
∑
θ
i
−
2
π
=
0
\sum\theta_i-2\pi=0
∑θi−2π=0
看起来不太可做?我们发现,由于
cos
θ
\cos \theta
cosθ 在我们需要的定义域上是单调的,所以我们可以二分
λ
\lambda
λ 的值,在验证第二行的等式。