If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

拉格朗日乘数, 介绍

"拉格朗日乘数法" 是解决约束优化问题的一种方法。  倍有用!

我们要做的是什么:

  • 拉格朗日乘数法使得当对于你能够被允许使用的输入值存在一些条件时,你能够找到一个多元函数f(x,y,)的最大值或最小值。
  • 这种方法只适用于看起来像这样的限定条件:
g(x,y,)=c
这里g是另外一个和f具有相同输入空间的多元函数,且c是常数。
  • 和新想法就是找到fg等高线彼此相切的点。
  • 这就如同找到使得fg的梯度向量彼此平行的点。
  • 整个过程可以被归结为设置一个特定函数,被叫做拉格朗日,使得它的梯度等于零向量。

激励的例子

假设你要最大化此函数:
f(x,y)=2x+y
绘制函数 f(x,y)=2x+y
绘制函数 f(x,y)=2x+y
但是, 让我们假设你将自己限制在满足以下公式的输入值 (x,y):
x2+y2=1
单位圆
所有满足x2+y2=1(x,y)的点,也称为单位圈。
换句话说,单位圆上,哪个点(x,y)2x+y 值最大?
这就是所谓的约束优化问题。 对与满足x2+y2=1的点的限制被称为 "约束", 而 f(x,y)=2x+y是需要优化的函数。
这里有一种可视化的方法: 首先绘制f(x,y)的图像, 它看起来像一个倾斜得平面,因为 f是线性的。 接下来,将圆 x2+y2=1xy平面垂直投影在f的图像上。我们寻找的最大值对应于图像上投影的圆的最高点。
可汗学院视频播放器

更一般的形式

通常, 约束优化问题涉及最大化最小化 一个多变量函数, 该函数的输入具有任意数量的维度:
f(x,y,z,)
不过, 它的输出将始终是一维的, 因为向量值结果没有一个明确的 "最大" 概念。
拉格朗日乘数法所使用的约束类型必须采取其他多元函数g(x,y,z,)的形式使其被设定等于常数c.
g(x,y,z,)=c
由于这意味着对f输入值的约束, g的输入值的纬数和 if一样. 比如,上面概述的例子符合此一般形式,如下所示:
f(x,y)=2x+y
g(x,y)=x2+y2
c=1

使用等高线图

如果我们不使用图像,而是用等高线可视化f,关于这个问题的推理将变得更容易。
作为提醒,f(x,y)的等高线是满足对于常数kf(x,y)=k的所有点的集合 。后面的交互工具展现的这条线(以蓝色绘制)是怎样随着常数k的变化而改变。 圆g(x,y)=1也显示出来 (红色). 在一直允许f 的等高线和圆相交的情况下尝试让k尽可能大/小。
概念检查:如果对于一个特定的k值,表示f(x,y)=k的蓝线和表示g(x,y)=1的圆相交,那意味着什么?
选出正确答案:

请注意,该圆圈中g(x,y)=1 可以被认为是函数g的等高线。因此,有了这些,下面是考虑约束优化问题的巧妙方法:
关键观察: f的最大值和最小值, 受约束条件g(x,y)=1, 对应于和g(x,y)=1相切f 的等高线。
约束极值是相切的。
如果 f 是不同的函数,它的轮廓可能并不总是直线。我们的例子是独特的,因为f是线性的。比如,请看一下这个函数:
f(x,y)=2x2+5y,
其等高线如下所示:
尽管入此, 关键观察仍然有效,并且值的重复:当k是受约束的f的最大值或最小值, f(x,y)=k的等高线会和g(x,y)=1表示的轮廓相切。

梯度起作用的地方

如何将两条等高线相切的想法构成一个可以求解的公式?
为了回答这个问题, 我们转向我们的忠实朋友-- gradient。 有许多方法来解释 f: 最陡峭的上升方向, 一个计算方向导数的工具, 等等。但就我们这里的目的而言, 我们关心的属性是 在点(x0,y0)上计算出的f的梯度总是给出一个垂直于通过该点的等高线的矢量
梯度向量垂直于等高线。
这就意味着当两个函数fg的等高线相切的时候, 它们的梯度向量是平行的。以下是对于任意函数fg可能看起来的样子:
维基百科相切等高线图像
等高线是切线的事实并不能告诉我们每个梯度向量的大小, 但这没关系。 当两个向量指向同一方向时, 这意味着我们可以将一个向量乘以某个常数来得到另一个向量。 具体而言, 让 (x0,y0) 表示一个特定的点, 其中fg的等高线相切 (用0下标写x0y0, 只是表示我们正在考虑常数, 因此也就是一个具体的点)。 由于这种相切意味着它们的梯度向量对齐, 下面是你可以写下的内容:
f(x0,y0)=λ0g(x0,y0)
这里, λ0 代表某个常数。 一些作者使用负常数, λ0, 但是我个人更喜欢正常数, 因为它在之后给出了λ0的更清晰的解释。
让我们看看在我们的例子中,当f(x,y)=2x+yg(x,y)=x2+y2时是什么样子的。 f的梯度是
f(x,y)=[x(2x+y)y(2x+y)]=[21]
g的梯度为
g(x,y)=[x(x2+y21)y(x2+y21)]=[2x2y]
因此, 相切条件的结果如下所示:
[21]=λ0[2x02y0]

在特定情况下解决问题

总之, 我们目前的情况是, 我们正在寻找具有以下属性的输入点 (x0,y0):
  • g(x0,y0)=1, 这对于我们的示例意味着
    x02+y02=1
  • 对于某常数λ0f(x0,y0)=λ0g(x0,y0) , 这对于我们的示例意味着
    2=2λ0x01=2λ0y0
3个方程和3个未知数, 所以这是一个完全可以解决的情况。

拉格朗日函数

拉格朗日的图片
约瑟夫·路易斯·拉格朗日, 看上去平静, 满足, 困倦, 所有在同一时间。 维基共享资源
在1700代, 我们的哥们约瑟夫·路易斯·拉格朗日研究了这种约束优化问题, 他找到了一个巧妙的方法来用单一方程表达我们所有的条件。
你可以写出这些条件并且通常指明我们是要寻找常数x0, y0λ0 来满足以下条件:
  • 约束 :
    g(x0,y0)=c
  • 相切条件:
    f(x0,y0)=λ0g(x0,y0).
    这可以分解成以下几个部分:
  • fx(x0,y0)=λ0gx(x0,y0)
  • fy(x0,y0)=λ0gy(x0,y0)
lagrange写下了一个特殊的新函数, 它包括了所有跟fg相同的输入变量, 以及镇上的新孩子 λ, 这里它被认为是一个变量, 而不是一个常数。
L(x,y,λ)=f(x,y)λ(g(x,y)c)
比如,考虑我们上面的例子。
f(x,y)=2x+yg(x,y)=x2+y2c=1
这就是这个新函数看起来的样子
L(x,y,λ)=2x+yλ(x2+y21).
注意,L关于λ的偏导数是(g(x,y)c)
Lλ(x,y,λ)=λ(f(x,y)λ(g(x,y)c)=0(g(x,y)c)
所以我们把条件g(x,y)=c 转化为
Lλ(x,y,λ)=g(x,y)+c=0
并且,看一下当我们把其中一个偏导数设为0时我们得到了什么:
Lx(x,y,λ)=0x(f(x,y)λ(g(x,y)c))=0fx(x,y)λgx(x,y)=0fx(x,y)=λgx(x,y)
那刚好是我们的条件中的另一个!几乎完全一样,条件Ly(x,y,λ)=0转化为
fy(x,y)=λgy(x,y)
总之, 这些条件和以下表达是一致的。
f(x,y)=λg(x,y)
因此, 我们需要解决的三个条件,以找到x,yλ简化为了各种偏导数L等于0。这可以通过将L的梯度设置为零向量来编写的非常紧凑:
L=0
例如, 使用上面的特定函数, 我们可以看到这是如何构建我们需要解决的方程组的:
L=[x(2x+yλ(x2+y21))y(2x+yλ(x2+y21))λ(2x+yλ(x2+y21))]=[22λx12λyx2y2+1]=[000]
作为对ol' Joey Lou的赞扬, 我们将这个函数L叫做 "拉格朗日", 并且将我们引入的新变量 λ叫做"拉格朗日乘数"。 想象如果有某个人在你的姓氏后面加上“的”,然后让它成为每个人使用的函数的名字。那真贴心!
警告: 一些作者习惯将λ符号反过来:
L(x,y,λ)=f(x,y)+λ(g(x,y)c)
这在解决问题方面没有任何区别, 但你应该记住它, 以防你正在学习的课程或你正在阅读的文本遵循这个惯例。

总结

约束优化
图片来源: 作者Nexcis (本人作品) [公共领域], 维基共享
多元函数 f(x,y,) 的约束条件是, 另一个多元函数 g(x,y,)=c 等于一个常数. 如果你想最大化(或最小化)这个多元函数f, 你可以遵照下面的步骤进行:
  • 步骤 1: 引入一个新的变量 λ, 并定义一个新的函数 L , 如下所示:
L(x,y,,λ)=f(x,y,)λ(g(x,y,)c)
函数 L 叫做 "拉格朗日函数", 新的变量 λ 即所谓的 "拉格朗日乘数"
  • 步骤 2: 将 L 的梯度设置为零向量.
    L(x,y,,λ)=0零向量
换句话说, 我们要求解 L临界点 .
  • 步骤 3: 考虑每个解 (x0,y0,,λ0)。 将每个解代入 f。 或者, 先去掉 λ0 分量, 然后代入 f, 这是因为 λ 不是 f 的一个输入. 那个使函数值最大 (最小) 的解就是你要求的最大 (或最小) 的点.

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.