我有一个问题,要求我证明矩阵 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 阶立方计算,因此甚至可以用于相当大的矩阵。
然而,这种分解(有点(不准确;原始矩阵不会完全等于乘积。因此,行列式也很可能有点不准确。