Usage

```

!!! IMPORTANT !!!: ALL ROUTINES ASSUME THAT THE INPUT DATA IS IN DENSE FORMAT

qpas:

This dual active-set algorithm attempts to solve
quadratic programming problems in the following form:

x* = arg min   0.5x'Hx + f'x
x

s.t.  Ax  = b,        linear equality constraints,
Lx <= k,        general linear inequality constraints,
l  <= x <= u,   bound constraints.

In Matlab a call to this function would look like:

[x,err,lm] = qpas(H,f,L,k,A,b,l,u,display);

where the inputs are:

H: An (n x n) positive semi-definite symmetric matrix

f: A n element column vector

(L,k): General linear inequality constraints

(A,b): General linear equality constraints

l: Element-wise lower bound constraints

u: Element-wise upper bound constraints

display: If display>0 then iteration information is displayed

and the outputs are:

x: the optimal solution (if obtained)

err: error number, if err=0, then x is optimal

lm: structure of Lagrange multipliers

lm.equality: Lagrange multipliers for equality constraints

lm.inequality: Lagrange multipliers for general inequality constraints

lm.lowerbound: Lagrange multipliers for lower bound constraints

lm.upperbound: Lagrange multipliers for upper bound constraints

If (A,b) and/or (L,k) and/or l and/or u, are not being used, then
set the respective entry to [] (i.e. the empty matrix).

E.g.1 suppose that only L and k are being used then a call would look
like

x = qpas(H,f,L,k);

E.g.2 suppose that (A,b) and l are required, then a call would look
like

x = qpas(H,f,[],[],A,b,l);

qpip:

This primal-dual predictor-corrector algorithm attempts to solve
quadratic programming problems in the following form:

x* = arg min   0.5x'Hx + f'x
x

s.t.  Ax  = b,        linear equality constraints,
Lx <= k,        general linear inequality constraints,
l  <= x <= u,   bound constraints.

In Matlab a call to this function would look like:

[x,err,lm] = qpip(H,f,L,k,A,b,l,u,display,mu,method);

where the inputs are:

H: An (n x n) positive semi-definite symmetric matrix

f: A n element column vector

(L,k): General linear inequality constraints

(A,b): General linear equality constraints

l: Element-wise lower bound constraints

u: Element-wise upper bound constraints

display: If display>0 then iteration information is displayed

mu: Desired complementarity gap target (point on central-path)
[Default is mu=0.0]

method: If method=1 (default), then a faster but less accurate linear
solve step is used. Conversely, if method=0 then a slower but
more accurate linear solve step is used.

and the outputs are:

x: the optimal solution (if obtained)

err: error number, if err=0, then x is optimal

lm: structure of Lagrange multipliers

lm.equality: Lagrange multipliers for equality constraints

lm.inequality: Lagrange multipliers for general inequality constraints

lm.lowerbound: Lagrange multipliers for lower bound constraints

lm.upperbound: Lagrange multipliers for upper bound constraints

If (A,b) and/or (L,k) and/or l and/or u, are not being used, then
set the respective entry to [] (i.e. the empty matrix).

E.g.1 suppose that only L and k are being used then a call would look
like

x = qpip(H,f,L,k);

E.g.2 suppose that (A,b) and l are required, then a call would look
like

x = qpip(H,f,[],[],A,b,l);

qps_as:

This dual active-set algorithm attempts to solve
quadratic programming problems in the following form:

x* = arg min   0.5x'Hx + f'x
x

s.t.  l  <= x <= u,   bound constraints.

In Matlab a call to this function would look like:

[x,err,lm] = qps_as(H,f,l,u,display);

where the inputs are:

H: An (n x n) positive semi-definite symmetric matrix

f: A n element column vector

l: Element-wise lower bound constraints

u: Element-wise upper bound constraints

display: If display>0 then iteration information is displayed

and the outputs are:

x: the optimal solution (if obtained)

err: error number, if err=0, then x is optimal

lm: structure of Lagrange multipliers

lm.lowerbound: Lagrange multipliers for lower bound constraints

lm.upperbound: Lagrange multipliers for upper bound constraints

NOTE: Both l and u must be provided, however, +/-inf entries are
acceptable so that "free" variables are catered for.

qps_ip:

This primal-dual predictor-corrector algorithm attempts to solve
quadratic programming problems in the following form:

x* = arg min   0.5x'Hx + f'x
x

s.t.  l  <= x <= u,   bound constraints.

In Matlab a call to this function would look like:

[x,err,lm] = qps_ip(H,f,l,u,display);

where the inputs are:

H: An (n x n) positive semi-definite symmetric matrix

f: A n element column vector

l: Element-wise lower bound constraints

u: Element-wise upper bound constraints

display: If display>0 then iteration information is displayed

and the outputs are:

x: the optimal solution (if obtained)

err: error number, if err=0, then x is optimal

lm: structure of Lagrange multipliers

lm.lowerbound: Lagrange multipliers for lower bound constraints

lm.upperbound: Lagrange multipliers for upper bound constraints

NOTE: Both l and u must be provided, however, +/-inf entries are
acceptable so that "free" variables are catered for.

qps_mq:

This branch-and-bound type algorithm attempts to solve
quadratic programming problems in the following form:

x* = arg min   0.5x'Hx + f'x
x

s.t.  l  <= x <= u,   bound constraints.

In Matlab a call to this function would look like:

[x,err,lm] = qps_mq(H,f,l,u);

where the inputs are:

H: An (n x n) positive semi-definite symmetric matrix

f: A n element column vector

l: Element-wise lower bound constraints

u: Element-wise upper bound constraints

and the outputs are:

x: the optimal solution (if obtained)

err: error number, if err=0, then x is optimal

lm: structure of Lagrange multipliers

lm.lowerbound: Lagrange multipliers for lower bound constraints

lm.upperbound: Lagrange multipliers for upper bound constraints

NOTE: Both l and u must be provided, however, +/-inf entries are
acceptable so that "free" variables are catered for.

```