fmpq_mat – matrices over rational numbers¶
- class flint.fmpq_mat¶
- Represents a dense matrix over the rational numbers.
>>> from flint import fmpq >>> 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]
- charpoly(self)¶
Returns the characteristic polynomial of self as an fmpq_poly.
>>> from flint import fmpq_mat, fmpq >>> A = fmpq_mat(3,3,[1,3,5,2,4,6,fmpq(2,3),2,4]) >>> A [ 1, 3, 5] [ 2, 4, 6] [2/3, 2, 4] >>> A.charpoly() x^3 + (-9)*x^2 + 8/3*x + 4/3
- det(self)¶
Returns the determinant of self as an fmpq.
>>> (fmpq_mat(2,2,[1,2,3,4]) / 5).det() -2/25
- entries(self)¶
- classmethod hilbert(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
- minpoly(self)¶
Returns the minimal polynomial of self as an fmpq_poly.
>>> from flint import fmpq_mat, fmpq >>> A = fmpq_mat([[2, 1, 0], [0, 2, 0], [0, 0, 2]]) >>> A [2, 1, 0] [0, 2, 0] [0, 0, 2] >>> A.charpoly() x^3 + (-6)*x^2 + 12*x + (-8) >>> A.minpoly() x^2 + (-4)*x + 4
- 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
- rank(self)¶
Returns the rank of self.
>>> from flint import fmpq_mat >>> M = fmpq_mat([[1,2,3],[4,5,6],[7,8,9]]) >>> M.rank() 2
- 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]