#include <mg-block-lanczos.h>
@doc This is a blocked version of the iteration given in @Ref{LanczosSolver}. The essential difference is that, rather than applying the black box $A$ to a single vector $v$ during each iteration, the block box $A$ is applied to an $n\times N$ matrix $V$ or, equivalently, to $N$ vectors $v_1, \ldots, v_N$ Scalars in the original iteration become $N\times N$ matrices in the blocked version. The resulting iteration is a natural extension of the basic theory of the original Lanczos iteration, c.f. (Montgomery 1995). This has the advantage of more flexible parallelization, and does not break down as often when used over small fields.
Currently, only dense vectors are supported for this iteration, and it is unlikely any other vector archetypes will be supported in the future.
Public Types | |
typedef Field::Element | Element |
Public Methods | |
MGBlockLanczosSolver (const Field &F, const SolverTraits< BlockLanczosTraits > &traits) | |
MGBlockLanczosSolver (const Field &F, const SolverTraits< BlockLanczosTraits > &traits, typename Field::RandIter r) | |
template<class Blackbox, class Vector> bool | solve (const Blackbox &A, Vector &x, const Vector &b) |
template<class Blackbox, class Matrix1> unsigned int | sampleNullspace (const Blackbox &A, Matrix1 &x) |
bool | runSelfCheck () const |
Protected Methods | |
template<class Matrix1> bool | isAlmostIdentity (const Matrix1 &M) const |
bool | test_compute_Winv_S_mul (int n) const |
bool | test_compute_Winv_S_mulin (int n) const |
bool | test_mul_SST (int n) const |
bool | test_mul_ABSST (int n) const |
bool | test_mulTranspose (int m, int n) const |
bool | test_mulTranspose_ABSST (int n) const |
bool | test_mulin_ABSST (int n) const |
bool | test_addin_ABSST (int n) const |
|
|
|
Constructor
|
|
Constructor with a random iterator
|
|
|
|
|
|
Sample uniformly from the (right) nullspace of A
|
|
Solve the linear system Ax = b. If the system is nonsingular, this method computes the unique solution to the system Ax = b. If the system is singular, it computes a random solution. If the matrix A is nonsymmetric, this method preconditions the matrix A with the preconditioner D_1 A^T D_2 A D_1, where D_1 and D_2 are random nonsingular diagonal matrices. If the matrix A is symmetric, this method preconditions the system with A D, where D is a random diagonal matrix.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|