最近在做通信网络相关的仿真,今天拿到了一些别人仿真的代码来学习,其中看到了一个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,得到
因此,使用均匀分布可得到最大熵的值。
心得体会:经过这次学习,深切地体会到在学习知识时,一次学会是多么重要的一件事情。由于课程安排不合理和个人时间利用的问题,在大学期间的课程,有好多都学的一知半解,不够深入,不够扎实,大多都是为了应付考试,考前突击学成的,致使考试不考的内容根本不会,考试考了的内容考完以后很快也就淡忘了,时间久了根本连印象都没有。这样子学习是不行的,可是应该如何学习呢?是应该第一次学习就尽可能学好,还是更依赖于经过一段时间的温故知新呢。我不敢轻易相信已有的所谓学习,还需在实践中检验考证。