拉格朗日乘子法
拉格朗日乘子法用于求解带等式约束的优化问题。此类问题通常将条件方程转换为单值函数代入待优化函数中,从而将问题转化为无条件极值问题进行求解。然而,有时等式约束复杂无法转换,此时可用拉格朗日乘子法。拉格朗日乘子法使用条件极值的一组必要条件来求出一些可能的极值点(不是充要条件,说明求出的不一定是极值,还需要验证)。
如寻求函数
$z = f(x,y)$
在条件
$\varphi(x,y) = 0$
下取得极值的必要条件。
如果在$(x_0,y_0)$下取得$z$的极值,则首先应该有:
$\varphi(x_0,y_0) = 0$
另外,假定在$(x_0,y_0)$的某一邻域$f(x,y)$与$\varphi(x,y)$均有连续的一阶偏导数(没有连续导数让导数为0求极值就没有意义了),并且$\varphi_y(x_0,y_0) \neq 0$。由隐函数存在定理(对于$z=\varphi(x,y)$若$\exist\varphi_y(x,y) \neq 0$与$\varphi_x(x,y)$则$\displaystyle\frac{{\rm d}y}{{\rm d}x} = -\frac{\varphi_x(x,y)}{\varphi_y(x,y)}$)可知,条件方程$\varphi(x,y)=0$在$(x_0,y_0)$某邻域确定具有连续偏导数的函数$y=\psi(x)$,代入$z$得:
$z = f[x,\psi(x)]$
于是这个极值可以直接由一个变量$x$来确定,由一元可导函数取极值必要条件得:
$\displaystyle\left.\frac{{\rm d}z}{{\rm d}x}\right|_{x=x_0}=f_x(x_0,y_0)+f_y(x_0,y_0)\left.\frac{{\rm d}y}{{\rm d}x}\right|_{x=x_0}=0$
即:
$\displaystyle f_x(x_0,y_0)-f_y(x_0,y_0) \frac{\varphi_x(x_0,y_0)}{\varphi_y(x_0,y_0)}=0$
设$\displaystyle\frac{f_y(x_0,y_0)}{\varphi_y(x_0,y_0)}=-\lambda$。
为什么要这么设呢?我觉得是因为它本身就是未知的,但又不是完全未知,是两个偏导数之商,在这里面首先不容易计算,其次这个偏导数商的条件也没什么用,因此就直接设为完全未知的参数$\lambda$了。
结合以上可以获得条件极值$(x_0,y_0)$应该满足的必要条件(第二行式子直接代入$\lambda$可以发现就等于0):
$\left\{\begin{array}{lcr}f_x(x_0,y_0)+\lambda\varphi_x(x_0,y_0)=0\\f_y(x_0,y_0)+\lambda\varphi_y(x_0,y_0)=0\\\varphi(x_0,y_0)=0\end{array}\right.$
为了方便表达,引入辅助函数
$L(x,y) = f(x,y)+\lambda\varphi(x,y)$
必要条件就变成
$\left\{\begin{array}{lcr}L_x(x_0,y_0)=0\\L_y(x_0,y_0)=0\\L_{\lambda}(x_0,y_0)=0\\\end{array}\right.$
于是通过这个联立式求得的$(x,y)$就是可能的条件极值点。当然,是在$(x,y)$的某邻域内有连续偏导数的假设下。
对于多维情况(自变量多于2个,条件多于1个),如求
$u=f(x,y,z,t)$
在附加条件
$\varphi(x,y,z,t)=0, \psi(x,y,z,t)=0$
下的极值。作类似的辅助函数(拉格朗日函数)
$L(x,y,z,t)=f(x,y,z,t)+\lambda\varphi(x,y,z,t)+\mu \psi(x,y,z,t)$
其中$\lambda,\mu$都为参数,求它的偏导数的联立方程即可:
$\left\{\begin{array}{lcr}L_x(x,y,z,t)=0\\L_y(x,y,z,t)=0\\L_z(x,y,z,t)=0\\L_t(x,y,z,t)=0\\L_{\lambda}(x,y,z,t)=0\\L_{\mu}(x,y,z,t)=0\end{array}\right.$