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).

DiagonalJoin(Q): [ ModMatRngElt ] -> ModMatRngElt

Given a sequence \(Q\) of matrices, each being over the same coefficient ring \(R\), return the matrix over \(R\) obtained by joining the elements of \(Q\) diagonally in order.

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\).

MultiplyColumn(~a, u, i): AlgMatElt, RngElt, RngIntElt

Mutate the matrix \(a\) by multiplying column \(i\) by the scalar \(u\).

AddColumn(~a, u, i, j): AlgMatElt, RngElt, RngIntElt, RngIntElt

Mutate the matrix \(a\) by adding \(u\) times column \(i\) to column \(j\).