adelie.bcd.root#

adelie.bcd.root(*, quad: ndarray, linear: ndarray, l1: float, tol: float = 1e-12, max_iters: int = 1000, solver: str = 'newton_abs')[source]#

Solves the non-negative root of the BCD root function.

The BCD root function is given in adelie.bcd.root_function(). The non-negative root only exists when \(\|v_S\|_2 < \lambda_1 < \|v\|_2\) where \(S\) is the subset of indices such that \(\Sigma_{ii} = 0\).

Parameters:
quad(p,) ndarray

See adelie.bcd.root_function().

linear(p,) ndarray

See adelie.bcd.root_function().

l1float

See adelie.bcd.root_function().

tolfloat, optional

Convergence tolerance. Default is 1e-12.

max_itersint, optional

Max number of iterations. Default is 1000.

solverstr, optional

Solver type must be one of the following:

  • "brent": Brent method.

  • "newton": Newton method.

  • "newton_brent": Newton method combined with Brent method for initialization.

  • "newton_abs": Newton method combined with Adaptive Bisection Starts for initialization.

  • "ista": ISTA method.

  • "fista": FISTA method.

  • "fista_adares": FISTA with Adaptive Restarts method.

Default is "newton_abs".

Warning

The following methods are known to have poor convergence:

  • "brent"

  • "ista"

  • "fista"

  • "fista_adares"

Returns:
resultDict[str, Any]

A dictionary containing the output:

  • "root": the non-negative root.

  • "iters": number of iterations taken.