题目:二次规划问题和MATLAB函数quadprog的使用

二次规划(Quadratic Programming,QP)问题的一般形式为:

其中为纯量,阶对称矩阵。易知二次规划的Hesse矩阵等于。如果为半正定矩阵,则称此规划为凸二次规划,否则为非凸规划。对于凸二次规划,目标函数q(x)是一个凸函数。如果有至少一个向量x满足约束而且q(x)在可行域有下界,二次规划问题就有一个全局最小值x。 如果G是正定矩阵,则称此规划为严格凸二次规划,此时全局最小值就是唯一的。如果G=0,二次规划问题就变成线性规划问题。根据优化理论,一个点x 成为全局最小值的必要条件是满足Karush-Kuhn-Tucker(KKT)条件。当q(x)是凸函数时,KKT条件也是充分条件。

对于非凸规划,由于存在比较多的驻点,求解比较困难。

根据约束条件的不同,二次规划可分为等式约束二次规划问题和不等式约束二次规划问题。等式约束二次规划问题即只含有等式约束,常见的解法有直接消去法、广义消去法、拉格朗日(Lagrange)法;对于不等式约束二次规划问题,其基本思想是把不等式约束转化为等式约束再求解,常见解法有有效集(active set)方法,有效集方法在每步迭代中把有效约束作为等式约束,然后可以用拉格朗日法求解,重复直到求得最优解。

很多学者专门研究各类二次规划的求解方法,如文献[4][5],对于非数学专业的的人来讲更重要的是怎么把二次规划当作一个工具去使用它。

在MATLAB中求解二次规划的的函数是quadprog,具体使用方法可查询帮助文件。

【例】求如下二次规划问题。

【分析】首先应该把目标函数表示成如下矩阵形式:

这里要细说一下如何写成矩阵形式。

首先,向量x是很容易写出的,因为f(x)包含两个变量x1x2,因此

其次,向量f只与两个变量x1x2的一次项有关,所以fTx=-2x1-6x2,因此

最后,矩阵H只与两个变量x1x2的二次项有关,所以,这里要注意的是不同于二次型,这里有个系数1/2,所以矩阵H的元素是二次型中的矩阵元素大小的两倍。给出一个规律:设矩阵H第i行第j列的元素大小为H(i,j),二次项xixj的系数为a(i,j),则

本例中,,这是由于x1的平方项(即x1x1)系数为1/2,所以第1行第1列的元素为1=2*(1/2),x2的平方项(即x2x2)系数为1,所以第2行第2列的元素为2=2*1,x1x2项(即x2x1)的系数为-1,所以第1行第2列和第2行第1列的元素均为-1。

目标函数搞定之后,下面来看约束条件部分,约束条件应该写成如下形式:

本例中约束条件只有不等式约束,因此Aeq和beq为空,对于A和b很容易就可以得出来:

而约束条件中对变量x1x2只给出下限,没有给上限,因此ub为空,

得到了所有的参数,将参数输入MATLAB,编程如下:(代码是直接在Command Window中一行一行录入的,所以每行前面有符号“>>”)

>> H = [1 -1; -1 2];
>> f = [-2; -6];
>> A = [1 1; -1 2; 2 1];
>> b = [2; 2; 3];
>> lb = [0; 0];
>> [x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb)

输出以下结果:

Warning: Large-scale algorithm does not currently solve this problem formulation,
using medium-scale algorithm instead.
> In quadprog at 291
Optimization terminated.x =0.66671.3333fval =-8.2222exitflag =1output = iterations: 3constrviolation: 0algorithm: 'medium-scale: active-set'firstorderopt: []cgiterations: []message: 'Optimization terminated.'lambda = lower: [2x1 double]upper: [2x1 double]eqlin: [0x1 double]ineqlin: [3x1 double]

参考文献:

【1】孙文瑜, 徐成贤,朱德通.最优化方法(第二版)[M]. 北京:高等教育出版社, 2010.

【2】龚纯,王正林. 精通MATLAB最优化计算[M].北京: 电子工业出版社,2009.

【3】lnsunqingshen, 464518439.什么是凸二次规划, 百度知道,2011-06-20.

【4】李明强.几类特殊凸二次规划问题的求解算法研究[D].山东科技大学,2013 .

【5】于绍慧.边界约束凸二次规划的求解[D].南京航空航天大学,2005.

二次规划问题和MATLAB函数quadprog的使用相关推荐

  1. 将MATLAB的quadprog函数转化为C++代码在Visual Studio上可运行

    一.将Matlab的quadprog函数转为VS可调用的lib及dll链接库 参考文章:VS2008 与 Matlab 的混合编程(quadprog函数为例)_jiabingxi的博客-CSDN博客 ...

  2. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

  3. 【转】matlab函数_连通区域

    转载自einyboy的博文Matlab的regionprops详解 1. matlab函数bwareaopen──删除小面积对象 格式:BW2 = bwareaopen(BW,P,conn) 作用:删 ...

  4. matlab 开 闭 代码,C++中的MATLAB函数〔闭锁〕

    很抱歉恢复了一个老问题,但我目前正在研究一个开源C++库,它正好回答了这个问题: KeyCpp 是一个开源的C++库,它提供了Matlab或八度音阶的语法,用于一些有用的数值方法和一些绘图功能.目前有 ...

  5. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  6. 转载:如何将一个新函数加到MATLAB函数库中

    如何将一个新函数加到MATLAB函数库中 nkszjx2 2017-09-29 11:25:26 13864 收藏 2 分类专栏: matlab 文章标签: matlab 库 </div> ...

  7. matlab中 ne k,KFoldCV.m 查找径向基神经网络模型的网络参数的程序MATLAB函数'ne 联合开发网 - pudn.com...

    KFoldCV.m 所属分类:matlab例程 开发工具:matlab 文件大小:1KB 下载次数:1 上传日期:2020-01-12 22:24:33 上 传 者:Kingvis 说明:  查找径向 ...

  8. MATLAB函数gensurf,matlab模糊逻辑(二)

    6.2 模糊推理结构FIS 6.2.1 不使用数据聚类方法从数据生成FIS结构 函数 genfis1 格式 fismat = genfis1(data) fismat = genfis1(data,n ...

  9. C/C++ VS中调用matlab函数的方法

    C/C++ VS中调用matlab函数的方法 [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/73743654 Matla ...

  10. 【转】Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现

    转自:Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现_Jaster_wisdom的专栏-CSDN博客 之前在这里和这里调用了matlab自带的一些函数,是通过matl ...

最新文章

  1. 论文阅读:An Enhanced Deep Feature Representation for Person Re-identification
  2. win10怎么设置开机启动项目_开机启动项怎么设置呢?禁用自启动程序
  3. Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础
  4. PowerShell加密SQL Server的密码技术
  5. 牛客 2021年度训练联盟热身训练赛第二场 A题
  6. Reapp - 下一代的 Hybrid App 开发框架
  7. php propel,关于propel--PHP
  8. 应届生web前端面试题_Web前端初学者(应届生)面试攻略
  9. StanfordDB class自学笔记 (14) On-Line Analytical Processing
  10. python练习题--斐波那契数列
  11. 关于SN和PN的概念
  12. CAD插件学习系列教程(二) 燕秀工具箱的使用
  13. Chrome扩展 - 百度识图
  14. 台式机机箱前置面板音频无效(win10系统)
  15. STM32F7-->USART串口通信
  16. E0 S0 SVL接口配置
  17. 计算机视觉检测 白皓月,基于深度神经网络的视线跟踪技术研究
  18. ECS服务器10M带宽能让多少人同时访问?
  19. 在vue.config.js下配置别名alias
  20. 使用 Abp.Zero 搭建第三方登录模块(四):微信小程序开发

热门文章

  1. 手把手教你学dsp_大咖问答第13期:如何掌握DSP设计?顾卫钢博士在线为你解答...
  2. 小游戏策划案例精选_小游戏活动策划方案
  3. 怎样学好模拟集成电路设计?
  4. Android签名文件转化为pk8和pem
  5. C#txt文本分割器
  6. 一文讲透什么是机器视觉!
  7. 同步IO和异步IO的区别
  8. linux下vivado编译卡死,vivado+zedboard之Linux编译
  9. 花生壳5.0 for Linux使用教程
  10. 一分钟实现扫描二维码功能