# MatrixLinearAlgebraFunctions(R, Row, Col, M)¶

MatrixLinearAlgebraFunctions provides functions to compute inverses and canonical forms.

`adjoint(m)` returns the ajoint matrix of `m` (i.e. the matrix `n` such that `m*n` = determinant(`m`)*id) and the detrminant of `m`.

determinant: M -> R

`determinant(m)` returns the determinant of the matrix `m`. an error message is returned if the matrix is not square.

elColumn2!: (M, R, Integer, Integer) -> M

`elColumn2!(m, a, i, j)` adds to column `i` a*column(`m`, `j`) : elementary operation of second kind. (`i` `~=j`)

elRow1!: (M, Integer, Integer) -> M

`elRow1!(m, i, j)` swaps rows `i` and `j` of matrix `m` : elementary operation of first kind

elRow2!: (M, R, Integer, Integer) -> M

`elRow2!(m, a, i, j)` adds to row `i` a*row(`m`, `j`) : elementary operation of second kind. (`i` `~=j`)

fractionFreeGauss!: M -> M if R has IntegralDomain

`fractionFreeGauss(m)` performs the fraction free gaussian elimination on the matrix `m`, also known as Bareiss algorithm.

inverse: M -> Union(M, failed) if R has Field

`inverse(m)` returns the inverse of the matrix. If the matrix is not invertible, “failed” is returned. Error: if the matrix is not square.

invertIfCan: M -> Union(M, failed) if R has IntegralDomain

`invertIfCan(m)` returns the inverse of `m` over `R`

minordet: M -> R

`minordet(m)` computes the determinant of the matrix `m` using minors. Error: if the matrix is not square.

normalizedDivide: (R, R) -> Record(quotient: R, remainder: R) if R has EuclideanDomain

`normalizedDivide(n, d)` returns a normalized quotient and remainder such that consistently unique representatives for the residue class are chosen, e.g. positive remainders

nullity: M -> NonNegativeInteger if R has IntegralDomain

`nullity(m)` returns the mullity of the matrix `m`. This is the dimension of the null space of the matrix `m`.

nullSpace: M -> List Col if R has IntegralDomain

`nullSpace(m)` returns a basis for the null space of the matrix `m`.

rank: M -> NonNegativeInteger if R has IntegralDomain

`rank(m)` returns the rank of the matrix `m`.

rowEchelon: M -> M if R has EuclideanDomain

`rowEchelon(m)` returns the row echelon form of the matrix `m`.