|
二次规划为求目标函数
的最小值,该函数的约束包括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)
- [x,fval]= quadprog(H,f,...)
- [x,fval,exitflag]= quadprog(H,f,...)
- [x,fval,exitflag,output]= quadprog(H,f,...)
- [x,fval,exitflag,output,lambda]= 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 = [6 3 5 2; 0 0 1 1; -1 0 1 0; 0 -1 0 1];
- b = [9; 1; 0; 0];
- [x,fval,exitflag,output,lambda]= 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: [4x1 double]
- upper: [4x1 double]
- eqlin: [0x1 double]
- ineqlin: [4x1 double]
复制代码
|
|