forked from rdpeng/ProgrammingAssignment2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cachematrix.R
51 lines (39 loc) · 1.7 KB
/
cachematrix.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
## This function creates a special "matrix" object that can cache its inverse.
makeCacheMatrix <- function(x = matrix()) {
invm <- NULL
##function to cache matrix and inverse in different environment
set <- function(y) {
x <<- y
invm <<- NULL
}
## Functions to get input maxtix, set and get the inverse matrix
get <- function() x
setinverse <- function(inverse) invm <<- inverse
getinverse <- function() invm
##return as list
list(set = set, get = get,
setinverse = setinverse,
getinverse = getinverse)
}
##This function computes the inverse of the special "matrix" returned by makeCacheMatrix above. If the inverse has already been calculated (and the matrix has not changed), then the cachesolve should retrieve the inverse from the cache.
cacheSolve <- function(x, ...) {
##check whether inverse is already calculated, if so, get from cache
invm <- x$getinverse()
if(!is.null(invm)) {
message("getting data from the cache...")
return(invm)
}
##get input matrix
data <- x$get()
##not needed for assignment, but check whether matrix is square or not!
if(nrow(data)==ncol(data)) {
##If square, then calculate inverse
invm <- solve(data, ...)
x$setinverse(invm)
return(invm)
} else {
#If NOT square, return message and NA
message("Matrix is not square, Cannot calculate inverse")
return(NA)
}
}