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

solve(a,a)与solve(a)%*%a结果不同?求解R语言矩阵运算问题

R语言solve()函数结果差异的原因

先看你的代码运行后的实际结果:

a <- matrix(c(1, 2, 1, -1), 2, 2, byrow=T)
solve(a, a)
#      [,1] [,2]
# [1,]    1    0
# [2,]    0    1

solve(a) %*% a
#            [,1]        [,2]
# [1,] 1.000000e+00 2.220446e-16
# [2,] 0.000000e+00 1.000000e+00

两者看起来有差异,核心原因是浮点数数值计算的精度限制:

  • solve(a, a)是直接求解线性方程组a %*% x = a,算法内部会针对这种特殊情况(右侧矩阵等于系数矩阵)做优化,直接返回理论上的解——单位矩阵,误差被控制到最小。
  • solve(a)先计算矩阵a的逆矩阵,再通过%*%做矩阵乘法和a相乘。这个过程涉及两次独立的数值运算(求逆+乘法),误差会累积,最终产生接近0的极小值(比如2.220446e-16,这是双精度浮点数的机器epsilon,本质上和0没有区别)。

如果要验证两者是否在数值意义上相等,可以用all.equal()函数:

all.equal(solve(a,a), solve(a)%*%a)
# [1] TRUE

这个函数会忽略浮点数的微小误差,判断两者是否实际等价。

内容的提问来源于stack exchange,提问作者Hoseong Jeon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:06