一、以二元函数引入
假设有一个二元函数 z = f ( x , y ) z=f(x,y) z=f(x,y),现在我们要求它在满足条件 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0条件下的极值。
举个例子,求双曲线 x y = 2 xy=2 xy=2上到点 ( 5 , 3 ) (5,3) (5,3)最近的点。在这个问题当中,我们要求的就是距离函数 z = f ( x , y ) = ( x − 5 ) 2 + ( y − 3 ) 2 z=f(x,y)=(x-5)^2+(y-3)^2 z=f(x,y)=(x−5)2+(y−3)2的极值(同时也是最值),而约束条件则是 ϕ ( x , y ) = x y − 2 = 0 \phi(x,y)=xy-2=0 ϕ(x,y)=xy−2=0。
对于这个例子,我们完全可以把它化为一元函数极值/最值的问题。令 y = 2 x y=\frac{2}{x} y=x2,则 z = f ( x , y ) = z ( x ) = ( x − 5 ) 2 + ( 2 x − 3 ) 2 z=f(x,y)=z(x)=(x-5)^2+\left(\frac{2}{x}-3\right)^2 z=f(x,y)=z(x)=(x−5)2+(x2−3)2,然后对 z ( x ) z(x) z(x)求导数为 0 0 0的点即可。
但并非所有的问题都能找到
y
y
y与
x
x
x的函数关系,此时隐函数
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0不能显化,不能直接代得到
y
y
y的表达式。比如像
e
x
y
+
y
arctan
x
=
0
e^xy+y\arctan x=0
exy+yarctanx=0这种奇怪的函数,
y
y
y对
x
x
x的表达式根本写不出来。虽然这种
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0不能显化,但我们仍然可以把
y
y
y与
x
x
x的关系设出来:
y
=
y
(
x
)
y=y(x)
y=y(x),假装可以得到
y
y
y关于
x
x
x的表达式。那么
z
=
f
(
x
,
y
)
=
f
(
x
,
y
(
x
)
)
z=f(x,y)=f(x,y(x))
z=f(x,y)=f(x,y(x))是
x
x
x的一元函数,在
d
z
d
x
=
0
\frac{\text{d}z}{\text{d}x}=0
dxdz=0时可能取得极值。假设
f
f
f对
x
x
x的偏导数为
f
x
f_x
fx,对
y
y
y的偏导数为
f
y
f_y
fy。由求导的链式法则得到
d
z
d
x
=
d
[
f
(
x
,
y
(
x
)
)
]
d
x
=
f
x
+
f
y
d
y
d
x
\frac{\text{d}z}{\text{d}x}=\frac{\text{d}[f(x,y(x))]}{\text{d}x}=f_x+f_y\frac{\text{d}y}{\text{d}x}
dxdz=dxd[f(x,y(x))]=fx+fydxdy那么式子里面的
d
y
d
x
\frac{\text{d}y}{\text{d}x}
dxdy,也就是
y
y
y对
x
x
x的导数等于多少呢?虽说是隐函数,导数仍然是可以求出来的。在
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0两端取微分,得到
ϕ
x
d
x
+
ϕ
y
d
y
=
0
\phi_x\text{d}x+\phi_y\text{d}y=0
ϕxdx+ϕydy=0,其中
ϕ
x
\phi_x
ϕx是
ϕ
\phi
ϕ对
x
x
x的偏导数,
ϕ
y
\phi_y
ϕy是
ϕ
\phi
ϕ对
y
y
y的偏导数。那么
ϕ
y
d
y
=
−
ϕ
x
d
x
d
y
d
x
=
−
ϕ
x
ϕ
y
\phi_y\text{d}y=-\phi_x\text{d}x\\\frac{\text{d}y}{\text{d}x}=-\frac{\phi_x}{\phi_y}
ϕydy=−ϕxdxdxdy=−ϕyϕx这样就求出了
y
y
y对
x
x
x的导数。注意,这里要求
ϕ
y
≠
0
\phi_y\ne0
ϕy=0,否则就没法算了。带入
d
z
d
x
\frac{\text{d}z}{\text{d}x}
dxdz的表达式得
d
z
d
x
=
d
[
f
(
x
,
y
(
x
)
)
]
d
x
=
f
x
+
f
y
d
y
d
x
=
f
x
−
f
y
ϕ
x
ϕ
y
\frac{\text{d}z}{\text{d}x}=\frac{\text{d}[f(x,y(x))]}{\text{d}x}=f_x+f_y\frac{\text{d}y}{\text{d}x}=f_x-f_y\frac{\phi_x}{\phi_y}
dxdz=dxd[f(x,y(x))]=fx+fydxdy=fx−fyϕyϕx在取得极值得时候它等于
0
0
0,也就是
f
x
−
f
y
ϕ
x
ϕ
y
=
0
f_x-f_y\frac{\phi_x}{\phi_y}=0
fx−fyϕyϕx=0两边同时乘以
ϕ
y
\phi_y
ϕy得
ϕ
y
f
x
−
f
y
ϕ
x
=
0
\phi_yf_x-f_y\phi_x=0
ϕyfx−fyϕx=0变形得到
f
x
ϕ
x
=
f
y
ϕ
y
\frac{f_x}{\phi_x}=\frac{f_y}{\phi_y}
ϕxfx=ϕyfy看起来蛮对称的哈。那我们引入参数
λ
=
−
f
x
ϕ
x
=
−
f
y
ϕ
y
\lambda=-\frac{f_x}{\phi_x}=-\frac{f_y}{\phi_y}
λ=−ϕxfx=−ϕyfy,变形一下有
{
f
x
+
λ
ϕ
x
=
0
f
y
+
λ
ϕ
y
=
0
\begin{cases}f_x+\lambda\phi_x=0\\f_y+\lambda\phi_y=0\end{cases}
{fx+λϕx=0fy+λϕy=0这就是
d
z
d
x
=
0
\frac{\text{d}z}{\text{d}x}=0
dxdz=0的条件。
我们梳理一下
(
x
,
y
)
(x,y)
(x,y)是极值点的条件:首先是
d
z
d
x
=
0
\frac{\text{d}z}{\text{d}x}=0
dxdz=0,然后就是
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0。总结一下就是:
{
f
x
+
λ
ϕ
x
=
0
f
y
+
λ
ϕ
y
=
0
ϕ
(
x
,
y
)
=
0
\begin{cases}f_x+\lambda\phi_x=0\\f_y+\lambda\phi_y=0\\\phi(x,y)=0\end{cases}
⎩
⎨
⎧fx+λϕx=0fy+λϕy=0ϕ(x,y)=0
看到这三个式子,我们伟大的拉格朗日先生构造了一个函数: L ( x , y , λ ) = f ( x , y ) + λ ϕ ( x , y ) = 0 L(x,y,\lambda)=f(x,y)+\lambda\phi(x,y)=0 L(x,y,λ)=f(x,y)+λϕ(x,y)=0我们对它求导数: { ∂ L ∂ x = f x + λ ϕ x ∂ L ∂ y = f y + λ ϕ y ∂ L ∂ λ = ϕ ( x , y ) \begin{cases}\frac{\partial L}{\partial x}=f_x+\lambda\phi_x\\\frac{\partial L}{\partial y}=f_y+\lambda\phi_y\\\frac{\partial L}{\partial \lambda}=\phi(x,y)\end{cases} ⎩ ⎨ ⎧∂x∂L=fx+λϕx∂y∂L=fy+λϕy∂λ∂L=ϕ(x,y)那么,这三个导数为 0 0 0不就和刚才我们提到的三个条件一模一样吗?于是我们只需要求 L L L梯度为 0 ⃗ \vec0 0,即 L L L对各个变量的偏导数都为 0 0 0的点(称为 L L L的驻点)就可以得到 f ( x , y ) f(x,y) f(x,y)在约束条件 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0下的极值了!
L ( x , y , λ ) L(x,y,\lambda) L(x,y,λ)称为拉格朗日函数, λ \lambda λ称为拉格朗日乘数。
例 求
z
=
f
(
x
,
y
)
=
8
x
2
−
2
y
z=f(x,y)=8x^2-2y
z=f(x,y)=8x2−2y在
x
2
+
y
2
=
1
x^2+y^2=1
x2+y2=1条件下的极值。
解:约束条件为
ϕ
(
x
,
y
)
=
x
2
+
y
2
−
1
=
0
\phi(x,y)=x^2+y^2-1=0
ϕ(x,y)=x2+y2−1=0。
令拉格朗日函数
L
(
x
,
y
,
λ
)
=
f
(
x
,
y
)
+
λ
ϕ
(
x
,
y
)
=
8
x
2
−
2
y
+
λ
x
2
+
λ
y
2
−
λ
=
(
8
+
λ
)
x
2
+
λ
y
2
−
2
y
−
λ
\begin{aligned}L(x,y,\lambda)&=f(x,y)+\lambda\phi(x,y)\\&=8x^2-2y+\lambda x^2+\lambda y^2-\lambda\\&=(8+\lambda)x^2+\lambda y^2-2y-\lambda\end{aligned}
L(x,y,λ)=f(x,y)+λϕ(x,y)=8x2−2y+λx2+λy2−λ=(8+λ)x2+λy2−2y−λ则
∂
L
∂
x
=
2
(
8
+
λ
)
x
∂
L
∂
y
=
2
λ
y
−
2
∂
L
∂
λ
=
x
2
+
y
2
−
1
\begin{aligned}\frac{\partial L}{\partial x}&=2(8+\lambda)x\\\frac{\partial L}{\partial y}&=2\lambda y-2\\\frac{\partial L}{\partial \lambda}&=x^2+y^2-1\end{aligned}
∂x∂L∂y∂L∂λ∂L=2(8+λ)x=2λy−2=x2+y2−1令这三个导数为
0
0
0,解方程组,得到
x
=
0
,
y
=
±
1
,
λ
=
∓
1
x=0,y=\pm 1,\lambda=\mp 1
x=0,y=±1,λ=∓1或
x
=
±
3
7
8
,
y
=
−
1
8
,
λ
=
−
8
x=\pm\frac{3\sqrt7}{8},y=-\frac1 8,\lambda=-8
x=±837,y=−81,λ=−8。
(1) 当
(
x
,
y
)
=
(
0
,
±
1
)
(x,y)=(0,\pm 1)
(x,y)=(0,±1)时,
f
(
x
,
y
)
=
−
2
f(x,y)=-2
f(x,y)=−2,取极小值;
(2) 当
(
x
,
y
)
=
(
±
3
7
8
,
−
1
8
)
(x,y)=(\pm\frac{3\sqrt7}{8},-\frac1 8)
(x,y)=(±837,−81)时,
f
(
x
,
y
)
=
65
8
f(x,y)=\frac{65} 8
f(x,y)=865,取极大值。∎
事实上,拉格朗日乘数法可以用可视化的方式理解。
对于例子中给出的函数,我们画出
f
(
x
,
y
)
=
8
x
2
−
2
y
f(x,y)=8x^2-2y
f(x,y)=8x2−2y的等值线,例如
f
(
x
,
y
)
=
−
1
f(x,y)=-1
f(x,y)=−1;我们对图像进行平移,即可得到
f
(
x
,
y
)
f(x,y)
f(x,y)等于不同的值的等值线。约束条件
x
2
+
y
2
=
1
x^2+y^2=1
x2+y2=1限定了
(
x
,
y
)
(x,y)
(x,y)只能在蓝色的圆上。我们看到,从上往下平移,
f
(
x
,
y
)
f(x,y)
f(x,y)越来越大。那么,当曲线
f
(
x
,
y
)
=
a
f(x,y)=a
f(x,y)=a平移到与
x
2
+
y
2
=
1
x^2+y^2=1
x2+y2=1恰好有交点时,最小值就找到了,此时
f
(
x
,
y
)
=
−
1
f(x,y)=-1
f(x,y)=−1,就是图中红线标出来的。继续往下平移,会出现曲线顶点与圆相切的情况,这是另一个极小值,但不是最小值。接着平移,快要没有交点的时候,最大值就找出来了,此时曲线与圆相切并且有两个切点。
事实上,拉格朗日函数 L L L的各阶导数为 0 0 0的点真的是极值吗?是极大值还是极小值?还需另行判断,不过一般而言通过问题的实际意义就能推测出来了。
二、推广到多元的情形
现在我们考虑 n n n元函数 f ( x 1 , x 2 , ⋯ , x n ) f(x_1,x_2,\cdots,x_n) f(x1,x2,⋯,xn)在 m m m个约束条件 { ϕ 1 ( x 1 , x 2 , ⋯ , x n ) = 0 ϕ 2 ( x 1 , x 2 , ⋯ , x n ) = 0 ⋯ ϕ m ( x 1 , x 2 , ⋯ , x n ) = 0 \begin{cases}\phi_1(x_1,x_2,\cdots,x_n)=0\\\phi_2(x_1,x_2,\cdots,x_n)=0\\\cdots\\\phi_m(x_1,x_2,\cdots,x_n)=0\end{cases} ⎩ ⎨ ⎧ϕ1(x1,x2,⋯,xn)=0ϕ2(x1,x2,⋯,xn)=0⋯ϕm(x1,x2,⋯,xn)=0下的极值。
此时我们取拉格朗日函数 L ( x 1 , x 2 , ⋯ , x n , λ 1 , λ 2 , ⋯ , λ m ) = f ( x 1 , x 2 , ⋯ , x n ) + λ 1 ϕ 1 ( x 1 , x 2 , ⋯ , x n ) + λ 2 ϕ 2 ( x 1 , x 2 , ⋯ , x n ) + ⋯ + λ m ϕ m ( x n , x 2 , ⋯ , x n ) = f ( x 1 , x 2 , ⋯ , x n ) + ∑ k = 1 m λ k ϕ k ( x 1 , x 2 , ⋯ , x n ) \begin{aligned}&L(x_1,x_2,\cdots,x_n,\lambda_1,\lambda_2,\cdots,\lambda_m)\\=&f(x_1,x_2,\cdots,x_n)+\lambda_1\phi_1(x_1,x_2,\cdots,x_n)\\&+\lambda_2\phi_2(x_1,x_2,\cdots,x_n)+\cdots+\\&\lambda_m\phi_m(x_n,x_2,\cdots,x_n)\\=&f(x_1,x_2,\cdots,x_n)+\sum\limits_{k=1}^m\lambda_k\phi_k(x_1,x_2,\cdots,x_n)\end{aligned} ==L(x1,x2,⋯,xn,λ1,λ2,⋯,λm)f(x1,x2,⋯,xn)+λ1ϕ1(x1,x2,⋯,xn)+λ2ϕ2(x1,x2,⋯,xn)+⋯+λmϕm(xn,x2,⋯,xn)f(x1,x2,⋯,xn)+k=1∑mλkϕk(x1,x2,⋯,xn)此时 L L L对各个变量偏导数为 0 0 0的点就是我们要考虑的 f f f的极值点。
这就是拉格朗日乘数法的所有内容啦!是不是很简单呢?~