CVX: Matlab Software for Disciplined Convex Programming

Version 2.0 (beta), May 2013, Build 958

CVX is a Matlab-based modeling system for convex optimization. CVX turns Matlab into a modeling language, allowing constraints and objectives to be specified using standard Matlab expression syntax. For example, consider the following convex optimization model:

\(
\begin{array}{ll}
\text{minimize} & \|Ax-b\|_2 \\
\text{subject to} & Cx=d \\
& \|x\|_\infty\leq e
\end{array}
\)
The following code segment generates and solves a random instance of this model:

m = 20; n = 10; p = 4;
A = randn(m,n); b = randn(m,1);
C = randn(p,n); d = randn(p,1); e = rand;
cvx_begin
    variable x(n)
    minimize( norm( A * x - b, 2 ) )
    subject to
        C * x == d
        norm( x, Inf ) <= e
cvx_end

In its default mode, CVX supports a particular approach to convex optimization that we call disciplined convex programming. Under this approach, convex functions and sets are built up from a small set of rules from convex analysis, starting from a base library of convex functions and sets. Constraints and objectives that are expressed using these rules are automatically transformed to a canonical form and solved. For more information on disciplined convex programming, see these resources; for the basics of convex analysis and convex optimization, see the book Convex Optimization.

CVX also supports geometric programming (GP) through the use of a special GP mode. Geometric programs are not convex, but can be made so by applying a certain transformation. In this mode, CVX allows GPs to be constructed in their native, nonconvex form, transforms them automatically to a solvable convex form, and translates the numerical results back to the original problem.

Version 2.0 of CVX brings support for mixed integer disciplined convex programming (MIDCP). Mixed integer DCPs must obey the disciplined convex programming ruleset; however, one or more of the variables may be constrained to assume integer or binary values. It is important to note that MIDCPs are not convex, and most non-convex models cannot be expressed as an MIDCP. Not all solvers support MIDCPs, and those that do cannot guarantee a successful solution in reasonable time for all models. Nevertheless, we believe that MIDCP support is a powerful addition to CVX and we look forward to seeing how our users take advantage of it.

More information about CVX can be found in the CVX Users’ Guide, which can be found online in a searchable format, or downloaded as a PDF.

The CVX package includes a growing library of examples to help get you started, including examples from the book Convex Optimization and from a variety of applications. You can browse through this library now—without having to download and install CVX—by clicking here.