Main Page | Modules | Namespace List | Class Hierarchy | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

RationalSolver< Ring, Field, RandomPrime, DixonTraits > Class Template Reference

#include <rational-solver.h>


Detailed Description

template<class Ring, class Field, class RandomPrime>
class LinBox::RationalSolver< Ring, Field, RandomPrime, DixonTraits >

partial specialization of p-adic based solver with Dixon algorithm

See the following reference for details on this algorithm:


Public Types

typedef Ring RingType
typedef Ring::Element Integer
typedef Field::Element Element
typedef RandomPrime::Prime_Type Prime

Public Member Functions

 RationalSolver (const Ring &r=Ring(), const RandomPrime &rp=RandomPrime(DEFAULT_PRIMESIZE))
 RationalSolver (const Prime &p, const Ring &r=Ring(), const RandomPrime &rp=RandomPrime(DEFAULT_PRIMESIZE))
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus solve (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, const bool=false, const int maxPrimes=DEFAULT_MAXPRIMES, const SolverLevel level=SL_DEFAULT) const
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus solve (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, const int maxPrimes, const SolverLevel level=SL_DEFAULT) const
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus solveNonsingular (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, bool=false, int maxPrimes=DEFAULT_MAXPRIMES) const
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus solveSingular (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, int maxPrimes=DEFAULT_MAXPRIMES, const SolverLevel level=SL_DEFAULT) const
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus findRandomSolution (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, int maxPrimes=DEFAULT_MAXPRIMES, const SolverLevel level=SL_DEFAULT) const
template<class IMatrix, class Vector1, class Vector2> SolverReturnStatus monolithicSolve (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, bool makeMinDenomCert, bool randomSolution, int maxPrimes=DEFAULT_MAXPRIMES, const SolverLevel level=SL_DEFAULT) const
Ring getRing () const
void chooseNewPrime () const

Data Fields

VectorFraction< Ring > lastCertificate
Integer lastZBNumer
Integer lastCertifiedDenFactor

Protected Attributes

RandomPrime _genprime
Prime _prime
Ring _R


Member Typedef Documentation

typedef Ring RingType
 

typedef Ring::Element Integer
 

typedef Field::Element Element
 

typedef RandomPrime::Prime_Type Prime
 


Member Function Documentation

RationalSolver const Ring &  r = Ring(),
const RandomPrime rp = RandomPrime(DEFAULT_PRIMESIZE)
[inline]
 

Constructor

Parameters:
r,a Ring, set by default
rp,a RandomPrime generator, set by default

RationalSolver const Prime p,
const Ring &  r = Ring(),
const RandomPrime rp = RandomPrime(DEFAULT_PRIMESIZE)
[inline]
 

Constructor, trying the prime p first

Parameters:
p,a Prime
r,a Ring, set by default
rp,a RandomPrime generator, set by default

SolverReturnStatus solve Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
const  bool = false,
const int  maxPrimes = DEFAULT_MAXPRIMES,
const SolverLevel  level = SL_DEFAULT
const
 

Solve a linear system Ax=b over quotient field of a ring

Parameters:
num,Vector of numerators of the solution
den,The common denominator. 1/den * num is the rational solution of Ax = b.
A,Matrix of linear system
b,Right-hand side of system
maxPrimes,maximum number of moduli to try
level,level of certification to be used
Returns:
status of solution. if (return != SS_FAILED), and (level >= SL_LASVEGAS), solution is guaranteed correct. SS_FAILED - all primes used were bad SS_OK - solution found. SS_INCONSISTENT - system appreared inconsistent. certificate is in lastCertificate if (level >= SL_CERTIFIED)

SolverReturnStatus solve Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
const int  maxPrimes,
const SolverLevel  level = SL_DEFAULT
const [inline]
 

overload so that the bool 'oldMatrix' argument is not accidentally set to true

SolverReturnStatus solveNonsingular Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
bool  = false,
int  maxPrimes = DEFAULT_MAXPRIMES
const
 

Solve a nonsingular, square linear system Ax=b over quotient field of a ring

Parameters:
num,Vector of numerators of the solution
den,The common denominator. 1/den * num is the rational solution of Ax = b.
A,Matrix of linear system (it must be square)
b,Right-hand side of system
maxPrimes,maximum number of moduli to try
Returns:
status of solution. SS_FAILED - all primes used were bad SS_OK - solution found, guaranteed correct. SS_SINGULAR - system appreared singular mod all primes.

SolverReturnStatus solveSingular Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
int  maxPrimes = DEFAULT_MAXPRIMES,
const SolverLevel  level = SL_DEFAULT
const
 

Solve a general rectangular linear system Ax=b over quotient field of a ring. If A is known to be square and nonsingular, calling solveNonsingular is more efficient.

Parameters:
num,Vector of numerators of the solution
den,The common denominator. 1/den * num is the rational solution of Ax = b.
A,Matrix of linear system
b,Right-hand side of system
maxPrimes,maximum number of moduli to try
level,level of certification to be used
Returns:
status of solution. if (return != SS_FAILED), and (level >= SL_LASVEGAS), solution is guaranteed correct. SS_FAILED - all primes used were bad SS_OK - solution found. SS_INCONSISTENT - system appreared inconsistent. certificate is in lastCertificate if (level >= SL_CERTIFIED)

SolverReturnStatus findRandomSolution Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
int  maxPrimes = DEFAULT_MAXPRIMES,
const SolverLevel  level = SL_DEFAULT
const
 

Find a random solution of the general linear system Ax=b over quotient field of a ring.

Parameters:
num,Vector of numerators of the solution
den,The common denominator. 1/den * num is the rational solution of Ax = b.
A,Matrix of linear system
b,Right-hand side of system
maxPrimes,maximum number of moduli to try
level,level of certification to be used
Returns:
status of solution. if (return != SS_FAILED), and (level >= SL_LASVEGAS), solution is guaranteed correct. SS_FAILED - all primes used were bad SS_OK - solution found. SS_INCONSISTENT - system appreared inconsistent. certificate is in lastCertificate if (level >= SL_CERTIFIED)

SolverReturnStatus monolithicSolve Vector1 &  num,
Integer den,
const IMatrix &  A,
const Vector2 &  b,
bool  makeMinDenomCert,
bool  randomSolution,
int  maxPrimes = DEFAULT_MAXPRIMES,
const SolverLevel  level = SL_DEFAULT
const
 

Big solving routine to perform random solving and certificate generation. Same arguments and return as findRandomSolution, except

Parameters:
num,Vector of numerators of the solution
den,The common denominator. 1/den * num is the rational solution of Ax = b.
randomSolution,parameter to determine whether to randomize or not (since solveSingular calls this function as well)
makeMinDenomCert,determines whether a partial certificate for the minimal denominator of a rational solution is made
When (randomSolution == true && makeMinDenomCert == true), If (level == SL_MONTECARLO) this function has the same effect as calling findRandomSolution. If (level >= SL_LASVEGAS && return == SS_OK), lastCertifiedDenFactor contains a certified factor of the min-solution's denominator. If (level >= SL_CERTIFIED && return == SS_OK), lastZBNumer and lastCertificate are updated as well.

Ring getRing  )  const [inline]
 

void chooseNewPrime  )  const [inline]
 


Field Documentation

VectorFraction<Ring> lastCertificate [mutable]
 

Integer lastZBNumer [mutable]
 

Integer lastCertifiedDenFactor [mutable]
 

RandomPrime _genprime [protected]
 

Prime _prime [mutable, protected]
 

Ring _R [protected]
 


Generated on Fri Jul 8 10:29:47 2005 for linbox by doxygen 1.3.7