如何使用CHOLMOD将元素添加到三元组矩阵?

asn*_*sny 5 c++ linear-algebra sparse-matrix libraries suitesparse

任何人都可以给我一个简单的例子,说明如何使用CHOLMOD将元素添加到三元组矩阵中.

我尝试过这样的事情:

cholmod_triplet *A;
int k;

void add_A_entry(int r, int c, double x)
{
    ((int*)A->i)[k] = r;
    ((int*)A->j)[k] = c;
    ((double*)A->x)[k] = x;
    k++;
}

int main()
{
    k = 0;
    cholmod_common com;
    cholmod_start(&com);

    A = cholmod_allocate_triplet(202, 202, 202*202, -1, CHOLMOD_REAL, &com);
    add_A_entry(2, 2, 1.);
    add_A_entry(4, 1, 2.);
    add_A_entry(2, 10, -1.);

    cholmod_print_triplet(A, "A", &com);

    cholmod_finish(&com);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会向矩阵添加任何元素.我只是得到输出:

CHOLMOD triplet: A:  202-by-202, nz 0, lower.  OK
Run Code Online (Sandbox Code Playgroud)

当然,我试图通过搜索和CHOLMOD文档找到解决方案,但我没有找到任何帮助.

小智 9

cholmod_allocate_triplet()A->nzmax,在你的情况下是202*202.这只是定义了可用于添加三元组的空间.矩阵中三元组的实际数量A->nnz,通过设置为零cholmod_allocate_triplet().

A->nnz应使用,而不是你的变量k.

蒂姆戴维斯(CHOLMOD作者)