没有使用包的快速矩阵求逆方法

7
假设我有一个正方形的矩阵M。 假设我想要求逆矩阵M
我正在尝试在我的矩阵M中使用gmpy2中的分数mpq类作为成员。 如果您不熟悉这些分数,它们在功能上类似于Python内置包fractions。 唯一的问题是,除非我将它们从分数形式中取出,否则没有软件包可以求出我的矩阵的逆。 我需要以分数形式获得数字和答案。 因此,我必须编写自己的函数来求矩阵M的逆。

我可以编写已知的算法,比如高斯消元法。然而,性能是一个问题,因此我的问题如下:

有没有计算速度快的算法可以用来计算矩阵M的逆矩阵?


1
任何合理快速的算法都必须以C语言作为扩展来实现。另一种方法是将它们全部乘以它们的最大公约数,或者只是它们的分母积,使它们成为整数,并使用带有C扩展和更多时间优化的软件包。这是O(n),所以除非反演算法比O(n)更好,否则它不会影响时间复杂度。 - Artyer
3
你看过 sympy 吗?它在与 gmpy2 和矩阵一起使用时效果很好:http://docs.sympy.org/dev/modules/matrices/matrices.html#linear-algebra - denfromufa
是的,但是sympy的求逆比手动编写高斯消元要慢。我可以分享我的高斯消元代码和基准测试结果。 - Paul Terwilliger
1个回答

4

你对这些矩阵还有什么了解吗?例如,对于对称 正定 矩阵,Cholesky 分解比你提到的标准高斯-约旦方法更快地进行反演。

对于一般矩阵反演,Strassen算法将给出比高斯-约旦更快的结果,但比Cholesky慢。

看起来你想要精确的结果,但如果你可以接受近似反演,那么有算法比之前提到的算法更快地逼近反演。

然而,你可能需要问自己,是否需要整个矩阵的反演来满足你的特定应用。根据你所做的事情,使用另一个矩阵属性可能更快。在我的经验中,计算矩阵的反演是一个不必要的步骤。

希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接