python - 计算复矩阵的行列式以检查特征值计算
问题描述
我正在尝试解决 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:
矩阵 F:
解决方案
推荐阅读
- python - 如何在pygame中让球移动而不是拉伸?
- android - 如何从资产重新创建房间数据库?
- angular - 使用 Angular 8 中的 Redux 在 1 个效果中返回 2 个动作
- dialogflow-es - 如何在 Dialogflow 实现中捕获 Facebook 卡响应按钮单击事件
- python - TypeError: f() 接受 1 个位置参数,但给出了 2 个
- laravel - 使用 GuzzleHttp 对象数组在 PHP 中使用 Shopify API
- reactjs - NextJS router.push 奇怪的链接
- docker - Docker 将环境变量添加到崩溃的容器中
- sql - 根据唯一日期选择记录并计算该日期的记录数
- security - Heroku 的 .netrc 文件是否不会被其他程序渗透?Heroku 如何确保其代币不会被恶意使用?