You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:40:04