@@ -144,9 +144,10 @@ shrinkage(x::Real, α::Real) = sign(x) * max(abs(x)-α, zero(x))
144144
145145# TODO fast iterative shrinkage and hard-thresholding algorithm
146146# for weighted l1-norm minimization
147- function fista (A:: AbstractMatrix , b:: AbstractVector , λ:: Real , x:: AbstractVector = spzeros (size (A, 2 )))
147+ function fista (A:: AbstractMatrix , b:: AbstractVector , λ:: Real ,
148+ x:: AbstractVector = spzeros (size (A, 2 )); maxiter:: Int = 1024 , stepsize:: Real = 1e-2 )
148149 w = fill (λ, size (x))
149- fista (A, b, w, x)
150+ fista (A, b, w, x, maxiter = maxiter, stepsize = stepsize )
150151end
151152
152153function l1 (x:: AbstractVector , w:: AbstractVector )
@@ -159,20 +160,20 @@ function l1(x::AbstractVector, w::AbstractVector)
159160end
160161
161162# TODO : stepsize selection
162- function ista (A, b, λ:: Real , x = spzeros (size (A, 2 )); maxiter:: Int = 128 )
163- ista (A, b, fill (λ, size (x)), x, maxiter = maxiter)
163+ function ista (A, b, λ:: Real , x = spzeros (size (A, 2 )); maxiter:: Int = 1024 , stepsize :: Real = 1e-2 )
164+ ista (A, b, fill (λ, size (x)), x, maxiter = maxiter, stepsize = stepsize )
164165end
165166
166167function ista (A:: AbstractMatrix , b:: AbstractVector , w:: AbstractVector ,
167168 x:: AbstractVector = spzeros (size (A, 2 ));
168- maxiter:: Int = 128 )
169+ maxiter:: Int = 1024 , stepsize :: Real = 1e-2 )
169170 x = sparse (x)
170171 r (x) = b- A* x # residual
171172 f (x) = sum (abs2, r (x)) + l1 (x, w)
172173 g (x) = A' r (x) # negative gradient
173- α = . 01 # step-size
174+ α = stepsize
174175 fx = f (x)
175- for i in 1 : 1024
176+ for i in 1 : maxiter
176177 ∇ = g (x)
177178 @. x = shrinkage (x + 2 α* ∇, w* α)
178179 dropzeros! (x) # optimize sparse representation
@@ -183,14 +184,14 @@ end
183184
184185function fista (A:: AbstractMatrix , b:: AbstractVector , w:: AbstractVector ,
185186 x:: AbstractVector = spzeros (size (A, 2 ));
186- maxiter:: Int = 128 )
187+ maxiter:: Int = 1024 , stepsize :: Real = 1e-2 )
187188 x = sparse (x)
188189 r (x) = b- A* x # residual
189190 f (x) = sum (abs2, r (x)) + l1 (x, w)
190191 g (x) = A' r (x) # negative gradient
191- α = . 1 # step-size
192+ α = stepsize
192193 tk = 1
193- for i in 1 : 16
194+ for i in 1 : maxiter
194195 ∇ = g (x)
195196 tkn = (1 + sqrt (1 + 4 tk^ 2 )) / 2
196197 y = xkn + (tk - 1 ) / tkn * (xkn - xk)
0 commit comments