Contents

%DEMO_COMPRESS_SENSING Compress sensing example using forward backward algorithm
%
%   We present a compress sensing example solved with the forward backward
%   solver.
%   The problem can be expressed as this
%
%        argmin ||Ax-b||^2 + tau ||x||_1
%
%   Where b are the measurements and A the measurement matrix.
%
%   We set
%
%    f_1(x)=||x||_1
%     We define the prox of f_1 as:
%
%        prox_{f1,gamma} (z) = argmin_{x} 1/2 ||x-z||_2^2  +  gamma ||z||_1
%
%     This function is simply a soft thresholding.
%
%    f_2(x)=||Ax-b||_2^2
%     We define the gradient as:
%
%        grad_f(x) = 2 * A^*(Ax-b)
%
%     A is the measurement matrix (random Gaussian distribution)
%
%   The number of measurements M is computed with respect of the size of the
%   signal N and the sparsity level K:
%
%      M=K*max(4,ceil(log(N)))
%
%   With this number of measurements, the algorithm is supposed to perform
%   very often always a perfect reconstruction. This plot is automatically
%   generated; let's hope it will be the case.
%
%   Results
%   -------
%
%   Figure 1: Results of the algorithm
%
%      This figure shows the original signal and the reconstruction done
%      thanks to the algorithm and the measurements. The number of
%      measurements is M=900, the length of the signal N=5000 and K=100. This is
%      equivalent to a compression ratio of 5.55.
%
%   References:
%     P. Combettes and J. Pesquet. Proximal splitting methods in signal
%     processing. Fixed-Point Algorithms for Inverse Problems in Science and
%     Engineering, pages 185--212, 2011.
%
%     P. Combettes and J. Pesquet. A douglas--rachford splitting approach to
%     nonsmooth convex variational signal recovery. Selected Topics in Signal
%     Processing, IEEE Journal of, 1(4):564--574, 2007.
%
%
%   Url: http://unlocbox.sourceforge.net/doc/demos/demo_compress_sensing.php

% Copyright (C) 2012-2013 Nathanael Perraudin.
% This file is part of UNLOCBOX version 1.6.1
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.

% Author: Nathanael Perraudin, Gilles Puy
% Date: Nov 2012

Initialisation

clear all;
close all;

% Loading toolbox
init_unlocbox();

verbose = 2; % verbosity level
UnLocBoX version 1.6.1. Copyright 2012-2013 LTS2-EPFL, by Nathanael Perraudin

Creation of the problem

tau = 1;                    % regularization parameter for the problem

N = 5000;                   % Size of the signal
K = 100;                    % Sparsity level
R = max(4, ceil(log(N)));   % Constant
fprintf('The compression ratio is: %g\n',N/(R*K));


% Mesurements matrix
A = randn(R * K, N);

% Create a K sparse signal
x = zeros(N, 1);
I = randperm(N);
x(I(1:K)) = randn(K, 1);
x = x / norm(x);

% Measurements
y = A * x;
The compression ratio is: 5.55556

Defining proximal operators

% setting the function f2
f2.grad = @(x) 2*A'*(A*x-y);
f2.eval = @(x) norm(A*x-y)^2;
f2.beta = 2 * norm(A)^2;


% setting the function f1
param_l1.verbose = verbose -1;
param_l1.tight = 1;

f1.prox=@(x, T) prox_l1(x, T*tau, param_l1);
f1.eval=@(x) tau*norm(x,1);

solving the problem

% setting different parameter for the simulation
param_solver.verbose = verbose; % display parameter
param_solver.maxit = 300;       % maximum iteration
param_solver.tol = 1e-4;        % tolerance to stop iterating
param_solver.method = 'FISTA';  % desired method for solving the problem

% solving the problem
sol = solvep(zeros(N,1), {f1, f2}, param_solver);
Algorithm selected:FORWARD_BACKWARD 
Iteration 1:
  prox_L1: ||A x-y||_1 = 5.831724e-04, REL_OBJ, iter = 1
  ||f|| = 2.059626e+02, rel_norm = 3.098239e+00
Iteration 2:
  prox_L1: ||A x-y||_1 = 7.895953e-04, REL_OBJ, iter = 1
  ||f|| = 9.054056e+01, rel_norm = 1.274810e+00
Iteration 3:
  prox_L1: ||A x-y||_1 = 9.232455e-04, REL_OBJ, iter = 1
  ||f|| = 4.548013e+01, rel_norm = 9.907718e-01
Iteration 4:
  prox_L1: ||A x-y||_1 = 1.004181e-03, REL_OBJ, iter = 1
  ||f|| = 2.902168e+01, rel_norm = 5.671087e-01
Iteration 5:
  prox_L1: ||A x-y||_1 = 1.048088e-03, REL_OBJ, iter = 1
  ||f|| = 2.355485e+01, rel_norm = 2.320897e-01
Iteration 6:
  prox_L1: ||A x-y||_1 = 1.067481e-03, REL_OBJ, iter = 1
  ||f|| = 2.199779e+01, rel_norm = 7.078255e-02
Iteration 7:
  prox_L1: ||A x-y||_1 = 1.071069e-03, REL_OBJ, iter = 1
  ||f|| = 2.160638e+01, rel_norm = 1.811550e-02
Iteration 8:
  prox_L1: ||A x-y||_1 = 1.064792e-03, REL_OBJ, iter = 1
  ||f|| = 2.142255e+01, rel_norm = 8.580881e-03
Iteration 9:
  prox_L1: ||A x-y||_1 = 1.052726e-03, REL_OBJ, iter = 1
  ||f|| = 2.119583e+01, rel_norm = 1.069660e-02
Iteration 10:
  prox_L1: ||A x-y||_1 = 1.038083e-03, REL_OBJ, iter = 1
  ||f|| = 2.092375e+01, rel_norm = 1.300309e-02
Iteration 11:
  prox_L1: ||A x-y||_1 = 1.022937e-03, REL_OBJ, iter = 1
  ||f|| = 2.064710e+01, rel_norm = 1.339909e-02
Iteration 12:
  prox_L1: ||A x-y||_1 = 1.008459e-03, REL_OBJ, iter = 1
  ||f|| = 2.038892e+01, rel_norm = 1.266291e-02
Iteration 13:
  prox_L1: ||A x-y||_1 = 9.951508e-04, REL_OBJ, iter = 1
  ||f|| = 2.015002e+01, rel_norm = 1.185587e-02
Iteration 14:
  prox_L1: ||A x-y||_1 = 9.827816e-04, REL_OBJ, iter = 1
  ||f|| = 1.991777e+01, rel_norm = 1.166069e-02
Iteration 15:
  prox_L1: ||A x-y||_1 = 9.711417e-04, REL_OBJ, iter = 1
  ||f|| = 1.968645e+01, rel_norm = 1.174986e-02
Iteration 16:
  prox_L1: ||A x-y||_1 = 9.599090e-04, REL_OBJ, iter = 1
  ||f|| = 1.945420e+01, rel_norm = 1.193872e-02
Iteration 17:
  prox_L1: ||A x-y||_1 = 9.490001e-04, REL_OBJ, iter = 1
  ||f|| = 1.922457e+01, rel_norm = 1.194434e-02
Iteration 18:
  prox_L1: ||A x-y||_1 = 9.381355e-04, REL_OBJ, iter = 1
  ||f|| = 1.899660e+01, rel_norm = 1.200088e-02
Iteration 19:
  prox_L1: ||A x-y||_1 = 9.273642e-04, REL_OBJ, iter = 1
  ||f|| = 1.877281e+01, rel_norm = 1.192070e-02
Iteration 20:
  prox_L1: ||A x-y||_1 = 9.168824e-04, REL_OBJ, iter = 1
  ||f|| = 1.855715e+01, rel_norm = 1.162140e-02
Iteration 21:
  prox_L1: ||A x-y||_1 = 9.066404e-04, REL_OBJ, iter = 1
  ||f|| = 1.834783e+01, rel_norm = 1.140832e-02
Iteration 22:
  prox_L1: ||A x-y||_1 = 8.966264e-04, REL_OBJ, iter = 1
  ||f|| = 1.814418e+01, rel_norm = 1.122397e-02
Iteration 23:
  prox_L1: ||A x-y||_1 = 8.867078e-04, REL_OBJ, iter = 1
  ||f|| = 1.794397e+01, rel_norm = 1.115766e-02
Iteration 24:
  prox_L1: ||A x-y||_1 = 8.770115e-04, REL_OBJ, iter = 1
  ||f|| = 1.774857e+01, rel_norm = 1.100922e-02
Iteration 25:
  prox_L1: ||A x-y||_1 = 8.674914e-04, REL_OBJ, iter = 1
  ||f|| = 1.755688e+01, rel_norm = 1.091828e-02
Iteration 26:
  prox_L1: ||A x-y||_1 = 8.579676e-04, REL_OBJ, iter = 1
  ||f|| = 1.736516e+01, rel_norm = 1.104032e-02
Iteration 27:
  prox_L1: ||A x-y||_1 = 8.486746e-04, REL_OBJ, iter = 1
  ||f|| = 1.717788e+01, rel_norm = 1.090246e-02
Iteration 28:
  prox_L1: ||A x-y||_1 = 8.396252e-04, REL_OBJ, iter = 1
  ||f|| = 1.699471e+01, rel_norm = 1.077856e-02
Iteration 29:
  prox_L1: ||A x-y||_1 = 8.308017e-04, REL_OBJ, iter = 1
  ||f|| = 1.681521e+01, rel_norm = 1.067427e-02
Iteration 30:
  prox_L1: ||A x-y||_1 = 8.223299e-04, REL_OBJ, iter = 1
  ||f|| = 1.664327e+01, rel_norm = 1.033118e-02
Iteration 31:
  prox_L1: ||A x-y||_1 = 8.140606e-04, REL_OBJ, iter = 1
  ||f|| = 1.647514e+01, rel_norm = 1.020502e-02
Iteration 32:
  prox_L1: ||A x-y||_1 = 8.059644e-04, REL_OBJ, iter = 1
  ||f|| = 1.631103e+01, rel_norm = 1.006155e-02
Iteration 33:
  prox_L1: ||A x-y||_1 = 7.978720e-04, REL_OBJ, iter = 1
  ||f|| = 1.614799e+01, rel_norm = 1.009637e-02
Iteration 34:
  prox_L1: ||A x-y||_1 = 7.901590e-04, REL_OBJ, iter = 1
  ||f|| = 1.599227e+01, rel_norm = 9.737381e-03
Iteration 35:
  prox_L1: ||A x-y||_1 = 7.827916e-04, REL_OBJ, iter = 1
  ||f|| = 1.584324e+01, rel_norm = 9.406542e-03
Iteration 36:
  prox_L1: ||A x-y||_1 = 7.755571e-04, REL_OBJ, iter = 1
  ||f|| = 1.569613e+01, rel_norm = 9.372055e-03
Iteration 37:
  prox_L1: ||A x-y||_1 = 7.684361e-04, REL_OBJ, iter = 1
  ||f|| = 1.555153e+01, rel_norm = 9.298298e-03
Iteration 38:
  prox_L1: ||A x-y||_1 = 7.613877e-04, REL_OBJ, iter = 1
  ||f|| = 1.540922e+01, rel_norm = 9.235118e-03
Iteration 39:
  prox_L1: ||A x-y||_1 = 7.545577e-04, REL_OBJ, iter = 1
  ||f|| = 1.527187e+01, rel_norm = 8.993976e-03
Iteration 40:
  prox_L1: ||A x-y||_1 = 7.480512e-04, REL_OBJ, iter = 1
  ||f|| = 1.514121e+01, rel_norm = 8.629071e-03
Iteration 41:
  prox_L1: ||A x-y||_1 = 7.416956e-04, REL_OBJ, iter = 1
  ||f|| = 1.501404e+01, rel_norm = 8.470253e-03
Iteration 42:
  prox_L1: ||A x-y||_1 = 7.353787e-04, REL_OBJ, iter = 1
  ||f|| = 1.488809e+01, rel_norm = 8.459608e-03
Iteration 43:
  prox_L1: ||A x-y||_1 = 7.293988e-04, REL_OBJ, iter = 1
  ||f|| = 1.476773e+01, rel_norm = 8.150658e-03
Iteration 44:
  prox_L1: ||A x-y||_1 = 7.235770e-04, REL_OBJ, iter = 1
  ||f|| = 1.465044e+01, rel_norm = 8.005724e-03
Iteration 45:
  prox_L1: ||A x-y||_1 = 7.177815e-04, REL_OBJ, iter = 1
  ||f|| = 1.453421e+01, rel_norm = 7.996976e-03
Iteration 46:
  prox_L1: ||A x-y||_1 = 7.120199e-04, REL_OBJ, iter = 1
  ||f|| = 1.441904e+01, rel_norm = 7.987337e-03
Iteration 47:
  prox_L1: ||A x-y||_1 = 7.063775e-04, REL_OBJ, iter = 1
  ||f|| = 1.430612e+01, rel_norm = 7.892845e-03
Iteration 48:
  prox_L1: ||A x-y||_1 = 7.008092e-04, REL_OBJ, iter = 1
  ||f|| = 1.419467e+01, rel_norm = 7.852128e-03
Iteration 49:
  prox_L1: ||A x-y||_1 = 6.953469e-04, REL_OBJ, iter = 1
  ||f|| = 1.408468e+01, rel_norm = 7.808720e-03
Iteration 50:
  prox_L1: ||A x-y||_1 = 6.899373e-04, REL_OBJ, iter = 1
  ||f|| = 1.397468e+01, rel_norm = 7.871715e-03
Iteration 51:
  prox_L1: ||A x-y||_1 = 6.845874e-04, REL_OBJ, iter = 1
  ||f|| = 1.386518e+01, rel_norm = 7.897449e-03
Iteration 52:
  prox_L1: ||A x-y||_1 = 6.795209e-04, REL_OBJ, iter = 1
  ||f|| = 1.376075e+01, rel_norm = 7.589087e-03
Iteration 53:
  prox_L1: ||A x-y||_1 = 6.745692e-04, REL_OBJ, iter = 1
  ||f|| = 1.365942e+01, rel_norm = 7.418413e-03
Iteration 54:
  prox_L1: ||A x-y||_1 = 6.696482e-04, REL_OBJ, iter = 1
  ||f|| = 1.356064e+01, rel_norm = 7.284413e-03
Iteration 55:
  prox_L1: ||A x-y||_1 = 6.647791e-04, REL_OBJ, iter = 1
  ||f|| = 1.346330e+01, rel_norm = 7.230000e-03
Iteration 56:
  prox_L1: ||A x-y||_1 = 6.601686e-04, REL_OBJ, iter = 1
  ||f|| = 1.336961e+01, rel_norm = 7.007289e-03
Iteration 57:
  prox_L1: ||A x-y||_1 = 6.554858e-04, REL_OBJ, iter = 1
  ||f|| = 1.327376e+01, rel_norm = 7.220808e-03
Iteration 58:
  prox_L1: ||A x-y||_1 = 6.509159e-04, REL_OBJ, iter = 1
  ||f|| = 1.318043e+01, rel_norm = 7.080947e-03
Iteration 59:
  prox_L1: ||A x-y||_1 = 6.463586e-04, REL_OBJ, iter = 1
  ||f|| = 1.308867e+01, rel_norm = 7.010608e-03
Iteration 60:
  prox_L1: ||A x-y||_1 = 6.415943e-04, REL_OBJ, iter = 1
  ||f|| = 1.299455e+01, rel_norm = 7.242995e-03
Iteration 61:
  prox_L1: ||A x-y||_1 = 6.369474e-04, REL_OBJ, iter = 1
  ||f|| = 1.290351e+01, rel_norm = 7.055737e-03
Iteration 62:
  prox_L1: ||A x-y||_1 = 6.324565e-04, REL_OBJ, iter = 1
  ||f|| = 1.281491e+01, rel_norm = 6.913732e-03
Iteration 63:
  prox_L1: ||A x-y||_1 = 6.281096e-04, REL_OBJ, iter = 1
  ||f|| = 1.272855e+01, rel_norm = 6.784985e-03
Iteration 64:
  prox_L1: ||A x-y||_1 = 6.238297e-04, REL_OBJ, iter = 1
  ||f|| = 1.264290e+01, rel_norm = 6.774779e-03
Iteration 65:
  prox_L1: ||A x-y||_1 = 6.197305e-04, REL_OBJ, iter = 1
  ||f|| = 1.255955e+01, rel_norm = 6.636009e-03
Iteration 66:
  prox_L1: ||A x-y||_1 = 6.155703e-04, REL_OBJ, iter = 1
  ||f|| = 1.247460e+01, rel_norm = 6.810194e-03
Iteration 67:
  prox_L1: ||A x-y||_1 = 6.113705e-04, REL_OBJ, iter = 1
  ||f|| = 1.238949e+01, rel_norm = 6.868999e-03
Iteration 68:
  prox_L1: ||A x-y||_1 = 6.071487e-04, REL_OBJ, iter = 1
  ||f|| = 1.230466e+01, rel_norm = 6.894595e-03
Iteration 69:
  prox_L1: ||A x-y||_1 = 6.030124e-04, REL_OBJ, iter = 1
  ||f|| = 1.222129e+01, rel_norm = 6.821333e-03
Iteration 70:
  prox_L1: ||A x-y||_1 = 5.989685e-04, REL_OBJ, iter = 1
  ||f|| = 1.213976e+01, rel_norm = 6.715831e-03
Iteration 71:
  prox_L1: ||A x-y||_1 = 5.950312e-04, REL_OBJ, iter = 1
  ||f|| = 1.206050e+01, rel_norm = 6.572322e-03
Iteration 72:
  prox_L1: ||A x-y||_1 = 5.912329e-04, REL_OBJ, iter = 1
  ||f|| = 1.198430e+01, rel_norm = 6.358383e-03
Iteration 73:
  prox_L1: ||A x-y||_1 = 5.874543e-04, REL_OBJ, iter = 1
  ||f|| = 1.190896e+01, rel_norm = 6.326272e-03
Iteration 74:
  prox_L1: ||A x-y||_1 = 5.836567e-04, REL_OBJ, iter = 1
  ||f|| = 1.183349e+01, rel_norm = 6.377798e-03
Iteration 75:
  prox_L1: ||A x-y||_1 = 5.799085e-04, REL_OBJ, iter = 1
  ||f|| = 1.175905e+01, rel_norm = 6.330456e-03
Iteration 76:
  prox_L1: ||A x-y||_1 = 5.762086e-04, REL_OBJ, iter = 1
  ||f|| = 1.168562e+01, rel_norm = 6.283128e-03
Iteration 77:
  prox_L1: ||A x-y||_1 = 5.726784e-04, REL_OBJ, iter = 1
  ||f|| = 1.161473e+01, rel_norm = 6.104117e-03
Iteration 78:
  prox_L1: ||A x-y||_1 = 5.693167e-04, REL_OBJ, iter = 1
  ||f|| = 1.154599e+01, rel_norm = 5.953348e-03
Iteration 79:
  prox_L1: ||A x-y||_1 = 5.659971e-04, REL_OBJ, iter = 1
  ||f|| = 1.147744e+01, rel_norm = 5.972528e-03
Iteration 80:
  prox_L1: ||A x-y||_1 = 5.626564e-04, REL_OBJ, iter = 1
  ||f|| = 1.140870e+01, rel_norm = 6.024828e-03
Iteration 81:
  prox_L1: ||A x-y||_1 = 5.592076e-04, REL_OBJ, iter = 1
  ||f|| = 1.133881e+01, rel_norm = 6.164004e-03
Iteration 82:
  prox_L1: ||A x-y||_1 = 5.557740e-04, REL_OBJ, iter = 1
  ||f|| = 1.127000e+01, rel_norm = 6.105728e-03
Iteration 83:
  prox_L1: ||A x-y||_1 = 5.523461e-04, REL_OBJ, iter = 1
  ||f|| = 1.120135e+01, rel_norm = 6.128902e-03
Iteration 84:
  prox_L1: ||A x-y||_1 = 5.490294e-04, REL_OBJ, iter = 1
  ||f|| = 1.113446e+01, rel_norm = 6.007185e-03
Iteration 85:
  prox_L1: ||A x-y||_1 = 5.458102e-04, REL_OBJ, iter = 1
  ||f|| = 1.106845e+01, rel_norm = 5.963774e-03
Iteration 86:
  prox_L1: ||A x-y||_1 = 5.428167e-04, REL_OBJ, iter = 1
  ||f|| = 1.100635e+01, rel_norm = 5.642328e-03
Iteration 87:
  prox_L1: ||A x-y||_1 = 5.398094e-04, REL_OBJ, iter = 1
  ||f|| = 1.094494e+01, rel_norm = 5.610762e-03
Iteration 88:
  prox_L1: ||A x-y||_1 = 5.367349e-04, REL_OBJ, iter = 1
  ||f|| = 1.088335e+01, rel_norm = 5.659114e-03
Iteration 89:
  prox_L1: ||A x-y||_1 = 5.337277e-04, REL_OBJ, iter = 1
  ||f|| = 1.082368e+01, rel_norm = 5.513036e-03
Iteration 90:
  prox_L1: ||A x-y||_1 = 5.307465e-04, REL_OBJ, iter = 1
  ||f|| = 1.076407e+01, rel_norm = 5.538139e-03
Iteration 91:
  prox_L1: ||A x-y||_1 = 5.277002e-04, REL_OBJ, iter = 1
  ||f|| = 1.070330e+01, rel_norm = 5.677561e-03
Iteration 92:
  prox_L1: ||A x-y||_1 = 5.247591e-04, REL_OBJ, iter = 1
  ||f|| = 1.064375e+01, rel_norm = 5.594169e-03
Iteration 93:
  prox_L1: ||A x-y||_1 = 5.218638e-04, REL_OBJ, iter = 1
  ||f|| = 1.058464e+01, rel_norm = 5.585241e-03
Iteration 94:
  prox_L1: ||A x-y||_1 = 5.190691e-04, REL_OBJ, iter = 1
  ||f|| = 1.052684e+01, rel_norm = 5.490833e-03
Iteration 95:
  prox_L1: ||A x-y||_1 = 5.162105e-04, REL_OBJ, iter = 1
  ||f|| = 1.046877e+01, rel_norm = 5.546374e-03
Iteration 96:
  prox_L1: ||A x-y||_1 = 5.133454e-04, REL_OBJ, iter = 1
  ||f|| = 1.041095e+01, rel_norm = 5.554373e-03
Iteration 97:
  prox_L1: ||A x-y||_1 = 5.105348e-04, REL_OBJ, iter = 1
  ||f|| = 1.035392e+01, rel_norm = 5.507793e-03
Iteration 98:
  prox_L1: ||A x-y||_1 = 5.077203e-04, REL_OBJ, iter = 1
  ||f|| = 1.029680e+01, rel_norm = 5.547089e-03
Iteration 99:
  prox_L1: ||A x-y||_1 = 5.048163e-04, REL_OBJ, iter = 1
  ||f|| = 1.023834e+01, rel_norm = 5.710265e-03
Iteration 100:
  prox_L1: ||A x-y||_1 = 5.019636e-04, REL_OBJ, iter = 1
  ||f|| = 1.018128e+01, rel_norm = 5.603764e-03
Iteration 101:
  prox_L1: ||A x-y||_1 = 4.991977e-04, REL_OBJ, iter = 1
  ||f|| = 1.012600e+01, rel_norm = 5.459513e-03
Iteration 102:
  prox_L1: ||A x-y||_1 = 4.964243e-04, REL_OBJ, iter = 1
  ||f|| = 1.007027e+01, rel_norm = 5.533968e-03
Iteration 103:
  prox_L1: ||A x-y||_1 = 4.936677e-04, REL_OBJ, iter = 1
  ||f|| = 1.001526e+01, rel_norm = 5.493024e-03
Iteration 104:
  prox_L1: ||A x-y||_1 = 4.909084e-04, REL_OBJ, iter = 1
  ||f|| = 9.961056e+00, rel_norm = 5.441454e-03
Iteration 105:
  prox_L1: ||A x-y||_1 = 4.882457e-04, REL_OBJ, iter = 1
  ||f|| = 9.909012e+00, rel_norm = 5.252140e-03
Iteration 106:
  prox_L1: ||A x-y||_1 = 4.856786e-04, REL_OBJ, iter = 1
  ||f|| = 9.858071e+00, rel_norm = 5.167453e-03
Iteration 107:
  prox_L1: ||A x-y||_1 = 4.831174e-04, REL_OBJ, iter = 1
  ||f|| = 9.805974e+00, rel_norm = 5.312790e-03
Iteration 108:
  prox_L1: ||A x-y||_1 = 4.805846e-04, REL_OBJ, iter = 1
  ||f|| = 9.753915e+00, rel_norm = 5.337252e-03
Iteration 109:
  prox_L1: ||A x-y||_1 = 4.780504e-04, REL_OBJ, iter = 1
  ||f|| = 9.701870e+00, rel_norm = 5.364401e-03
Iteration 110:
  prox_L1: ||A x-y||_1 = 4.755384e-04, REL_OBJ, iter = 1
  ||f|| = 9.650546e+00, rel_norm = 5.318268e-03
Iteration 111:
  prox_L1: ||A x-y||_1 = 4.730269e-04, REL_OBJ, iter = 1
  ||f|| = 9.599239e+00, rel_norm = 5.344850e-03
Iteration 112:
  prox_L1: ||A x-y||_1 = 4.706240e-04, REL_OBJ, iter = 1
  ||f|| = 9.549249e+00, rel_norm = 5.235006e-03
Iteration 113:
  prox_L1: ||A x-y||_1 = 4.682568e-04, REL_OBJ, iter = 1
  ||f|| = 9.499868e+00, rel_norm = 5.198112e-03
Iteration 114:
  prox_L1: ||A x-y||_1 = 4.658559e-04, REL_OBJ, iter = 1
  ||f|| = 9.450152e+00, rel_norm = 5.260802e-03
Iteration 115:
  prox_L1: ||A x-y||_1 = 4.634704e-04, REL_OBJ, iter = 1
  ||f|| = 9.401244e+00, rel_norm = 5.202288e-03
Iteration 116:
  prox_L1: ||A x-y||_1 = 4.610314e-04, REL_OBJ, iter = 1
  ||f|| = 9.351611e+00, rel_norm = 5.307439e-03
Iteration 117:
  prox_L1: ||A x-y||_1 = 4.586355e-04, REL_OBJ, iter = 1
  ||f|| = 9.302976e+00, rel_norm = 5.227942e-03
Iteration 118:
  prox_L1: ||A x-y||_1 = 4.561855e-04, REL_OBJ, iter = 1
  ||f|| = 9.253767e+00, rel_norm = 5.317661e-03
Iteration 119:
  prox_L1: ||A x-y||_1 = 4.537689e-04, REL_OBJ, iter = 1
  ||f|| = 9.204937e+00, rel_norm = 5.304806e-03
Iteration 120:
  prox_L1: ||A x-y||_1 = 4.513584e-04, REL_OBJ, iter = 1
  ||f|| = 9.156104e+00, rel_norm = 5.333350e-03
Iteration 121:
  prox_L1: ||A x-y||_1 = 4.489656e-04, REL_OBJ, iter = 1
  ||f|| = 9.107532e+00, rel_norm = 5.333253e-03
Iteration 122:
  prox_L1: ||A x-y||_1 = 4.466455e-04, REL_OBJ, iter = 1
  ||f|| = 9.059787e+00, rel_norm = 5.269961e-03
Iteration 123:
  prox_L1: ||A x-y||_1 = 4.443815e-04, REL_OBJ, iter = 1
  ||f|| = 9.012881e+00, rel_norm = 5.204333e-03
Iteration 124:
  prox_L1: ||A x-y||_1 = 4.421174e-04, REL_OBJ, iter = 1
  ||f|| = 8.966808e+00, rel_norm = 5.138142e-03
Iteration 125:
  prox_L1: ||A x-y||_1 = 4.398707e-04, REL_OBJ, iter = 1
  ||f|| = 8.921768e+00, rel_norm = 5.048310e-03
Iteration 126:
  prox_L1: ||A x-y||_1 = 4.376518e-04, REL_OBJ, iter = 1
  ||f|| = 8.877439e+00, rel_norm = 4.993440e-03
Iteration 127:
  prox_L1: ||A x-y||_1 = 4.354975e-04, REL_OBJ, iter = 1
  ||f|| = 8.834612e+00, rel_norm = 4.847682e-03
Iteration 128:
  prox_L1: ||A x-y||_1 = 4.333922e-04, REL_OBJ, iter = 1
  ||f|| = 8.792185e+00, rel_norm = 4.825492e-03
Iteration 129:
  prox_L1: ||A x-y||_1 = 4.313295e-04, REL_OBJ, iter = 1
  ||f|| = 8.750112e+00, rel_norm = 4.808277e-03
Iteration 130:
  prox_L1: ||A x-y||_1 = 4.292336e-04, REL_OBJ, iter = 1
  ||f|| = 8.707385e+00, rel_norm = 4.907012e-03
Iteration 131:
  prox_L1: ||A x-y||_1 = 4.271599e-04, REL_OBJ, iter = 1
  ||f|| = 8.665161e+00, rel_norm = 4.872858e-03
Iteration 132:
  prox_L1: ||A x-y||_1 = 4.251899e-04, REL_OBJ, iter = 1
  ||f|| = 8.624616e+00, rel_norm = 4.701022e-03
Iteration 133:
  prox_L1: ||A x-y||_1 = 4.232311e-04, REL_OBJ, iter = 1
  ||f|| = 8.584106e+00, rel_norm = 4.719188e-03
Iteration 134:
  prox_L1: ||A x-y||_1 = 4.213895e-04, REL_OBJ, iter = 1
  ||f|| = 8.545581e+00, rel_norm = 4.508244e-03
Iteration 135:
  prox_L1: ||A x-y||_1 = 4.196689e-04, REL_OBJ, iter = 1
  ||f|| = 8.509271e+00, rel_norm = 4.267071e-03
Iteration 136:
  prox_L1: ||A x-y||_1 = 4.179827e-04, REL_OBJ, iter = 1
  ||f|| = 8.473412e+00, rel_norm = 4.231988e-03
Iteration 137:
  prox_L1: ||A x-y||_1 = 4.164200e-04, REL_OBJ, iter = 1
  ||f|| = 8.439230e+00, rel_norm = 4.050337e-03
Iteration 138:
  prox_L1: ||A x-y||_1 = 4.149570e-04, REL_OBJ, iter = 1
  ||f|| = 8.406517e+00, rel_norm = 3.891361e-03
Iteration 139:
  prox_L1: ||A x-y||_1 = 4.135297e-04, REL_OBJ, iter = 1
  ||f|| = 8.374930e+00, rel_norm = 3.771598e-03
Iteration 140:
  prox_L1: ||A x-y||_1 = 4.119276e-04, REL_OBJ, iter = 1
  ||f|| = 8.341135e+00, rel_norm = 4.051708e-03
Iteration 141:
  prox_L1: ||A x-y||_1 = 4.104393e-04, REL_OBJ, iter = 1
  ||f|| = 8.308681e+00, rel_norm = 3.905985e-03
Iteration 142:
  prox_L1: ||A x-y||_1 = 4.091572e-04, REL_OBJ, iter = 1
  ||f|| = 8.279332e+00, rel_norm = 3.544828e-03
Iteration 143:
  prox_L1: ||A x-y||_1 = 4.081233e-04, REL_OBJ, iter = 1
  ||f|| = 8.253942e+00, rel_norm = 3.076094e-03
Iteration 144:
  prox_L1: ||A x-y||_1 = 4.070496e-04, REL_OBJ, iter = 1
  ||f|| = 8.227962e+00, rel_norm = 3.157553e-03
Iteration 145:
  prox_L1: ||A x-y||_1 = 4.062077e-04, REL_OBJ, iter = 1
  ||f|| = 8.206548e+00, rel_norm = 2.609374e-03
Iteration 146:
  prox_L1: ||A x-y||_1 = 4.055263e-04, REL_OBJ, iter = 1
  ||f|| = 8.188014e+00, rel_norm = 2.263612e-03
Iteration 147:
  prox_L1: ||A x-y||_1 = 4.050904e-04, REL_OBJ, iter = 1
  ||f|| = 8.174446e+00, rel_norm = 1.659807e-03
Iteration 148:
  prox_L1: ||A x-y||_1 = 4.050326e-04, REL_OBJ, iter = 1
  ||f|| = 8.167276e+00, rel_norm = 8.778889e-04
Iteration 149:
  prox_L1: ||A x-y||_1 = 4.055243e-04, REL_OBJ, iter = 1
  ||f|| = 8.169892e+00, rel_norm = 3.202870e-04
Iteration 150:
  prox_L1: ||A x-y||_1 = 4.066153e-04, REL_OBJ, iter = 1
  ||f|| = 8.184407e+00, rel_norm = 1.773411e-03
Iteration 151:
  prox_L1: ||A x-y||_1 = 4.079771e-04, REL_OBJ, iter = 1
  ||f|| = 8.207584e+00, rel_norm = 2.823871e-03
Iteration 152:
  prox_L1: ||A x-y||_1 = 4.093566e-04, REL_OBJ, iter = 1
  ||f|| = 8.235095e+00, rel_norm = 3.340669e-03
Iteration 153:
  prox_L1: ||A x-y||_1 = 4.106194e-04, REL_OBJ, iter = 1
  ||f|| = 8.263113e+00, rel_norm = 3.390738e-03
Iteration 154:
  prox_L1: ||A x-y||_1 = 4.116046e-04, REL_OBJ, iter = 1
  ||f|| = 8.287478e+00, rel_norm = 2.939974e-03
Iteration 155:
  prox_L1: ||A x-y||_1 = 4.122874e-04, REL_OBJ, iter = 1
  ||f|| = 8.305993e+00, rel_norm = 2.229152e-03
Iteration 156:
  prox_L1: ||A x-y||_1 = 4.124923e-04, REL_OBJ, iter = 1
  ||f|| = 8.313901e+00, rel_norm = 9.511318e-04
Iteration 157:
  prox_L1: ||A x-y||_1 = 4.122590e-04, REL_OBJ, iter = 1
  ||f|| = 8.311170e+00, rel_norm = 3.285066e-04
Iteration 158:
  prox_L1: ||A x-y||_1 = 4.116456e-04, REL_OBJ, iter = 1
  ||f|| = 8.298629e+00, rel_norm = 1.511275e-03
Iteration 159:
  prox_L1: ||A x-y||_1 = 4.105710e-04, REL_OBJ, iter = 1
  ||f|| = 8.275538e+00, rel_norm = 2.790283e-03
Iteration 160:
  prox_L1: ||A x-y||_1 = 4.091478e-04, REL_OBJ, iter = 1
  ||f|| = 8.244643e+00, rel_norm = 3.747266e-03
Iteration 161:
  prox_L1: ||A x-y||_1 = 4.073905e-04, REL_OBJ, iter = 1
  ||f|| = 8.207523e+00, rel_norm = 4.522677e-03
Iteration 162:
  prox_L1: ||A x-y||_1 = 4.054199e-04, REL_OBJ, iter = 1
  ||f|| = 8.166469e+00, rel_norm = 5.027161e-03
Iteration 163:
  prox_L1: ||A x-y||_1 = 4.035632e-04, REL_OBJ, iter = 1
  ||f|| = 8.128401e+00, rel_norm = 4.683235e-03
Iteration 164:
  prox_L1: ||A x-y||_1 = 4.019224e-04, REL_OBJ, iter = 1
  ||f|| = 8.096378e+00, rel_norm = 3.955255e-03
Iteration 165:
  prox_L1: ||A x-y||_1 = 4.005621e-04, REL_OBJ, iter = 1
  ||f|| = 8.072982e+00, rel_norm = 2.898038e-03
Iteration 166:
  prox_L1: ||A x-y||_1 = 3.995469e-04, REL_OBJ, iter = 1
  ||f|| = 8.059663e+00, rel_norm = 1.652552e-03
Iteration 167:
  prox_L1: ||A x-y||_1 = 3.989682e-04, REL_OBJ, iter = 1
  ||f|| = 8.056919e+00, rel_norm = 3.405991e-04
Iteration 168:
  prox_L1: ||A x-y||_1 = 3.986566e-04, REL_OBJ, iter = 1
  ||f|| = 8.059246e+00, rel_norm = 2.887421e-04
Iteration 169:
  prox_L1: ||A x-y||_1 = 3.986451e-04, REL_OBJ, iter = 1
  ||f|| = 8.065504e+00, rel_norm = 7.758207e-04
Iteration 170:
  prox_L1: ||A x-y||_1 = 3.988375e-04, REL_OBJ, iter = 1
  ||f|| = 8.073717e+00, rel_norm = 1.017358e-03
Iteration 171:
  prox_L1: ||A x-y||_1 = 3.991500e-04, REL_OBJ, iter = 1
  ||f|| = 8.082527e+00, rel_norm = 1.089928e-03
Iteration 172:
  prox_L1: ||A x-y||_1 = 3.995251e-04, REL_OBJ, iter = 1
  ||f|| = 8.091175e+00, rel_norm = 1.068851e-03
Iteration 173:
  prox_L1: ||A x-y||_1 = 3.999119e-04, REL_OBJ, iter = 1
  ||f|| = 8.099034e+00, rel_norm = 9.703640e-04
Iteration 174:
  prox_L1: ||A x-y||_1 = 4.002668e-04, REL_OBJ, iter = 1
  ||f|| = 8.105803e+00, rel_norm = 8.351039e-04
Iteration 175:
  prox_L1: ||A x-y||_1 = 4.005832e-04, REL_OBJ, iter = 1
  ||f|| = 8.111535e+00, rel_norm = 7.066680e-04
Iteration 176:
  prox_L1: ||A x-y||_1 = 4.008209e-04, REL_OBJ, iter = 1
  ||f|| = 8.115833e+00, rel_norm = 5.295371e-04
Iteration 177:
  prox_L1: ||A x-y||_1 = 4.009900e-04, REL_OBJ, iter = 1
  ||f|| = 8.118919e+00, rel_norm = 3.800909e-04
Iteration 178:
  prox_L1: ||A x-y||_1 = 4.011085e-04, REL_OBJ, iter = 1
  ||f|| = 8.120895e+00, rel_norm = 2.433577e-04
Iteration 179:
  prox_L1: ||A x-y||_1 = 4.012050e-04, REL_OBJ, iter = 1
  ||f|| = 8.121966e+00, rel_norm = 1.317724e-04
Iteration 180:
  prox_L1: ||A x-y||_1 = 4.012684e-04, REL_OBJ, iter = 1
  ||f|| = 8.122162e+00, rel_norm = 2.417612e-05

 FORWARD_BACKWARD:
 Final relative evaluation: 2.417612e-05
 ||f|| = 8.122162e+00
 180 iterations
 Stopping criterion: REL_NORM 

displaying the result

figure;

plot(1:N, x, 'o', 1:N, sol, 'xr');
legend('Original signal', 'Reconstructed signal');

Closing the toolbox

close_unlocbox();