# CVX: Matlab Software for Disciplined Convex Programming

*Version 2.1, December 2017, Build 1123
*

Professor Stephen Boyd recently recorded a video introduction to CVX for Stanford’s convex optimization courses. Click here to watch it.New:

We’ve added some interesting new features for users and system administrators. Give it a try!CVX 3.0 beta:

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}

\)

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.

It is quite important to also note what CVX is *not*. It is not a general-purpose tool for nonlinear optimization, nor is it a tool for checking whether or not your model is convex. It is important to confirm that your model can be expressed as an MIDCP or a GP *before* you begin using CVX. If it is neither of these, then CVX is not the correct tool for the task.

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.