SPG_GROUP Solve jointly-sparse basis pursuit denoise (BPDN)
[x, r, g, info] = spg_group(A, b, tau, sigma, x0, options)
(IN) is an m-by-n matrix, explicit or an operator.
(IN) is an m-vector.
(IN) is a is vector containing the group number of the corresponding index in x
(IN) is a nonnegative scalar (noise); see (BPDN)
(IN) is a structure of options from spgSetParms
(OUT) is a solution of the problem
(OUT) is the residual, r = b - Ax
(OUT) is the gradient, g = -A'r
(OUT) is a structure with output information
SPG_GROUP is designed to solve the basis pursuit denoise problem
(BPDN) minimize sum_k ||X_{i : GROUPS(i) = k}||_2 subject to ||A X - B||_2,2 <= SIGMA,
where A is an M-by-N matrix, B is a vector, GROUPS is vector containing the group number of the corresponding index in X, and SIGMA is a nonnegative scalar. In all cases below, A can be an explicit M-by-N matrix or matrix-like object for which the operations A*x and A'*y are defined (i.e., matrix-vector multiplication with A and its adjoint.)
Also, A can be a function handle that points to a function with the signature
v = A(w,mode) which returns v = A *w if mode == 1; v = A'*w if mode == 2.
X = SPG_GROUP(A,B,G,SIGMA) solves the BPDN problem. If SIGMA=0, SIGMA=[] or SIGMA is omitted, then the jointly-sparse basis pursuit (BP) problem is solved; i.e., the constraints in the BPDN problem are taken as AX=B.
X = SPG_GROUP(A,B,G,SIGMA,OPTIONS) specifies options that are set using SPGSETPARMS.
[X,R,G,INFO] = SPG_GROUP(A,B,GROUPS,SIGMA,OPTIONS) additionally returns the residual R = B - A*X, the objective gradient G = A'*R, and an INFO structure. (See SPGL1 for a description of this last output argument.)