python - Sympy - 仅在特定位置找到矩阵的逆?
问题描述
我在 Sympy 中有一个 8 x 8 矩阵。反转整个矩阵需要很长时间,因为在我的情况下,矩阵中每个单元格的符号表达式相当复杂。另外,我只对单个单元格(第一行和第一列)的矩阵逆值感兴趣。有没有办法只在单个位置计算逆,而不是在矩阵的所有 64 个位置计算值?
谢谢!
解决方案
逆的一般公式是从辅因子的转置矩阵和行列式计算出来的,所以
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)
(与逆相同)但它可能比计算逆更快。
如果问题是表达式爆炸,那么我认为使用辅因子和行列式将无济于事,因为行列式计算仍然很慢。在这种情况下,您需要提供一个示例表达式来演示该问题。
推荐阅读
- ruby-on-rails - 什么决定了 rails 是否在表定义中包含 id: :serial ?
- node.js - 如何将字符串拆分为数对?
- timber - 在 Timber $context['posts'] 对象中操作帖子顺序
- json - 使用带有 AJAX 表单的 Django 更新模型值的最简单方法
- java - 如何解决由于多线程而将对象两次添加到 Set 的问题?
- php - Laravel 队列推送监听器 - 队列监控
- python - 为什么 pip install 不适用于 catboost?
- javascript - 清除匿名 setInterval
- amazon-web-services - 限制子句不适用于包含 json 数组的 Amazon S3 文件
- firebase - 如何在没有身份验证的情况下保护数据库?