Numpy 矩阵行列式未按预期工作?



我有一个问题,要求我证明矩阵 B 的行列式等于 0。 矩阵 B 定义为:

import numpy as np
from numpy import linalg as m
B = np.array([[-1-3.j,-8-10.j,0-3.j], 
[-7-3.j,-4-9.j,-3-2.j], 
[11-3.j,-16-12.j,6-5.j] 
])
print(B)
[[ -1. -3.j  -8.-10.j   0. -3.j]
[ -7. -3.j  -4. -9.j  -3. -2.j]
[ 11. -3.j -16.-12.j   6. -5.j]]

行列式很简单,使用numpy

m.linalg.det(B)
(-8.126832540256171e-14-1.5987211554602298e-14j)

这显然不等于零。

我用 https://www.symbolab.com/仔细检查了我的答案,行列式肯定为零。

我觉得我正在做一件非常愚蠢的事情,但又不知道是什么。有什么帮助吗?

你看到的实际上是几乎等于零的微小数字。它们不完全等于零只是由于数值不准确。

这就是为什么我们通常不测试他们的平等,而是测试他们的亲密程度。

np.allclose(np.linalg.det(B), 0). # True

要稍微扩展一下尼尔斯的答案:

有多种方法可以计算行列式。代数课上教授的方式 - 拉普拉斯展开 - 是用于小矩阵(例如3 x 3(矩阵的合理方法,但由于需要计算的数量,对于较大的矩阵,很快就变得不可能了。

在您的情况下,所有实部和虚部都是小整数,这样的计算将精确地计算行列式,即 0。

在python中,linalg.det使用了一种不同的方法,将矩阵分解为因子 - 三角矩阵和排列 - 其行列式可以很容易地计算出来,然后乘积的行列式是因子行列式的乘积。这是一个 N 阶立方计算,因此甚至可以用于相当大的矩阵。

然而,这种分解(有点(不准确;原始矩阵不会完全等于乘积。因此,行列式也很可能有点不准确。

相关内容

  • 没有找到相关文章

最新更新