Skip to main content
Logo image

Appendix A Sage Reference

We have introduced a number of Sage commands throughout the text, and the most important ones are summarized here in a single place.
Accessing Sage
In addition to the Sage cellls included throughout the book, there are a number of ways to access Sage.
  1. There is a freely available Sage cell at
  2. You can save your Sage work by creating an account at and working in a Sage worksheet.
  3. There is a page of Sage cells at The results obtained from evaluating one cell are available in other cells on that page. However, you will lose any work once the page is reloaded.
Creating matrices
There are a couple of ways to create matrices. For instance, the matrix
\begin{equation*} \begin{bmatrix} -2 \amp 3 \amp 0 \amp 4 \\ 1 \amp -2 \amp 1 \amp -3 \\ 0 \amp 2 \amp 3 \amp 0 \\ \end{bmatrix} \end{equation*}
can be created in either of the two following ways.
  1. matrix(3, 4, [-2, 3, 0, 4,
                   1,-2, 1,-3,
    	       0, 2, 3, 0])
  2. matrix([ [-2, 3, 0, 4],
             [ 1,-2, 1,-3],
    	 [ 0, 2, 3, 0] ])
Be aware that Sage can treat mathematically equivalent matrices in different ways depending on how they are entered. For instance, the matrix
matrix([ [1, 2],
         [2, 1] ])
has integer entries while
matrix([ [1.0, 2.0],
         [2.0, 1.0] ])
has floating point entries.
If you would like the entries to be considered as floating point numbers, you can include RDF in the definition of the matrix.
matrix(RDF, [ [1, 2],
              [2, 1] ])
Special matrices
The \(4\times 4\) identity matrix can be created with
A diagonal matrix can be created from a list of its diagonal entries. For instance,
Reduced row echelon form
The reduced row echelon form of a matrix can be obtained using the rref() function. For instance,
A = matrix([ [1,2], [2,1] ])
A vector is defined by listing its components.
v = vector([3,-1,2])
The + operator performs vector and matrix addition.
v = vector([2,1])
w = vector([-3,2])
A = matrix([[2,-3],[1,2]])
B = matrix([[-4,1],[3,-1]])
The * operator performs scalar multiplication of vectors and matrices.
v = vector([2,1])
A = matrix([[2,1],[-3,2]])	    
Similarly, the * is used for matrix-vector and matrix-matrix multiplication.
A = matrix([[2,-3],[1,2]])
v = vector([2,1])	    
B = matrix([[-4,1],[3,-1]])
Operations on vectors
  1. The length of a vector v is found using v.norm().
  2. The dot product of two vectors v and w is v*w.
Operations on matrices
  1. The transpose of a matrix A is obtained using either A.transpose() or A.T.
  2. The inverse of a matrix A is obtained using either A.inverse() or A^-1.
  3. The determinant of A is A.det().
  4. A basis for the null space \(\nul(A)\) is found with A.right_kernel().
  5. Pull out a column of A using, for instance, A.column(0), which returns the vector that is the first column of A.
  6. The command A.matrix_from_columns([0,1,2]) returns the matrix formed by the first three columns of A.
Eigenvectors and eigenvalues
  1. The eigenvalues of a matrix A can be found with A.eigenvalues(). The number of times that an eigenvalue appears in the list equals its multiplicity.
  2. The eigenvectors of a matrix having rational entries can be found with A.eigenvectors_right().
  3. If \(A\) can be diagonalized as \(A=PDP^{-1}\text{,}\) then
    D, P = A.right_eigenmatrix()
    provides the matrices D and P.
  4. The characteristic polynomial of A is A.charpoly('x') and its factored form A.fcp('x').
Matrix factorizations
  1. The \(LU\) factorization of a matrix
    P, L, U = A.LU()	    
    gives matrices so that \(PA = LU\text{.}\)
  2. A singular value decomposition is obtained with
    U, Sigma, V = A.SVD()	    
    It’s important to note that the matrix must be defined using RDF. For instance, A = matrix(RDF, 3,2,[1,0,-1,1,1,1]).
  3. The \(QR\) factorization of A is A.QR() provided that A is defined using RDF.