Accessing and Modifying a Matrix
Indexing
- a[i]: AlgMatElt, RngIntElt -> ModTupElt
Given an element \(a\) belonging to the matrix algebra \(R\) over the ring \(S\), return the \(i\)-th row of \(a\) as an element of the natural \(S\)-module associated with \(R\).
- a[i] := u: AlgMatElt, RngIntElt, RngElt -> AlgMatElt
Given an element \(a\) belonging to the matrix algebra \(R\) over the ring \(S\), an integer \(i\) in the range \([1, n]\) and an element \(u\) of the natural \(S\)-module associated with \(R\), replace the \(i\)-th row of \(a\) by the vector \(u\).
- a[i, j]: AlgMatElt, RngIntElt, RngIntElt -> RngElt
Given an element \(a\) belonging to the matrix algebra \(R\) over the ring \(S\), return the \((i,j)\)-th entry of \(a\) as an element of \(S\).
- a[i, j] := t: AlgMatElt, RngIntElt, RngIntElt, RngElt -> AlgMatElt
Given an element \(a\) belonging to the matrix algebra \(R\) over the ring \(S\), integers \(i\) and \(j\) in the range \([1, n]\), and an element \(t\) of \(S\), replace the \((i,j)\)-th entry of \(a\) by \(t\).
- ElementToSequence(a): AlgMatElt -> [ RngElt ]
- Eltseq(a): AlgMatElt -> [ RngElt ]
Given an element \(a\) of the matrix algebra \(R\) over \(S\), where \(a = (a_{ij})\), \(1 \leq i\), \(j \leq n\), return \(a\) as the sequence of elements of \(S\):
\[[a_{11}, \ldots, a_{1n}, a_{21},\ldots, a_{2n}, \ldots, a_{n1},\ldots, a_{nn}].\]
Extracting and Inserting Blocks
- Submatrix(a, i, j, p, q): Mtrx, RngIntElt, RngIntElt, RngIntElt, RngIntElt -> Mtrx
- ExtractBlock(a, i, j, p, q): Mtrx, RngIntElt, RngIntElt, RngIntElt, RngIntElt -> Mtrx
Given a matrix \(a\) belonging to a subalgebra of \(M_n(S)\) and integers \(i\), \(j\), \(p\), and \(q\) satisfying the conditions, \(1 \le i + p \le m\), \(1 \le j + q \le n\), create the matrix \(b\) consisting of the \(p\times q\) submatrix of \(a\) whose first entry is the \((i,j)\)-th entry of \(a\). If \(p \ne q\), the matrix \(b\) is created as an element of \(\Hom(P, Q)\), where
Rank\((P) = p\),Rank\((Q) = q\). Otherwise it is created as an element of \(M_p(S)\).
- InsertBlock(~a, b, i, j): Mtrx, Mtrx, RngIntElt, RngIntElt -> Mtrx
(Procedure.) Given that the matrix \(a\) belongs to a subalgebra of \(M_n(S)\) and the \(p\times q\) matrix \(b\) is also over \(S\), the integers \(i\), \(j\), \(p\), and \(q\) must satisfy the conditions, \(1 \le i + p \le m\), \(1 \le j + q \le n\). This procedure modifies \(a\) so that the \(p\times q\) block beginning at the \((i,j)\)-th entry of \(a\) is replaced by \(b\).
Joining Matrices
- HorizontalJoin(X, Y): Mtrx, Mtrx -> Mtrx
Given matrices \(X\) with \(r\) rows and \(c\) columns, and \(Y\) with \(r\) rows and \(d\) columns, both over the same coefficient ring \(R\), return the matrix over \(R\) with \(r\) rows and \((c+d)\) columns obtained by joining \(X\) and \(Y\) horizontally (placing \(Y\) to the right of \(X\)).
- HorizontalJoin(Q): [ ModMatRngElt ] -> ModMatRngElt
Given a sequence \(Q\) of matrices, each having the same number of rows and being over the same coefficient ring \(R\), return the matrix over \(R\) obtained by joining the elements of \(Q\) horizontally in order.
- VerticalJoin(X, Y): ModMatRngElt, ModMatRngElt -> ModMatRngElt
Given matrices \(X\) with \(r\) rows and \(c\) columns and \(Y\) with \(s\) rows and \(c\) columns, both over the same coefficient ring \(R\), return the matrix with \((r+s)\) rows and \(c\) columns over \(R\) obtained by joining \(X\) and \(Y\) vertically (placing \(Y\) underneath \(X\)).
- VerticalJoin(Q): [ ModMatRngElt ] -> ModMatRngElt
Given a sequence \(Q\) of matrices, each having the same number of columns and being over the same coefficient ring \(R\), return the matrix over \(R\) obtained by joining the elements of \(Q\) vertically in order.
- DiagonalJoin(X, Y): ModMatRngElt, ModMatRngElt -> ModMatRngElt
Given matrices \(X\) with \(a\) rows and \(b\) columns and \(Y\) with \(c\) rows and \(d\) columns, both over the same coefficient ring \(R\), return the matrix with \((a+c)\) rows and \((b+d)\) columns over \(R\) obtained by joining \(X\) and \(Y\) diagonally (placing \(Y\) diagonally to the right of and underneath \(X\), with zero blocks above and below the diagonal).
Row and Column Operations
For the following operations, \(a\) is an element of a subring of the matrix algebra \(M_n(S)\), \(u\) is a non-zero element of \(S\), and \(i\) and \(j\) are integers in the range \([1, n]\). Each of the operations described here acts on the matrix in place, and is therefore implemented as a procedure.
- SwapRows(~a, i, j): AlgMatElt, RngIntElt, RngIntElt
Mutate the matrix \(a\) by interchanging rows \(i\) and \(j\).
- MultiplyRow(~a, u, j): AlgMatElt, RngElt, RngIntElt
Mutate the matrix \(a\) by multiplying row \(j\) by the scalar \(u\).
- AddRow(~a, u, i, j): AlgMatElt, RngElt, RngIntElt, RngIntElt
Mutate the matrix \(a\) by adding \(u\) times row \(i\) to row \(j\).
- SwapColumns(~a, i, j): AlgMatElt, RngIntElt, RngIntElt
Mutate the matrix \(a\) by interchanging columns \(i\) and \(j\).