diff --git a/cachematrix.R b/cachematrix.R index a50be65aa44..f3289f1e784 100644 --- a/cachematrix.R +++ b/cachematrix.R @@ -3,13 +3,64 @@ ## Write a short comment describing this function -makeCacheMatrix <- function(x = matrix()) { - +makeCacheMatrix <- function( m = matrix() ) { + + ## Initialize the inverse property + i <- NULL + + ## Method to set the matrix + set <- function( matrix ) { + m <<- matrix + i <<- NULL + } + + ## Method the get the matrix + get <- function() { + ## Return the matrix + m + } + + ## Method to set the inverse of the matrix + setInverse <- function(inverse) { + i <<- inverse + } + + ## Method to get the inverse of the matrix + getInverse <- function() { + ## Return the inverse property + i + } + + ## Return a list of the methods + list(set = set, get = get, + setInverse = setInverse, + getInverse = getInverse) } + ## Write a short comment describing this function cacheSolve <- function(x, ...) { - ## Return a matrix that is the inverse of 'x' + + ## Return a matrix that is the inverse of 'x' + m <- x$getInverse() + + ## Just return the inverse if its already set + if( !is.null(m) ) { + message("getting cached data") + return(m) + } + + ## Get the matrix from our object + data <- x$get() + + ## Calculate the inverse using matrix multiplication + m <- solve(data) %*% data + + ## Set the inverse to the object + x$setInverse(m) + + ## Return the matrix + m }