fmpq_mat – matrices over rational numbers¶
-
class
flint.
fmpq_mat
¶ Represents a dense matrix over the rational numbers.
>>> A = fmpq_mat(3,3,[1,3,5,2,4,6,fmpq(2,3),2,4]) >>> A.inv() [-3, 3/2, 3/2] [ 3, -1/2, -3] [-1, 0, 3/2] >>> A.inv() * A [1, 0, 0] [0, 1, 0] [0, 0, 1]
-
det
(self)¶ Returns the determinant of self as an fmpq.
>>> (fmpq_mat(2,2,[1,2,3,4]) / 5).det() -2/25
-
entries
(self)¶
-
hilbert
(type cls, long n, long m)¶ Returns the n by m truncated Hilbert matrix.
>>> fmpq_mat.hilbert(2,3) [ 1, 1/2, 1/3] [1/2, 1/3, 1/4]
-
inv
(self)¶ Returns the inverse matrix of self.
>>> (fmpq_mat([[1,2],[3,4]]) / 5).inv() [ -10, 5] [15/2, -5/2] >>> (fmpq_mat([[1,2],[3,6]]) / 5).inv() Traceback (most recent call last): ... ZeroDivisionError: matrix is singular
-
ncols
(self) → long¶
-
nrows
(self) → long¶
-
numer_denom
(self)¶ Returns (A, d) where A is an fmpz_mat and d is an fmpz representing the minimal denominator such that A times d equals self.
>>> A, d = fmpq_mat.hilbert(3,3).numer_denom() >>> A [60, 30, 20] [30, 20, 15] [20, 15, 12] >>> d 60
-
repr
(self)¶
-
rref
(self, inplace=False)¶ Computes the reduced row echelon form (rref) of self, either returning a new copy or modifying self in-place. Returns (rref, rank).
>>> A = fmpq_mat(3,3,range(9)) >>> A.rref() ([1, 0, -1] [0, 1, 2] [0, 0, 0], 2) >>> A.rref(inplace=True) ([1, 0, -1] [0, 1, 2] [0, 0, 0], 2) >>> A [1, 0, -1] [0, 1, 2] [0, 0, 0]
-
solve
(self, other, algorithm=None)¶ Given matrices A and B represented by self and other, returns an fmpq_mat X such that \(AX = B\), assuming that A is square and invertible.
Algorithm can None for a default choice, or “fflu” or “dixon” (faster for large matrices).
>>> A = fmpq_mat(2, 2, [1,4,8,3]) >>> B = fmpq_mat(2, 3, range(6)) >>> X = A.solve(B) >>> X [12/29, 13/29, 14/29] [-3/29, 4/29, 11/29] >>> A*X == B True >>> A.solve(B, algorithm='dixon') == X True >>> fmpq_mat(2, 2, [1,0,2,0]).solve(B) Traceback (most recent call last): ... ZeroDivisionError: singular matrix in solve() >>> A.solve(fmpq_mat(1, 2, [2,3])) Traceback (most recent call last): ... ValueError: need a square system and compatible right hand side
-
str
(self, *args, **kwargs)¶
-
table
(self)¶
-
tolist
()¶ flint_mat.table(self)
-
transpose
(self)¶ Returns the transpose of self.
>>> fmpq_mat(2,3,range(6)).transpose() [0, 3] [1, 4] [2, 5]
-