Scipy Sparse:SciPy / NumPy更新后的奇异矩阵警告

时间:2017-08-11 07:59:32

标签: python numpy scipy sparse-matrix linear-equation

我的问题是由大型电阻系统的节点分析引起的。我基本上设置了一个大的稀疏矩阵 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%。我没有更改算法,并且对于一些测试,我使用了与以前相同的代码。以下是我设置计算的方法:

  1. 我生成一个随机的三维电阻网络(我意识到我可能会意外地创建无法解决的网络,但上面的百分比不应该大幅改变)。这里使用的唯一SciPy / NumPy函数是np.random
  2. 我创建了一个稀疏的lil矩阵,我填充了从电阻网络中提取的电导值。我还创建了一个非稀疏的解决方案向量。
  3. 我将电导矩阵转换为csr格式并使用 spsolve 方法。这是我的代码最近失败的地方。
  4. 这可能是改变了的方法吗?

    spsolve 甚至可能不合适?我创建的矩阵通常是对称的并且呈块三对角形式。有没有一种更有效的方法来解决线性方程而不是 spsolve

    非常感谢各种帮助!谢谢你的阅读。

    Here is how my matrices look like in 'spy'-representation

0 个答案:

没有答案