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

C++ 如何使用CHOLMOD将元素添加到三元组矩阵?,c++,libraries,linear-algebra,sparse-matrix,suitesparse,C++,Libraries,Linear Algebra,Sparse Matrix,Suitesparse,谁能给我一个简单的例子,告诉我如何使用 我试过这样的方法: 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_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;
}
但是,这不会向矩阵中添加任何元素。我只得到输出:

CHOLMOD triplet: A:  202-by-202, nz 0, lower.  OK

当然,我试图通过搜索和在中找到解决方案,但没有找到任何帮助。

cholmod\u allocate\u triplet()
sets
A->nzmax
,在您的例子中是202*202。这只是定义了可用于添加三元组的空间。矩阵中的实际三元组数为
A->nnz
,通过
cholmod\u allocate\u triplet()
将其设置为零

应使用
A->nnz
代替变量
k


Tim Davis(CHOLMOD作者)

你说它不会向矩阵中添加元素是什么意思?k在哪里初始化?它是一个全局变量吗?例如,如果我用cholmod_print_triplet打印矩阵元素(a,“triplet”,&com);它打印一个由零组成的矩阵。矩阵和变量k是在一个类的范围内定义的,但是为了简单起见,我们可以说它们是全局变量。非常简单,但是很难理解。谢谢!