1.简述
拉格朗日乘子法:
- 拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。
- 通过引入拉格朗日乘子,可将有 变量与 约束条件的最优化问题转化为具有变量的无约束优化问题求解
举个例子:
- 求 最小值,约束条件,可以用下图表示。
- 这是一个等式约束,即约束条件是等式。当然约束条件也可以是不等式。
- 像这种需要在约束条件下求极值的问题,我们就可以用拉格朗日乘子法来做。
等式约束:
当约束条件是等式的时候
直观操作步骤:
- 画出约束条件曲线
- 画出等高线
- 找到 相交的点中的 取得最小值的点(相切的位置),输出此时的 值。
那么,我们能得到什么信息呢?
- 约束曲线与极值曲线相切的点为极值点 x∗ 。
- 对于约束曲面上的任意点 x ,该点的梯度 ∇(x) 正交于约束曲面。
- 在最优点 x∗ ,目标函数在该点的梯度 ∇(x∗) 正交于约束曲面。
由此可知,在最优点 x∗ ,梯度 ∇(x) 和 ∇x) 的方向必相同或相反,即存在 ≠0 ,使得: ∇(x∗)+∇x∗)=0 , 称之为拉格朗日乘子。
2.代码
主程序:
x=zeros(1,2);
%用syms表示出转化后的无约束函数
syms x y lama
f=x+y+lama*(x^2+y^2-2);
%分别求函数关于x、y、lama的偏导
dx=diff(f,x);
dy=diff(f,y);
dlama=diff(f,lama);
%令偏导为零求解x、y
xx=solve(dx,x); %将x表示为lama函数
yy=solve(dy,y); %将y表示为lama函数
ff=subs(dlama,{x,y},{xx,yy}); %代入dlama得关于lama的一元函数
lamao=solve(ff); %求解得lamao
xo=subs(xx,lama,lamao) %求得取极值处的xo
yo=subs(yy,lama,lamao) %取极值处的yo
fo=subs(f,{x,y,lama},{xo,yo,lamao}) %极值点函数值
3.运行结果