Octave 倍频程错误:SparseMatrix::求解数值因式分解失败

Octave 倍频程错误:SparseMatrix::求解数值因式分解失败,octave,Octave,我有一个大的方程组要解。系数存储在维度为32001 x 32001元素的稀疏矩阵CM中,其中18536032为非零。结果向量B的长度为320001个元素 执行时 I=CM\B 倍频程错误:SparseMatrix::求解数值因式分解失败 我收到了上面的错误消息。对源代码的简单研究并没有给我任何线索 有人知道是什么导致了这个错误吗 顺便说一句:当使用较小的矩阵(例如180001x180001)解决相同的问题时,程序运行良好 约翰内斯倍频程使用库来求解稀疏线性系统。检查源显示错误消息是由于具有负值的

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

执行时

I=CM\B

倍频程错误:SparseMatrix::求解数值因式分解失败

我收到了上面的错误消息。对源代码的简单研究并没有给我任何线索

有人知道是什么导致了这个错误吗

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

约翰内斯

倍频程使用库来求解稀疏线性系统。检查源显示错误消息是由于具有负值的错误状态引起的。错误代码列表可在中找到。其中之一与缺乏足够的内存有关:

UMFPACK错误内存不足,(-1):内存不足。ANSI C malloc或realloc例程失败


是否有一种简单的方法可以提供生成此稀疏矩阵的代码,或者它来自复杂/长代码?该矩阵是使用类似稀疏(行、列、数据)的3个向量创建的。每个向量有180001个元素长。我试图减少所需的内存量,因为我看到矩阵由所有元素的double类型组成。我的想法是,对索引使用uning int32,对数据值使用single应该可以节省内存。但是,Octave似乎不允许混合数据类型。稀疏矩阵不接受不同的数据类型是有原因的:我正在运行版本4.0.3,“x86_64-w64-mingw32”。是否已经启用了64位数据,或者是否有64位版本的倍频程可用?抱歉,回复太晚。如前所述,有一些非官方版本启用了64位索引。您可以从下载。谢谢,我会给它一个试用更新:有了64位的数组版本,我能够解一个包含2Mio变量的方程组。计算消耗了32GB内存(最新300MB),运行了12个小时。@corvairjo好消息!