MATLAB Examples

# Basis Pursuit Denoising with Forward-Backward

Test the use of Forward-backward-like splitting for the resolution of a compressed sensing regularization.

```addpath('../'); addpath('../toolbox/'); ```

Dimension of the problem.

```n = 600; p = n/4; ```

Regularization parameter.

```lambda = 1; ```

Matrix and observation.

```A = randn(p,n); y = randn(p,1); ```

List of benchmarked algorithms.

```methods = {'fb', 'fista', 'nesterov'}; ```

operator callbacks

```F = @(x)lambda*norm(x,1); G = @(x)1/2*norm(y-A*x)^2; ```

Proximal operator of F.

```ProxF = @(x,tau)perform_soft_thresholding(x,lambda*tau); ```

```GradG = @(x)A'*(A*x-y); ```

Lipschitz constant.

```L = norm(A)^2; ```

Function to record the energy.

```options.report = @(x)F(x)+G(x); ```

Bench the algorithm

```options.niter = 5000; E = []; for i=1:length(methods) options.method = methods{i}; [x,e] = perform_fb(zeros(n,1), ProxF, GradG, L, options); E(:,i) = e(:); end e = min(E(:)); ```
```[********************] [********************] [********************] ```

Display the decays of the energies.

IMPORTANT: Note that the comparison with Nesterov is unfair, since each Nesterov iteration cost twice more.

```sel = 1:round(options.niter/10); loglog(E(sel,:)-e); axis tight; legend(methods); ```