zoukankan      html  css  js  c++  java
  • 拉格朗日乘数

    拉格朗日乘数

    数学中的最优化问题中,拉格朗日乘数法(以数学家约瑟夫·拉格朗日命名)是一种寻找多元函数在其变量受到一个或多个条件的约束时的极值的方法。这种方法可以将一个有n个变量与k个约束条件的最优化问题转换为一个解有n + k个变量的方程组的解的问题。这种方法中引入了一个或一组新的未知数,即拉格朗日乘数,又称拉格朗日乘子,或拉氏乘子,它们是在转换后的方程,即约束方程中作为梯度(gradient)的线性组合中各个向量的系数。

    比如,要求f(x, y) \,{displaystyle g(x,y)=c\,}时的最大值时,我们可以引入新变量拉格朗日乘数lambda ,这时我们只需要下列拉格朗日函数的极值:

    {displaystyle {mathcal {L}}(x,y,lambda )=f(x,y)+lambda cdot {Big (}g(x,y)-c{Big )},}

    拉格朗日乘数法所得的极点会包含原问题的所有极值点,但并不保证每个极值点都是原问题的极值点。拉格朗日乘数法的正确性的证明牵涉到偏微分全微分链法

    微积分中最常见的问题之一是求一个函数的极大极小值(极值)。但是很多时候找到极值函数的显式表达是很困难的,特别是当函数有先决条件或约束时。拉格朗日乘数则提供了一个非常便利方法来解决这类问题,而避开显式地引入约束和求解外部变量。

    先看一个二维的例子:假设有函数:f(x, y),要求其极值(最大值/最小值),且满足条件

    gleft( x,y 
ight) = c,

    c为常数。对不同d_{n}的值,不难想像出

    f left( x, y 
ight)=d_n

    的等高线。而方程 g 的可行集所构成的线正好是 g ( x, y ) = c 。想像我们沿着 g = c 的可行集走;因为大部分情况下 f 的等高线和 g 的可行集线不会重合,但在有解的情况下,这两条线会相交。想像此时我们移动 g = c 上的点,因为 f 是连续的方程,我们因此能走到f left( x, y 
ight)=d_n更高或更低的等高线上,也就是说d_{n}可以变大或变小。只有当 g = c f left( x, y 
ight)=d_n相切,也就是说,此时,我们正同时沿着 g = c f left( x, y 
ight)=d_n走。这种情况下,会出现极值鞍点

    气象图中就很常出现这样的例子,当温度和气压两列等高线同时出现的时候,切点就意味着约束极值的存在。

    向量的形式来表达的话,我们说相切的性质在此意味着 f  g 的切线在某点上平行,同时也意味着两者的梯度平行。此时引入一个未知标量λ,并求解:

     
abla Big[f left(x, y 
ight) + lambda left(g left(x, y 
ight) - c 
ight) Big] = 0

    λ ≠ 0.

    一旦求出λ的值,将其套入下式,易求在无约束条件下的极值和对应的极值点。

    Fleft(x,y,lambda 
ight) =  f left( x , y 
ight) + lambda left( g left( x , y 
ight) - c 
ight)

    新方程F(x,y,lambda )在达到极值时与f(x,y)相等,因为F(x,y,lambda )达到极值时g(x,y)-c总等于零。

    拉格朗日乘数的运用方法

    f定义为在Rn上的方程,约束为gk(x)= ck(或将约束左移得到gk(x) − ck = 0)。定义拉格朗日Λ

    Lambda(mathbf x, oldsymbol lambda) = f + sum_k lambda_k(g_k-c_k)

    注意极值的条件和约束现在就都被记录到一个式子里了:

    
abla Lambda = 0 Leftrightarrow 
abla f = - sum_k lambda_k 
abla g_k,

    
abla_{mathbf lambda} Lambda = 0 Leftrightarrow g_k = c_k

    拉格朗日乘数常被用作表达最大增长值。原因是从式子:

    -frac{partial Lambda}{partial {c_k}} = lambda_k

    中我们可以看出λk是当方程在被约束条件下,能够达到的最大增长率。拉格朗日力学就使用到这个原理。

    拉格朗日乘数法在卡罗需-库恩-塔克条件被推广。

    例子

    很简单的例子

    求此方程的最小值:

     f(x, y) = x^2 y

    同时未知数满足

     x^2 + y^2 = 1

    因为只有一个未知数的限制条件,我们只需要用一个乘数lambda .

    g (x, y) = x^2 +y^2 -1
    Phi (x, y, lambda) = f(x,y) + lambda g(x, y) = x^2 y + lambda (x^2 + y^2 - 1)

    将所有Phi 方程的偏微分设为零,得到一个方程组,最小值是以下方程组的解中的一个:

    2 x y + 2 lambda x = 0
    x^2 + 2 lambda y = 0
    x^2 + y^2 -1 = 0

    另一个例子

    求此离散分布的最大

    f(p_1,p_2,ldots,p_n) = -sum_{k=1}^n p_klog_2 p_k

    所有概率的总和是1,因此我们得到的约束是g(p)= 1即

    g(p_1,p_2,ldots,p_n)=sum_{k=1}^n p_k=1

    可以使用拉格朗日乘数找到最高熵(概率的函数)。对于所有的k从1到n,要求

    frac{partial}{partial p_k}(f+lambda (g-1))=0,

    由此得到

    frac{partial}{partial p_k}left(-sum_{k=1}^n p_k log_2 p_k + lambda (sum_{k=1}^n p_k - 1) 
ight) = 0

    计算出这n个等式的微分,我们得到:

    -left(frac{1}{ln 2}+log_2 p_k 
ight) + lambda = 0

    这说明pi都相等(因为它们都只是λ的函数)。解出约束∑k pk = 1,得到

    p_k = frac{1}{n}

    因此,使用均匀分布可得到最大熵的值。

    参考:

    https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E6%95%B0

  • 相关阅读:
    【小程序】订阅消息
    【小程序】轮播图
    【小程序】全局变量的设置、使用、修改、全局方法执行
    【RN】标题栏右边添加自定义按钮或加事件
    【RN】阴影react-native-shadow
    【vue】点击复制到剪贴板的方法( clipboard )
    Q-learning和Sarsa的区别
    Q-learning之一维世界的简单寻宝
    使用tensorflow时,关于GPU的设置
    安装Matlab出现弹出DVD1插入DVD2的提示怎么办?
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6929341.html
Copyright © 2011-2022 走看看