25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)

1.简述

      

拉格朗日乘子法:

  • 拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在一组约束下极值的方法。
  • 通过引入拉格朗日乘子,可将有 变量与 约束条件的最优化问题转化为具有变量的无约束优化问题求解

举个例子:

  • 求 最小值,约束条件,可以用下图表示。
  • 这是一个等式约束,即约束条件是等式。当然约束条件也可以是不等式。
  • 像这种需要在约束条件下求极值的问题,我们就可以用拉格朗日乘子法来做。

25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)_第1张图片

等式约束:

当约束条件是等式的时候

直观操作步骤:

  • 画出约束条件曲线 
  • 画出等高线
  • 找到 相交的点中的  取得最小值的点(相切的位置),输出此时的 值。

25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)_第2张图片

那么,我们能得到什么信息呢?

  • 约束曲线与极值曲线相切的点为极值点 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.运行结果

25.8 matlab里面的10中优化方法介绍—— 拉各朗日乘子法求最优化解(matlab程序)_第3张图片

 

你可能感兴趣的:(算法,matlab,人工智能,开发语言,数据分析)