FflasFfpack
Data Structures | Namespaces | Macros | Enumerations | Functions
ffpack.h File Reference

Set of elimination based routines for dense linear algebra. More...

#include "fflas-ffpack/fflas/fflas.h"
#include <list>
#include <vector>
#include <iostream>
#include "ffpack_ludivine.inl"
#include "ffpack_minpoly.inl"
#include "ffpack_charpoly_kglu.inl"
#include "ffpack_charpoly_kgfast.inl"
#include "ffpack_charpoly_kgfastgeneralized.inl"
#include "ffpack_charpoly_danilevski.inl"
#include "ffpack_charpoly.inl"
#include "ffpack_krylovelim.inl"
#include "ffpack_frobenius.inl"
#include "ffpack_echelonforms.inl"

Data Structures

class  CharpolyFailed
 
class  callLUdivine_small< Element >
 

Namespaces

namespace  FFPACK
 Finite Field PACK Set of elimination based routines for dense linear algebra.
 
namespace  FFPACK::Protected
 

Macros

#define __FFPACK_LUDIVINE_CUTOFF   0
 
#define __FFPACK_CHARPOLY_THRESHOLD   30
 

Enumerations

enum  FFPACK_LUDIVINE_TAG { FfpackLQUP =1, FfpackSingular =2 }
 
enum  FFPACK_CHARPOLY_TAG {
  FfpackLUK =1, FfpackKG =2, FfpackHybrid =3, FfpackKGFast =4,
  FfpackDanilevski =5, FfpackArithProg =6, FfpackKGFastG =7
}
 
enum  FFPACK_MINPOLY_TAG { FfpackDense =1, FfpackKGF =2 }
 

Functions

template<class Field >
void applyP (const Field &F, const FFLAS::FFLAS_SIDE Side, const FFLAS::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)
 Apply a permutation submatrix of P (between ibeg and iend) to a matrix to (iend-ibeg) vectors of size M stored in A (as column for NoTrans and rows for Trans). More...
 
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)
 Computes the rank of the given matrix using a LQUP factorization. More...
 
template<class Field >
bool IsSingular (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda)
 Returns true if the given matrix is singular. More...
 
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)
 Returns the determinant of the given matrix. More...
 
template<class Field >
void solveLB2 (const Field &F, const FFLAS::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)
 Solve L X = B in place. More...
 
template<class Field >
void fgetrs (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, typename Field::Element *A, const size_t lda, const size_t *P, const size_t *Q, typename Field::Element *B, const size_t ldb, int *info)
 Solve the system $A X = B$ or $X A = B$. More...
 
template<class Field >
Field::Elementfgetrs (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t NRHS, const size_t R, typename Field::Element *A, const size_t lda, const size_t *P, const size_t *Q, typename Field::Element *X, const size_t ldx, const typename Field::Element *B, const size_t ldb, int *info)
 Solve the system A X = B or X A = B. More...
 
template<class Field >
size_t fgesv (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb, int *info)
 Square system solver. More...
 
template<class Field >
size_t fgesv (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t NRHS, typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, const typename Field::Element *B, const size_t ldb, int *info)
 Rectangular system solver. More...
 
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)
 Solve the system Ax=b. More...
 
template<class Field >
size_t NullSpaceBasis (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *&NS, size_t &ldn, size_t &NSdim)
 Computes a basis of the Left/Right nullspace of the matrix A. More...
 
template<class Field >
size_t RowRankProfile (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *&rkprofile)
 Computes the row rank profile of A. More...
 
template<class Field >
size_t ColumnRankProfile (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *&rkprofile)
 Computes the column rank profile of A. More...
 
template<class Field >
size_t RowRankProfileSubmatrixIndices (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *&rowindices, size_t *&colindices, size_t &R)
 RowRankProfileSubmatrixIndices. More...
 
template<class Field >
size_t ColRankProfileSubmatrixIndices (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *&rowindices, size_t *&colindices, size_t &R)
 Computes the indices of the submatrix r*r X of A whose columns correspond to the column rank profile of A. More...
 
template<class Field >
size_t RowRankProfileSubmatrix (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *&X, size_t &R)
 Compute the r*r submatrix X of A, by picking the row rank profile rows of A. More...
 
template<class Field >
size_t ColRankProfileSubmatrix (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *&X, size_t &R)
 Compute the $ r\times r$ submatrix X of A, by picking the row rank profile rows of A. More...
 
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)
 LQUPtoInverseOfFullRankMinor. More...
 
template<class Field >
size_t TURBO (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Q, const size_t cutoff)
 
template<class Field >
size_t LUdivine (const Field &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, const FFPACK_LUDIVINE_TAG LuTag=FfpackLQUP, const size_t cutoff=__FFPACK_LUDIVINE_CUTOFF)
 Compute the LQUP factorization of the given matrix. More...
 
template<class Field >
size_t LUpdate (const Field &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, const size_t R, const size_t K, typename Field::Element *B, const size_t ldb, size_t *P, size_t *Q, const FFPACK::FFPACK_LUDIVINE_TAG LuTag=FFPACK::FfpackLQUP, const size_t cutoff=__FFPACK_LUDIVINE_CUTOFF)
 LUpdate. More...
 
template<class Field >
size_t LUdivine_small (const Field &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LUDIVINE_TAG LuTag=FfpackLQUP)
 LUdivine small case. More...
 
template<class Field >
size_t LUdivine_gauss (const Field &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LUDIVINE_TAG LuTag=FfpackLQUP)
 LUdivine gauss. More...
 
template<class Field >
void ftrtri (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG Diag, const size_t N, typename Field::Element *A, const size_t lda)
 Compute the inverse of a triangular matrix. More...
 
template<class Field >
void ftrtrm (const Field &F, const FFLAS::FFLAS_DIAG diag, const size_t N, typename Field::Element *A, const size_t lda)
 Compute the product UL. More...
 
template<class Field >
size_t ColumnEchelonForm (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, bool transform=true)
 Compute the Column Echelon form of the input matrix in-place. More...
 
template<class Field >
size_t RowEchelonForm (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, const bool transform=false)
 Compute the Row Echelon form of the input matrix in-place. More...
 
template<class Field >
size_t ReducedColumnEchelonForm (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, const bool transform=true)
 Compute the Reduced Column Echelon form of the input matrix in-place. More...
 
template<class Field >
size_t ReducedRowEchelonForm (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, const bool transform=true)
 Compute the Reduced Row Echelon form of the input matrix in-place. More...
 
template<class Field >
size_t ReducedRowEchelonForm2 (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Qt, const bool transform=true)
 Variant by the block recursive algorithm. More...
 
template<class Field >
size_t REF (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, const size_t colbeg, const size_t rowbeg, const size_t colsize, size_t *Qt, size_t *P)
 REF. More...
 
template<class Field >
Field::ElementInvert (const Field &F, const size_t M, typename Field::Element *A, const size_t lda, int &nullity)
 Invert the given matrix in place or computes its nullity if it is singular. More...
 
template<class Field >
Field::ElementInvert (const Field &F, const size_t M, const typename Field::Element *A, const size_t lda, typename Field::Element *X, const size_t ldx, int &nullity)
 Invert the given matrix in place or computes its nullity if it is singular. More...
 
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)
 Invert the given matrix or computes its nullity if it is singular. More...
 
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 FFPACK_CHARPOLY_TAG CharpTag=FfpackArithProg)
 Compute the characteristic polynomial of A using Krylov Method, and LUP factorization of the Krylov matrix. More...
 
template<class Polynomial , class Field >
Polynomial & mulpoly (const Field &F, Polynomial &res, const Polynomial &P1, const Polynomial &P2)
 
template<class Field , class Polynomial >
std::list< Polynomial > & CharPoly (const Field &F, Polynomial &charp, const size_t N, typename Field::Element *A, const size_t lda, const FFPACK_CHARPOLY_TAG CharpTag=FfpackArithProg)
 
template<class Field , class Polynomial >
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 FFPACK::FFPACK_MINPOLY_TAG MinTag=FFPACK::FfpackDense, const size_t kg_mc=0, const size_t kg_mb=0, const size_t kg_j=0)
 Compute the minimal polynomial. More...
 
template<class Field >
void solveLB (const Field &F, const FFLAS::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)
 Solve L X = B or X L = B in place. More...
 
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)
 
template<class Field >
size_t KrylovElim (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, size_t *P, size_t *Q, const size_t deg, size_t *iterates, size_t *inviterates, const size_t maxit, size_t virt)
 
template<class Field >
size_t SpecRankProfile (const Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, const size_t deg, size_t *rankProfile)
 
template<class Field , class Polynomial >
std::list< Polynomial > & CharpolyArithProg (const Field &F, std::list< Polynomial > &frobeniusForm, const size_t N, typename Field::Element *A, const size_t lda, const size_t c)
 
template<class Field >
void CompressRows (Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void CompressRowsQK (Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t deg, const size_t nb_blocs)
 
template<class Field >
void DeCompressRows (Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void DeCompressRowsQK (Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t deg, const size_t nb_blocs)
 
template<class Field >
void CompressRowsQA (Field &F, const size_t M, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void DeCompressRowsQA (Field &F, const size_t M, const size_t N, typename Field::Element *A, const size_t lda, typename Field::Element *tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
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 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 FFLAS::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 FFPACK_MINPOLY_TAG MinTag=FFPACK::FfpackDense, const size_t kg_mc=0, const size_t kg_mb=0, const size_t kg_j=0)
 
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_mb, size_t *kg_j)
 
template<class Field , class Polynomial >
std::list< Polynomial > & KGFast_generalized (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda)
 
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)
 
template<class Field , class Polynomial >
std::list< Polynomial > & Danilevski (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element *A, const size_t lda)
 
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)
 

Detailed Description

Set of elimination based routines for dense linear algebra.

Matrices are supposed over finite prime field of characteristic less than 2^26.

Macro Definition Documentation

#define __FFPACK_LUDIVINE_CUTOFF   0
#define __FFPACK_CHARPOLY_THRESHOLD   30