R 缓存矩阵的逆矩阵

R 缓存矩阵的逆矩阵,r,R,晚安。我当然有作业。但是我有两天的时间来解决我的问题 我的作业是: 编写以下函数: makeCacheMatrix:该函数创建一个特殊的矩阵对象,可以缓存其逆矩阵。 cacheSolve:此函数计算上面makeCacheMatrix返回的特殊矩阵的逆。如果已经计算了逆运算且矩阵没有更改,则cachesolve应该从缓存中检索逆运算。 可以使用R中的solve函数计算平方矩阵的逆。例如,如果X是平方可逆矩阵,则solveX返回其逆 我使用库matlib计算矩阵的逆 library(matlib)

晚安。我当然有作业。但是我有两天的时间来解决我的问题

我的作业是:

编写以下函数:

makeCacheMatrix:该函数创建一个特殊的矩阵对象,可以缓存其逆矩阵。 cacheSolve:此函数计算上面makeCacheMatrix返回的特殊矩阵的逆。如果已经计算了逆运算且矩阵没有更改,则cachesolve应该从缓存中检索逆运算。 可以使用R中的solve函数计算平方矩阵的逆。例如,如果X是平方可逆矩阵,则solveX返回其逆

我使用库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
>