Convert Quadratic Constraints to Second-Order Cone Constraints
This example shows how to convert a quadratic constraint to the second-order cone constraint form. A quadratic constraint has the form
Second-order cone programming has constraints of the form
.
The matrix
must be symmetric and positive semidefinite for you to convert quadratic constraints. Let
be the square root of
, meaning
. You can compute
usingsqrtm
. Suppose that there is a solution
to the equation
, which is always true when
is positive definite. Compute
usingb = -S\q
.
Therefore, if , then the quadratic constraint is equivalent to the second-order cone constraint with
Numeric Example
Specify a five-element vectorf
representing the objective function
.
f = [1;-2;3;-4;5];
Set the quadratic constraint matrixQ
as a 5-by-5 random positive definite matrix. Setq
as a random 5-element vector, and take the additive constant
.
rngdefault% For reproducibilityQ = randn(5) + 3*eye(5); Q = (Q + Q')/2;% Make Q symmetricq = randn(5,1); c = -1;
To create the inputs forconeprog
, create the matrixS
as the square root ofQ
.
S = sqrtm(Q);
Create the remaining inputs for the second-order cone constraint as specified in the first part of this example.
b = -S\q; d = zeros(size(b)); gamma = -sqrt(b'*b-c); sc = secondordercone(S,b,d,gamma);
Callconeprog
to solve the problem.
[x,fval] = coneprog(f,sc)
Optimal solution found.
x =5×1-0.7194 0.2669 -0.6309 0.2543 -0.0904
fval = -4.6148
Compare this result to the result returned by solving this same problem usingfmincon
. Write the quadratic constraint as described inAnonymous Nonlinear Constraint Functions.
x0 = randn(5,1);% Initial point for fminconnlc = @(x)x'*Q*x + 2*q'*x + c; nlcon = @(x)deal(nlc(x),[]); [xfmc,fvalfmc] = fmincon(@(x)f'*x,x0,[],[],[],[],[],[],nlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
xfmc =5×1-0.7196 0.2672 -0.6312 0.2541 -0.0902
fvalfmc = -4.6148
The two solutions are nearly identical.
See Also
coneprog
|quadprog
|secondordercone