【问题标题】:Octave Error: SparseMatrix::solve numeric factorization failed八度错误:SparseMatrix::solve numeric factorization failed
【发布时间】:2018-06-21 21:46:19
【问题描述】:

我有一个大型方程组要求解。系数存储在维度为 320001 x 320001 个元素的稀疏矩阵 CM 中,其中 18536032 个非零。结果向量 B 的长度为 320001 个元素。

执行时

I=CM\B

八度音阶错误:SparseMatrix::solve numeric factorization failed

我收到上述错误消息。简要查看源代码并没有给我任何线索。

有谁知道是什么导致了这个错误?

顺便说一句:当使用较小的矩阵(例如 180001x180001)解决相同的问题时,程序运行良好。

约翰内斯

【问题讨论】:

  • 是否有一种简单的方法可以提供生成此稀疏矩阵的代码,或者它来自复杂/长代码?
  • 矩阵是使用 sparse(row, col, data) 之类的 3 个向量创建的。每个向量的长度为 180001 个元素。
  • 我试图减少所需的内存量,因为我看到矩阵包含所有元素的 double 类型。我的想法是,将 int32 用于索引,将 single 用于数据值应该可以节省内存。但是,Octave 似乎不允许混合数据类型。
  • 稀疏矩阵不接受不同数据类型是有原因的:stackoverflow.com/questions/30894231/matlab-uint8-sparse

标签: octave


【解决方案1】:

Octave 使用UMFPACK 库来解决稀疏线性系统。检查源显示错误消息是由于带有负值的错误状态引起的。错误代码列表可以在user's guide 中找到。其中之一与内存不足有关:

UMFPACK ERROR out of memory, (-1): 没有足够的内存。 ANSI C malloc 或 realloc 例程失败。

【讨论】:

  • 我正在运行版本 4.0.3,“x86_64-w64-mingw32”。是已经启用了 64 位数据还是有 64 位版本的 Octave 可用?
  • 抱歉回复晚了。如here 所示,有一些非官方版本已启用 64 位索引。您可以从here下载。
  • 谢谢,我试试看
  • 更新:使用 64 位数组版本,我能够求解具有 2Mio 变量的方程组。计算消耗了 32GB 内存(最多为最后 300MB),运行时间为 12 小时。
  • @corvairjo 好消息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
相关资源
最近更新 更多