nikcleju@67: # -*- coding: utf-8 -*- nikcleju@67: """ nikcleju@67: Algorithms for approximate analysis recovery based on synthesis solvers (a.k.a. Analysis by Synthesis, ABS). nikcleju@67: Approximate reconstruction, ABS-mixed. nikcleju@67: nikcleju@67: Author: Nicolae Cleju nikcleju@67: """ nikcleju@67: __author__ = "Nicolae Cleju" nikcleju@67: __license__ = "GPL" nikcleju@67: __email__ = "nikcleju@gmail.com" nikcleju@67: nikcleju@67: nikcleju@67: import numpy nikcleju@67: nikcleju@67: # Import synthesis solvers from pyCSalgos package nikcleju@67: import pyCSalgos.BP.l1qec nikcleju@67: import pyCSalgos.SL0.SL0_approx nikcleju@67: nikcleju@67: def bp(y,M,Omega,epsilon, x0, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False): nikcleju@67: """ nikcleju@67: ABS-mixed: Basis Pursuit (based on l1magic toolbox) nikcleju@67: """ nikcleju@67: N,n = Omega.shape nikcleju@67: D = numpy.linalg.pinv(Omega) nikcleju@67: U,S,Vt = numpy.linalg.svd(D) nikcleju@67: Aeps = numpy.dot(M,D) nikcleju@67: Aexact = Vt[-(N-n):,:] nikcleju@67: nikcleju@67: return numpy.dot(D , pyCSalgos.BP.l1qec.l1qec_logbarrier(x0,Aeps,Aeps.T,y,epsilon,Aexact,Aexact.T,numpy.zeros(N-n), lbtol, mu, cgtol, cgmaxiter, verbose)) nikcleju@67: nikcleju@67: def sl0(y,M,Omega,epsilon, sigma_min, sigma_decrease_factor=0.5, mu_0=2, L=3, Aeps_pinv=None, Aexact_pinv=None, true_s=None): nikcleju@67: """ nikcleju@67: ABS-mixed: Smooth L0 (SL0) nikcleju@67: """ nikcleju@67: N,n = Omega.shape nikcleju@67: D = numpy.linalg.pinv(Omega) nikcleju@67: U,S,Vt = numpy.linalg.svd(D) nikcleju@67: Aeps = numpy.dot(M,D) nikcleju@67: Aexact = Vt[-(N-n):,:] nikcleju@67: nikcleju@67: #return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx_analysis(Aeps,Aexact,y,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s)) nikcleju@67: #return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_robust_analysis(Aeps,Aexact,y,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s)) nikcleju@67: #return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx_analysis_unconstrained(Aeps,Aexact,y,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s)) nikcleju@67: return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx_analysis_dai(Aeps,Aexact,y,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s)) nikcleju@67: