pylops.optimization.sparsity.fista(Op, y, x0=None, niter=10, SOp=None, eps=0.1, alpha=None, eigsdict=None, tol=1e-10, threshkind='soft', perc=None, decay=None, monitorres=False, show=False, itershow=[10, 10, 10], callback=None)[source]

Fast Iterative Shrinkage-Thresholding Algorithm (FISTA).

Solve an optimization problem with \(L^p, \; p=0, 0.5, 1\) regularization, given the operator Op and data y. The operator can be real or complex, and should ideally be either square \(N=M\) or underdetermined \(N<M\).

Op : pylops.LinearOperator

Operator to invert

y : numpy.ndarray


x0: :obj:`numpy.ndarray`, optional

Initial guess

niter : int, optional

Number of iterations

SOp : pylops.LinearOperator, optional

Regularization operator (use when solving the analysis problem)

eps : float, optional

Sparsity damping

alpha : float, optional

Step size. To guarantee convergence, ensure \(\alpha \le 1/\lambda_\text{max}\), where \(\lambda_\text{max}\) is the largest eigenvalue of \(\mathbf{Op}^H\mathbf{Op}\). If None, the maximum eigenvalue is estimated and the optimal step size is chosen as \(1/\lambda_\text{max}\). If provided, the convergence criterion will not be checked internally.

eigsdict : dict, optional

Dictionary of parameters to be passed to pylops.LinearOperator.eigs method when computing the maximum eigenvalue

tol : float, optional

Tolerance. Stop iterations if difference between inverted model at subsequent iterations is smaller than tol

threshkind : str, optional

Kind of thresholding (‘hard’, ‘soft’, ‘half’, ‘soft-percentile’, or ‘half-percentile’ - ‘soft’ used as default)

perc : float, optional

Percentile, as percentage of values to be kept by thresholding (to be provided when thresholding is soft-percentile or half-percentile)

decay : numpy.ndarray, optional

Decay factor to be applied to thresholding during iterations

monitorres : bool, optional

Monitor that residual is decreasing

show : bool, optional

Display iterations log

itershow : list, optional

Display set log for the first N1 steps, last N2 steps, and every N3 steps in between where N1, N2, N3 are the three element of the list.

callback : callable, optional

Function with signature (callback(x)) to call after each iteration where x is the current model vector

xinv : numpy.ndarray

Inverted model

niter : int

Number of effective iterations

cost : numpy.ndarray, optional

History of cost function


If threshkind is different from hard, soft, half, soft-percentile, or half-percentile


If perc=None when threshkind is soft-percentile or half-percentile

See also

Orthogonal Matching Pursuit (OMP).
Iterative Shrinkage-Thresholding Algorithm (ISTA).
Spectral Projected-Gradient for L1 norm (SPGL1).
Split Bregman for mixed L2-L1 norms.


See pylops.optimization.cls_sparsity.FISTA