2支棒棒糖 发表于 2018-8-22 11:16:41

二次规划

二次规划为求目标函数的最小值,该函数的约束包括A·x ≤ b,Aeq·x = beq,l ≤ x ≤ u。二次规划与线性规划的区别在于目标函数为自变量的二次函数。
MATLAB提供用于二次规划的函数为quadprog,该函数的调用格式包括:
x = quadprog(H,f)
x = quadprog(H,f,A,b)
x = quadprog(H,f,A,b,Aeq,beq)
x = quadprog(H,f,A,b,Aeq,beq,lb,ub)
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
x = quadprog(problem)
= quadprog(H,f,...)
= quadprog(H,f,...)
= quadprog(H,f,...)
= quadprog(H,f,...)其中,f为中的cT ,H为其中的H(必须为正定矩阵);x为返回的x;A为不等式约束系数矩阵,b为不等式约束的右项;Aeq为等式约束的左项,beq为等式约束的右项;lb、ub分别为x的下限和上限;x0为初始求解点,options为optimset命令设置的选项;problem为满足要求的数据结构;fval为求解函数的值;exitflag描述退出条件;output为优化信息数据;lambda参数是解x处的拉格朗日乘子。它有以下一些属性:
[*]lambda.lower——lambda的下界;
[*]lambda.upper——lambda的上界;
[*]lambda.ineqlin——lambda的线性不等式;
[*]lambda.eqlin——lambda的线性等式

例11-7,二次规划示例。目标函数受以下约束:
求x的值,使目标函数的值最小。
在命令行窗口输入:H=eye(4)
f=ones(4,1)
A = ;
b = ;
= quadprog(H,f, A,b)输出结果如下:H = 1       0   0      0
         0      1   0      0
         0      0   1      0
         0      0   0      1
    f = 1
         1
         1
         1
    Optimization terminated.
    x = -1
         -1
         -1
         -1
    fval =    -2
    exitflag =   1
    output = iterations: 1
         constrviolation: 0
            algorithm: 'active-set'
            message: 'Optimization terminated.'
            firstorderopt: 0
            cgiterations: []
    lambda = lower:
            upper:
            eqlin:
            ineqlin:
页: [1]
查看完整版本: 二次规划