⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spg_group.m

📁 Spectral Projected L1 solver
💻 M
字号:
function [x,r,g,info] = spg_group( A, b, groups, sigma, options )%SPG_GROUP  Solve jointly-sparse basis pursuit denoise (BPDN)%%   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_GROPU(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.)%%   See also spgl1, spgSetParms, spg_bp, spg_lasso.%   Copyright 2008, Ewout van den Berg and Michael P. Friedlander%   http://www.cs.ubc.ca/labs/scl/spgl1%   $Id$if ~exist('options','var'), options = []; endif ~exist('sigma','var') || isempty(sigma), sigma = 0; endif ~exist('groups','var') || isempty(groups)    error('Third argument cannot be empty.');endif ~exist('b','var') || isempty(b)    error('Second argument cannot be empty.');endif ~exist('A','var') || isempty(A)    error('First argument cannot be empty.');end% Preprocess the groups, normalize numberingg     = groups(:);gidx  = unique(g);groups = sparse(length(gidx),length(g));for i=1:length(gidx)   groups(i,g == gidx(i)) = 1;end% Set projection specific functionsoptions.project     = @(x,weight,tau) NormGroupL2_project(groups,x,weight,tau);options.primal_norm = @(x,weight    ) NormGroupL2_primal(groups,x,weight);options.dual_norm   = @(x,weight    ) NormGroupL2_dual(groups,x,weight);tau = 0;x0  = [];[x,r,g,info] = spgl1(A,b,tau,sigma,x0,options);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -