linbox
InvariantFactors< _Field, _PolynomialRing, _MatrixDomain > Class Template Reference

#include <invariant-factors.h>

Public Types

typedef _Field Field
 
typedef Field::Element Element
 
typedef Field::RandIter RandIter
 
typedef _MatrixDomain MatrixDom
 
typedef MatrixDom::OwnMatrix Matrix
 
typedef _PolynomialRing PolynomialRing
 
typedef PolynomialRing::Element Polynomial
 
typedef MatrixDomain< PolynomialRing >::OwnMatrix PolyMatrix
 
typedef PolySmithFormDomain< PolynomialRingSmithFormDom
 

Public Member Functions

 InvariantFactors (const Field &F, const PolynomialRing &R)
 
size_t min_block_size (size_t t, double p) const
 
template<class Blackbox>
void computeGenerator (std::vector< Matrix > &gen, const Blackbox &M, size_t b) const
 
template<class Blackbox>
void computeGenerator2 (std::vector< Matrix > &gen, const Blackbox &M, size_t b) const
 
void convert (PolyMatrix &G, const std::vector< Matrix > &minpoly) const
 
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors (std::vector< Polynomial > &lifs, const Blackbox &A, size_t b, int earlyTerm=10) const
 
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors2 (std::vector< Polynomial > &lifs, const Blackbox &A, size_t b, int earlyTerm=10) const
 
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors (std::vector< Polynomial > &lifs, const Blackbox &A, const Polynomial &mod, size_t b, int earlyTerm=10) const
 
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors (std::vector< Polynomial > &lifs, const Blackbox &A, size_t t, double p, int earlyTerm=10) const
 
template<class Blackbox>
std::vector< Polynomial > & frobeniusInvariants (std::vector< Polynomial > &lifs, const Blackbox &A, size_t k) const
 lifs is the first k invariant factors of A in nonincreasing order by degree.
 
template<class Blackbox>
std::vector< Polynomial > & lifsit (std::vector< Polynomial > &lifs, const Blackbox &A, size_t b0, size_t s, size_t t, size_t k) const
 
void randomNonzero (const Field &F, Element &elm) const
 
template<class SparseMat>
void randomTriangular (SparseMat &T, size_t s, bool upper, bool randomDiag=false) const
 
template<class Blackbox>
std::vector< Polynomial > & precondLifs (std::vector< Polynomial > &lifs, const Blackbox &A, size_t b, int earlyTerm=10) const
 
template<class Blackbox>
bool det (Element &det, const Blackbox &A, size_t b=12, int earlyTerm=10) const
 
template<class Blackbox>
bool rank (size_t &rank, const Blackbox &A, size_t b=12, size_t t=3, int earlyTerm=10) const
 

Protected Attributes

Field _F
 
PolynomialRing _R
 
SmithFormDom _SFD
 

Member Typedef Documentation

◆ Field

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef _Field Field

◆ Element

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef Field::Element Element

◆ RandIter

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef Field::RandIter RandIter

◆ MatrixDom

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef _MatrixDomain MatrixDom

◆ Matrix

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef MatrixDom::OwnMatrix Matrix

◆ PolynomialRing

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef _PolynomialRing PolynomialRing

◆ Polynomial

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef PolynomialRing::Element Polynomial

◆ PolyMatrix

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef MatrixDomain<PolynomialRing>::OwnMatrix PolyMatrix

◆ SmithFormDom

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
typedef PolySmithFormDomain<PolynomialRing> SmithFormDom

Constructor & Destructor Documentation

◆ InvariantFactors()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
InvariantFactors ( const Field & F,
const PolynomialRing & R )
inline

Member Function Documentation

◆ min_block_size()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
size_t min_block_size ( size_t t,
double p ) const
inline

◆ computeGenerator()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
void computeGenerator ( std::vector< Matrix > & gen,
const Blackbox & M,
size_t b ) const
inline

◆ computeGenerator2()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
void computeGenerator2 ( std::vector< Matrix > & gen,
const Blackbox & M,
size_t b ) const
inline

◆ convert()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
void convert ( PolyMatrix & G,
const std::vector< Matrix > & minpoly ) const
inline

◆ largestInvariantFactors() [1/3]

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t b,
int earlyTerm = 10 ) const
inline

◆ largestInvariantFactors2()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors2 ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t b,
int earlyTerm = 10 ) const
inline

◆ largestInvariantFactors() [2/3]

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors ( std::vector< Polynomial > & lifs,
const Blackbox & A,
const Polynomial & mod,
size_t b,
int earlyTerm = 10 ) const
inline

◆ largestInvariantFactors() [3/3]

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & largestInvariantFactors ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t t,
double p,
int earlyTerm = 10 ) const
inline

◆ frobeniusInvariants()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & frobeniusInvariants ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t k ) const
inline

lifs is the first k invariant factors of A in nonincreasing order by degree.

◆ lifsit()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & lifsit ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t b0,
size_t s,
size_t t,
size_t k ) const
inline

◆ randomNonzero()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
void randomNonzero ( const Field & F,
Element & elm ) const
inline

◆ randomTriangular()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class SparseMat>
void randomTriangular ( SparseMat & T,
size_t s,
bool upper,
bool randomDiag = false ) const
inline

◆ precondLifs()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
std::vector< Polynomial > & precondLifs ( std::vector< Polynomial > & lifs,
const Blackbox & A,
size_t b,
int earlyTerm = 10 ) const
inline

◆ det()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
bool det ( Element & det,
const Blackbox & A,
size_t b = 12,
int earlyTerm = 10 ) const
inline

◆ rank()

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
template<class Blackbox>
bool rank ( size_t & rank,
const Blackbox & A,
size_t b = 12,
size_t t = 3,
int earlyTerm = 10 ) const
inline

Field Documentation

◆ _F

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
Field _F
protected

◆ _R

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
PolynomialRing _R
protected

◆ _SFD

template<class _Field, class _PolynomialRing, class _MatrixDomain = MatrixDomain<_Field>>
SmithFormDom _SFD
protected

The documentation for this class was generated from the following file: