使用 Python 求解行列式而不使用 scipy.linalg.det 的代码
描述(这是一个 hwk 问题):
我不知道从哪里开始。我计划使用拉普拉斯展开式,但我不确定如何将其应用于 nxn 矩阵。任何帮助将不胜感激。
注意:我已经有一个为 nxn 矩阵生成随机矩阵的函数。计算的时间也不是问题。我唯一遇到的问题是如何计算行列式。
必须删除我的班级政策的问题描述 b/c。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
下面是用于查找矩阵行列式的 adjucate 方法的递归 python 代码。
请注意,输入是表示 nxn 矩阵的数组数组
Here is recursive python code for the adjucate method for finding a matrix's determinant.
Note that the input is an array of arrays representing the nxn matrix
好的,这是一个提示。
sum
)中提琴,你有一个行列式。
另外,不要忘记,由于我们在 python 中编写列表的方式,索引会被颠倒。也就是说,如果
m0,1 是 2 而不是正常表示法中的 4。您可以将其视为转置或使用
zip
Ok, here's a hint.
sum
)viola, you have a determinant.
Also, don't forget that because of the way we write lists in python, the indices get reversed. That is if
then m0,1 is 2 and not 4 as it would be in normal notation. you can think of it as a transpose or use
zip
对于大型矩阵,不建议使用拉普拉斯方法进行行列式计算,因为它的计算成本很高(递归函数)。相反,更好的方法是使用高斯消元法将原始矩阵转换为上三角矩阵。下三角矩阵或上三角矩阵的行列式只是对角元素的乘积。
这里我们展示一个例子。
结果与 Scipy 行列式得到的结果类似!
-3032.573716363944
-3032.573716915967
但是,该函数仍然可以制定为包括旋转。此外,通过使用 numba 库,它可以达到与 scipy 类似的效率。
For large matrices, it is not recommended to use Laplace's method for determinant calculation, since it is computationally expensive (recursive functions). Instead, a better approach is to use the Gauss Elimination method to convert the original matrix into an upper triangular matrix. The determinant of a lower or an upper triangular matrix is simply the product of the diagonal elements.
Here we show an example.
The result is similar to the one obtained from the Scipy determinant!
-3032.573716363944
-3032.573716915967
However, the function can still be formulated to include pivoting. Additionally, it can be brought to a similar efficiency as the one from scipy by using numba library.
我使用 Peyman Naseri 作为基本思想,并希望与我的实现分享,
作为矩阵的结果行列式计算我的笔记本电脑上的 10*10 大约需要 1 分钟,我知道我的代码不是最佳的,但这是此实现的主要原因(也许我丢失了一些东西)我只需要在 Peyman Naseri 解决方案在我看来非常漂亮。
I've used as base idea of Peyman Naseri and want to share with my implementation,
as result determinant calculation for matrix 10*10 on my laptop takes about 1 minute, I understand that my code not optimal but main reason for this implementation (maybe I lost something) I just need to get working code base on Peyman Naseri solution which seems to me very pretty.