FflasFfpack
|
Finite Field PACK Set of elimination based routines for dense linear algebra. More...
Namespaces | |
Protected | |
Data Structures | |
class | callLUdivine_small |
class | callLUdivine_small< double > |
class | callLUdivine_small< float > |
class | CharpolyFailed |
class | Failure |
A precondtion failed. More... | |
struct | rns_double |
struct | rns_double_elt |
struct | rns_double_elt_cstptr |
struct | rns_double_elt_ptr |
struct | rns_double_extended |
class | RNSInteger |
class | RNSIntegerMod |
Enumerations |
Functions | |
void | LAPACKPerm2MathPerm (size_t *MathP, const size_t *LapackP, const size_t N) |
Conversion of a permutation from LAPACK format to Math format. More... | |
void | MathPerm2LAPACKPerm (size_t *LapackP, const size_t *MathP, const size_t N) |
Conversion of a permutation from Maths format to LAPACK format. More... | |
template<class Field > | |
void | MatrixApplyS (const Field &F, typename Field::Element_ptr A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class Element > | |
void | PermApplyS (Element *A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class Field > | |
void | MatrixApplyT (const Field &F, typename Field::Element_ptr A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class Element > | |
void | PermApplyT (Element *A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
void | composePermutationsP (size_t *MathP, const size_t *P1, const size_t *P2, const size_t R, const size_t N) |
Computes P1 [ I_R ] stored in MathPermutation format [ P_2 ]. More... | |
void | composePermutationsQ (size_t *MathP, const size_t *Q1, const size_t *Q2, const size_t R, const size_t N) |
void | cyclic_shift_mathPerm (size_t *P, const size_t s) |
template<typename Base_t > | |
void | cyclic_shift_row_col (Base_t *A, size_t m, size_t n, size_t lda) |
template<class Field > | |
void | cyclic_shift_row (const Field &F, typename Field::Element_ptr A, size_t m, size_t n, size_t lda) |
template<class Field > | |
void | cyclic_shift_col (const Field &F, typename Field::Element_ptr A, size_t m, size_t n, size_t lda) |
template<class Field > | |
void | applyP (const Field &F, const FFLAS::FFLAS_SIDE Side, const FFLAS::FFLAS_TRANSPOSE Trans, const size_t M, const size_t ibeg, const size_t iend, typename Field::Element_ptr 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 > | |
void | papplyP (const Field &F, const FFLAS::FFLAS_SIDE Side, const FFLAS::FFLAS_TRANSPOSE Trans, const size_t m, const size_t ibeg, const size_t iend, typename Field::Element_ptr A, const size_t lda, const size_t *P) |
Parallel applyP with OPENMP tasks. More... | |
template<class Field > | |
void | pMatrixApplyT (const Field &F, typename Field::Element_ptr A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
Parallel applyT with OPENMP tasks. More... | |
template<class Field > | |
void | pMatrixApplyS (const Field &F, typename Field::Element_ptr A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
Parallel applyS tasks with OPENMP tasks. More... | |
template<class Field > | |
size_t | pPLUQ (const Field &Fi, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, size_t *P, size_t *Q, int nt) |
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_ptr A, const size_t lda, const size_t *P, const size_t *Q, typename Field::Element_ptr B, const size_t ldb, int *info) |
Solve the system ![]() ![]() | |
template<class Field > | |
Field::Element_ptr | fgetrs (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_ptr A, const size_t lda, const size_t *P, const size_t *Q, typename Field::Element_ptr X, const size_t ldx, typename Field::ConstElement_ptr 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_ptr A, const size_t lda, typename Field::Element_ptr 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_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx, typename Field::ConstElement_ptr B, const size_t ldb, int *info) |
Rectangular system solver. 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_ptr A, const size_t lda) |
Compute the inverse of a triangular matrix. More... | |
template<class Field > | |
void | trinv_left (const Field &F, const size_t N, typename Field::ConstElement_ptr L, const size_t ldl, typename Field::Element_ptr X, const size_t ldx) |
template<class Field > | |
void | ftrtrm (const Field &F, const FFLAS::FFLAS_DIAG diag, const size_t N, typename Field::Element_ptr A, const size_t lda) |
Compute the product UL. More... | |
template<class Field > | |
size_t | PLUQ (const Field &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, size_t *P, size_t *Q) |
Compute the PLUQ factorization of the given matrix. More... | |
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_ptr A, const size_t lda, size_t *P, size_t *Qt, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive, const size_t cutoff=__FFPACK_LUDIVINE_CUTOFF) |
Compute the CUP factorization of the given matrix. 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_ptr A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
LUdivine gauss. More... | |
template<class Field > | |
size_t | ColumnEchelonForm (const Field &F, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, size_t *P, size_t *Qt, bool transform=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr A, const size_t lda, size_t *P, size_t *Qt, const bool transform=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr A, const size_t lda, size_t *P, size_t *Qt, const bool transform=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr A, const size_t lda, size_t *P, size_t *Qt, const bool transform=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr 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_ptr 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::Element_ptr | Invert (const Field &F, const size_t M, typename Field::Element_ptr 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::Element_ptr | Invert (const Field &F, const size_t M, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr 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::Element_ptr | Invert2 (const Field &F, const size_t M, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr 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_ptr 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 > | |
Polynomial & | CharPoly (const Field &F, Polynomial &charp, const size_t N, typename Field::Element_ptr A, const size_t lda, const FFPACK_CHARPOLY_TAG CharpTag=FfpackArithProg) |
template<class Field , class Polynomial > | |
std::list< Polynomial > & | CharpolyArithProg (const Field &F, std::list< Polynomial > &frobeniusForm, const size_t N, typename Field::Element_ptr A, const size_t lda, const size_t c) |
template<class Field , class Polynomial > | |
Polynomial & | MinPoly (const Field &F, Polynomial &minP, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx, size_t *P, 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) |
Compute the minimal polynomial. More... | |
template<class Field > | |
size_t | KrylovElim (const Field &F, const size_t M, const size_t N, typename Field::Element_ptr 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_ptr A, const size_t lda, const size_t deg, size_t *rankProfile) |
template<class Field > | |
size_t | Rank (const Field &F, const size_t M, const size_t N, typename Field::Element_ptr 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_ptr 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_ptr A, const size_t lda) |
Returns the determinant of the given matrix. More... | |
template<class Field > | |
Field::Element_ptr | Solve (const Field &F, const size_t M, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr x, const int incx, typename Field::ConstElement_ptr b, const int incb) |
Solve linear system using LQUP factorization. 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_ptr L, const size_t ldl, const size_t *Q, typename Field::Element_ptr B, const size_t ldb) |
Solve L X = B or X L = B in place. 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_ptr L, const size_t ldl, const size_t *Q, typename Field::Element_ptr B, const size_t ldb) |
Solve L X = B in place. More... | |
template<class Field > | |
void | RandomNullSpaceVector (const Field &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t incX) |
Computes a vector of the Left/Right nullspace of the matrix A. 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_ptr A, const size_t lda, typename Field::Element_ptr &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_ptr A, const size_t lda, size_t *&rkprofile, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
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_ptr A, const size_t lda, size_t *&rkprofile, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Computes the column rank profile of A. More... | |
void | RankProfileFromLU (const size_t *P, const size_t N, const size_t R, size_t *rkprofile, const FFPACK_LU_TAG LuTag) |
Recovers the column/row rank profile from the permutation of an LU decomposition. More... | |
size_t | LeadingSubmatrixRankProfiles (const size_t M, const size_t N, const size_t R, const size_t LSm, const size_t LSn, const size_t *P, const size_t *Q, size_t *RRP, size_t *CRP) |
Recovers the row and column rank profiles of any leading submatrix from the PLUQ decomposition. More... | |
template<class Field > | |
size_t | RowRankProfileSubmatrixIndices (const Field &F, const size_t M, const size_t N, typename Field::Element_ptr 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_ptr 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_ptr A, const size_t lda, typename Field::Element_ptr &X, size_t &R) |
Computes 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_ptr A, const size_t lda, typename Field::Element_ptr &X, size_t &R) |
Compute the ![]() | |
template<class Field > | |
void | getTriangular (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr T, const size_t ldt, const bool OnlyNonZeroVectors=false) |
Extracts a triangular matrix from a compact storage A=L of rank R. More... | |
template<class Field > | |
void | getTriangular (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, typename Field::Element_ptr A, const size_t lda) |
Cleans up a compact storage A=L to reveal a triangular matrix of rank R. More... | |
template<class Field > | |
void | getEchelonForm (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr T, const size_t ldt, const bool OnlyNonZeroVectors=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Extracts a matrix in echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm. More... | |
template<class Field > | |
void | getEchelonForm (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, typename Field::Element_ptr A, const size_t lda, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Cleans up a compact storage A=L obtained by RowEchelonForm or ColumnEchelonForm to reveal an echelon form of rank R. More... | |
template<class Field > | |
void | getEchelonTransform (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, const size_t *Q, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr T, const size_t ldt, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Extracts a transformation matrix to echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm. More... | |
template<class Field > | |
void | getReducedEchelonForm (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr T, const size_t ldt, const bool OnlyNonZeroVectors=false, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Extracts a matrix in echelon form from a compact storage A=L of rank R obtained by ReducedRowEchelonForm or ReducedColumnEchelonForm with transform = true. More... | |
template<class Field > | |
void | getReducedEchelonForm (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, typename Field::Element_ptr A, const size_t lda, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Cleans up a compact storage A=L of rank R obtained by ReducedRowEchelonForm or ReducedColumnEchelonForm with transform = true. More... | |
template<class Field > | |
void | getReducedEchelonTransform (const Field &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, const size_t *Q, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr T, const size_t ldt, const FFPACK_LU_TAG LuTag=FfpackSlabRecursive) |
Extracts a transformation matrix to echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm. More... | |
void | PLUQtoEchelonPermutation (const size_t N, const size_t R, const size_t *P, size_t *outPerm) |
Auxiliary routine: determines the permutation that changes a PLUQ decomposition into a echelon form revealing PLUQ decomposition. More... | |
template<class Field > | |
Field::Element_ptr | LQUPtoInverseOfFullRankMinor (const Field &F, const size_t rank, typename Field::Element_ptr A_factors, const size_t lda, const size_t *QtPointer, typename Field::Element_ptr X, const size_t ldx) |
LQUPtoInverseOfFullRankMinor. More... | |
template<class Field , class Polynomial > | |
std::list< Polynomial > & | Danilevski (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda) |
template<class Field > | |
Field::Element_ptr | buildMatrix (const Field &F, typename Field::ConstElement_ptr E, typename Field::ConstElement_ptr C, const size_t lda, const size_t *B, const size_t *T, const size_t me, const size_t mc, const size_t lambda, const size_t mu) |
template<> | |
size_t | LUdivine (const Givaro::Modular< Givaro::Integer > &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, typename Givaro::Integer *A, const size_t lda, size_t *P, size_t *Q, const FFPACK::FFPACK_LU_TAG LuTag, const size_t cutoff) |
template<class Field , class Polynomial > | |
Polynomial & | MinPoly (const Field &F, Polynomial &minP, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr U, size_t ldu, typename Field::Element_ptr X, size_t ldx, size_t *P) |
template<class Field > | |
void | doApplyS (const Field &F, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class T > | |
void | PermApplyS (T *A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class Field > | |
void | doApplyT (const Field &F, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class T > | |
void | PermApplyT (T *A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template<class Field > | |
void | cyclic_shift_row_col (const Field &F, typename Field::Element_ptr A, size_t m, size_t n, size_t lda) |
template<typename T > | |
void | cyclic_shift_row (const RNSIntegerMod< T > &F, typename T::Element_ptr A, size_t m, size_t n, size_t lda) |
template<typename T > | |
void | cyclic_shift_col (const RNSIntegerMod< T > &F, typename T::Element_ptr A, size_t m, size_t n, size_t lda) |
template<class Field > | |
size_t | PLUQ_basecaseV3 (const Field &Fi, 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) |
template<class Field > | |
size_t | PLUQ_basecaseV2 (const Field &Fi, 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) |
template<class Field > | |
size_t | PLUQ_basecaseCrout (const Field &Fi, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, size_t *P, size_t *Q) |
template<> | |
size_t | PLUQ (const Givaro::Modular< Givaro::Integer > &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Givaro::Integer *A, const size_t lda, size_t *P, size_t *Q) |
template<class Field > | |
void | threads_fgemm (const size_t m, const size_t n, const size_t r, int nbthreads, size_t *W1, size_t *W2, size_t *W3, size_t gamma) |
template<class Field > | |
void | threads_ftrsm (const size_t m, const size_t n, int nbthreads, size_t *t1, size_t *t2) |
template<> | |
rns_double_elt_ptr | fflas_const_cast (rns_double_elt_cstptr x) |
template<> | |
rns_double_elt_cstptr | fflas_const_cast (rns_double_elt_ptr x) |
template<> | |
size_t | ColumnEchelonForm (const Givaro::FFLAS_FIELD< FFLAS_TYPE > &F, const size_t M, const size_t N, FFLAS_TYPE *A, const size_t lda, size_t *P, size_t *Qt, bool transform, const FFPACK::FFPACK_LU_TAG LuTag) |
template<> | |
size_t | RowEchelonForm (const Givaro::FFLAS_FIELD< FFLAS_TYPE > &F, const size_t M, const size_t N, FFLAS_TYPE *A, const size_t lda, size_t *P, size_t *Qt, bool transform, const FFPACK::FFPACK_LU_TAG LuTag) |
template<> | |
size_t | ReducedColumnEchelonForm (const Givaro::FFLAS_FIELD< FFLAS_TYPE > &F, const size_t M, const size_t N, FFLAS_TYPE *A, const size_t lda, size_t *P, size_t *Qt, bool transform, const FFPACK::FFPACK_LU_TAG LuTag) |
template<> | |
size_t | ReducedRowEchelonForm (const Givaro::FFLAS_FIELD< FFLAS_TYPE > &F, const size_t M, const size_t N, FFLAS_TYPE *A, const size_t lda, size_t *P, size_t *Qt, bool transform, const FFPACK::FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | MatrixApplyS (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template INST_OR_DECL void | MatrixApplyT (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template INST_OR_DECL void | cyclic_shift_row (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, size_t m, size_t n, size_t lda) |
template INST_OR_DECL void | cyclic_shift_col (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, size_t m, size_t n, size_t lda) |
template INST_OR_DECL void | applyP (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const FFLAS::FFLAS_TRANSPOSE Trans, const size_t M, const size_t ibeg, const size_t iend, FFLAS_ELT *A, const size_t lda, const size_t *P) |
template INST_OR_DECL void | papplyP (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const FFLAS::FFLAS_TRANSPOSE Trans, const size_t m, const size_t ibeg, const size_t iend, FFLAS_ELT *A, const size_t lda, const size_t *P) |
template INST_OR_DECL void | pMatrixApplyT (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, const size_t lda, const size_t width, const size_t N2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template INST_OR_DECL void | pMatrixApplyS (const FFLAS_FIELD< FFLAS_ELT > &F, FFLAS_ELT *A, const size_t lda, const size_t width, const size_t M2, const size_t R1, const size_t R2, const size_t R3, const size_t R4) |
template INST_OR_DECL size_t | pPLUQ (const FFLAS_FIELD< FFLAS_ELT > &Fi, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Q, int nt) |
template INST_OR_DECL void | fgetrs (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, FFLAS_ELT *A, const size_t lda, const size_t *P, const size_t *Q, FFLAS_ELT *B, const size_t ldb, int *info) |
template INST_OR_DECL FFLAS_ELT * | fgetrs (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t NRHS, const size_t R, FFLAS_ELT *A, const size_t lda, const size_t *P, const size_t *Q, FFLAS_ELT *X, const size_t ldx, const FFLAS_ELT *B, const size_t ldb, int *info) |
template INST_OR_DECL size_t | fgesv (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *B, const size_t ldb, int *info) |
template INST_OR_DECL size_t | fgesv (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t NRHS, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *X, const size_t ldx, const FFLAS_ELT *B, const size_t ldb, int *info) |
template INST_OR_DECL void | ftrtri (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG Diag, const size_t N, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL void | trinv_left (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t N, const FFLAS_ELT *L, const size_t ldl, FFLAS_ELT *X, const size_t ldx) |
template INST_OR_DECL void | ftrtrm (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_DIAG diag, const size_t N, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL size_t | PLUQ (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Q) |
template INST_OR_DECL size_t | LUdivine (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Qt, const FFPACK_LU_TAG LuTag, const size_t cutoff) |
template INST_OR_DECL size_t | LUdivine_small (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_DIAG Diag, const FFLAS::FFLAS_TRANSPOSE trans, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | LUdivine_gauss (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Q, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | RowEchelonForm (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Qt, const bool transform, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | ReducedRowEchelonForm (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Qt, const bool transform, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | ColumnEchelonForm (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Qt, const bool transform, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | ReducedColumnEchelonForm (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *P, size_t *Qt, const bool transform, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL FFLAS_ELT * | Invert (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, FFLAS_ELT *A, const size_t lda, int &nullity) |
template INST_OR_DECL FFLAS_ELT * | Invert (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *X, const size_t ldx, int &nullity) |
template INST_OR_DECL FFLAS_ELT * | Invert2 (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *X, const size_t ldx, int &nullity) |
template INST_OR_DECL std::list< std::vector< FFLAS_ELT > > & | CharPoly (const FFLAS_FIELD< FFLAS_ELT > &F, std::list< std::vector< FFLAS_ELT > > &charp, const size_t N, FFLAS_ELT *A, const size_t lda, const FFPACK_CHARPOLY_TAG CharpTag) |
template INST_OR_DECL std::vector< FFLAS_ELT > & | mulpoly (const FFLAS_FIELD< FFLAS_ELT > &F, std::vector< FFLAS_ELT > &res, const std::vector< FFLAS_ELT > &P1, const std::vector< FFLAS_ELT > &P2) |
template INST_OR_DECL std::vector< FFLAS_ELT > & | CharPoly (const FFLAS_FIELD< FFLAS_ELT > &F, std::vector< FFLAS_ELT > &charp, const size_t N, FFLAS_ELT *A, const size_t lda, const FFPACK_CHARPOLY_TAG CharpTag) |
template INST_OR_DECL std::list< std::vector< FFLAS_ELT > > & | CharpolyArithProg (const FFLAS_FIELD< FFLAS_ELT > &F, std::list< std::vector< FFLAS_ELT >> &frobeniusForm, const size_t N, FFLAS_ELT *A, const size_t lda, const size_t c) |
template INST_OR_DECL std::vector< FFLAS_ELT > & | MinPoly (const FFLAS_FIELD< FFLAS_ELT > &F, std::vector< FFLAS_ELT > &minP, const size_t N, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *X, const size_t ldx, size_t *P, const FFPACK::FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j) |
template INST_OR_DECL size_t | KrylovElim (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *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 INST_OR_DECL size_t | SpecRankProfile (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, const size_t deg, size_t *rankProfile) |
template INST_OR_DECL size_t | Rank (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL bool | IsSingular (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL FFLAS_ELT | Det (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL FFLAS_ELT * | Solve (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *x, const int incx, const FFLAS_ELT *b, const int incb) |
template INST_OR_DECL void | solveLB (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, FFLAS_ELT *L, const size_t ldl, const size_t *Q, FFLAS_ELT *B, const size_t ldb) |
template INST_OR_DECL void | solveLB2 (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, const size_t R, FFLAS_ELT *L, const size_t ldl, const size_t *Q, FFLAS_ELT *B, const size_t ldb) |
template INST_OR_DECL void | RandomNullSpaceVector (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *X, const size_t incX) |
template INST_OR_DECL size_t | NullSpaceBasis (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_SIDE Side, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *&NS, size_t &ldn, size_t &NSdim) |
template INST_OR_DECL size_t | RowRankProfile (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *&rkprofile, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | ColumnRankProfile (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *&rkprofile, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL size_t | RowRankProfileSubmatrixIndices (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *&rowindices, size_t *&colindices, size_t &R) |
template INST_OR_DECL size_t | ColRankProfileSubmatrixIndices (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, size_t *&rowindices, size_t *&colindices, size_t &R) |
template INST_OR_DECL size_t | RowRankProfileSubmatrix (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *&X, size_t &R) |
template INST_OR_DECL size_t | ColRankProfileSubmatrix (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t M, const size_t N, FFLAS_ELT *A, const size_t lda, FFLAS_ELT *&X, size_t &R) |
template INST_OR_DECL void | getTriangular< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *T, const size_t ldt, const bool OnlyNonZeroVectors) |
template INST_OR_DECL void | getTriangular< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, FFLAS_ELT *A, const size_t lda) |
template INST_OR_DECL void | getEchelonForm< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *T, const size_t ldt, const bool OnlyNonZeroVectors, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | getEchelonForm< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, FFLAS_ELT *A, const size_t lda, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | getEchelonTransform< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const FFLAS::FFLAS_DIAG diag, const size_t M, const size_t N, const size_t R, const size_t *P, const size_t *Q, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *T, const size_t ldt, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | getReducedEchelonForm< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *T, const size_t ldt, const bool OnlyNonZeroVectors, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | getReducedEchelonForm< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, FFLAS_ELT *A, const size_t lda, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL void | getReducedEchelonTransform< FFLAS_FIELD< FFLAS_ELT > > (const FFLAS_FIELD< FFLAS_ELT > &F, const FFLAS::FFLAS_UPLO Uplo, const size_t M, const size_t N, const size_t R, const size_t *P, const size_t *Q, const FFLAS_ELT *A, const size_t lda, FFLAS_ELT *T, const size_t ldt, const FFPACK_LU_TAG LuTag) |
template INST_OR_DECL FFLAS_ELT * | LQUPtoInverseOfFullRankMinor (const FFLAS_FIELD< FFLAS_ELT > &F, const size_t rank, FFLAS_ELT *A_factors, const size_t lda, const size_t *QtPointer, FFLAS_ELT *X, const size_t ldx) |
template<class T , class CT = const T> | |
T | fflas_const_cast (CT x) |
Failure & | failure () |
template<class T > | |
bool | isOdd (const T &a) |
bool | isOdd (const float &a) |
bool | isOdd (const double &a) |
template<class Field > | |
Field::Element * | RandomMatrix (const Field &F, typename Field::Element *A, size_t m, size_t n, size_t lda, size_t b=0) |
Random Matrix. More... | |
size_t | RandInt (size_t a, size_t b) |
Random integer in range. More... | |
template<class Field > | |
Field::Element_ptr | RandomMatrixWithRank (const Field &F, typename Field::Element_ptr A, size_t lda, size_t r, size_t m, size_t n) |
Random Matrix with prescribed rank. More... | |
void | RandomRankProfile (size_t N, size_t R, size_t *rkp) |
template<class Field > | |
void | RandomMatrixWithRankandRPM (const Field &F, typename Field::Element_ptr A, size_t lda, size_t R, size_t M, size_t N, const size_t *RRP, const size_t *CRP) |
template<class Field > | |
void | RandomMatrixWithRankandRandomRPM (const Field &F, typename Field::Element_ptr A, size_t lda, size_t R, size_t M, size_t N) |
Random Matrix with prescribed rank, with random rank profile matrix Creates an m x n matrix with random entries, rank r and with a rank profile matrix chosen uniformly at random. More... | |
template<class Field > | |
Field::Element * | RandomMatrixWithDet (const Field &F, typename Field::Element *A, typename Field::Element d, size_t n, size_t lda) |
Random Matrix with prescribed det. More... | |
int | RandInt (int a, int b) |
Random integer in range. More... | |
template<typename Field > | |
Givaro::Integer | maxFieldElt () |
template<> | |
Givaro::Integer | maxFieldElt< Givaro::ZRing< Givaro::Integer > > () |
template<typename Field > | |
Field * | chooseField (Givaro::Integer q, uint64_t b) |
Finite Field PACK Set of elimination based routines for dense linear algebra.
This namespace enlarges the set of BLAS routines of the class FFLAS, with higher level routines based on elimination.
enum FFPACK_LU_TAG |
enum FFPACK_CHARPOLY_TAG |
enum FFPACK_MINPOLY_TAG |
|
inline |
Conversion of a permutation from LAPACK format to Math format.
|
inline |
Conversion of a permutation from Maths format to LAPACK format.
|
inline |
void FFPACK::PermApplyS | ( | Element * | A, |
const size_t | lda, | ||
const size_t | width, | ||
const size_t | M2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
|
inline |
void FFPACK::PermApplyT | ( | Element * | A, |
const size_t | lda, | ||
const size_t | width, | ||
const size_t | N2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
|
inline |
Computes P1 [ I_R ] stored in MathPermutation format [ P_2 ].
|
inline |
|
inline |
void cyclic_shift_row_col | ( | Base_t * | A, |
size_t | m, | ||
size_t | n, | ||
size_t | lda | ||
) |
|
inline |
|
inline |
void applyP | ( | const Field & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const FFLAS::FFLAS_TRANSPOSE | Trans, | ||
const size_t | M, | ||
const size_t | ibeg, | ||
const size_t | iend, | ||
typename Field::Element_ptr | 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).
Side==FFLAS::FflasLeft for row permutation Side==FFLAS::FflasRight for a column permutation Trans==FFLAS::FflasTrans for the inverse permutation of P
F | |
Side | |
Trans | |
M | |
ibeg | |
iend | |
A | |
lda | |
P |
void papplyP | ( | const Field & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const FFLAS::FFLAS_TRANSPOSE | Trans, | ||
const size_t | m, | ||
const size_t | ibeg, | ||
const size_t | iend, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const size_t * | P | ||
) |
Parallel applyP with OPENMP tasks.
void pMatrixApplyT | ( | const Field & | F, |
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | N2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
Parallel applyT with OPENMP tasks.
void pMatrixApplyS | ( | const Field & | F, |
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | M2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
Parallel applyS tasks with OPENMP tasks.
|
inline |
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_ptr | A, | ||
const size_t | lda, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
typename Field::Element_ptr | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
Solve the system or
.
Solving using the LQUP
decomposition of A
already computed inplace with LUdivine(FFLAS::FflasNoTrans, FFLAS::FflasNonUnit)
. Version for A square. If A is rank deficient, a solution is returned if the system is consistent, Otherwise an info is 1
F | field |
Side | Determine wheter the resolution is left or right looking. |
M | row dimension of B |
N | col dimension of B |
R | rank of A |
A | input matrix |
lda | leading dimension of A |
P | column permutation of the LQUP decomposition of A |
Q | column permutation of the LQUP decomposition of A |
B | Right/Left hand side matrix. Initially stores B , finally stores the solution X . |
ldb | leading dimension of B |
info | Success of the computation: 0 if successfull, >0 if system is inconsistent |
Field::Element_ptr fgetrs | ( | 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_ptr | A, | ||
const size_t | lda, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx, | ||
typename Field::ConstElement_ptr | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
Solve the system A X = B or X A = B.
Solving using the LQUP decomposition of A already computed inplace with LUdivine(FFLAS::FflasNoTrans, FFLAS::FflasNonUnit). Version for A rectangular. If A is rank deficient, a solution is returned if the system is consistent, Otherwise an info is 1
F | field |
Side | Determine wheter the resolution is left or right looking. |
M | row dimension of A |
N | col dimension of A |
NRHS | number of columns (if Side = FFLAS::FflasLeft) or row (if Side = FFLAS::FflasRight) of the matrices X and B |
R | rank of A |
A | input matrix |
lda | leading dimension of A |
P | column permutation of the LQUP decomposition of A |
Q | column permutation of the LQUP decomposition of A |
X | solution matrix |
ldx | leading dimension of X |
B | Right/Left hand side matrix. |
ldb | leading dimension of B |
info | Succes of the computation: 0 if successfull, >0 if system is inconsistent |
size_t fgesv | ( | const Field & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
Square system solver.
F | The computation domain |
Side | Determine wheter the resolution is left or right looking |
M | row dimension of B |
N | col dimension of B |
A | input matrix |
lda | leading dimension of A |
B | Right/Left hand side matrix. Initially contains B, finally contains the solution X. |
ldb | leading dimension of B |
info | Success of the computation: 0 if successfull, >0 if system is inconsistent |
Solve the system A X = B or X A = B. Version for A square. If A is rank deficient, a solution is returned if the system is consistent, Otherwise an info is 1
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_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx, | ||
typename Field::ConstElement_ptr | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
Rectangular system solver.
F | The computation domain |
Side | Determine wheter the resolution is left or right looking |
M | row dimension of A |
N | col dimension of A |
NRHS | number of columns (if Side = FFLAS::FflasLeft) or row (if Side = FFLAS::FflasRight) of the matrices X and B |
A | input matrix |
lda | leading dimension of A |
B | Right/Left hand side matrix. Initially contains B, finally contains the solution X. |
ldb | leading dimension of B |
X | |
ldx | |
info | Success of the computation: 0 if successfull, >0 if system is inconsistent |
Solve the system A X = B or X A = B. Version for A square. If A is rank deficient, a solution is returned if the system is consistent, Otherwise an info is 1
void ftrtri | ( | const Field & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | Diag, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Compute the inverse of a triangular matrix.
F | |
Uplo | whether the matrix is upper of lower triangular |
Diag | whether the matrix if unit diagonal |
N | |
A | |
lda |
void trinv_left | ( | const Field & | F, |
const size_t | N, | ||
typename Field::ConstElement_ptr | L, | ||
const size_t | ldl, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx | ||
) |
void ftrtrm | ( | const Field & | F, |
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Compute the product UL.
Product UL of the upper, resp lower triangular matrices U and L stored one above the other in the square matrix A. Diag == Unit if the matrix U is unit diagonal
F | |
diag | |
N | |
A | |
lda |
|
inline |
Compute the PLUQ factorization of the given matrix.
Using a block algorithm and return its rank. The permutations P and Q are represented using LAPACK's convention.
F | field |
Diag | whether U should have a unit diagonal or not |
trans |
|
inline |
Compute the CUP factorization of the given matrix.
Using a block algorithm and return its rank. The permutations P and Q are represented using LAPACK's convention.
F | field |
Diag | whether U should have a unit diagonal or not |
trans | LU of ![]() |
M | matrix row dimension |
N | matrix column dimension |
A | input matrix |
lda | leading dimension of A |
P | the column permutation |
Qt | the transpose of the row permutation Q |
LuTag | flag for setting the earling termination if the matrix is singular |
cutoff | UNKOWN TAG, probably a switch to a faster algo below cutoff |
A
Rank-profile
revealing Gaussian elimination and the CUP matrix decomposition , J. of Symbolic Comp., 2013LUdivine
, une divine factorisation LU
, 2002
|
inline |
LUdivine small case.
|
inline |
LUdivine gauss.
|
inline |
Compute the Column Echelon form of the input matrix in-place.
If LuTag == FfpackTileRecursive, then after the computation A = [ M \ V ] such that AU = C is a column echelon decomposition of A, with U = P^T [ V ] and C = M + Q [ Ir ] [ 0 In-r ] [ 0 ] If LuTag == FfpackTileRecursive then A = [ N \ V ] such that the same holds with M = Q N
Qt = Q^T If transform=false, the matrix V is not computed. See also test-colechelon for an example of use
F | |
M | |
N | |
A | |
lda | |
P | the column permutation |
Qt | the row position of the pivots in the echelon form |
transform |
|
inline |
Compute the Row Echelon form of the input matrix in-place.
If LuTag == FfpackTileRecursive, then after the computation A = [ L \ M ] such that X A = R is a row echelon decomposition of A, with X = [ L 0 ] P and R = M + [Ir 0] Q^T [ In-r] If LuTag == FfpackTileRecursive then A = [ L \ N ] such that the same holds with M = N Q^T Qt = Q^T If transform=false, the matrix L is not computed. See also test-rowechelon for an example of use
F | |
M | |
N | |
A | |
lda | |
P | the row permutation |
Qt | the column position of the pivots in the echelon form |
transform |
|
inline |
Compute the Reduced Column Echelon form of the input matrix in-place.
After the computation A = [ V ] such that AX = R is a reduced col echelon [ M 0 ] decomposition of A, where X = P^T [ V ] and R = Q [ Ir ] [ 0 In-r ] [ M 0 ] Qt = Q^T If transform=false, the matrix X is not computed and the matrix A = R
F | |
M | |
N | |
A | |
lda | |
P | |
Qt | |
transform |
|
inline |
Compute the Reduced Row Echelon form of the input matrix in-place.
After the computation A = [ V1 M ] such that X A = R is a reduced row echelon [ V2 0 ] decomposition of A, where X = [ V1 0 ] P and R = [ Ir M ] Q^T [ V2 In-r ] [ 0 ] Qt = Q^T If transform=false, the matrix X is not computed and the matrix A = R
F | |
M | |
N | |
A | |
lda | |
P | |
Qt | |
transform |
|
inline |
Variant by the block recursive algorithm.
(See A. Storjohann Thesis 2000) !!!!!! Warning !!!!!! This code is NOT WORKING properly for some echelon structures. This is due to a limitation of the way we represent permutation matrices (LAPACK's standard):
|
inline |
REF.
| I | A11 | A12 | | |-—|–—|–—|-—| | |I | *| A22 | | | |0 | 0| A22 | | |-—|–—|–—|-—| | | 0 | A32 | | |-—|–—|–—|-—|
where the transformation matrix is stored at the pivot column position
Field::Element_ptr Invert | ( | const Field & | F, |
const size_t | M, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
int & | nullity | ||
) |
Invert the given matrix in place or computes its nullity if it is singular.
An inplace algorithm is used.
F | The computation domain | |
M | order of the matrix | |
[in,out] | A | input matrix ( ![]() |
lda | leading dimension of A | |
nullity | dimension of the kernel of A |
Field::Element_ptr Invert | ( | const Field & | F, |
const size_t | M, | ||
typename Field::ConstElement_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx, | ||
int & | nullity | ||
) |
Invert the given matrix in place or computes its nullity if it is singular.
X
is preallocated and should be large enough to store the A
.F | The computation domain | |
M | order of the matrix | |
[in] | A | input matrix ( ![]() |
lda | leading dimension of A | |
[out] | X | this is the inverse of A if A is invertible (non NULL and ![]() |
ldx | leading dimension of X | |
nullity | dimension of the kernel of A |
Field::Element_ptr Invert2 | ( | const Field & | F, |
const size_t | M, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx, | ||
int & | nullity | ||
) |
Invert the given matrix or computes its nullity if it is singular.
An algorithm is used. This routine can be % faster than FFPACK::Invert but is not totally inplace.
X
is preallocated and should be large enough to store the A
.F | ||
M | order of the matrix | |
[in,out] | A | input matrix ( ![]() A is modified and represents a "psycological" factorisation LU . |
lda | leading dimension of A | |
[out] | X | this is the inverse of A if A is invertible (non NULL and ![]() |
ldx | leading dimension of X | |
nullity | dimension of the kernel of A |
std::list< Polynomial > & CharPoly | ( | const Field & | F, |
std::list< Polynomial > & | charp, | ||
const size_t | N, | ||
typename Field::Element_ptr | 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.
Polynomial & mulpoly | ( | const Field & | F, |
Polynomial & | res, | ||
const Polynomial & | P1, | ||
const Polynomial & | P2 | ||
) |
Polynomial & CharPoly | ( | const Field & | F, |
Polynomial & | charp, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const FFPACK_CHARPOLY_TAG | CharpTag = FfpackArithProg |
||
) |
std::list< Polynomial > & CharpolyArithProg | ( | const Field & | F, |
std::list< Polynomial > & | frobeniusForm, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const size_t | c | ||
) |
Polynomial & MinPoly | ( | const Field & | F, |
Polynomial & | minP, | ||
const size_t | N, | ||
typename Field::ConstElement_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx, | ||
size_t * | P, | ||
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 |
||
) |
Compute the minimal polynomial.
Minpoly of (A,v) using an LUP factorization of the Krylov Base (v, Av, .., A^kv) U,X must be (n+1)*n U contains the Krylov matrix and X, its LSP factorization
|
inline |
size_t SpecRankProfile | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
const size_t | deg, | ||
size_t * | rankProfile | ||
) |
size_t Rank | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Computes the rank of the given matrix using a LQUP factorization.
The input matrix is modified.
F | field |
M | row dimension of the matrix |
N | column dimension of the matrix |
A | input matrix |
lda | leading dimension of A |
bool IsSingular | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Returns true if the given matrix is singular.
The method is a block elimination with early termination
using LQUP factorization with early termination. If M != N
, then the matrix is virtually padded with zeros to make it square and it's determinant is zero.
F | field | |
M | row dimension of the matrix | |
N | column dimension of the matrix. | |
[in,out] | A | input matrix |
lda | leading dimension of A |
Field::Element Det | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Returns the determinant of the given matrix.
The method is a block elimination with early termination using LQUP factorization with early termination. If M != N
, then the matrix is virtually padded with zeros to make it square and it's determinant is zero.
F | field | |
M | row dimension of the matrix | |
N | column dimension of the matrix. | |
[in,out] | A | input matrix |
lda | leading dimension of A |
Field::Element_ptr Solve | ( | const Field & | F, |
const size_t | M, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | x, | ||
const int | incx, | ||
typename Field::ConstElement_ptr | b, | ||
const int | incb | ||
) |
Solve linear system using LQUP factorization.
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_ptr | L, | ||
const size_t | ldl, | ||
const size_t * | Q, | ||
typename Field::Element_ptr | B, | ||
const size_t | ldb | ||
) |
Solve L X = B or X L = B in place.
L is M*M if Side == FFLAS::FflasLeft and N*N if Side == FFLAS::FflasRight, B is M*N. Only the R non trivial column of L are stored in the M*R matrix L Requirement : so that L could be expanded in-place
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_ptr | L, | ||
const size_t | ldl, | ||
const size_t * | Q, | ||
typename Field::Element_ptr | B, | ||
const size_t | ldb | ||
) |
Solve L X = B in place.
L is M*M or N*N, B is M*N. Only the R non trivial column of L are stored in the M*R matrix L
void RandomNullSpaceVector | ( | const Field & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | X, | ||
const size_t | incX | ||
) |
Computes a vector of the Left/Right nullspace of the matrix A.
F | The computation domain | |
Side | ||
M | ||
N | ||
[in,out] | A | input matrix of dimension M x N, A is modified to its LU version |
lda | ||
[out] | X | output vector |
incX |
size_t NullSpaceBasis | ( | const Field & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr & | NS, | ||
size_t & | ldn, | ||
size_t & | NSdim | ||
) |
Computes a basis of the Left/Right nullspace of the matrix A.
return the dimension of the nullspace.
F | The computation domain | |
Side | ||
M | ||
N | ||
[in,out] | A | input matrix of dimension M x N, A is modified |
lda | ||
[out] | NS | output matrix of dimension N x NSdim (allocated here) |
[out] | ldn | |
[out] | NSdim | the dimension of the Nullspace (N-rank(A)) |
|
inline |
Computes the row rank profile of A.
F | |
M | |
N | |
A | input matrix of dimension M x N |
lda | |
rkprofile | return the rank profile as an array of row indexes, of dimension r=rank(A) |
LuTag | chooses the elimination algorithm. SlabRecursive for LUdivine, TileRecursive for PLUQ |
A is modified rkprofile is allocated during the computation.
|
inline |
Computes the column rank profile of A.
F | |
M | |
N | |
A | input matrix of dimension |
lda | |
rkprofile | return the rank profile as an array of row indexes, of dimension r=rank(A) |
LuTag | chooses the elimination algorithm. SlabRecursive for LUdivine, TileRecursive for PLUQ |
A is modified rkprofile is allocated during the computation.
|
inline |
Recovers the column/row rank profile from the permutation of an LU decomposition.
Works with both the CUP/PLE decompositions (obtained by LUdivine) or the PLUQ decomposition Assumes that the output vector containing the rank profile is already allocated.
P | the permutation carrying the rank profile information |
N | the row/col dimension for a row/column rank profile |
R | the rank of the matrix ( |
rkprofile | return the rank profile as an array of indices |
LuTag | chooses the elimination algorithm. SlabRecursive for LUdivine, TileRecursive for PLUQ |
A is modified
|
inline |
Recovers the row and column rank profiles of any leading submatrix from the PLUQ decomposition.
Only works with the PLUQ decomposition Assumes that the output vectors containing the rank profiles are already allocated.
P | the permutation carrying the rank profile information |
M | the row dimension of the initial matrix |
N | the column dimension of the initial matrix |
R | the rank of the initial matrix |
LSm | the row dimension of the leading submatrix considered |
LSn | the column dimension of the leading submatrix considered |
P | the row permutation of the PLUQ decomposition |
Q | the column permutation of the PLUQ decomposition |
RRP | return the row rank profile of the leading |
LuTag | chooses the elimination algorithm. SlabRecursive for LUdivine, TileRecursive for PLUQ |
A is modified
Simultaneous
computation of the row and column rank profiles , ISSAC'13. size_t RowRankProfileSubmatrixIndices | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
size_t *& | rowindices, | ||
size_t *& | colindices, | ||
size_t & | R | ||
) |
RowRankProfileSubmatrixIndices.
Computes the indices of the submatrix r*r X of A whose rows correspond to the row rank profile of A.
F | ||
M | ||
N | ||
A | input matrix of dimension | |
rowindices | array of the row indices of X in A | |
colindices | array of the col indices of X in A | |
lda | ||
[out] | R | rowindices and colindices are allocated during the computation. A is modified |
size_t ColRankProfileSubmatrixIndices | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | 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.
F | ||
M | ||
N | ||
A | input matrix of dimension | |
rowindices | array of the row indices of X in A | |
colindices | array of the col indices of X in A | |
lda | ||
[out] | R | rowindices and colindices are allocated during the computation. |
size_t RowRankProfileSubmatrix | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr & | X, | ||
size_t & | R | ||
) |
Computes the r*r submatrix X of A, by picking the row rank profile rows of A.
F | ||
M | ||
N | ||
A | input matrix of dimension M x N | |
lda | ||
X | the output matrix | |
[out] | R | A is not modified X is allocated during the computation. |
size_t ColRankProfileSubmatrix | ( | const Field & | F, |
const size_t | M, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr & | X, | ||
size_t & | R | ||
) |
Compute the submatrix X of A, by picking the row rank profile rows of A.
F | ||
M | ||
N | ||
A | input matrix of dimension M x N | |
lda | ||
X | the output matrix | |
[out] | R | A is not modified X is allocated during the computation. |
|
inline |
Extracts a triangular matrix from a compact storage A=L of rank R.
if OnlyNonZeroVectors is false, then T and A have the same dimensions Otherwise, T is R x N if UpLo = FflasUpper, else T is M x R
F | base field |
UpLo | selects if the upper or lower triangular matrix is returned |
diag | selects if the triangular matrix unit-diagonal |
M | row dimension of T |
N | column dimension of T |
R | rank of the triangular matrix (how many rows/columns need to be copied) |
A | input matrix |
lda | leading dimension of A |
T | output matrix |
ldt | leading dimension of T |
OnlyNonZeroVectors | decides whether the last zero rows/columns should be ignored |
|
inline |
Cleans up a compact storage A=L to reveal a triangular matrix of rank R.
F | base field |
UpLo | selects if the upper or lower triangular matrix is revealed |
diag | selects if the triangular matrix unit-diagonal |
M | row dimension of A |
N | column dimension of A |
R | rank of the triangular matrix |
A | input/output matrix |
lda | leading dimension of A |
|
inline |
Extracts a matrix in echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm.
Either L or U is in Echelon form (depending on Uplo) The echelon structure is defined by the first R values of the array P. row and column dimension of T are greater or equal to that of A
F | base field |
UpLo | selects if the upper or lower triangular matrix is returned |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of T |
N | column dimension of T |
R | rank of the triangular matrix (how many rows/columns need to be copied) |
P | positions of the R pivots |
A | input matrix |
lda | leading dimension of A |
T | output matrix |
ldt | leading dimension of T |
OnlyNonZeroVectors | decides whether the last zero rows/columns should be ignored |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
|
inline |
Cleans up a compact storage A=L obtained by RowEchelonForm or ColumnEchelonForm to reveal an echelon form of rank R.
Either L or U is in Echelon form (depending on Uplo) The echelon structure is defined by the first R values of the array P.
F | base field |
UpLo | selects if the upper or lower triangular matrix is returned |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of A |
N | column dimension of A |
R | rank of the triangular matrix (how many rows/columns need to be copied) |
P | positions of the R pivots |
A | input/output matrix |
lda | leading dimension of A |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
|
inline |
Extracts a transformation matrix to echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm.
If Uplo == FflasLower: T is N x N (already allocated) such that A T = C is a transformation of A in Column echelon form Else T is M x M (already allocated) such that T A = E is a transformation of A in Row Echelon form
F | base field |
UpLo | Lower means Transformation to Column Echelon Form, Upper, to Row Echelon Form |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of A |
N | column dimension of A |
R | rank of the triangular matrix |
P | permutation matrix |
A | input matrix |
lda | leading dimension of A |
T | output matrix |
ldt | leading dimension of T |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
|
inline |
Extracts a matrix in echelon form from a compact storage A=L of rank R obtained by ReducedRowEchelonForm or ReducedColumnEchelonForm with transform = true.
Either L or U is in Echelon form (depending on Uplo) The echelon structure is defined by the first R values of the array P. row and column dimension of T are greater or equal to that of A
F | base field |
UpLo | selects if the upper or lower triangular matrix is returned |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of T |
N | column dimension of T |
R | rank of the triangular matrix (how many rows/columns need to be copied) |
P | positions of the R pivots |
A | input matrix |
lda | leading dimension of A |
ldt | leading dimension of T |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
OnlyNonZeroVectors | decides whether the last zero rows/columns should be ignored |
|
inline |
Cleans up a compact storage A=L of rank R obtained by ReducedRowEchelonForm or ReducedColumnEchelonForm with transform = true.
Either L or U is in Echelon form (depending on Uplo) The echelon structure is defined by the first R values of the array P.
F | base field |
UpLo | selects if the upper or lower triangular matrix is returned |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of A |
N | column dimension of A |
R | rank of the triangular matrix (how many rows/columns need to be copied) |
P | positions of the R pivots |
A | input/output matrix |
lda | leading dimension of A |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
|
inline |
Extracts a transformation matrix to echelon form from a compact storage A=L of rank R obtained by RowEchelonForm or ColumnEchelonForm.
If Uplo == FflasLower: T is N x N (already allocated) such that A T = C is a transformation of A in Column echelon form Else T is M x M (already allocated) such that T A = E is a transformation of A in Row Echelon form
F | base field |
UpLo | selects Col or Row Echelon Form |
diag | selects if the echelon matrix has unit pivots |
M | row dimension of A |
N | column dimension of A |
R | rank of the triangular matrix |
P | permutation matrix |
A | input matrix |
lda | leading dimension of A |
T | output matrix |
ldt | leading dimension of T |
LuTag | which factorized form (CUP/PLE if FfpackSlabRecursive, PLUQ if FfpackTileRecursive) |
|
inline |
Auxiliary routine: determines the permutation that changes a PLUQ decomposition into a echelon form revealing PLUQ decomposition.
Field::Element_ptr LQUPtoInverseOfFullRankMinor | ( | const Field & | F, |
const size_t | rank, | ||
typename Field::Element_ptr | A_factors, | ||
const size_t | lda, | ||
const size_t * | QtPointer, | ||
typename Field::Element_ptr | X, | ||
const size_t | ldx | ||
) |
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.
F | |
rank | rank of the matrix. |
A_factors | matrix containing the L and U entries of the factorization |
lda | |
QtPointer | theLQUP->getQ()->getPointer() (note: getQ returns Qt!) |
X | desired location for output |
ldx |
std::list<Polynomial>& FFPACK::Danilevski | ( | const Field & | F, |
std::list< Polynomial > & | charp, | ||
const size_t | N, | ||
typename Field::Element_ptr | A, | ||
const size_t | lda | ||
) |
Field::Element_ptr FFPACK::buildMatrix | ( | const Field & | F, |
typename Field::ConstElement_ptr | E, | ||
typename Field::ConstElement_ptr | C, | ||
const size_t | lda, | ||
const size_t * | B, | ||
const size_t * | T, | ||
const size_t | me, | ||
const size_t | mc, | ||
const size_t | lambda, | ||
const size_t | mu | ||
) |
|
inline |
Polynomial& FFPACK::MinPoly | ( | const Field & | F, |
Polynomial & | minP, | ||
const size_t | N, | ||
typename Field::ConstElement_ptr | A, | ||
const size_t | lda, | ||
typename Field::Element_ptr | U, | ||
size_t | ldu, | ||
typename Field::Element_ptr | X, | ||
size_t | ldx, | ||
size_t * | P | ||
) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void FFPACK::threads_fgemm | ( | const size_t | m, |
const size_t | n, | ||
const size_t | r, | ||
int | nbthreads, | ||
size_t * | W1, | ||
size_t * | W2, | ||
size_t * | W3, | ||
size_t | gamma | ||
) |
void FFPACK::threads_ftrsm | ( | const size_t | m, |
const size_t | n, | ||
int | nbthreads, | ||
size_t * | t1, | ||
size_t * | t2 | ||
) |
|
inline |
|
inline |
size_t FFPACK::ColumnEchelonForm | ( | const Givaro::FFLAS_FIELD< FFLAS_TYPE > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_TYPE * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
bool | transform, | ||
const FFPACK::FFPACK_LU_TAG | LuTag | ||
) |
size_t FFPACK::RowEchelonForm | ( | const Givaro::FFLAS_FIELD< FFLAS_TYPE > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_TYPE * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
bool | transform, | ||
const FFPACK::FFPACK_LU_TAG | LuTag | ||
) |
size_t FFPACK::ReducedColumnEchelonForm | ( | const Givaro::FFLAS_FIELD< FFLAS_TYPE > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_TYPE * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
bool | transform, | ||
const FFPACK::FFPACK_LU_TAG | LuTag | ||
) |
size_t FFPACK::ReducedRowEchelonForm | ( | const Givaro::FFLAS_FIELD< FFLAS_TYPE > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_TYPE * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
bool | transform, | ||
const FFPACK::FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::MatrixApplyS | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | M2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
template INST_OR_DECL void FFPACK::MatrixApplyT | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | N2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
template INST_OR_DECL void FFPACK::cyclic_shift_row | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
size_t | m, | ||
size_t | n, | ||
size_t | lda | ||
) |
template INST_OR_DECL void FFPACK::cyclic_shift_col | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
size_t | m, | ||
size_t | n, | ||
size_t | lda | ||
) |
template INST_OR_DECL void FFPACK::applyP | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const FFLAS::FFLAS_TRANSPOSE | Trans, | ||
const size_t | M, | ||
const size_t | ibeg, | ||
const size_t | iend, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t * | P | ||
) |
template INST_OR_DECL void FFPACK::papplyP | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const FFLAS::FFLAS_TRANSPOSE | Trans, | ||
const size_t | m, | ||
const size_t | ibeg, | ||
const size_t | iend, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t * | P | ||
) |
template INST_OR_DECL void FFPACK::pMatrixApplyT | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | N2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
template INST_OR_DECL void FFPACK::pMatrixApplyS | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | width, | ||
const size_t | M2, | ||
const size_t | R1, | ||
const size_t | R2, | ||
const size_t | R3, | ||
const size_t | R4 | ||
) |
template INST_OR_DECL size_t FFPACK::pPLUQ | ( | const FFLAS_FIELD< FFLAS_ELT > & | Fi, |
const FFLAS::FFLAS_DIAG | Diag, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Q, | ||
int | nt | ||
) |
template INST_OR_DECL void FFPACK::fgetrs | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
FFLAS_ELT * | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::fgetrs | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | NRHS, | ||
const size_t | R, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx, | ||
const FFLAS_ELT * | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
template INST_OR_DECL size_t FFPACK::fgesv | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
template INST_OR_DECL size_t FFPACK::fgesv | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | NRHS, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx, | ||
const FFLAS_ELT * | B, | ||
const size_t | ldb, | ||
int * | info | ||
) |
template INST_OR_DECL void FFPACK::ftrtri | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | Diag, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL void FFPACK::trinv_left | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | N, | ||
const FFLAS_ELT * | L, | ||
const size_t | ldl, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx | ||
) |
template INST_OR_DECL void FFPACK::ftrtrm | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL size_t FFPACK::PLUQ | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_DIAG | Diag, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Q | ||
) |
template INST_OR_DECL size_t FFPACK::LUdivine | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_DIAG | Diag, | ||
const FFLAS::FFLAS_TRANSPOSE | trans, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
const FFPACK_LU_TAG | LuTag, | ||
const size_t | cutoff | ||
) |
template INST_OR_DECL size_t FFPACK::LUdivine_small | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_DIAG | Diag, | ||
const FFLAS::FFLAS_TRANSPOSE | trans, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Q, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::LUdivine_gauss | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_DIAG | Diag, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Q, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::RowEchelonForm | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
const bool | transform, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::ReducedRowEchelonForm | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
const bool | transform, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::ColumnEchelonForm | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
const bool | transform, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::ReducedColumnEchelonForm | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t * | P, | ||
size_t * | Qt, | ||
const bool | transform, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::Invert | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
int & | nullity | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::Invert | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx, | ||
int & | nullity | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::Invert2 | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx, | ||
int & | nullity | ||
) |
template INST_OR_DECL std::list<std::vector<FFLAS_ELT> >& FFPACK::CharPoly | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
std::list< std::vector< FFLAS_ELT > > & | charp, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const FFPACK_CHARPOLY_TAG | CharpTag | ||
) |
template INST_OR_DECL std::vector<FFLAS_ELT>& FFPACK::mulpoly | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
std::vector< FFLAS_ELT > & | res, | ||
const std::vector< FFLAS_ELT > & | P1, | ||
const std::vector< FFLAS_ELT > & | P2 | ||
) |
template INST_OR_DECL std::vector<FFLAS_ELT>& FFPACK::CharPoly | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
std::vector< FFLAS_ELT > & | charp, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const FFPACK_CHARPOLY_TAG | CharpTag | ||
) |
template INST_OR_DECL std::list<std::vector<FFLAS_ELT> >& FFPACK::CharpolyArithProg | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
std::list< std::vector< FFLAS_ELT >> & | frobeniusForm, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | c | ||
) |
template INST_OR_DECL std::vector<FFLAS_ELT>& FFPACK::MinPoly | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
std::vector< FFLAS_ELT > & | minP, | ||
const size_t | N, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx, | ||
size_t * | P, | ||
const FFPACK::FFPACK_MINPOLY_TAG | MinTag, | ||
const size_t | kg_mc, | ||
const size_t | kg_mb, | ||
const size_t | kg_j | ||
) |
template INST_OR_DECL size_t FFPACK::KrylovElim | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | 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 INST_OR_DECL size_t FFPACK::SpecRankProfile | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const size_t | deg, | ||
size_t * | rankProfile | ||
) |
template INST_OR_DECL size_t FFPACK::Rank | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL bool FFPACK::IsSingular | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL FFLAS_ELT FFPACK::Det | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::Solve | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | x, | ||
const int | incx, | ||
const FFLAS_ELT * | b, | ||
const int | incb | ||
) |
template INST_OR_DECL void FFPACK::solveLB | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
FFLAS_ELT * | L, | ||
const size_t | ldl, | ||
const size_t * | Q, | ||
FFLAS_ELT * | B, | ||
const size_t | ldb | ||
) |
template INST_OR_DECL void FFPACK::solveLB2 | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
FFLAS_ELT * | L, | ||
const size_t | ldl, | ||
const size_t * | Q, | ||
FFLAS_ELT * | B, | ||
const size_t | ldb | ||
) |
template INST_OR_DECL void FFPACK::RandomNullSpaceVector | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | X, | ||
const size_t | incX | ||
) |
template INST_OR_DECL size_t FFPACK::NullSpaceBasis | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_SIDE | Side, | ||
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT *& | NS, | ||
size_t & | ldn, | ||
size_t & | NSdim | ||
) |
template INST_OR_DECL size_t FFPACK::RowRankProfile | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t *& | rkprofile, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::ColumnRankProfile | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t *& | rkprofile, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL size_t FFPACK::RowRankProfileSubmatrixIndices | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t *& | rowindices, | ||
size_t *& | colindices, | ||
size_t & | R | ||
) |
template INST_OR_DECL size_t FFPACK::ColRankProfileSubmatrixIndices | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
size_t *& | rowindices, | ||
size_t *& | colindices, | ||
size_t & | R | ||
) |
template INST_OR_DECL size_t FFPACK::RowRankProfileSubmatrix | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT *& | X, | ||
size_t & | R | ||
) |
template INST_OR_DECL size_t FFPACK::ColRankProfileSubmatrix | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | M, | ||
const size_t | N, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT *& | X, | ||
size_t & | R | ||
) |
template INST_OR_DECL void FFPACK::getTriangular< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | T, | ||
const size_t | ldt, | ||
const bool | OnlyNonZeroVectors | ||
) |
template INST_OR_DECL void FFPACK::getTriangular< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
FFLAS_ELT * | A, | ||
const size_t | lda | ||
) |
template INST_OR_DECL void FFPACK::getEchelonForm< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | T, | ||
const size_t | ldt, | ||
const bool | OnlyNonZeroVectors, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::getEchelonForm< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::getEchelonTransform< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const FFLAS::FFLAS_DIAG | diag, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | T, | ||
const size_t | ldt, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::getReducedEchelonForm< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | T, | ||
const size_t | ldt, | ||
const bool | OnlyNonZeroVectors, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::getReducedEchelonForm< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
FFLAS_ELT * | A, | ||
const size_t | lda, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL void FFPACK::getReducedEchelonTransform< FFLAS_FIELD< FFLAS_ELT > > | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const FFLAS::FFLAS_UPLO | Uplo, | ||
const size_t | M, | ||
const size_t | N, | ||
const size_t | R, | ||
const size_t * | P, | ||
const size_t * | Q, | ||
const FFLAS_ELT * | A, | ||
const size_t | lda, | ||
FFLAS_ELT * | T, | ||
const size_t | ldt, | ||
const FFPACK_LU_TAG | LuTag | ||
) |
template INST_OR_DECL FFLAS_ELT* FFPACK::LQUPtoInverseOfFullRankMinor | ( | const FFLAS_FIELD< FFLAS_ELT > & | F, |
const size_t | rank, | ||
FFLAS_ELT * | A_factors, | ||
const size_t | lda, | ||
const size_t * | QtPointer, | ||
FFLAS_ELT * | X, | ||
const size_t | ldx | ||
) |
T FFPACK::fflas_const_cast | ( | CT | x | ) |
|
inline |
|
inline |
|
inline |
|
inline |
Field::Element* FFPACK::RandomMatrix | ( | const Field & | F, |
typename Field::Element * | A, | ||
size_t | m, | ||
size_t | n, | ||
size_t | lda, | ||
size_t | b = 0 |
||
) |
Random Matrix.
Creates a m
x n
matrix with random entries.
F | field |
A | pointer to the matrix (preallocated to at least m x lda field elements) |
m | number of rows in A |
n | number of cols in A |
lda | leading dimension of A |
A
. size_t FFPACK::RandInt | ( | size_t | a, |
size_t | b | ||
) |
Random integer in range.
a | min bound |
b | max bound |
Field::Element_ptr FFPACK::RandomMatrixWithRank | ( | const Field & | F, |
typename Field::Element_ptr | A, | ||
size_t | lda, | ||
size_t | r, | ||
size_t | m, | ||
size_t | n | ||
) |
Random Matrix with prescribed rank.
Creates an m
x n
matrix with random entries and rank r
.
F | field |
A | pointer to the matrix (preallocated to at least m x lda field elements) |
r | rank of the matrix to build |
m | number of rows in A |
n | number of cols in A |
lda | leading dimension of A |
A
. void FFPACK::RandomRankProfile | ( | size_t | N, |
size_t | R, | ||
size_t * | rkp | ||
) |
void FFPACK::RandomMatrixWithRankandRPM | ( | const Field & | F, |
typename Field::Element_ptr | A, | ||
size_t | lda, | ||
size_t | R, | ||
size_t | M, | ||
size_t | N, | ||
const size_t * | RRP, | ||
const size_t * | CRP | ||
) |
void FFPACK::RandomMatrixWithRankandRandomRPM | ( | const Field & | F, |
typename Field::Element_ptr | A, | ||
size_t | lda, | ||
size_t | R, | ||
size_t | M, | ||
size_t | N | ||
) |
Random Matrix with prescribed rank, with random rank profile matrix Creates an m
x n
matrix with random entries, rank r
and with a rank profile matrix chosen uniformly at random.
F | field |
A | pointer to the matrix (preallocated to at least m x lda field elements) |
r | rank of the matrix to build |
m | number of rows in A |
n | number of cols in A |
lda | leading dimension of A |
A
. Field::Element* FFPACK::RandomMatrixWithDet | ( | const Field & | F, |
typename Field::Element * | A, | ||
typename Field::Element | d, | ||
size_t | n, | ||
size_t | lda | ||
) |
Random Matrix with prescribed det.
m
x n
matrix with random entries and rank r
. F | field |
A | pointer to the matrix (preallocated to at least m x lda field elements) |
r | rank of the matrix to build |
m | number of rows in A |
n | number of cols in A |
lda | leading dimension of A |
A
. int FFPACK::RandInt | ( | int | a, |
int | b | ||
) |
Random integer in range.
a | min bound |
b | max bound |
Givaro::Integer FFPACK::maxFieldElt | ( | ) |
Givaro::Integer FFPACK::maxFieldElt< Givaro::ZRing< Givaro::Integer > > | ( | ) |
Field* FFPACK::chooseField | ( | Givaro::Integer | q, |
uint64_t | b | ||
) |