关于CHOLMOD的一个问题:long int vs int,更改为long int后仍然失败

计算科学 线性求解器 矩阵分解
2021-12-16 20:40:59

更改cholmod_*cholmod_l_*导致以下错误:

sparse:error: integer 和 real 必须匹配例程

这个错误信息是什么意思?

此消息显示后

cholmod_l_start(&c); 
cholmod_l_print_sparse(A,"A",&c)

然后执行以下步骤

L = cholmod_l_analyze(A,&c); 
cholmod_l_factorzie(A,L,&c); 
x=cholmod_l_solve(L,&c); 

无法执行。

动机:我的矩阵的大小很大,所以使用cholmod_*会导致错误:“问题太大

1个回答

没有看到源代码很难得到 100% 的解释,但我预测发生了以下事情之一:

  • 很可能,您的矩阵A最初不是在创建时支持long int索引和增加的大小限制。简单的手动更改A->itype不会解决这个问题,因为必须有效地重建矩阵以支持long int索引。至少,我不知道将一个转换为另一个的 CHOLMOD 例程。
  • 在此过程中,您将继续使用int索引而不是某处的索引。long intCHOLMOD 有一个内部类型SuiteSparse_long,这是您应该使用的类型。

CHOLMOD 实际上有两个很好的例子:

  • 演示/cholmod_demo.c
  • 演示/cholmod_l_demo.c

在“标准”和“大型”矩阵上执行完全相同的一组操作。