nikcleju@10
|
1 # -*- coding: utf-8 -*-
|
nikcleju@10
|
2 """
|
nikcleju@17
|
3 Algorithms for approximate analysis recovery based on synthesis solvers (a.k.a. Analysis by Synthesis, ABS).
|
nikcleju@17
|
4 Approximate reconstruction, ABS-mixed.
|
nikcleju@10
|
5
|
nikcleju@17
|
6 Author: Nicolae Cleju
|
nikcleju@10
|
7 """
|
nikcleju@17
|
8 __author__ = "Nicolae Cleju"
|
nikcleju@17
|
9 __license__ = "GPL"
|
nikcleju@17
|
10 __email__ = "nikcleju@gmail.com"
|
nikcleju@17
|
11
|
nikcleju@10
|
12
|
nikcleju@10
|
13 import numpy
|
nikcleju@17
|
14
|
nikcleju@17
|
15 # Import synthesis solvers from pyCSalgos package
|
nikcleju@10
|
16 import pyCSalgos.BP.l1qec
|
nikcleju@10
|
17 import pyCSalgos.SL0.SL0_approx
|
nikcleju@10
|
18
|
nikcleju@10
|
19 def bp(y,M,Omega,epsilon, x0, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False):
|
nikcleju@17
|
20 """
|
nikcleju@17
|
21 ABS-mixed: Basis Pursuit (based on l1magic toolbox)
|
nikcleju@17
|
22 """
|
nikcleju@10
|
23 N,n = Omega.shape
|
nikcleju@10
|
24 D = numpy.linalg.pinv(Omega)
|
nikcleju@10
|
25 U,S,Vt = numpy.linalg.svd(D)
|
nikcleju@10
|
26 Aeps = numpy.dot(M,D)
|
nikcleju@10
|
27 Aexact = Vt[-(N-n):,:]
|
nikcleju@10
|
28
|
nikcleju@10
|
29 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@10
|
30
|
nikcleju@10
|
31 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@17
|
32 """
|
nikcleju@17
|
33 ABS-mixed: Smooth L0 (SL0)
|
nikcleju@17
|
34 """
|
nikcleju@10
|
35 N,n = Omega.shape
|
nikcleju@10
|
36 D = numpy.linalg.pinv(Omega)
|
nikcleju@10
|
37 U,S,Vt = numpy.linalg.svd(D)
|
nikcleju@10
|
38 Aeps = numpy.dot(M,D)
|
nikcleju@10
|
39 Aexact = Vt[-(N-n):,:]
|
nikcleju@10
|
40
|
nikcleju@21
|
41 #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@21
|
42 #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@21
|
43 #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@21
|
44 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@10
|
45 |