linbox
|
partial specialization of p-adic based solver with Dixon algorithm. More...
#include <rational-solver.h>
Public Member Functions | |
RationalSolver (const Ring &r=Ring(), const RandomPrime &rp=RandomPrime()) | |
Constructor. More... | |
RationalSolver (const Prime &p, const Ring &r=Ring(), const RandomPrime &rp=RandomPrime()) | |
Constructor, trying the prime p first. More... | |
template<class IMatrix , class Vector1 , class Vector2 > | |
SolverReturnStatus | solve (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, const bool s=false, const int maxPrimes=5, const SolverLevel level=SL_LASVEGAS) const |
Solve a linear system Ax=b over quotient field of a ring. More... | |
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_LASVEGAS) const |
overload so that the bool 'oldMatrix' argument is not accidentally set to true | |
template<class IMatrix , class Vector1 , class Vector2 > | |
SolverReturnStatus | solveNonsingular (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, bool s=false, int maxPrimes=5) const |
Solve a nonsingular, square linear system Ax=b over quotient field of a ring. More... | |
template<class IMatrix , class Vector1 , class Vector2 > | |
SolverReturnStatus | solveSingular (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, int maxPrimes=5, const SolverLevel level=SL_LASVEGAS) const |
Solve a general rectangular linear system Ax=b over quotient field of a ring. More... | |
template<class IMatrix , class Vector1 , class Vector2 > | |
SolverReturnStatus | findRandomSolution (Vector1 &num, Integer &den, const IMatrix &A, const Vector2 &b, int maxPrimes=5, const SolverLevel level=SL_LASVEGAS) const |
Find a random solution of the general linear system Ax=b over quotient field of a ring. More... | |
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=5, const SolverLevel level=SL_LASVEGAS) const |
Big solving routine to perform random solving and certificate generation. More... | |
partial specialization of p-adic based solver with Dixon algorithm.
See the following reference for details on this algorithm:
|
inline |
Constructor.
r | a Ring, set by default |
rp | a RandomPrime generator, set by default |
|
inline |
Constructor, trying the prime p first.
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 | s = false , |
||
const int | maxPrimes = 5 , |
||
const SolverLevel | level = SL_LASVEGAS |
||
) | const |
Solve a linear system Ax=b
over quotient field of a ring.
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 |
s | |
maxPrimes | maximum number of moduli to try |
level | level of certification to be used |
(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 solveNonsingular | ( | Vector1 & | num, |
Integer & | den, | ||
const IMatrix & | A, | ||
const Vector2 & | b, | ||
bool | s = false , |
||
int | maxPrimes = 5 |
||
) | const |
Solve a nonsingular, square linear system Ax=b
over quotient field of a ring.
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 |
s | unused |
maxPrimes | maximum number of moduli to try |
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 = 5 , |
||
const SolverLevel | level = SL_LASVEGAS |
||
) | 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.
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 |
(return != SS_FAILED)
, and (level >= SL_LASVEGAS)
, solution is guaranteed correct.SS_FAILED
all primes used were badSS_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 = 5 , |
||
const SolverLevel | level = SL_LASVEGAS |
||
) | const |
Find a random solution of the general linear system Ax=b
over quotient field of a ring.
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 |
(return != SS_FAILED)
, and (level >= SL_LASVEGAS)
, solution is guaranteed correct.SS_FAILED
all primes used were badSS_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 = 5 , |
||
const SolverLevel | level = SL_LASVEGAS |
||
) | const |
Big solving routine to perform random solving and certificate generation.
Same arguments and return as findRandomSolution, except
num | Vector of numerators of the solution |
den | The common denominator. 1/den * num is the rational solution of Ax = b |
A | |
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 |
maxPrimes | |
level | When (randomSolution == true && makeMinDenomCert == true) ,
|