CVX: Matlab Software for Disciplined Convex Programming
Introduction
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, the
following code segment randomly generates a constrained norm
minimization problem, and solves it:
m = 20; n = 10; p = 4;
A = randn(m,n); b = randn(m,1);
C = randn(p,n); d = randn(p,1);
cvx_begin
variable x(n)
minimize( norm( A * x - b, 2 ) )
subject to
C * x == d;
norm( x, Inf ) <= 0.4;
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.
More information about CVX can be found in the CVX Users’ Guide (pdf, 404KB).
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.
Latest news
Fuller support for 64-bit platforms
CVX version 1.2 now supports 64-bit versions of Matlab on Windows,
Linux, and Macintosh platforms; precompiled MEX files are supplied
for each of these platforms. Previously, only SDPT3 was supported on
64-bit platforms; now SeDuMi is as well. However, due to the evolution
of Matlab’s MEX API, Matlab version 7.3 or later is required
for 64-bit platforms; and SeDuMi requires version 7.5 or later.
(Earlier versions of Matlab are still supported for 32-bit
platforms.)
Support for the exponential family of functions
CVX version 1.2 now supports problems involving exponentials,
logarithms, and entropy functions! A novel successive approximation approach
has been developed to facilitate this improvement.
Please see the user’s guide for more details.
Notice to users of Matlab R12.1 (6.1)
In order to facilitate some upcoming developments for CVX, we have decided that
it will be necessary to discontinue support for Matlab 6.1. This change will
occur at some point this summer, at which point CVX will require the use of
Matlab version 6.5 or newer. If you currently use Matlab 6.1, please contact
us to discuss alternatives.
|