Python NumPy与Excel MINVERSE矩阵逆结果不一致,以哪个为准?
矩阵逆计算结果差异的原因与判定方法
矩阵2的理论精确逆
你测试的两个矩阵都是下三角结构,矩阵2的精确逆可以通过线性代数规则直接推导,结果为:
[[ 1, 0, 0 ], [-0.8, 0.2, 0 ], [-0.06666667, -0.17777778, 0.11111111]]
下三角矩阵的逆一定也是下三角矩阵——也就是所有行号小于列号的位置,元素理论值必须为0。
NumPy输出中微小值的本质
你看到的-6.16790569e-18、1.23358114e-17这类数值,完全是浮点数计算的正常舍入误差:
- 这些位置属于下三角逆矩阵的上三角区域,理论值本来就该是0
- NumPy调用的是LAPACK工业级线性代数库,计算过程中会产生量级在
1e-16级别的机器精度误差,这个量级的数和0没有实际区别,完全可以忽略 - 去掉这些微小误差后,NumPy的输出和理论精确逆完全匹配
与Excel结果产生差异的常见原因
矩阵1的计算结果两者一致,说明Excel的MINVERSE函数本身没有问题,矩阵2出现差异大概率是以下两类情况:
- 输入矩阵2时的单元格位置错位:比如把某行的元素放错列、把行和列的方向搞反,导致Excel计算的根本不是你想要求逆的那个矩阵
- 两者的浮点数处理逻辑不同:Excel对计算结果的截断规则和LAPACK有差异,可能会把本该是0的微小误差输出成有明显大小的数值
可靠结果的判定方法
不需要凭工具的权威性做判断,直接做矩阵乘法验证即可:
将原矩阵和待验证的逆矩阵做矩阵乘法,计算结果越接近单位矩阵,说明这个逆矩阵的计算越准确
可直接运行以下NumPy代码做验证:
# 计算原矩阵与NumPy输出逆的乘积 print(B @ Binv)
输出结果中,非对角线元素的误差都是1e-16量级,完全符合数值计算的精度要求。如果Excel计算出的逆矩阵乘原矩阵的误差远大于这个量级,那Excel的结果一定是错的。
内容的提问来源于stack exchange,提问作者TechnoMancer
相关产品推荐
相关产品推荐

