| 219 |
219 |
| 220 // Update step length parameters |
220 // Update step length parameters |
| 221 let ω = pdpsconfig.acceleration.accelerate(&mut τ, &mut σ, γ); |
221 let ω = pdpsconfig.acceleration.accelerate(&mut τ, &mut σ, γ); |
| 222 |
222 |
| 223 // Do dual update |
223 // Do dual update |
| 224 // y = y_prev + τb |
224 // y = y_prev - σb |
| 225 y.axpy(τ, b, 1.0); |
225 y.axpy(-σ, b, 1.0); |
| 226 // y = y_prev - τ(A[(1+ω)μ^{k+1}]-b) |
226 // y = y_prev + σ(A[(1+ω)μ^{k+1}]-b) |
| 227 opA.gemv(&mut y, -τ * (1.0 + ω), &μ, 1.0); |
227 opA.gemv(&mut y, σ * (1.0 + ω), &μ, 1.0); |
| 228 // y = y_prev - τ(A[(1+ω)μ^{k+1} - ω μ^k]-b) |
228 // y = y_prev + σ(A[(1+ω)μ^{k+1} - ω μ^k]-b) |
| 229 opA.gemv(&mut y, τ * ω, &μ_base, 1.0); |
229 opA.gemv(&mut y, -σ * ω, &μ_base, 1.0); |
| 230 y = phistar.prox(τ, y); |
230 y = phistar.prox(σ, y); |
| 231 |
231 |
| 232 // Give statistics if requested |
232 // Give statistics if requested |
| 233 let iter = state.iteration(); |
233 let iter = state.iteration(); |
| 234 stats.this_iters += 1; |
234 stats.this_iters += 1; |
| 235 |
235 |