此条目需要 精通或熟悉相关主题的编者参与及协助编辑。 (2014年7月22日) 请邀请适合的人士改善本条目。更多的细节与详情请参见讨论页。 |
拉格朗日乘数法(英语:Lagrange multiplier,以数学家约瑟夫·拉格朗日命名),在数学中的最优化问题中,是一种寻找多元函数在其变量受到一个或多个条件的约束时的局部极值的方法。这种方法可以将一个有n个变量与k个约束条件的最优化问题转换为一个解有n + k个变量的方程组的解的问题。这种方法中引入了一个或一组新的未知数,即拉格朗日乘数,又称拉格朗日乘子,或拉氏乘子,它们是在转换后的方程,即约束方程中作为梯度(gradient)的线性组合中各个向量的系数。
比如,要求在时的局部极值时,我们可以引入新变量拉格朗日乘数,这时我们只需要求下列拉格朗日函数的局部极值:
更一般地,对含n个变量和k个约束的情况,有:
拉格朗日乘数法所得的临界点会包含原问题的所有临界点,但并不保证每个拉格朗日乘数法所得的临界点都是原问题的临界点。拉格朗日乘数法的正确性的证明牵涉到偏微分,全微分或连锁律。
介绍
微积分中最常见的问题之一是求一个函数的极大极小值(极值)。但是很多时候找到极值函数的显式表达是很困难的,特别是当函数有先决条件或约束时。拉格朗日乘数则提供了一个非常便利方法来解决这类问题,而避开显式地引入约束和求解外部变量。
先看一个三维的例子:假设有函数: ,要求其极值(最大值/最小值),且满足条件
-
c为常数。对不同 的值,不难想像出
-
的等高线。而方程 的可行集所构成的线正好是 。想像我们沿着 的可行集走;因为大部分情况下 的等高线和 的可行集线不会重合,但在有解的情况下,这两条线会相交。想像此时我们移动 上的点,因为 是连续的方程,我们因此能走到 更高或更低的等高线上,也就是说 可以变大或变小。只有当 和 相切,也就是说,此时,我们正同时沿着 和 走。这种情况下,会出现极值或鞍点。
气象图中就很常出现这样的例子,当温度和气压两列等高线同时出现的时候,切点就意味着约束极值的存在。
用向量的形式来表达的话,我们说相切的性质在此意味着 和 的切线在某点上平行,同时也意味着两者的梯度向量有如下关系(引入一个未知标量 ):
-
即:
- .
一旦求出 的值,将其套入下式,易求在无约束条件下的极值和对应的极值点。
- =
新方程 在达到极值时与 相等。因为 达到极值时 ,而 ,也就是说 等于零。
证明
设函数 在 点处有极值 ,且在 点的邻域内连续。则在 点处有
-
另有一常值函数
-
两函数在 点处的全微分为
-
-
当中的等式右方等于零是由于极值会发生在两者函数斜率完全相同且 在区段内有极值的时候
由于 和 是任取的无穷小量,故该线性方程组的系数成比例,有
-
即
-
-
将上二式分别乘以 和 ,再相加并积分,得到一新函数
-
那么,求原函数极值的问题就转化为求该函数极值的问题。
类似地,这种求极值的方法也可以推广到多维函数 。
拉格朗日乘数的运用方法
如f定义为在Rn上的方程,约束为gk(x)= ck(或将约束左移得到gk(x) − ck = 0)。定义拉格朗日Λ为
- 。
注意极值的条件和约束现在就都被记录到一个式子里了:
-
和
- 。
拉格朗日乘数常被用作表达最大增长值。原因是从式子:
- 。
中我们可以看出λk是当方程在被约束条件下,能够达到的最大增长率。拉格朗日力学就使用到这个原理。
拉格朗日乘数法在卡罗需-库恩-塔克条件被推广。
例子
求此方程的最小值:
-
同时未知数满足
-
因为只有一个未知数的限制条件,我们只需要用一个乘数 .
-
-
将所有 方程的偏微分设为零,得到一个方程组,最小值是以下方程组的解中的一个:
-
-
-
求此离散分布的最大熵:
- 。
所有概率的总和是1,因此我们得到的约束是g(p)= 1即
- 。
可以使用拉格朗日乘数找到最高熵(概率的函数)。对于所有的k从1到n,要求
-
由此得到
- 。
计算出这n个等式的微分,我们得到:
- 。
这说明pi都相等(因为它们都只是λ的函数)。解出约束∑k pk = 1,得到
- 。
因此,使用均匀分布可得到最大熵的值。
经济学
约束最优化在经济学占有很重要的地位。例如一个消费者的选择问题可以被视为一个求效用方程在预算约束下的最大值问题。拉格朗日乘数在经济学中被解释为影子价格,设定在某种约束下,在这里即收入的边际效用。
拉格朗日乘数就是效用函数在最优解处对收入的偏导数,也就是在最优解处增加一个单位收入带来的效用增加,或者说在最优解处有效用衡量收入的价值,称之为收入的边际效用。
在企业生产问题中,拉格朗日乘数用来衡量要素投入变动所带来的收入变动,du/dm=λ,u表示效用函数或生产函数,m表示收入或要素投入。
在具体数学推导中还可以运用包络定理的内容。
参考
对外链接
参考拉格朗日原作或方法的命名:
更深入的介绍和互动applet: