Coursera R编程作业:makeCacheMatrix未返回矩阵逆的问题求助
问题分析与解决:makeCacheMatrix未返回矩阵逆的原因
你的makeCacheMatrix代码本身没有问题,问题出在对这个函数的设计目的和作业要求的理解上:
核心误解
makeCacheMatrix的作用不是直接返回矩阵的逆,而是创建一个带缓存机制的矩阵对象——它封装了四个方法:
set: 设置矩阵内容get: 获取矩阵内容setinverse: 缓存矩阵的逆getinverse: 获取缓存的逆矩阵
你看到的方法列表输出是完全正常的,这就是这个函数要返回的对象。
完整解决方案
要得到矩阵的逆,你需要配合实现cacheSolve函数,它会利用makeCacheMatrix创建的对象来完成逆矩阵的计算与缓存:
1. 保留你的makeCacheMatrix代码
makeCacheMatrix <- function(x = matrix()) { inv <- NULL set <- function(y) { x <<- y inv <<- NULL } get <- function() x setinverse <- function(solve) inv <<- solve getinverse <- function() inv list(set = set, get = get, setinverse = setinverse, getinverse = getinverse) }
2. 实现cacheSolve函数
cacheSolve <- function(x, ...) { # 检查是否已有缓存的逆矩阵 inv <- x$getinverse() if(!is.null(inv)) { message("getting cached data") return(inv) } # 如果没有缓存,计算逆矩阵并缓存 data <- x$get() inv <- solve(data, ...) x$setinverse(inv) inv }
3. 正确调用步骤
# 创建原始矩阵 a <- matrix(c(1,2,3,4),2,2) # 创建缓存矩阵对象 cache_matrix <- makeCacheMatrix(a) # 第一次调用:计算并返回逆矩阵 cacheSolve(cache_matrix) # 第二次调用:直接返回缓存的逆矩阵,会打印提示信息 cacheSolve(cache_matrix)
运行后就能得到你预期的逆矩阵结果:
[,1] [,2] [1,] -2 1.5 [2,] 1 -0.5
额外说明
- 不需要安装额外库(比如MatLib),R内置的
solve函数完全可以处理可逆矩阵的逆计算。 - 作业要求的
makeCacheMatrix是缓存机制的基础,必须配合cacheSolve才能完成完整的缓存逆矩阵功能,这是Coursera R编程作业的标准设计。
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

