首页 > 解决方案 > 计算复矩阵的行列式以检查特征值计算

问题描述

我正在尝试解决 python 上的经典特征值问题:uFA + EA = 0 其中 u 是问题的特征值,F 和 E 是(20x20)矩阵,A 是特征向量。

所以首先我尝试使用 numpy.linalg.eig(-F^-1E) 来计算问题的特征值 u。特征值是复共轭的。然后我尝试计算 numpy.linalg.det(F^-1E+u*Id) 来检查特征值。它应该返回 0 或非常接近 0 的值,但结果大约是 10e50,这没有任何意义。

然后我决定使用 scipy.linalg.eigvals(-E,F) 来避免反转 F 并检查我计算的结果 numpy.linalg.det(E+u*F) 并且结果再次在 10e50 左右并且不关闭为零。

我不明白问题出在哪里,我尝试了一个较小的问题:

- 对于 (4x4) 矩阵,行列式约为 10e-8

- 对于 (6x6) 矩阵,行列式约为 10e-4

- 对于 (8x8) 矩阵,行列式约为 10e4

我认为这可能来自矩阵的大小,但 (8x8) 并没有那么大,并且行列式已经比 0 大很多。对于 (20x20) 矩阵,也有大约 10e7 的项,而其他项大约是 1,可能吗造成问题?

感谢您的帮助,我真的不知道如何使这项工作。

Edit1:在 (20x20) 维度中添加了 E 和 F 矩阵

Edit2:我计算了矩阵 F^-1E+u*Id 的秩,当矩阵大小为 (20x20) 时它等于 19,所以我认为特征值是正确的。我猜这个问题来自行列式计算。

矩阵 E:

矩阵 E

矩阵 F:

矩阵 F

标签: pythonnumpymatrixeigenvaluedeterminants

解决方案


推荐阅读