二次规划的标准形式为:
min f=(1/2)XTHX+fTX
约束条件:A.x=b,Aeq.x=beq,lb?x?ub
其中:c、b、beq、lb、ub、x是矢量,H、A、Aeq为矩阵。
在MATLAB中可以使用quadprog函数来求最小值。
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,fval]= quadprog (…)
[x,fval,exitflag]= quadprog (…)
[x,fval,exitflag,output]= quadprog (…)
[x,fval,exitflag,output,lambda]= quadprog (… )
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,fval]= quadprog (…)
[x,fval,exitflag]= quadprog (…)
[x,fval,exitflag,output]= quadprog (…)
[x,fval,exitflag,output,lambda]= quadprog (… )
其中:H,f,A,b为标准形中的参数,x为目标函数的最小值;x0为初值;Aeq,beq满足等式约束Aeq.x=beq;lb,ub满足lb?x?ub;fval为目标函数的最优值; lambda是Lagrange乘数,它体现有效约束的个数;output输出优化信息;exitflag为终止迭代的条件:若exitflag>0,表示函数收敛于解x;若exitflag=0,表示超过函数估值或迭代的最大次数;exitflag<0表示函数不收敛于解x;output为优化信息:若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
例3:计算下面二次规划问题
minf(x)= (1/2)x1^2+x2^2- x1x2-2x1-6x2
约束条件: x1+x2 <=?2;-x1+2x2 <=?2 ;2x1+x2 <=?3;
0?>= x1,0?>= x2
minf(x)= (1/2)x1^2+x2^2- x1x2-2x1-6x2
约束条件: x1+x2 <=?2;-x1+2x2 <=?2 ;2x1+x2 <=?3;
0?>= x1,0?>= x2
n解:把二次规划问题写成标准形式:(1/2)XTHX+fTX
这里:H= 1 -1 f= -2 X= x1
-1 2 -6 x2
这里:H= 1 -1 f= -2 X= x1
-1 2 -6 x2
nH=[1 -1;-1 2];
f=[-2;-6];
A=[1 1;-1 2;2 1];
b=[2;2;3];
lb=zeros(2,1);
[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)
f=[-2;-6];
A=[1 1;-1 2;2 1];
b=[2;2;3];
lb=zeros(2,1);
[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)