我的问题是由大型电阻系统的节点分析引起的。我基本上设置了一个大的稀疏矩阵 A ,我的解决方案向量 b ,我正在尝试解决线性方程 A * < em> x = b 。 为此,我使用 scipy.sparse.linalg.spsolve 方法。
直到最近,一切正常,直到我将SciPy从v0.13.3升级到v0.19.1(其中还包括NumPy升级到v1.13.1)。我正在运行Python 2.7.6。使用与更新之前相同的代码时,我会收到错误,尤其是对于生成matrices > 10000 x 10000
的系统。
警告是:
SparseEfficiencyWarning: splu requires CSC matrix format
warn('splu requires CSC matrix format', SparseEfficiencyWarning)
MatrixRankWarning: Matrix is exactly singular
warn("Matrix is exactly singular", MatrixRankWarning)
然后spsolve - 有时 - 无法找到解决方案。
当我进行节点分析时,由于地电位的位置通常没有明确定义,因此预期会出现奇异矩阵。但是,在更新之前,在99%的案例中找到了解决方案,可能更多。现在,对于大型系统,我最多只有10%。我没有更改算法,并且对于一些测试,我使用了与以前相同的代码。以下是我设置计算的方法:
这可能是改变了的方法吗?
spsolve 甚至可能不合适?我创建的矩阵通常是对称的并且呈块三对角形式。有没有一种更有效的方法来解决线性方程而不是 spsolve ?
非常感谢各种帮助!谢谢你的阅读。