NESTA changelog
NESTA version 1.0
Summer 2009. Jerome Bobin and Stephen Becker.
NESTA version 1.1
Nov 12, 2009. Stephen Becker.
Changes:
DemoContinuation.m updated:
-- shows how to undo the change-of-variables trick
-- adds some plots
-- also demonstrates how to do least-squares debiasing. To help with this,
added LSQRwrapper.m to the Misc/ subdirectory.
-- ability to set if A and U are explicit (matrices) or implicit (function handles)
Misc/msp_signal.m updated:
-- has a global variable called COMPLEX. If set to "true",
generates complex valued data
-- A is now A = @(x)x(Omega,:) instead of @(x)x(Omega)
to allow for vectorization.
Misc/my_normest.m
-- like MATLAB's normest() function but works with function handles
DemoComplex.m created.
-- sets COMPLEX variable to "true" and generates an example
with complex data and a complex operator
-- adds a case for when A is not orthogonal, and tests with
and without noise (and tests UP version)
DemoUP.m created
-- example for using unconstrained (UP) version
(when A is not required to be a projector)
fastProjection.m
-- fixed to handle complex data (e.g. b2=abs(b).^2, and other changes)
DemoNonProjector.m updated:
-- shows several ways to deal with the case
when A*A' is not the identity
e.g. orthogonalizing A and b, using the Cholesky factorization of A*A',
using inv(A*A'), using svd(A), and using
Conjugate-Gradients to calculate inv(A*A')
Main code (Core_Nesterov.m, NESTA.m) and unconstrained versions (Core_Nesterov_UP and NESTA_UP.m)
-- bug fix: checks if norm(U) = 1 or if user has provided it,
otherwise it estimates it.
This was implicitly set to 1 in previous versions, which was incorrect.
Also, the v1.0 update in September '09 had a bug where norm(U)
was actually set to norm(A). This is fixed.
-- the norm estimation is now done in the wrapper routines (NESTA.m, NESTA_UP.m),
not in the Core routines.
This means if you use the Core routines directly,
you must provide an accurate estimate of norm(U).
-- U is now allowed to be a matrix, as opposed to just a function handle as in v1.0
-- in wrapper routines, checks that A*A' = I.
If not, it's an error, unless inv(A*A') or svd(A) has been provided.
In the Core routines, no check is done, so the user must know what they're doing.
-- "opts" is a new output, so the user can see what options were used.
-- value of the string in opts.TypeMin is now case
insensitive ('L1','l1','tv','TV,'Tv',... all OK)
-- internal subroutine setOpts.m changed to have two outputs.
In UP versions, fixed a bug with rmfield.
-- every ten iterations, Axk is updated to A*xk to prevent accumulation of numerical errors.
-- for working with complex data, switched all A.'*x to A'*x (including in the UP versions)
-- UP versions: added in the norm(U), x_ref
Also, fixed help menu to read || b - Ax||_2^2 not || y - Ax||_2
TODO:
TV versions not checked for complex data yet