• 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.6667
        1.3333
    
    fval =
    
       -8.2222
    
    exitflag =
    
         1
    
    output = 
    
             iterations: 3
        constrviolation: 0
              algorithm: '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.

    参考:https://blog.csdn.net/jbb0523/article/details/50598641

    https://blog.csdn.net/tianzy16/article/details/87916128

  • 相关阅读:
    git常用命令
    vue+el-menu+vue-router实现动态导航条
    css实现文字内容超出显示省略号
    背景图片居中全屏自适应显示
    linux相关操作(虚拟环境、查看进程)(不定时更新)
    关于定义序列化器时,read_only和write_only有什么作用
    flask之请求与响应、闪现(阅后即焚)、请求扩展(before,after)、中间件、LOCAL对象、偏函数、
    flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session
    flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
    jinja2模板用法
  • 原文地址:https://www.cnblogs.com/zhj868/p/13882782.html
Copyright © 2020-2023  润新知