Regina Calculation Engine

Represents a matrix of arbitrary precision integers. More...
#include <maths/nmatrixint.h>
Public Member Functions  
NMatrixInt (unsigned long rows, unsigned long cols)  
Creates a new matrix of the given size. More...  
NMatrixInt (const NMatrixInt &cloneMe)  
Creates a new matrix that is a clone of the given matrix. More...  
void  divRowExact (unsigned long row, const NLargeInteger &divBy) 
Divides all elements of the given row by the given integer. More...  
void  divColExact (unsigned long col, const NLargeInteger &divBy) 
Divides all elements of the given column by the given integer. More...  
NLargeInteger  gcdRow (unsigned long row) 
Computes the greatest common divisor of all elements of the given row. More...  
NLargeInteger  gcdCol (unsigned long col) 
Computes the greatest common divisor of all elements of the given column. More...  
void  reduceRow (unsigned long row) 
Reduces the given row by dividing all its elements by their greatest common divisor. More...  
void  reduceCol (unsigned long col) 
Reduces the given column by dividing all its elements by their greatest common divisor. More...  
void  makeIdentity () 
Turns this matrix into an identity matrix. More...  
bool  isIdentity () const 
Determines whether this matrix is a square identity matrix. More...  
bool  isZero () const 
Determines whether this is the zero matrix. More...  
void  addRow (unsigned long source, unsigned long dest) 
Adds the given source row to the given destination row. More...  
void  addRow (unsigned long source, unsigned long dest, NLargeIntegercopies) 
Adds the given number of copies of the given source row to the given destination row. More...  
void  addCol (unsigned long source, unsigned long dest) 
Adds the given source column to the given destination column. More...  
void  addCol (unsigned long source, unsigned long dest, NLargeIntegercopies) 
Adds the given number of copies of the given source column to the given destination column. More...  
void  multRow (unsigned long row, NLargeIntegerfactor) 
Multiplies the given row by the given factor. More...  
void  multCol (unsigned long column, NLargeIntegerfactor) 
Multiplies the given column by the given factor. More...  
std::unique_ptr< NMatrixRing < NLargeInteger > >  operator* (const NMatrixRing< NLargeInteger > &other) const 
Multiplies this by the given matrix, and returns the result. More...  
std::unique_ptr< MatrixClass >  multiplyAs (const NMatrixRing< NLargeInteger > &other) const 
Multiplies this by the given matrix, and returns a new matrix of subclass MatrixClass. More...  
NLargeInteger  det () const 
Evaluates the determinant of the matrix. More...  
void  initialise (const NLargeInteger &value) 
Sets every entry in the matrix to the given value. More...  
void  initialise (List allValues) 
A Pythononly routine that fills the matrix with the given set of elements. More...  
unsigned long  rows () const 
Returns the number of rows in this matrix. More...  
unsigned long  columns () const 
Returns the number of columns in this matrix. More...  
NLargeInteger &  entry (unsigned long row, unsigned long column) 
Returns the entry at the given row and column. More...  
const NLargeInteger &  entry (unsigned long row, unsigned long column) const 
Returns the entry at the given row and column. More...  
bool  operator== (const NMatrix< NLargeInteger > &other) const 
Determines whether this and the given matrix are identical. More...  
bool  operator!= (const NMatrix< NLargeInteger > &other) const 
Determines whether this and the given matrix are different. More...  
void  writeMatrix (std::ostream &out) const 
Writes a complete representation of the matrix to the given output stream. More...  
void  swapRows (unsigned long first, unsigned long second) 
Swaps the elements of the two given rows in the matrix. More...  
void  swapColumns (unsigned long first, unsigned long second) 
Swaps the elements of the two given columns in the matrix. More...  
void  writeTextShort (std::ostream &out) const 
Writes a short text representation of this object to the given output stream. More...  
void  writeTextLong (std::ostream &out) const 
Writes a detailed text representation of this object to the given output stream. More...  
std::string  str () const 
Returns a short text representation of this object. More...  
std::string  utf8 () const 
Returns a short text representation of this object using unicode characters. More...  
std::string  detail () const 
Returns a detailed text representation of this object. More...  
REGINA_DEPRECATED std::string  toString () const 
A deprecated alias for str(). More...  
REGINA_DEPRECATED std::string  toStringLong () const 
A deprecated alias for detail(). More...  
Static Public Attributes  
static NLargeInteger  zero 
Zero in the underlying ring. More...  
static NLargeInteger  one 
One (the multiplicative identity) in the underlying ring. More...  
Protected Attributes  
unsigned long  nRows 
The number of rows in the matrix. More...  
unsigned long  nCols 
The number of columns in the matrix. More...  
NLargeInteger **  data 
The actual entries in the matrix. More...  
Represents a matrix of arbitrary precision integers.
Calculations will be exact no matter how large the integers become.
Note that many important functions (such as entry()) are inherited from the superclasses NMatrix and NMatrixRing, and are not documented again here. Many other algorithms that work on the NMatrixInt class are available in the maths/matrixops.h file.

inlineinherited 
Adds the given source column to the given destination column.
source  the columns to add. 
dest  the column that will be added to. 

inlineinherited 
Adds the given number of copies of the given source column to the given destination column.
Note that copies is passed by value in case it is an element of the row to be changed.
source  the columns to add. 
dest  the column that will be added to. 
copies  the number of copies of source to add to dest. 

inlineinherited 
Adds the given source row to the given destination row.
source  the row to add. 
dest  the row that will be added to. 

inlineinherited 
Adds the given number of copies of the given source row to the given destination row.
Note that copies is passed by value in case it is an element of the row to be changed.
source  the row to add. 
dest  the row that will be added to. 
copies  the number of copies of source to add to dest. 

inlineinherited 
Returns the number of columns in this matrix.

inlineinherited 
Evaluates the determinant of the matrix.
This algorithm has quartic complexity, and uses the dynamic programming approach of Mahajan and Vinay. For further details, see Meena Mahajan and V. Vinay, "Determinant: Combinatorics, algorithms, and complexity", Chicago J. Theor. Comput. Sci., Vol. 1997, Article 5.

inherited 
Returns a detailed text representation of this object.
This text may span many lines, and should provide the user with all the information they could want. It should be humanreadable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.

inline 
Divides all elements of the given column by the given integer.
This can only be used when the given integer divides into all column elements exactly (with no remainder), and is much faster than ordinary division.
col  the index of the column whose elements should be divided by divBy. 
divBy  the integer to divide each column element by. 

inline 
Divides all elements of the given row by the given integer.
This can only be used when the given integer divides into all row elements exactly (with no remainder), and is much faster than ordinary division.
row  the index of the row whose elements should be divided by divBy. 
divBy  the integer to divide each row element by. 

inlineinherited 
Returns the entry at the given row and column.
Rows and columns are numbered beginning at zero.
matrix.entry(row, column) = value
still cannot be used in python to set a matrix element directly. For this, you can use the syntax matrix.set(row, column, value)
. This set() routine returns nothing, and is provided for python only (i.e., it is not part of the C++ calculation engine).row  the row of the desired entry. 
column  the column of the desired entry. 

inlineinherited 
Returns the entry at the given row and column.
Rows and columns are numbered beginning at zero.
row  the row of the desired entry. 
column  the column of the desired entry. 

inline 
Computes the greatest common divisor of all elements of the given column.
The value returned is guaranteed to be nonnegative.
col  the index of the column whose gcd should be computed. 

inline 
Computes the greatest common divisor of all elements of the given row.
The value returned is guaranteed to be nonnegative.
row  the index of the row whose gcd should be computed. 

inlineinherited 
Sets every entry in the matrix to the given value.
value  the value to assign to each entry. 

inherited 
A Pythononly routine that fills the matrix with the given set of elements.
The argument allValues must be a Python list of length rows() * columns(). Its values will be inserted into the matrix row by row (i.e., the first row will be filled, then the second row, and so on).
allValues  the individual elements to place into the matrix. 

inlineinherited 
Determines whether this matrix is a square identity matrix.
If this matrix is square, isIdentity() will return true
if and only if the matrix has ones in the main diagonal and zeroes everywhere else.
If this matrix is not square, isIdentity() will always return false
(even if makeIdentity() was called earlier).
true
if and only if this is a square identity matrix.

inlineinherited 
Determines whether this is the zero matrix.
true
if and only if all entries in the matrix are zero.

inlineinherited 
Turns this matrix into an identity matrix.
This matrix need not be square; after this routine it will have entry(r,c)
equal to one
if r == c
and zero
otherwise.

inlineinherited 
Multiplies the given column by the given factor.
Note that factor is passed by value in case it is an element of the row to be changed.
column  the column to work with. 
factor  the factor by which to multiply the given column. 

inlineinherited 
Multiplies this by the given matrix, and returns a new matrix of subclass MatrixClass.
This matrix is not changed.
other  the matrix by which to multiply this matrix. 
this * other
.

inlineinherited 
Multiplies the given row by the given factor.
Note that factor is passed by value in case it is an element of the row to be changed.
row  the row to work with. 
factor  the factor by which to multiply the given row. 

inlineinherited 
Determines whether this and the given matrix are different.
Two matrices are different if either (i) their dimensions differ, or (ii) the corresponding elements of each matrix differ in at least one location.
Note that this routine can happily deal with two matrices of different dimensions (in which case it will always return true
).
This routine returns true
if and only if the equality operator (==) returns false
.
other  the matrix to compare with this. 
true
if the matrices are different as described above, or false
otherwise.

inlineinherited 
Multiplies this by the given matrix, and returns the result.
This matrix is not changed.
other  the matrix by which to multiply this matrix. 
this * other
.

inlineinherited 
Determines whether this and the given matrix are identical.
Two matrices are identical if and only if (i) their dimensions are the same, and (ii) the corresponding elements of each matrix are equal.
Note that this routine can happily deal with two matrices of different dimensions (in which case it will always return false
).
This routine returns true
if and only if the inequality operator (!=) returns false
.
other  the matrix to compare with this. 
true
if the matrices are equal as described above, or false
otherwise.

inline 
Reduces the given column by dividing all its elements by their greatest common divisor.
It is guaranteed that, if the column is changed at all, it will be divided by a positive integer.
col  the index of the column to reduce. 

inline 
Reduces the given row by dividing all its elements by their greatest common divisor.
It is guaranteed that, if the row is changed at all, it will be divided by a positive integer.
row  the index of the row to reduce. 

inlineinherited 
Returns the number of rows in this matrix.

inherited 
Returns a short text representation of this object.
This text should be humanreadable, should fit on a single line, and should not end with a newline. Where possible, it should use plain ASCII characters.
__str__()
.

inlineinherited 
Swaps the elements of the two given columns in the matrix.
first  the first column to swap. 
second  the second column to swap. 

inlineinherited 
Swaps the elements of the two given rows in the matrix.
first  the first row to swap. 
second  the second row to swap. 

inherited 
A deprecated alias for str().

inherited 
A deprecated alias for detail().

inherited 
Returns a short text representation of this object using unicode characters.
Like str(), this text should be humanreadable, should fit on a single line, and should not end with a newline. In addition, it may use unicode characters to make the output more pleasant to read. This string will be encoded in UTF8.

inlineinherited 
Writes a complete representation of the matrix to the given output stream.
Each row will be written on a separate line with elements in each row separated by single spaces.
out  the output stream to which to write. 

inlineinherited 
Writes a detailed text representation of this object to the given output stream.
out  the output stream to which to write. 

inlineinherited 
Writes a short text representation of this object to the given output stream.
out  the output stream to which to write. 

protectedinherited 
The actual entries in the matrix.
data[r][c]
is the element in row r, column c.

protectedinherited 
The number of columns in the matrix.

protectedinherited 
The number of rows in the matrix.

staticinherited 
One (the multiplicative identity) in the underlying ring.
This would be const
if it weren't for the fact that some compilers don't like this. It should never be modified!

staticinherited 
Zero in the underlying ring.
This would be const
if it weren't for the fact that some compilers don't like this. It should never be modified!