R 缓存矩阵的逆矩阵
晚安。我当然有作业。但是我有两天的时间来解决我的问题 我的作业是: 编写以下函数: makeCacheMatrix:该函数创建一个特殊的矩阵对象,可以缓存其逆矩阵。 cacheSolve:此函数计算上面makeCacheMatrix返回的特殊矩阵的逆。如果已经计算了逆运算且矩阵没有更改,则cachesolve应该从缓存中检索逆运算。 可以使用R中的solve函数计算平方矩阵的逆。例如,如果X是平方可逆矩阵,则solveX返回其逆 我使用库matlib计算矩阵的逆R 缓存矩阵的逆矩阵,r,R,晚安。我当然有作业。但是我有两天的时间来解决我的问题 我的作业是: 编写以下函数: makeCacheMatrix:该函数创建一个特殊的矩阵对象,可以缓存其逆矩阵。 cacheSolve:此函数计算上面makeCacheMatrix返回的特殊矩阵的逆。如果已经计算了逆运算且矩阵没有更改,则cachesolve应该从缓存中检索逆运算。 可以使用R中的solve函数计算平方矩阵的逆。例如,如果X是平方可逆矩阵,则solveX返回其逆 我使用库matlib计算矩阵的逆 library(matlib)
library(matlib)
makeCacheMatrix <- function(x = matrix()) {
if (ncol(x)==nrow(x) && det(x)!=0) {
m<-NULL
set<-function(y){
x<<-y
m<<-NULL
}
get<-function() x
setinverse <- function() m <<- inv(x)
getinverse<-function() m
list(set=set,get=get,setinverse=setinverse,getinverse=getinverse)
}else{
return(message("The matrix is'n invertible."))
}
}
cacheSolve <- function(x, ...) {
m<-x$getinverse
if (!is.null(m)) {
message("getting cached data")
return(m)
}
data<-x$get
m <- inv(data, ...)
x$setinverse(m)
m
}
但是当我尝试测试我的代码时
x<-makeCacheMatrix(matrix(c(1,0,0,0,1,0,0,0,2),ncol=3,nrow=3))
x$get()
x$getinverse()
我得到一个空结果。我不知道我的代码有什么问题。有人能帮我吗?给定OP中的代码,x$getinverse应该返回NULL,因为必须执行cacheSolve才能填充缓存。我将在stackoverflow答案中详细解释此赋值的示例代码的工作原理,包括第二个函数填充缓存的需要
这就是说,该程序有三个缺陷,使其无法正常运行
在cacheSolve中,m
> x <-makeCacheMatrix(matrix(c(1,0,0,0,1,0,0,0,2),ncol=3,nrow=3))
> cacheSolve(x)
[,1] [,2] [,3]
[1,] 1 0 0.0
[2,] 0 1 0.0
[3,] 0 0 0.5
> x$get()
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 2
> x$getinverse()
[,1] [,2] [,3]
[1,] 1 0 0.0
[2,] 0 1 0.0
[3,] 0 0 0.5
>