我有一个问题,我被要求证明矩阵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/再次检查了我的答案,行列式绝对是零。
我觉得我在做一些可笑的愚蠢的事情,但不能完全弄清楚是什么。有什么帮助吗?
发布于 2020-01-30 05:57:50
你看到的是非常小的数字,几乎等于零。它们并不完全等于零,这仅仅是由于数字上的不准确。
这就是为什么我们通常不测试它们的等价性,而是测试它们的紧密性
np.allclose(np.linalg.det(B), 0). # True
发布于 2020-01-30 20:27:03
要对Nils进行一点扩展,答案是:
有多种方法可以计算行列式。代数课上教授的方法-- laplace expansion --对于较小的(如3x3)矩阵来说是一种合理的方法,但很快就变得不可能了--因为需要大量的计算--对于较大的矩阵。
在您的例子中,所有实部和虚部都是小整数,这样的计算将精确地计算行列式为0。
在python中,linalg.det使用了一种不同的方法,将矩阵分解为因子--三角矩阵和排列--其行列式很容易计算,然后乘积的行列式就是这些因子的行列式的乘积。这是一个N阶的立方体计算,因此即使是非常大的矩阵也可以使用。
然而,这样的因子分解是(有点)不准确的;原始矩阵不会与乘积完全相等。因此,行列式也很可能有一点不准确。
https://stackoverflow.com/questions/59976159
复制相似问题