基本的拉格朗日乘子法(又称为拉格朗日乘数法),就是求函数 f(x1,x2,...) 在 g(x1,x2,...)=C 的约束条件下的极值的方法。其主要思想是引入一个新的参数 λ (即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。拉格朗日乘子是数学分析中同一名词的推广。

什么是拉格朗日乘数法

  简单地说,拉格朗日乘数法是用来最小化或最大化多元函数的。如果有一个方程f(x,y,z),在这个方程里的变量之间不是独立的,也就是说这些变量之间是有联系的,这个联系可能是某个方程g(x,y,z) = C;也就是g(x,y,z) = C定义了x,y,z之间的关系,这个关系对变量做出了一定的的限制,我们需要在这个限制下来最小化或最大化f(x,y,z)。

  这里的最值不能简单地使用临界点,因为临界点通常不满足关系方程g。如何解决这个问题呢?当这个限制g(x,y,z)非常简单的时候,我们可以解出其中一个变量的表达式,把这个表达式代入f(x,y,z)后求得最值,这也是中学阶段常用的方法。但问题是,很多时候我们并不能解出x,y,z,因为关系方程g太复杂了,这就需要一个全新的方法求解,拉格朗日乘数法就是其中一种。

寻找最值

  示例:找出双曲线xy = 3上离原点最近的点。

  如果(x, y)是曲线上的点,原点到该点的距离是:

  求离原点最近的点实际上是求f(x,y)的最小值。可以使用一个更容易的方程去掉根号:

  在计算最小值时候有一个限制是:

  把这个较为简单的例子用等高线图表示:

  很明显,当f和g相切的时候,能得到f的最小值。如果把双曲线看作自身的等高线,那么当f的等高线和g的等高线相切时,f值最小。实际上这也是找到最值的一般情形。

  如果两个等高线相切,则二者在切点处的切线也相同,也就是说它们的梯度向量平行,即:

  如果两个向量平行,则其中一个向量是另一个向量的倍数,由此得到:

  这里的λ是一个常数,我们需要做的是找到这个λ和特定的(x,y)使得上式成立。这实际上是把2个变量加一个关系限制的最值问题转换为一个含有3个变量的方程组。

  现在已经通过梯度向量平行,将原来的最值问题转换为一般的方程组,这个方程组被称为拉格朗日方程组,它的解就是最值点。

  接下来就是解方程组,可以将其看作是关于xy的矩阵方程:

  一个满足方程组的解是x = 0, y = 0,但这个解不满约束条件g(x,y) = xy = 3;此外,只有当系数行列式的值是0时,方程才有多个解:

  把两个值分别代入方程组:

  现在可以回答原问题,双曲线xy = 3距离原点最近的点有两个:(31/2, 31/2)和(-31/2, -31/2)。

  在这个例子中,λ就是拉格朗日乘子。

最小值和最大值

  拉格朗日乘数法并不会告诉我们最值的类型,结果可能是最大值、最小值或鞍点,由于存在限制条件,这里也不能像《多变量微积分3——二元函数的极值》那样使用二阶导数判断。那么如何判断是最大值还是最小值呢?只能通过将拉格朗日方程组的解代入问题方程f来判断。举例来说,如果有三组解,代入f后分别是4,6,9,在不存在边界值时,4就是最小值,9就是最大值;如果存在边界,还需要比较边界值。在双曲线的例子中,由于能够确定边界在无穷远处,所以其结果就是最小值。

表面积最小的金字塔

  给定金字塔的体积和底面积(底面的三边确定,分别是a1,a2,a3),如何建造一个表面积最小的金字塔?

  如上图所示,将金字塔模型放入三维坐标系中,底面对应xy轴。由于体积和底面积已知,根据体积公式,高也是定值,那么实际问题就是回答Q点的位置。一种思路是利用向量的叉积计算三角形的面积(参考《线性代数笔记4——向量3(叉积)》):

  展开后将得到一个很长的式子,看起来并不是什么好方法。现在换一种思路,利用三角形面积的几何公式,如下图所示:

  h1是三角形PP1P2的高,设点Q是(x,y,0),则:

  这就转换成了有三个变量的函数,目标是求得f的最小值:

  接下来需要寻找约束条件g。由于a1⊥h1且a1⊥h,所以a1垂直于h1和h所在的平面,a1⊥u1

  上图可知:

  这就是约束条件g:

  知道了f和g,就可以使用拉格朗日乘数法:

  当Q点的位置距离三边距离相等时,金字塔的表面积最小。

  备注:

  f对u1偏导将u2和u3看作常数,这相当于求f(u)的导数,

综合示例

示例1

  在椭圆x+ 4y2 = 4中有内接的矩形,该矩形的边平行于x轴和y轴,找出这些矩形中周长最大的一个。

  如上图所示,长方形的周长函数是f(x,y) = 4x + 4y,约束函数g(x,y) = x+ 4y2 = 4

  由于拉格朗日乘数法无法确定最值的类型,所以还要对函数边界进行计算。当P在椭圆上移动时,如果正好落在x轴上,则长方形退化成直线,此时 ;另一个极值是,所以判定 是最大值,此时长方形的一点的坐标是

示例2

  计算f(x,y,z)= x+ x + 2y2 + 3z2在约束条件x+ y2 + z= 1下的最值。

  由于约束条件是球体,所以不存在边界,只需把这些解导入f即可。当点在(-1,0,0)时,f最小,f = 0;当点在(1/4,0,±151/2/4)时f最大,f = 25/8


  作者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

  扫描二维码关注公众号“我是8位的”

  

ML(附录4)——拉格朗日乘数法的更多相关文章

  1. [Math & Algorithm] 拉格朗日乘数法

    拉格朗日乘数法(Lagrange Multiplier Method)之前听数学老师授课的时候就是一知半解,现在越发感觉拉格朗日乘数法应用的广泛性,所以特意抽时间学习了麻省理工学院的在线数学课程.新学 ...

  2. 《University Calculus》-chaper12-多元函数-拉格朗日乘数法

    求解条件极值的方法:拉格朗日乘数法 基于对多元函数极值方法的了解,再具体的问题中我们发现这样一个问题,在求解f(x,y,z)的极值的时候,我们需要极值点落在g(x,y,z)上这种对极值点有约束条件,通 ...

  3. bzoj2876 [NOI2012]骑行川藏(拉格朗日乘数法)

    题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因此在每天的骑行 ...

  4. CodeChef TWOROADS(计算几何+拉格朗日乘数法)

    题面 传送门 简要题意:给出\(n\)个点,请求出两条直线,并最小化每个点到离它最近的那条直线的距离的平方和,\(n\leq 100\) orz Shinbokuow 前置芝士 给出\(n\)个点,请 ...

  5. BZOJ3775: 点和直线(计算几何+拉格朗日乘数法)

    题面 传送门 题解 劲啊-- 没有和\(Claris\)一样推,用了类似于\(Shinbokuow\)推已知点求最短直线的方法,结果\(WA\)了好几个小时,拿\(Claris\)代码拍了几个小时都没 ...

  6. BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】

    题目链接 BZOJ 题解 拉格朗日乘数法 拉格朗日乘数法用以求多元函数在约束下的极值 我们设多元函数\(f(x_1,x_2,x_3,\dots,x_n)\) 以及限制\(g(x_1,x_2,x_3,\ ...

  7. 拉格朗日乘数法 和 KTT条件

    预备知识 令 \(X\) 表示一个变量组(向量) \((x_1, x_2, \cdots, x_n)\) 考虑一个处处可导的函数 \(f(X)\), 为了方便描述, 这里以二元函数为例 对于微分, 考 ...

  8. CodeForces - 813C The Tag Game(拉格朗日乘数法,限制条件求最值)

    [传送门]http://codeforces.com/problemset/problem/813/C [题意]给定整数a,b,c,s,求使得  xa yb zc值最大的实数 x,y,z , 其中x ...

  9. Wannafly模拟赛2 B river(拉格朗日乘数法)

    题目 https://www.nowcoder.com/acm/contest/4/B题意 有n条南北流向的河并列排着,水流速度是v,现在你需要从西岸游到东岸,总共T个时间,你的游泳速度是u,问东岸的 ...

随机推荐

  1. shiro学习笔记(四) ini配置以及加解密

    INI配置 从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的:也就是所有操作都是自它开始的,这个对象是线程安全且真个应用只需要一个即可,因此Sh ...

  2. vue中七牛插件使用

    <template> <div id="cxUpload" class="cx-upload"> <button id=" ...

  3. 《团队-Python 爬取豆瓣电影top250-成员简介及分工》

    杨继尧,没有什么擅长的,会一点python,一点c#,爬取利用数据库,有些用法不太会,但是会在实现项目中查资料.

  4. Arrays.copyOfRange()

    Comparable[] aux = Arrays.copyOfRange(arr,from, to); 复制数组arr, from下标开始, to下标结束. 但是不包括to. 所以复制代码为 Com ...

  5. 【Python】socket编程-1

    一.什么是socket编程:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,编程传输层,socket本质是编程接口(API) 二.网络七层协议:物里层 数据链 ...

  6. phpcms pc_base::load

    //数据库pc_base::load_model(‘*_model’) 加载数据库模型 (一张表对应一个数据库模型类),即 modle/*_model.class.php每一个数据库模型类都会继承底层 ...

  7. Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ

    文章目录 1. 什么是 RabitMQ 2. Spring Boot 整合 RabbitMQ 3. 实战演练4. 源代码 3.1. 一个简单的实战开始 3.1.1. Configuration 3.1 ...

  8. [转]HBASE 二级索引

    1.二级索引的核心思想是什么?2.二级索引由谁来管理?3.在主表中插入某条数据后,hbase如何将索引列写到索引表中去?4.scan查询的时候,coprocessor钩子的作用是什么?5.在split ...

  9. JAVA中关于对像的读写

    /** * 针对对象的文件读写 */ //导入包 import java.io.File; import java.io.FileInputStream; import java.io.FileNot ...

  10. socket模块粘包现象理解以及解决思路

    粘包现象: 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的 ...