Processing math: 100%

How to Calculate the Inverse Matrix for 2×2 and 3×3 Matrices

is 18, the inverse of 20 is 120 and so on. Therefore, a number multiplied by its inverse will always equal 1. An inverse of a number is denoted with a 1 superscript.

Inverses of Numbers and Matrices

The inverse of a number is its reciprocal. For example, the inverse of 8 is 18, the inverse of 20 is 120 and so on. Therefore, a number multiplied by its inverse will always equal 1. An inverse of a number is denoted with a 1 superscript.

x1x=xx1=x1x=1

The inverse of a matrix A is another matrix denoted by A1 and is defined as:

A1A=AA1=I

Where I is the identity matrix. Thus, similar to a number and its inverse always equaling 1, a matrix multiplied by its inverse equals the identity.

This post will explore several concepts related to the inverse of a matrix, including linear dependence and the rank of a matrix. Afterward, the method of computing an inverse (if one exists) of a 2×2 or 3×3 matrix shall be demonstrated. Finding the inverse of a square matrix with 4 columns is computationally intensive and best left to R's built-in linear algebra routines which are built on LINPACK and LAPACK. Here is an excellent resource that lists the linear algebra operations available in R. Here is a good resource on how to compute a 4x4 inverse matrix manually for those interested.

The example inverse matrix problems used in the post are from Jim Hefferon's excellent book Linear Algebra on page 249. I highly recommend the book to those learning more about linear algebra. The book is free to download and comes with many exercises and other features.

Linear Dependence of a Matrix

The following matrix A has three column vectors.

A=[223123423]

Notice the second column vector is a multiple of the third column. The matrix is therefore linearly dependent as the matrix contains a column vector that is a multiple of another. The matrix is linearly independent when no column vector can be expressed as a multiple of another vector in the matrix.

[222]=32[333]

Rank of a Matrix

The rank of a matrix is the maximum number of linearly independent columns or linearly independent rows in the matrix. Therefore, the rank of a row×column matrix is the minimum of the two values. For example, the above matrix would have a rank of 1. Inverses only exist for a square r×r matrix with rank r, which is called a full rank or nonsingular matrix.

Computing an inverse matrix

Consider a 2x2 matrix:

A2×2=[abcd]

The 2×2 inverse matrix is then:

A12×2=[abcd]1=1D[dbca]

Where D=adbc. D is called the determinant of the matrix.

The 3×3 matrix can be defined as:

B3×3=[abcdefghk]

Then the inverse matrix is:

B13×3=[abcdefghk]1=1det(B)[(ekfh)(bkch)(bfce)(dkfg)(akcg)(afcd)(dheg)(ahbg)(aebd)]

Where det(B) is equal to:

det(B)=a(ekfh)b(dkfg)+c(dheg)

The following function implements a quick and rough routine to find the inverse of a 2×2 or 3×3 matrix should one exist.

matrix.inverse <- function(mat) {
  A <- as.matrix(mat)

  # If there are more than four columns in the supplied matrix, stop routine
  if ((ncol(A) >= 4) | (nrow(A) >= 4)) {
    stop('Matrix is not 2x2 or 3x3')
  }

  # Stop if matrix is a single column vector
  if (ncol(A) == 1) {
    stop('Matrix is a vector')
  }

  # 2x2 inverse matrix
  if(ncol(A) == 2) {
    # Determinant
    a <- A[1]
    b <- A[3]
    c <- A[2]
    d <- A[4]
    det <- a * d - b * c
    # Check to see if matrix is singular
    if (det == 0) {
      stop('Determinant of matrix equals 0, no inverse exists')
    }
    # Compute inverse matrix elements
    a.inv <- d / det
    b.inv <- -b / det
    c.inv <- -c / det
    d.inv <- a / det
    # Collect the results into a new matrix
    inv.mat <- as.matrix(cbind(c(a.inv,c.inv), c(b.inv,d.inv)))
  }

  # 3x3 inverse matrix
  if (ncol(A) == 3) {
    # Extract the entries from the matrix
    a <- A[1]
    b <- A[4]
    c <- A[7]
    d <- A[2]
    e <- A[5]
    f <- A[8]
    g <- A[3]
    h <- A[6]
    k <- A[9]

    # Compute the determinant and check that it is not 0
    det <- a * (e * k - f * h) - b * (d * k - f * g) + c * (d * h - e * g)
    if (det == 0) {
      stop('Determinant of matrix equals 0, no inverse exists')
    }

    # Using the equations defined above, calculate the inverse matrix entries.
    A.inv <- (e * k - f * h) / det
    B.inv <- -(b * k - c * h) / det
    C.inv <- (b * f - c * e) / det
    D.inv <- -(d * k - f * g) / det
    E.inv <- (a * k - c * g) / det
    F.inv <- -(a * f - c * d) / det
    G.inv <- (d * h - e * g) / det
    H.inv <- -(a * h - b * g) / det
    K.inv <- (a * e - b * d) / det

    # Collect the results into a new matrix
    inv.mat <- as.matrix(cbind(c(A.inv,D.inv,G.inv), c(B.inv,E.inv,H.inv), c(C.inv,F.inv,K.inv)))
  }

return(inv.mat)
}

The results from the above function can be used to verify the definitions and equations of the inverse matrix above in conjunction with R's built-in methods.

A <- as.matrix(cbind(c(3,0),c(1,2)))
A
##      [,1] [,2]
## [1,]    3    1
## [2,]    0    2
A1 <- matrix.inverse(A)
A1
##           [,1]       [,2]
## [1,] 0.3333333 -0.1666667
## [2,] 0.0000000  0.5000000
solve(A)
##           [,1]       [,2]
## [1,] 0.3333333 -0.1666667
## [2,] 0.0000000  0.5000000
B <- as.matrix(cbind(c(1,0,-1), c(1,2,1), c(3,4,0)))
B
##      [,1] [,2] [,3]
## [1,]    1    1    3
## [2,]    0    2    4
## [3,]   -1    1    0
B1 <- matrix.inverse(B)
B1
##      [,1] [,2] [,3]
## [1,]    2 -1.5    1
## [2,]    2 -1.5    2
## [3,]   -1  1.0   -1
solve(B)
##      [,1] [,2] [,3]
## [1,]    2 -1.5    1
## [2,]    2 -1.5    2
## [3,]   -1  1.0   -1

Recall the product of the matrix and its inverse will always equal the identity matrix.

A %*% A1
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
B %*% B1
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1

Matrices that are singular or not of full rank will have a determinant of 0, and thus no inverse exists.

C <- as.matrix(cbind(c(2,-1),c(-4,2)))
C
##      [,1] [,2]
## [1,]    2   -4
## [2,]   -1    2
solve(C)
## Error in solve.default(C): Lapack routine dgesv: system is exactly singular: U[2,2] = 0
D <- as.matrix(cbind(c(2,1,4),c(2,-2,-2),c(3,-3,-3)))
D
##      [,1] [,2] [,3]
## [1,]    2    2    3
## [2,]    1   -2   -3
## [3,]    4   -2   -3
solve(D)
## Error in solve.default(D): Lapack routine dgesv: system is exactly singular: U[3,3] = 0

Summary

The inverse matrix was explored by examining several concepts such as linear dependency and the rank of a matrix. The method of calculating an inverse of a 2×2 and 3×3 matrix (if one exists) was also demonstrated. As stated earlier, finding an inverse matrix is best left to a computer, especially when dealing with matrices of 4×4 or above.

References

Hefferon, J. (n.d.). Linear Algebra

Inverse matrix of 2x2 matrix, 3x3 matrix, 4x4 matrix. Retrieved August 10, 2016, from http://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/teche23.html

Kutner, M. H., Nachtsheim, C. J., Neter, J., Li, W., & Wasserman, W. (2004). Applied linear statistical models (5th ed.). Boston, MA: McGraw-Hill Higher Education.

Related Posts