IndicatorSumConstraint

class odl.solvers.functional.default_functionals.IndicatorSumConstraint(*args, **kwargs)[source]

Bases: Functional

Indicator functional of a unit sum constraint.

Notes

The functional F is given by:

F(x)
=
\begin{cases}
    0 & \text{if } \sum_i x_i = 1
 \\ +\infty & \text{else.}
\end{cases}

Attributes:
adjoint

Adjoint of this operator (abstract).

convex_conj

The convex conjugate.

domain

Set of objects on which this operator can be evaluated.

grad_lipschitz

Lipschitz constant for the gradient of the functional.

gradient

Gradient operator of the functional.

inverse

Return the operator inverse.

is_functional

True if this operator's range is a Field.

is_linear

True if this operator is linear.

proximal

Return the proximal factory of the functional.

range

Set in which the result of an evaluation of this operator lies.

Methods

__call__(x[, out])

Return self(x[, out, **kwargs]).

bregman(point, subgrad)

Return the Bregman distance functional.

derivative(point)

Return the derivative operator in the given point.

norm([estimate])

Return the operator norm of this operator.

translated(shift)

Return a translation of the functional.

__init__(space, sum_value=1, sum_rtol=None)[source]

Initialize a new instance.

Parameters:
spaceDiscretizedSpace or TensorSpace

Domain of the functional.

sum_valuefloat

Desired value of the sum constraint.

sum_rtolfloat, optional

Relative tolerance for sum comparison. If set to None, the default is space.size times 1e-10 when space.dtype is float64 and 1e-6 otherwise.

Examples

Example where a point does not have unit sum ...

>>> space = odl.rn(3)
>>> ind_sum = IndicatorSumConstraint(space)
>>> x = space.one()
>>> ind_sum(x)
inf

... and one where it does.

>>> x /= x.ufuncs.sum()
>>> ind_sum(x)
0