Sketch-and-project ADI (SADI) methods for solving the Peaceman-Rachford problem and Sylvester matrix equations.
SADI implements sketch-and-project version of the Peaceman-Rachford (PR) method, that we call SPR, which solves in
where
At each iteration, instead of solving an entire (shifted) system we project the previous iterate on a sketched/subsampled version of the linear system to solve.
We solve
- vanilla PR method implemented in function
adi_pr - BSPR, Block Sketch-and-project PR algorithm with row block sketching, implemented in function
sap_adi_pr
in the adi_peaceman_rachford.py file. As shift parameters, this two solvers can be passed
- nothing: in this case they are set to zero, ie
$, p_j = q_j = 0$ - single values: in this case they are constant, ie
$, p_j = p,$ &$, q_j = q$ - arrays: ie
$, p_j = p[j] ,$ &$, q_j = q[j]$
Two types of efficient shift parameters are available in function: pr_shift_parameters and wachspress_shift_parameters in the adi_pr.py file.
We solve
- vanilla ADI implemented in function
adi_syl - BSADI, Block Sketch-and-project ADI with row/column block sketching, implemented in function
sap_adi_pr
in the adi_sylvester.py file.
Like for PR problem, user can pass shifts to this solvers.
Python 3 (with basic packages numpy, scipy, matplotlib)
All dependencies are in TODO: ./environment.yml
- TODO: add the arxiv link here