@@ -70,7 +70,7 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
7070 callback : callable, optional
7171 Function called with the current iterate after each iteration.
7272 theta : float, optional
73- Relaxation parameter, required to fulfill ``0 <= theta <= 1 ``.
73+ Relaxation parameter, required to fulfill ``theta >= 0 ``.
7474 Default: 1
7575 gamma_primal : non-negative float, optional
7676 Acceleration parameter. If not ``None``, it overrides ``theta`` and
@@ -105,16 +105,16 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
105105
106106 where the formal conditions are that :math:`L` is an operator
107107 between Hilbert spaces :math:`X` and :math:`Y`.
108- Further, :math:`f : X \rightarrow [0 , +\infty]` and
109- :math:`g : Y \rightarrow [0 , +\infty]` are proper, convex,
108+ Further, :math:`f : X \rightarrow (-\infty , +\infty]` and
109+ :math:`g : Y \rightarrow (-\infty , +\infty]` are proper, convex,
110110 lower-semicontinuous functionals.
111111
112- Convergence is only guaranteed if :math:`L` is linear, :math:`X, Y`
113- are finite dimensional and the step lengths :math:`\sigma` and
114- :math:`\tau` satisfy
112+ Convergence is only guaranteed if :math:`L` is linear,
113+ :math:`\theta > 1/2`, and the step lengths :math:`\sigma` and :math:`\tau`
114+ satisfy
115115
116116 .. math::
117- \tau \sigma \|L\|^2 < 1
117+ \tau \sigma \|L\|^2 < \frac{4}{1 + 2 \theta}
118118
119119 where :math:`\|L\|` is the operator norm of :math:`L`.
120120
@@ -147,6 +147,9 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
147147 The non-linear case is analyzed in `[Val2014]
148148 <https://doi.org/10.1088/0266-5611/30/5/055012>`_.
149149
150+ The conditions on :math:`\tau` and :math:`sigma` are according to
151+ `[BUG2023] <https://arxiv.org/abs/2309.03998v1>`_.
152+
150153 See Also
151154 --------
152155 odl.solvers.nonsmooth.douglas_rachford.douglas_rachford_pd :
@@ -158,6 +161,11 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
158161
159162 References
160163 ----------
164+ [BUG2023] Banert, S, Upadhyaya M, and Giselsson, P.
165+ *The Chambolle--Pock method converges weakly with :math:`\theta > 1/2`
166+ and :math:`\tau \sigma \|L\|^2 < 4/(1+2\theta)`*. arXiv preprint
167+ 2309.03998v1 [math.OC] (2023).
168+
161169 [CP2011a] Chambolle, A and Pock, T. *A First-Order
162170 Primal-Dual Algorithm for Convex Problems with Applications to
163171 Imaging*. Journal of Mathematical Imaging and Vision, 40 (2011),
@@ -203,8 +211,8 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
203211 # Relaxation parameter
204212 theta = kwargs .pop ('theta' , 1 )
205213 theta , theta_in = float (theta ), theta
206- if not 0 <= theta <= 1 :
207- raise ValueError ('`theta` {} not in [0, 1] '
214+ if not theta >= 0 :
215+ raise ValueError ('`theta` must be non-negative, got {} '
208216 '' .format (theta_in ))
209217
210218 # Acceleration parameters
0 commit comments