最近在做通信網絡相關的仿真,今天拿到了一些別人仿真的代碼來學習,其中看到了一個double Lambda[T_Node_Number][M][Low_iteration];的參數,注釋寫着拉格朗日乘子式。本來對於這個名詞感覺很陌生,后來查了一些資料,才回憶起這似乎是大一高數曾經學過的知識,經查書,果不其然,高數下P113頁 條件極值拉格朗日法講的就是這個內容。以前被忽視的知識點,再次重現,我覺得要好好學習一下。一下是學習筆記:
如何理解
先看一個二維的例子:假設有函數:f(x,y),要求其極值(最大值/最小值),且
c 為常數。對不同dn的值,不難想像出
的等高線。而方程g的等高線正好是g(x,y) = c。想像我們沿着g = c的等高線走;因為大部分情況下f和g的等高線不會重合,但在有解的情況下,這兩條線會相交。想像此時我們移動g = c上的點,因為f是連續的方程,我們因此能走到更高或更低的等高線上,也就是說dn可以變大或變小。只有當g = c和
相切,也就是說,此時,我們正同時沿着g = c和
走。這種情況下,會出現極值或鞍點。
氣象圖中就很常出現這樣的例子,當溫度和氣壓兩列等高線同時出現的時候,切點就意味着約束極值的存在。
用向量的形式來表達的話,我們說相切的性質在此意味着f和g的斜率在某點上平行。此時引入一個未知標量λ,並求解:
且λ ≠ 0.
一旦求出λ的值,將其套入下式,易求在無約束極值和極值所對應的點。
-
=
新方程F(x,y)在達到極值時與f(x,y)相等,因為F(x,y)達到極值時g(x,y) − c總等於零。
方法
很簡單的例子
求此方程的最大值:
- f(x,y) = x2y
同時未知數滿足
- x2 + y2 = 1
因為只有一個未知數的限制條件,我們只需要用一個乘數λ.
- g(x,y) = x2 + y2 − 1
- Φ(x,y,λ) = f(x,y) + λg(x,y) = x2y + λ(x2 + y2 − 1)
將所有Φ方程的偏微分設為零,得到一個方程組,最大值是以下方程組的解中的一個:
- 2xy + 2λx = 0
- x2 + 2λy = 0
- x2 + y2 − 1 = 0
另一個例子
所有概率的總和是1,因此我們得到的約束是g(p)= 1即
可以使用拉格朗日乘數找到最高熵(概率的函數)。對於所有的k 從1到n,要求
由此得到
計算出這n個等式的微分,我們得到:
這說明pi都相等 (因為它們都只是λ的函數). 解出約束∑k pk = 1,得到
因此,使用均勻分布可得到最大熵的值。
心得體會:經過這次學習,深切地體會到在學習知識時,一次學會是多么重要的一件事情。由於課程安排不合理和個人時間利用的問題,在大學期間的課程,有好多都學的一知半解,不夠深入,不夠扎實,大多都是為了應付考試,考前突擊學成的,致使考試不考的內容根本不會,考試考了的內容考完以后很快也就淡忘了,時間久了根本連印象都沒有。這樣子學習是不行的,可是應該如何學習呢?是應該第一次學習就盡可能學好,還是更依賴於經過一段時間的溫故知新呢。我不敢輕易相信已有的所謂學習,還需在實踐中檢驗考證。