FORWARD_BACKWARD - Forward-backward splitting algorithm

Usage

sol = forward_backward(x_0,f1, f2, param);
sol = forward_backward(x_0,f1, f2);
[sol,infos] = forward_backward(...);

Input parameters

x_0 Starting point of the algorithm
f1 First function to minimize
f2 Second function to minimize
param Optional parameter

Output parameters

sol Solution
info Structure summarizing informations at convergence

Description

forward_backward solves:

\begin{equation*} sol = arg \min_x f_1(x) + f_2(x) \hspace{1cm} for \hspace{1cm} x\in R^N \end{equation*}

where x is the optimization variable.

f1 is a structure representing a convex function. Inside the structure, there have to be the prox of the function that can be called by f1.prox and the function itself that can be called by f1.eval.

f2 is a structure representing a convex function, with a \(\beta\) Lipschitz continuous gradient. Inside the structure, there have to be the gradient of the function that can be called by f2.grad and the function itself that can be called by f2.eval.

param a Matlab structure containing solver paremeters. See the function solvep for more information. Additionally it contains those aditional fields:

  • param.lambda : is the weight of the update term. It is kind of a timestep for the proximal operators. (Warning it should not be confused with gamma, the time step for gradient descent part). By default it is set to 1. Do not change this parameter unless you know what you do.
  • param.method : is the method used to solve the problem. It can be the fast version 'FISTA' or 'ISTA'. By default, it's 'FISTA'.

References:

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.

A. Beck and M. Teboulle. A fast iterative shrinkage-thresholding algorithm for linear inverse problems. SIAM Journal on Imaging Sciences, 2(1):183--202, 2009.