首页 > 解决方案 > Sympy - 仅在特定位置找到矩阵的逆?

问题描述

我在 Sympy 中有一个 8 x 8 矩阵。反转整个矩阵需要很长时间,因为在我的情况下,矩阵中每个单元格的符号表达式相当复杂。另外,我只对单个单元格(第一行和第一列)的矩阵逆值感兴趣。有没有办法只在单个位置计算逆,而不是在矩阵的所有 64 个位置计算值?

谢谢!

标签: pythonmatrixsympymatrix-inverse

解决方案


逆的一般公式是从辅因子的转置矩阵和行列式计算出来的,所以

In [8]: M = Matrix([[1, 4, 7], [3, 0, 5], [-1, 9, 11]])                                                                           

In [9]: M                                                                                                                         
Out[9]: 
⎡1   4  7 ⎤
⎢         ⎥
⎢3   0  5 ⎥
⎢         ⎥
⎣-1  9  11⎦

In [10]: M.inv()                                                                                                                  
Out[10]: 
⎡45/8   -19/8  -5/2⎤
⎢                  ⎥
⎢19/4   -9/4    -2 ⎥
⎢                  ⎥
⎣-27/8  13/8   3/2 ⎦

In [11]: M.cofactor(0, 0) / M.det()                                                                                               
Out[11]: 45/8

这需要计算两个行列式:一个用于整个矩阵,一个用于辅因子。在大 O 术语中,这是O(n**3)(与逆相同)但它可能比计算逆更快。

如果问题是表达式爆炸,那么我认为使用辅因子和行列式将无济于事,因为行列式计算仍然很慢。在这种情况下,您需要提供一个示例表达式来演示该问题。


推荐阅读