# Basis Pursuit Denoising with Forward-Backward

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

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

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);
```