Function: franalasso
FRANALASSO  Frame LASSO regression
  Usage: tc = franalasso(F,f,lambda)
         tc = franalasso(F,f,lambda,C,tol,maxit)
         [tc,relres,iter,frec,cd] = franalasso(...)

  Input parameters:
      F        : Frame definition
      f        : Input signal
      lambda   : Regularisation parameter, controls sparsity of the solution
      C        : Step size of the algorithm.
      tol      : Reative error tolerance.
      maxit    : Maximum number of iterations.
  Output parameters:
      tc       : Thresholded coefficients
      relres   : Vector of residuals.
      iter     : Number of iterations done.  
      frec     : Reconstructed signal
      cd       : The min c||_2 solution using the canonical dual frame.

  FRANALASSO(F,f,lambda) solves the LASSO (or basis pursuit denoising)
  regression problem for a general frame: minimize a functional of the
  synthesis coefficients defined as the sum of half the l^2 norm of the
  approximation error and the l^1 norm of the coefficient sequence, with
  a penalization coefficient lambda such that

     argmin lambda||c||_1 + 1/2||Fc - f||_2^2

  The solution is obtained via an iterative procedure, called Landweber
  iteration, involving iterative soft thresholdings.

  The following flags determining an algorithm to be used are recognized
  at the end of the argument list:

  'ista'
    The basic (Iterative Soft Thresholding) algorithm given F and f 
    and parameters C*>0, lambda >0 acts as follows:

       Initialize c
       repeat until stopping criterion is met
         c <- soft(c + F*(f - Fc)/C,lambda/C)
       end

  'fista'
    The fast version of the previous. This is the default option.
    :

       Initialize c(0),z,tau(0)=1,n=1
       repeat until stopping criterion is met
          c(n) <- soft(z + F*(f - Fz)/C,lambda/C)
          tau(n) <- (1+sqrt(1+4*tau(n-1)^2))/2
          z   <- c(n) + (c(n)-c(n-1))(tau(n-1)-1)/tau(n)
          n   <- n + 1
       end

  [tc,relres,iter] = FRANALASSO(...) returns the residuals relres in 
  a vector and the number of iteration steps done iter.

  [tc,relres,iter,frec,cd] = FRANALASSO(...) returns the reconstructed
  signal from the coefficients, frec and coefficients cd obtained by
  analysing using the canonical dual system. 
  Note that this requires additional computations.

  The relationship between the output coefficients and frec is 
  given by :

    frec = frsyn(F,tc);

  The function takes the following optional parameters at the end of
  the line of input arguments:

  'C',cval   
     Landweber iteration parameter: must be larger than square of upper 
     frame bound. Default value is the upper frame bound.

  'tol',tol  
     Stopping criterion: minimum relative difference between norms in 
     two consecutive iterations. Default value is 1e-2.

  'maxit',maxit
     Stopping criterion: maximal number of iterations to do. Default 
     value is 100.

  'print'    
     Display the progress.

  'quiet'    
     Don't print anything, this is the default.

  'printstep',p
     If 'print' is specified, then print every p'th iteration. Default 
     value is 10;

  'debias'
     Performs debiasing (improves approximation accuracy) of the solution
     using the conjugate gradient algorithm. This amounts to doing 
     best-fit with respect to a subdictionary selected by ISTA. 

  'pcgmaxit',pcgmaxit 
     Maximum allowed number of iterations for pcg. Only used together
     with the 'debias' flag. The default value is 100.
  
  'pcgtol',pcgtol 
     Tolerance of pcg. Only used together with the 'debias' flag. 
     The default value is 1e-6.

  The parameters C, itermax and tol may also be specified on the
  command line in that order: FRANALASSO(F,x,lambda,C,tol,maxit).

  *Note**: If you do not specify C, it will be obtained as the upper
  framebound. Depending on the structure of the frame, this can be an
  expensive operation.

  Examples:
  ---------

  The following example shows how FRANALASSO produces a sparse
  representation of a test signal greasy*:

     f = greasy;
     % Gabor frame with redundancy 8
     F = frame('dgtreal','gauss',64,512);
     % Choosing lambda (weight of the sparse regularization param.)
     lambda = 0.1;
     % Solve the basis pursuit problem
     [c1,~,~,frec1,cd] = franalasso(F,f,lambda);
     % Solve again with debiasing enabled
     [c2,~,~,frec2,cd] = franalasso(F,f,lambda,'debias');
     % Plot sparse coefficients
     figure(1); plotframe(F,c1,'dynrange',50);
     % Plot debiased coefficients
     figure(2); plotframe(F,c2,'dynrange',50);
     % Plot coefficients obtained by applying an analysis operator of a
     % dual Gabor system to f
     figure(3); plotframe(F,cd,'dynrange',50);

     % Normalized MSE of the approximation
     % frec is obtained by applying the synthesis operator of frame F
     % to sparse coefficients c.
     fprintf('Normalized MSE:                  %.2f dBn',20*log10(norm(f-frec1)/norm(f)));
     fprintf('Normalized MSE (with debiasing): %.2f dBn',20*log10(norm(f-frec2)/norm(f)));

     % Compare decay of coefficients sorted by absolute values
     % (compressibility of coefficients)
     figure(3);
     semilogx([sort(abs(c1),'descend')/max(abs(c1)),...
     sort(abs(c2),'descend')/max(abs(c2)),...
     sort(abs(cd),'descend')/max(abs(cd))]);
     legend({'sparsified coefficients','with debiasing','dual system coefficients'});
 

  References:
    I. Daubechies, M. Defrise, and C. De Mol. An iterative thresholding
    algorithm for linear inverse problems with a sparsity constraint.
    Communications in Pure and Applied Mathematics, 57:1413--1457, 2004.
    
    A. Beck and M. Teboulle. A fast iterative shrinkage-thresholding
    algorithm for linear inverse problems. SIAM J. Img. Sci.,
    2(1):183--202, Mar. 2009.
    
    M. A. T. Figueiredo, R. D. Nowak, and S. J. Wright. Gradient projection
    for sparse reconstruction: Application to compressed sensing and other
    inverse problems. IEEE Journal of Selected Topics in Signal Processing,
    1(4):586--597, Dec 2007.
    

Url: http://ltfat.github.io/doc/frames/franalasso.html

See also: frame, frsyn, framebounds, franabp, franagrouplasso.

Package: ltfat