Как добавить элементы в матрицу триплета с помощью CHOLMOD?

Может ли кто-нибудь дать мне простой пример того, как добавить элементы в матрицу триплета с помощью 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;
}

Однако это не добавляет никаких элементов в матрицу. Я просто получаю вывод:

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

Конечно, я пытался найти решение как путем поиска, так и в Документация CHOLMOD, но я не нашел помощи.

4

Решение

cholmod_allocate_triplet() наборы A->nzmax, который в вашем случае составляет 202 * 202. Это просто определяет пространство, доступное для добавления триплетов. Фактическое количество триплетов в матрице A->nnz, который устанавливается в ноль cholmod_allocate_triplet(),

A->nnz следует использовать вместо вашей переменной k,

Тим Дэвис (автор CHOLMOD)

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]