Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics, http://friendly.github.io/matlib/
Version 0.9.9
These functions were originally designed for tutorial purposes in teaching & learning matrix algebra ideas using R. In some cases, functions are provided for concepts or computations available elsewhere in R, but where the name is not obvious, e.g., R()
for the rank of a matrix, or tr()
for matrix trace.
In other cases, we provide cover functions to show or demonstrate an algorithm in more detail, sometimes providing a verbose =
argument to print the details of computations, e.g., Det()
for a matrix determinant, Inverse()
for a matrix inverse, using gaussianElimination()
to show the steps.
In addition, a collection of functions are provided for drawing vector diagrams in 2D and 3D, illustrating various concepts of linear algebra more concretely than has been available before. For example,
showEqn(A, b)
shows the matrix equations $A x = b$ in text or LaTeX form, whileplotEqn(A, b)
andplotEqn3d(A, b)
plots those equations in 2D or 3D space.matrix2latex()
andlatexMatrix()
facilitate writing matrix equations in LaTeXvectors()
,vectors3d()
plot geometric vector diagrams in 2D or 3D, with other functions to draw angles and arcs.regvec3d()
calculates and plot vectors representing a bivariate regression model,lm(y ~ x1 + x2)
Installation
Get the released version from CRAN:
Or the development version from my Runiverse:
install.packages('matlib', repos = c('https://friendly.runiverse.dev', 'https://cloud.rproject.org'))
The development version can also be installed to your R library directly from this repo via:
if (!require(remotes)) install.packages("remotes")
remotes::install_github("friendly/matlib", build_vignettes = TRUE)
The functions that draw 3D graphs use the rgl package. On macOS, rgl requires that XQuartz be installed. After installing XQuartz, itβs necessary either to log out of and back into your macOS account or to reboot your Mac.
Topics
The functions in this package are grouped under the following topics
 Convenience functions:

tr()
 trace of a matrix 
R()
 rank of a matrix 
J()
 constant vector, matrix or array 
len()
 Euclidean length of a vector or columns of a matrix 
vec()
 vectorize a matrix 
Proj(y, X)
 projection of vector y on columns of matrix X 
mpower(A, p)
 matrix powers for a square symmetric matrix 
xprod(...)
 vector crossproduct
 Determinants: functions for calculating determinants by cofactor expansion

minor()
 Minor of A[i,j] 
cofactor()
 Cofactor of A[i,j] 
rowMinors()
 Row minors of A[i,] 
rowCofactors()
 Row cofactors of A[i,] 
Det()
 Determinants by elimination or eigenvalues
 Elementary row operations: functions for solving linear equations βmanuallyβ by the steps used in row echelon form and Gaussian elimination

rowadd()
 Add multiples of rows to other rows 
rowmult()
 Multiply rows by constants 
rowswap()
 Interchange two rows of a matrix
 Linear equations: functions to illustrate linear equations of the form $\mathbf{A x = b}$

showEqn(A, b)
 show matrices (A, b) as linear equations 
plotEqn(A, b)
,plotEqn3d(A, b)
 plot matrices (A, b) as linear equations

Gaussian elimination: functions for illustrating Gaussian elimination for solving systems of linear equations of the form $\mathbf{A x = b}$. These functions provide a
verbose=TRUE
argument to show the intermediate steps and afractions=TRUE
argument to show results usingMASS::fractions()
.

gaussianElimination(A, B)
 reduces $(A, B)$ to $(I, A^{1} B)$ 
Inverse(X)
,inv()
 usesgaussianElimination
to find the inverse of X, $\mathbf{X}^{1}$ 
echelon(X)
 usesgaussianElimination
to find the reduced echelon form of X 
Ginv(X)
 usesgaussianElimination
to find the generalized inverse of X 
LU(X)
 LU decomposition of a matrix X 
cholesky(X)
 calculates a Cholesky square root of a matrix 
swp()
 matrix sweep operator
 Eigenvalues: functions to illustrate the algorithms for calculating eigenvalues and eigenvectors and related matrix decompositions and generalizations.

Eigen()
 eigenvalues and eigenvectors 
SVD()
 singular value decomposition, $mathbf{X = U D V}$ 
powerMethod()
 find the dominant eigenvector using the power method 
showEig()
 draw eigenvectors on a 2D scatterplot with a dataEllipse 
MoorePenrose()
 illustrates how the MoorePenrose inverse can be calculated usingSVD()
 Vector diagrams: functions for drawing vector diagrams in 2D and 3D

arrows3d()
 draw nice 3D arrows 
corner()
,arc()
 draw a corner or arc showing the angle between two vectors in 2D/3D 
pointOnLine()
 position of a point along a line 
vectors()
,vectors3d()
 plot geometric vector diagrams in 2D/3D 
regvec3d()
 calculate and plot vectors representing a bivariate regression model,lm(y ~ x1 + x2)
in meandeviation form.
 Matrix equations

matrix2latex()
: Convert matrix to LaTeX equation 
latexMatrix()
: Create and manipulate LaTeX repesentations of matrices
Vignettes and presentations
A small collection of vignettes is now available. Use browseVignettes("matlib")
to explore them.
Vignette  Title 

detex1  Properties of determinants 
detex2  Evaluation of determinants 
invex1  Inverse of a matrix 
invex2  Matrix inversion by elementary row operations 
ginv  Generalized inverse 
eigenex1  Eigenvalues and Eigenvectors: Properties 
eigenex2  Eigenvalues: Spectral Decomposition 
linearequations  Solving Linear Equations 
gramreg  GramSchmidt Orthogonalization and Regression 
databeta  Vector Spaces of Least Squares and Linear Equations 
See also:
Fox & Friendly, Visualizing Simultaneous Linear Equations, Geometric Vectors, and LeastSquares Regression with the matlib Package for R, June 2016, useR! Conference, Stanford.
Ivan Savov, Linear algebra explained in four pages