--- title : AbstractAlgebra cheatsheet author : Tommy Hofmann date: 19th June 2019 --- #### Matrices Let $R$ be a ring, $A$ an array with entries in $R$ and length($A$) = $mn$ where $m,n \in \mathbb{N}$. Moreover, let $MS$ be the space of $m \times n$ matrices over $R$. Code | Mathematics :---------- | ----------: `matrix(A, 2, 2, [1, 2, 3, 4])` | Construct the matrix over $R$ with rows $1, 2$ and $3, 4$. `base_ring(M)` | Returns the base ring $R$ of the matrix space MS that the matrix belongs to `M = matrix(R, m, n, A)` | Returns the $m \times n$ matrix with values in $A$ (row-wise) `parent(M)` | Returns the parent matrix space of $m$ rows and $n$ columns over $R$ `M[i,j]` | Returns the entry of the matrix M at row $i$ and column $j$ `identity_matrix(R, n)` | Returns the $n \times n$ identity matrix over $R$ `zero_matrix(R, m, n)` | Returns the $m \times n$ zero matrix over $R$. `nrows(M)` | Returns $m$ `ncols(M)` | Returns $n$ `iszero(M)` | Returns `true` if the matrix $M$ is the zero matrix, otherwise `false` `isone(M)` | Returns `true` if the matrix $M$ is the identity matrix, otherwise `false` `iszero_row(M,i)` | Returns `true` if the $i$-th row of the matrix $M$ is zero `iszero_column(M,i)` | Returns `true` if the $i$-th column of the matrix $M$ is zero `sub(M, m1, n1, m2, n2)` | Return a copy of the submatrix of $M$ from $(m1, n1)$ to $(m2, n2)$ inclusive `size(M)` | Returns tuple $(m, n)$ `issquare(M)` | Returns `true` if the matrix $M$ is a square matrix, otherwise `false` `M^i` | Returns $i$ times $M*...*M$, requires $i \geq 0$ and that the matrix $M$ is square `transpose(M)` | Returns the transpose of $M$ `gram(M)` | Returns the Gram matrix of $M$ `tr(M)` | Returns the trace of the matrix $M$, requires the matrix to be square. `content(M)` | Returns the greatest common divisor of all entries of $M$, assuming it exists `rref(M)` |If $R$ is a field, returns a tuple $(r, A)$ consisting of the rank $r$ of $M$ and a reduced row echelon form $A$ of $M$ otherwise returns tuple $(r, d, A)$ with a denominator $d$ in $R$ such that $A/d$ is the reduced row echelon form of $M$. `isrref(M)` | Return `true` if $M$ is in reduced row echelon form, otherwise return`false` `det(M)` | Returns the determinant of the matrix $M$, assumes $M$ is square `minors(M, k)` | Returns an array consisting of the k-minors of $M$ `rank(M)` | Returns the rank of the matrix $M$ `solve(M, b)` | Given a non-singular $n\times n$ matrix $M$ over a field and an $n\times m$ matrix $b$ over the same field, return an $n\times m$ matrix $x$ such that $Mx = b$ `solve_rational(M, b)` | Given a non-singular $n\times n$ matrix $M$ over a ring and an $n\times m$ $b$ matrix over the same ring, return a tuple $x, d$ consisting of an $n\times m$ matrix $x$ and a denominator $d$ such that $Mx = db$. `pseudo_inv(M)` | Given a non-singular $n\times n$ matrix $M$ return a tuple $X, d$ consisting of an $n\times n$ matrix $X$ and a denominator $d$ such that $MX = dI_n$. `can_solve_left_reduced_triu(b, M)` | Returns a tuple ($flag$, x) where $flag$ is set to true if $xM = b$ has a solution, where $M$ is an $m\times n$ matrix in (upper triangular) Hermite normal form or reduced row echelon form and $b$ and $x$ are row vectors with $m$ columns. If there is no solution, $flag$ is set to `false` and $x$ is set to the zero row `inv(M)` | Given a non-singular $n\times n$ matrix $M$ over a ring, return an $n\times n$ matrix $X$ such that $MX = I_n$ `nullspace(M)` | Returns a tuple $(\nu, N)$ consisting of the nullity $\nu$ of $M$ and a basis $N$ (of column vectors) for the right nullspace of $M$, i.e. such that $MN$ is the zero matrix `kernel(M; side = :right)` | Returns a tuple $(n, B)$, where n is the rank of the kernel and $B$ is a basis for it. If side is $:right$ or not specified, the right kernel is computed, i.e. the matrix of columns whose span gives the right kernel space. If side is $:left$, the left kernel is computed `hessenberg(M)` | Returns the Hessenberg form of $M$ `ishessenberg(M)` | Returns `true` if $M$ is in Hessenberg form, otherwise returns `false` `popov(M)` | Returns the Popov form of $M$ `charpoly(Rx, M)` | Returns the characteristic polynomial $p$ of the matrix $M$. The polynomial ring $Rx$ of the resulting polynomial must be supplied and the matrix is assumed to be square `minpoly(Rx, M)` | Returns the minimal polynomial $p$ of the matrix $M$. The polynomial ring $Rx$ of the resulting polynomial must be supplied and the matrix must be square. `hnf(M)` | Returns the upper right row Hermite normal form of $M$ `hnf_with_transform(M)` | Returns the tuple $H, U$ consisting of the upper right row Hermite normal form $H$ of $M$ together with invertible matrix $U$ such that $UM = H$ `snf(M)` | Returns the upper right row Smith normal form of $M$ `snf_with_transform(M)` | Returns the tuple $S, V, U$ consisting of the Smith normal form $S$ of $M$ together with matrices $V$ and $U$ such that $V*M*U = S$ `similarity!(M, i, r)` | Applies a similarity transform to the $n\times n$ matrix $M$ in-place. Let $P$ be the $n\times n$ identity matrix that has had all zero entries of row $i$ replaced with $r$ where $r \in R$, then the transform applied is equivalent to $M = P^{-1}MP$ `swap_rows(M, i, j)` | Returns a matrix with the entries of $M$, where the $i$th and $j$th row are swapped `swap_cols(M, i, j)` | Returns a matrix with the entries of $M$, where the $i$th and $j$th column are swapped `invert_rows(M)` | Returns a matrix with the entries of $M$, where the $i$th and $j - i$th row is swapped for $1 \leq i \leq j/2$. Here $j$ is the number of rows of $M$ `invert_cols(M)` | Returns a matrix with the entries of $M$, where the $j$th and $i - j$th column is swapped for $1 \leq j \leq i/2$. Here $i$ is the number of columns of$M$ `hcat(M1, M2)` | Returns the horizontal concatenation of $M1$ and $M2$. Assumes that the number of rows is the same in $M1$ and $M2$ `vcat(M1, M2)` | Returns the vertical concatenation of $M1$ and $M2$. Assumes that the number of columns is the same in $M1$ and $M2$ `P * M` | Applies the pemutation $P$ to the rows of the matrix $M$ and returns the result `kronecker_product(M1, M2)` | Returns the Kronecker product of the matrices $M1$ and $M2$ `powers(M, j)` | Returns an array $Ar$ of matrices where $Ar[i + 1] = M^i$ for $i = 0..j$ `divexact(M, r)` | Returns $M/r$, i.e. the matrix where each of the entries has been divided by $r$ where $r \in R$. Each division is expected to be exact #### Multivariate Polynomial Rings Let $R$ be a ring. Code | Mathematics :---------- | ----------: `T, (x1,x2,x3) = PolynomialRing(R,["x1","x2","x3"])` | Given a base ring and an array of strings specifying how the generators should be printed, returns a tuple `T, (x1, x2, x3)` representing the polynomial ring $T = R[x1, x2, x3]$ with lexiographic order(default can be changed) and the corresponding generators `ordering(T)` | Returns the ordering of the given polynomial ring as a symbol. The options are `:lex`, `:deglex` and `:degrevlex` `base_ring(T)` | Returns the base ring $R$ of the polynomial ring $T$ `nvars(T)` | Returns the number of variables of the polynomial ring $T$ `gens(T)` | Returns an array of all generators of the given polynomial ring `gen(T,i)` | Returns the $i$-th generator of the given polynomial ring `f = x1 + x3^2` | Constructs the polynomial $f$ of $T$ `f = T([R(1), R(2)],[[1,0,0],[0,0,3]])` | Constructs the polynomial $f = x1+2*x3^3$ of $T$ `vars(f)` | Returns the variables actually occuring in the polynomial $f$ `var_index(x)` | Returns the index of the given variable $x$. If $x$ is not a variable in a multivariate polynomial ring, an exception is raised `coeff(f, [1, 3], [0, 2])` | Returns the coefficient of $x1^0*x3^2$ in the polynomial $f$ (assuming variables $x1, x2, x3$ in that order) `coeff(f, [x1, x3], [0, 2])` | Returns the coefficient of $x1^0*x3^2$ in the polynomial $f$ `ishomogeneous(f)` | Returns `true` if the given polynomial $f$ is homogeneous with respect to the standard grading and `false` otherwise `coeff(f, i)` | Returns the coefficient of the $i$-th term of the polynomial $f$ `monomial(f, i)` | Returns the monomial of the $i$-th term of the polynomial $f$ `lc(f)` | Returns the leading coefficient of the polynomial $f$ `lm(f)` | Returns the leading monomial of the polynomial $f$. `lt(f)` | Returns the leading term of the polynomial $f$ `term(f, i)` | Returns the $i$-th nonzero term of the polynomial $f$ `degrees(f)` | Returns an array of the degrees of the polynomial $f$ in terms of each variable `total_degree(f)` | Returns the total degree of $f$ `length(f)` | Returns the number of terms of the polynomial $f$ `ismonomial(f)` | Returns `true` if the given polynomial $f$ has precisely one term whose coefficient is one `isconstant(f)` | Returns `true` if $f$ is a constant polynomial `deflation(f)` | Returns the deflation parameters for the exponents of the polynomial $f$ `divides(f,g)` | If the polynomial $g$ divides $f$, returns Tuple (true,h) such that $f=gh$ `evaluate(f,[1,2,3])` | Evaluate the polynomial by substituting each variable in $f$ by the corresponding value in the array, i.e. returns $10 = 1 + 3^2$ `f(1,2,3)` | Evaluate the polynomial at the supplied values, which may be any ring elements, i.e. returns $10 = 1 + 3^2$ `derivative(f, x)` |Return the partial derivative of $f$ with respect to the variable $x$ of the polynomial ring `setcoeff!(f, i, c)` | Set the coefficient of the i-th term of the polynomial $f$ to $c$ `exponent_vector(f, i)` | Returns a vector of exponents, corresponding to the exponent vector of the i-th term of the polynomial `coeff(f, exps)` | Returns the coefficient of the term with the given exponent vector, or zero if there is no such term `sort_terms(f)` | Sort the terms of the given polynomial $f$ according to the polynomial ring ordering. Zero terms and duplicate exponents are ignored