Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

FFPACK Class Reference

#include <ffpack.h>

Inheritance diagram for FFPACK:

FFLAS List of all members.

Detailed Description

Set of elimination based routines for dense linear algebra with matrices over finite field.

This class only provides a set of static member functions. No instantiation is allowed.

It enlarges the set of BLAS routines of the class FFLAS, with higher level routines based on elimination.


Public Types

enum  FFPACK_LUDIVINE_TAG { FfpackLQUP = 1, FfpackSingular = 2, FfpackLSP = 3, FfpackTURBO = 4 }
enum  FFPACK_CHARPOLY_TAG {
  FfpackLUK = 1, FfpackKG = 2, FfpackHybrid = 3, FfpackKGFast = 4,
  FfpackHybrid2 = 5
}
enum  FFPACK_MINPOLY_TAG { FfpackDense = 1, FfpackKGF = 2 }

Static Public Methods

template<class Field> size_t Rank (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
template<class Field> bool IsSingular (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
template<class Field> Field::Element Det (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
template<class Field> Field::ElementSolve (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *x, const int incx, const typename Field::Element *b, const int incb)
template<class Field> Field::ElementInvert (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, int &nullity)
template<class Field> Field::ElementInvert2 (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, int &nullity)
template<class Field> Field::ElementLQUPtoInverseOfFullRankMinor (const Field &F, const size_t rank, typename Field::Element *A_factors, const size_t lda, const size_t *QtPointer, typename Field::Element *X, const size_t ldx)
template<class Field> size_t TURBO (const Field &F, const size_t M, const size_t N, typename Field::Element *NW, const size_t ld1, typename Field::Element *NE, const size_t ld2, typename Field::Element *SW, const size_t ld3, typename Field::Element *SE, const size_t ld4)
template<class Field> size_t LUdivine (const Field &F, const enum FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, const enum FFPACK_LUDIVINE_TAG LuTag=FfpackLQUP, size_t *rowP=NULL)
template<class Field> void applyP (const Field &F, const enum FFLAS_SIDE Side, const enum FFLAS_TRANSPOSE Trans, const size_t M, const int ibeg, const int iend, typename Field::Element *A, const size_t lda, const size_t *P)
template<class Field, class Polynomial> std::list< Polynomial > & CharPoly (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, const enum FFPACK_CHARPOLY_TAG CharpTag=FfpackHybrid)
template<class Field, class Polynomial> PolynomialMinPoly (const Field &F, Polynomial &minP, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, size_t *P, const enum FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field> void solveLB (const Field &F, const enum FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, typename Field::Element *L, const size_t ldl, const size_t *Q, typename Field::Element *B, const size_t ldb)
template<class Field> void solveLB2 (const Field &F, const enum FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, typename Field::Element *L, const size_t ldl, const size_t *Q, typename Field::Element *B, const size_t ldb)
template<class Field> void trinv_left (const Field &F, const size_t N, const typename Field::Element *L, const size_t ldl, typename Field::Element *X, const size_t ldx)

Static Protected Methods

template<class Field> void invL (const Field &F, const size_t N, const typename Field::Element *L, const size_t ldl, typename Field::Element *X, const size_t ldx)
template<class Field> size_t newD (const Field &F, size_t *d, bool &KeepOn, const size_t l, const size_t N, typename Field::Element *X, const size_t *Q, std::vector< std::vector< typename Field::Element > > &minpt)
template<class Field> size_t updateD (const Field &F, size_t *d, size_t k, std::vector< std::vector< typename Field::Element > > &minpt)
template<class Field> void TriangleCopy (const Field &F, const enum FFLAS_UPLO Side, const enum FFLAS_DIAG Diag, const size_t R, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopy (const Field &F, const size_t M, const size_t N, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopy2 (const Field &F, const size_t M, const size_t N, const long dist2pivot, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> void RectangleCopyTURBO (const Field &F, const size_t M, const size_t N, const size_t dist2pivot, const size_t rank, typename Field::Element *T, const size_t ldt, const typename Field::Element *A, const size_t lda)
template<class Field> size_t LUdivine_construct (const Field &F, const enum FFLAS_DIAG Diag, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, typename Field::Element *u, size_t *P, bool computeX, const enum FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field, class Polynomial> std::list< Polynomial > & KellerGehrig (const Field &F, std::list< Polynomial > &charp, const size_t N, const typename Field::Element *A, const size_t lda)
template<class Field, class Polynomial> int KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, size_t *kg_mc, size_t *kg_mc, size_t *kg_j)
template<class Field> void fgemv_kgf (const Field &F, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *X, const size_t incX, typename Field::Element *Y, const size_t incY, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
template<class Field, class Polynomial> std::list< Polynomial > & LUKrylov (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *U, const size_t ldu, const enum FFPACK_CHARPOLY_TAG CharpTag)
template<class Field, class Polynomial> std::list< Polynomial > & LUKrylov_KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx)


Member Enumeration Documentation

enum FFPACK_CHARPOLY_TAG
 

Enumeration values:
FfpackLUK 
FfpackKG 
FfpackHybrid 
FfpackKGFast 
FfpackHybrid2 

enum FFPACK_LUDIVINE_TAG
 

Enumeration values:
FfpackLQUP 
FfpackSingular 
FfpackLSP 
FfpackTURBO 

enum FFPACK_MINPOLY_TAG
 

Enumeration values:
FfpackDense 
FfpackKGF 


Member Function Documentation

void applyP const Field   F,
const enum FFLAS_SIDE    Side,
const enum FFLAS_TRANSPOSE    Trans,
const size_t    M,
const int    ibeg,
const int    iend,
typename Field::Element   A,
const size_t    lda,
const size_t *    P
[inline, static]
 

std::list< Polynomial > & CharPoly const Field   F,
std::list< Polynomial > &    charp,
const size_t    N,
typename Field::Element   A,
const size_t    lda,
const enum FFPACK_CHARPOLY_TAG    CharpTag = FfpackHybrid
[static]
 

Field::Element Det const Field   F,
const size_t    M,
const size_t    N,
typename Field::Element   A,
const size_t    lda
[inline, static]
 

void fgemv_kgf const Field   F,
const size_t    N,
const typename Field::Element   A,
const size_t    lda,
const typename Field::Element   X,
const size_t    incX,
typename Field::Element   Y,
const size_t    incY,
const size_t    kg_mc,
const size_t    kg_mb,
const size_t    kg_j
[static, protected]
 

Field::Element* Invert const Field   F,
const size_t    M,
typename Field::Element   A,
const size_t    lda,
typename Field::Element   X,
const size_t    ldx,
int &    nullity
[inline, static]
 

Field::Element* Invert2 const Field   F,
const size_t    M,
typename Field::Element   A,
const size_t    lda,
typename Field::Element   X,
const size_t    ldx,
int &    nullity
[inline, static]
 

void invL const Field   F,
const size_t    N,
const typename Field::Element   L,
const size_t    ldl,
typename Field::Element   X,
const size_t    ldx
[inline, static, protected]
 

bool IsSingular const Field   F,
const size_t    M,
const size_t    N,
typename Field::Element   A,
const size_t    lda
[inline, static]
 

std::list< Polynomial > & KellerGehrig const Field   F,
std::list< Polynomial > &    charp,
const size_t    N,
const typename Field::Element   A,
const size_t    lda
[static, protected]
 

int KGFast const Field   F,
std::list< Polynomial > &    charp,
const size_t    N,
typename Field::Element   A,
const size_t    lda,
size_t *    kg_mc,
size_t *    kg_mc,
size_t *    kg_j
[static, protected]
 

Field::Element* LQUPtoInverseOfFullRankMinor const Field   F,
const size_t    rank,
typename Field::Element   A_factors,
const size_t    lda,
const size_t *    QtPointer,
typename Field::Element   X,
const size_t    ldx
[inline, static]
 

LQUPtoInverseOfFullRankMinor Suppose A has been factorized as L.Q.U.P, with rank r. Then Qt.A.Pt has an invertible leading principal r x r submatrix This procedure efficiently computes the inverse of this minor and puts it into X. NOTE: It changes the lower entries of A_factors in the process (NB: unless A was nonsingular and square)

Parameters:
rank:  rank of the matrix.
A_factors:  matrix containing the L and U entries of the factorization
QtPointer:  theLQUP->getQ()->getPointer() (note: getQ returns Qt!)
X:  desired location for output

size_t LUdivine const Field   F,
const enum FFLAS_DIAG    Diag,
const size_t    M,
const size_t    N,
typename Field::Element   A,
const size_t    lda,
size_t *    P,
const enum FFPACK_LUDIVINE_TAG    LuTag = FfpackLQUP,
size_t *    rowP = NULL
[inline, static]
 

size_t LUdivine_construct const Field   F,
const enum FFLAS_DIAG    Diag,
const size_t    M,
const size_t    N,
const typename Field::Element   A,
const size_t    lda,
typename Field::Element   X,
const size_t    ldx,
typename Field::Element   u,
size_t *    P,
bool    computeX,
const enum FFPACK_MINPOLY_TAG    MinTag,
const size_t    kg_mc,
const size_t    kg_mb,
const size_t    kg_j
[static, protected]
 

std::list< Polynomial > & LUKrylov const Field   F,
std::list< Polynomial > &    charp,
const size_t    N,
typename Field::Element   A,
const size_t    lda,
typename Field::Element   U,
const size_t    ldu,
const enum FFPACK_CHARPOLY_TAG    CharpTag
[static, protected]
 

std::list< Polynomial > & LUKrylov_KGFast const Field   F,
std::list< Polynomial > &    charp,
const size_t    N,
typename Field::Element   A,
const size_t    lda,
typename Field::Element   X,
const size_t    ldx
[static, protected]
 

Polynomial & MinPoly const Field   F,
Polynomial   minP,
const size_t    N,
const typename Field::Element   A,
const size_t    lda,
typename Field::Element   X,
const size_t    ldx,
size_t *    P,
const enum FFPACK_MINPOLY_TAG    MinTag,
const size_t    kg_mc,
const size_t    kg_mb,
const size_t    kg_j
[static]
 

size_t newD const Field   F,
size_t *    d,
bool &    KeepOn,
const size_t    l,
const size_t    N,
typename Field::Element   X,
const size_t *    Q,
std::vector< std::vector< typename Field::Element > > &    minpt
[static, protected]
 

size_t Rank const Field   F,
const size_t    M,
const size_t    N,
typename Field::Element   A,
const size_t    lda
[inline, static]
 

@doc Computes the rank of the given matrix using a LQUP factorization. The input matrix is modified.

Parameters:
M  row dimension of the matrix
N  column dimension of the matrix
A  input matrix
lda  leading dimension of A

void RectangleCopy const Field   F,
const size_t    M,
const size_t    N,
typename Field::Element   T,
const size_t    ldt,
const typename Field::Element   A,
const size_t    lda
[inline, static, protected]
 

void RectangleCopy2 const Field   F,
const size_t    M,
const size_t    N,
const long    dist2pivot,
typename Field::Element   T,
const size_t    ldt,
const typename Field::Element   A,
const size_t    lda
[inline, static, protected]
 

void RectangleCopyTURBO const Field   F,
const size_t    M,
const size_t    N,
const size_t    dist2pivot,
const size_t    rank,
typename Field::Element   T,
const size_t    ldt,
const typename Field::Element   A,
const size_t    lda
[inline, static, protected]
 

Field::Element* Solve const Field   F,
const size_t    M,
typename Field::Element   A,
const size_t    lda,
typename Field::Element   x,
const int    incx,
const typename Field::Element   b,
const int    incb
[inline, static]
 

void solveLB const Field   F,
const enum FFLAS_SIDE    Side,
const size_t    M,
const size_t    N,
const size_t    R,
typename Field::Element   L,
const size_t    ldl,
const size_t *    Q,
typename Field::Element   B,
const size_t    ldb
[inline, static]
 

void solveLB2 const Field   F,
const enum FFLAS_SIDE    Side,
const size_t    M,
const size_t    N,
const size_t    R,
typename Field::Element   L,
const size_t    ldl,
const size_t *    Q,
typename Field::Element   B,
const size_t    ldb
[inline, static]
 

void TriangleCopy const Field   F,
const enum FFLAS_UPLO    Side,
const enum FFLAS_DIAG    Diag,
const size_t    R,
typename Field::Element   T,
const size_t    ldt,
const typename Field::Element   A,
const size_t    lda
[inline, static, protected]
 

void trinv_left const Field   F,
const size_t    N,
const typename Field::Element   L,
const size_t    ldl,
typename Field::Element   X,
const size_t    ldx
[inline, static]
 

size_t TURBO const Field   F,
const size_t    M,
const size_t    N,
typename Field::Element   NW,
const size_t    ld1,
typename Field::Element   NE,
const size_t    ld2,
typename Field::Element   SW,
const size_t    ld3,
typename Field::Element   SE,
const size_t    ld4
[inline, static]
 

size_t updateD const Field   F,
size_t *    d,
size_t    k,
std::vector< std::vector< typename Field::Element > > &    minpt
[static, protected]
 


Generated on Mon Jun 20 09:16:53 2005 for linbox by doxygen1.2.18