“cholmod\u updown\u solve()`(在cholmod中更新)的任何示例? 我正在使用C++中的CholMod进行一个项目进行Cholesky分解更新。我能找到的唯一参考资料是《用户指南》。而cholmod\u updown\u solve()似乎是适合我的函数。但是没有关于这个函数的例子,我无法得到正确的结果

“cholmod\u updown\u solve()`(在cholmod中更新)的任何示例? 我正在使用C++中的CholMod进行一个项目进行Cholesky分解更新。我能找到的唯一参考资料是《用户指南》。而cholmod\u updown\u solve()似乎是适合我的函数。但是没有关于这个函数的例子,我无法得到正确的结果,c++,sparse-matrix,suitesparse,C++,Sparse Matrix,Suitesparse,下面是我的代码的基本部分。根据用户指南,唯一需要注意的似乎是提前对更新矩阵C进行排序。但这不起作用。有人能告诉我我是否错过了重要的一步吗 此外,我感到困惑,因为用户指南中说解决方案phi将“在排列顺序中给出,而不是在原始顺序中”。在不知道置换矩阵的情况下,如何恢复顺序?(L->Perm不起作用。) // The original system is At*A*phi = At*b // Updates: C*Ct is added to At*A (Here C is a sparse colu

下面是我的代码的基本部分。根据用户指南,唯一需要注意的似乎是提前对更新矩阵
C
进行排序。但这不起作用。有人能告诉我我是否错过了重要的一步吗

此外,我感到困惑,因为用户指南中说解决方案
phi
将“在排列顺序中给出,而不是在原始顺序中”。在不知道置换矩阵的情况下,如何恢复顺序?(
L->Perm
不起作用。)

// The original system is At*A*phi = At*b
// Updates: C*Ct is added to At*A (Here C is a sparse column vector)

size_t n = m_pMesh->numVertices();
double w = 1e3;

cholmod_sparse *C;
cholmod_triplet *C_coefficients;
cholmod_dense *Delta_Atb;

cholmod_common common;
cholmod_common *cm = &common;
cholmod_start(cm);

C_coefficients = cholmod_allocate_triplet(n, 1, 2, 0, CHOLMOD_REAL, cm);
Delta_Atb = cholmod_zeros(n, 1, CHOLMOD_REAL, cm);

// updates: two more constraints
CViewerVertex *pNew = stroke_ends.start;
CViewerVertex *qNew = stroke_ends.end;
cholmodEntry(C_coefficients, pNew->sid(), pNew->sid(), w, cm);
cholmodEntry(C_coefficients, qNew->sid(), qNew->sid(), w, cm);

// change to At*b is Delta_Atb
((double*)Delta_Atb->x)[pNew->sid()] = w * w;

C = cholmod_triplet_to_sparse(C_coefficients, C_coefficients->nnz, cm);
cholmod_sort(C, cm);

// phi is the given solution to the original system At*A*phi = At*b
// L is the Cholesky factor to modify
// Both phi and L should be overwritten here
cholmod_updown_solve(1, C, L, phi, Delta_Atb, cm);

cholmod_free_sparse(&C, cm);
cholmod_free_triplet(&C_coefficients, cm);
cholmod_free_dense(&Delta_Atb, cm);

cholmod_finish(cm);