拉格朗日乘數

本頁使用了標題或全文手工轉換
本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
圖1:綠線標出的是約束g(x,y) = c的點的軌跡。藍線是f的等高線。箭頭表示梯度,和等高線的法線平行。

拉格朗日乘數法(英語: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: