【问题标题】:Fast matrix inversion without a package无包快速矩阵求逆
【发布时间】:2017-11-03 23:57:11
【问题描述】:

假设我有一个正方形matrixM。假设我想invert 矩阵M

我正在尝试将gmpy2 中的分数mpq 类用作我的矩阵M 的成员。如果你不熟悉这些分数,它们在功能上类似于 python 的内置包fractions。唯一的问题是,除非我将它们从分数形式中取出,否则没有包会反转我的矩阵。我需要分数形式的数字和答案。所以我必须编写自己的函数来反转M

我可以编写一些已知算法,例如gaussian elimination。但是,性能是一个问题,所以我的问题如下:

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

【问题讨论】:

  • 任何合理的快速算法都必须在 C 中实现,作为扩展。另一种方法是将它们全部乘以它们的 GCD,或者只是它们的分母的乘积,以使它们成为整数,并使用带有 C 扩展的包和更多的时间来优化。这是O(n),所以除非要反转的算法优于O(n),否则不会影响时间复杂度。
  • 你看过sympy吗?它适用于 gmpy2 和矩阵:docs.sympy.org/dev/modules/matrices/…
  • 是的,但是 sympy 的反演比手动编码高斯消除要慢。我可以与基准共享我的高斯消除代码。

标签: python matrix matrix-inverse


【解决方案1】:

您对这些矩阵还有什么了解吗?例如,对于symmetricpositive definite 矩阵,Cholesky 分解允许您比您提到的标准 Gauss-Jordan 方法更快地进行反演。

对于一般的矩阵求逆,Strassen algorithm 将提供比 Gauss-Jordan 更快但比 Cholesky 慢的结果。

您似乎想要精确的结果,但如果您对近似反演没问题,那么有些算法可以比前面提到的算法更快地逼近反演。

但是,您可能想问自己是否需要针对特定​​应用的整个矩阵逆矩阵。根据您在做什么,使用另一个矩阵属性可能会更快。根据我的经验,计算矩阵逆是一个不必要的步骤。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2013-05-05
    • 2011-08-30
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多