CVX: Matlab Software for Disciplined Convex Programming

Version 1.21 (August 2010, Build 800)
by Michael Grant and Stephen Boyd

Version history

0.80, July 2005:

initial release.

0.85, August 2005:

Support for Matlab 6.1 and 6.5; previous versions required Matlab 7.0 or later.
Added precompiled binaries for Solaris.
Support for scalar quadratic forms (see Section 4.7 of the users’ guide).
Added the norms function to facilitate sum-of-norms and max-of-norms problems.
Various bug fixes incorporated.

0.86, September 2005:

Fixes for Matlab 6.1 compatability.
Improved support for quadratic forms.
A bug that prevented some Euclidean norm constraints from being declared was fixed.

0.87,0.87.1, October 2005:

Improved the setup routine (cvx_setup).
Updated the documentation with a table of contents and a new section explaining the status messages returned by CVX.
Implemented workarounds for bugs in SeDuMi’s handling of certain degenerate problems.
Created a MEX file to improve presolve performance.
Miscellaneous bug fixes, performance improvements, and documentation updates.

0.88, December 2005:

Further improvements to the setup routine (cvx_setup).
A bug with the potential to cause invalid numerical results has been fixed. It is unlikely that this bug has caused anyone problems, except for the person who reported it, because: 1) it required a unique set of circumstances to exercise it; and 2) even if it were exercised, it would likely produce obviously invalid results.
Improvements have been made to prevent OUT OF MEMORY errors for certain large problems.

0.89, December 2005:

Official release of the expanded example library.
Added support for indexed dual variables; see the documentation for details.

0.90, January 2006:

Added support for the geometric mean function geomean and the determinant function det_root2n, enabling the solution of determinant maximization problems. (Previous versions of cvx provided the geomean function, but it was not documented or supported because of its unreliability in infeasible problems. This shortcoming has been addressed, so now we have made it “official.”)

0.91, January 2006:

Added support for the determinant function det_rootn.
Added a new semidefinite programming mode, which is activated with the command cvx_begin sdp; see the user guide for details.
Miscellaneous bug fixes related to the solution of complex norm minimization problems, convex quadratic forms, and a workaround for a SeDuMi bug.

0.92, February 2006:

Fixes for feasibility problems and large matrix multiplications
Added support for the approximate log(sum(exp())) function logsumexp_sdp. This function allows geometric programs, already transformed into convex form, to be solved without the need for a dedicated solver: that is, SeDuMi (and as of version 1.1, SDPT3) will solve them! Type help logsumexp_sdp from the MATLAB command line for details.

0.93, March 2006:

Final release of the ‘‘pre-GP’’ version of the code.

1.0 beta, March 2006:

Major revision. Much of the internal structure has been reworked in order to improve performance and facilitate geometric programming support.

1.0 beta 2, April 2006:

Bug fix release.

1.0 beta 3, June 2006:

Bug fix and performance improvement release. This release incorporates quite a few fixes reported by students in Stephen Boyd’s convex optimization class. Many thanks to them and to all of our faithful users for their testing and reports.

1.0RC, October 2006:

Added support for Matlab R2006b.
Incorporated SeDuMi 1.1R3, and added an additional bug fix.
The absolute value function is now represented using a second-order cone to better exploit sparsity. This also impacts 1-norms and infinity-norms.
Added support for p-norms for values of p other than 1, 2, and infinity; and added support for expressions of the form x^p where p is real. See the user guide for a very mild caution on the use of powers and p-norms.
New and/or improved functions: pow_pos(x,p), pow_abs(x,p), norm(x,p), huber(x,M,t), berhu(x,M,t), polyval(p,x), polyenv(p,x).
New sets: nonneg_poly_coeffs(deg) and convex_poly_coeffs(deg).

1.0RC2, February 2007:

A bug has been discovered in SeDuMi that was producing incorrect results for some, but not all, problems involving second-order cones, norms, powers, and absolute values. A temporary workaround has been provided to detect these cases and return an invalid result flag, a permanent fix is forthcoming.

1.1beta, August 2007:

Support for the solver SDPT3 has been added; in fact, SDPT3 is now the default solver. This provides support for later (>7.3) versions of Matlab for 64-bit platforms. The directory structure has been rearranged considerably, and a couple of minor bugs have been fixed, but no major functionality has been added.
Automatic dualization added.
CVX now analyzes problem structure to determine if a model is more efficiently solved in dual standard form instead of primal standard form; and if so, it sends the dual problem to the solver instead. For models with far more inequalities than variables, this approach can improve both speed and accuracy.
Lots of inline help added. Type “help” and look for the CVX entries to begin.
Support for the MATLAB built-in function conv added.