使用CSparse库在C中表示稀疏矩阵

我无法理解如何使用CSparese库轻松表示C中的稀疏矩阵。

这就是我想要的

| 6.0 0.0 2.0 | A = | 3.0 8.0 0.0 | | 6.0 0.0 1.0 | with | 40.0 | b = | 50.0 | | 30.0 | 

csparse的cs Struct就是这个

 typedef struct cs_sparse /* matrix in compressed-column or triplet form */ { csi nzmax ; /* maximum number of entries */ csi m ; /* number of rows */ csi n ; /* number of columns */ csi *p ; /* column pointers (size n+1) or col indices (size nzmax) */ csi *i ; /* row indices, size nzmax */ double *x ; /* numerical values, size nzmax */ csi nz ; /* # of entries in triplet matrix, -1 for compressed-col */ } cs ; 

我就是做这个的

 int main(int argc, const char * argv[]) { cs A; int N = 3; double b[]={1,2,3}; double data[]={1,1,1}; csi columnIndices[]={0,1,2}; csi rowIndices[]={0,1,2}; A.nzmax =3; Am = N; An = N; Ap = &columnIndices[0]; Ai = &rowIndices[0]; Ax = &data[0]; A.nz = 3; cs *B = cs_compress(&A); int status = cs_cholsol(0,B,&b[0]); printf("status=%d",status); // status always returns 0, which means error return 0; 

我问的是,如何用我的数据填充矩阵以及我必须使用哪种方法来解决它。

谢谢

您可以使用cs_load从文件中读取矩阵。 (每行一个条目, LINE COLUMN DOUBLE ,你可以看到这个例子 )

或者使用cs_entry设置矩阵的值: cs_entry (matrix, i, j, 0.42);

您可能希望看到这个完整的示例 ,以及此 示例

更新

数据结构A不应包含有关b任何信息。 整个数据结构是A的稀疏表示。 此外,您不应该自己初始化它,但让cs_spalloc完成工作。 (例如cs_spalloc (0, 0, 1, 1, 1) )。 然后使用cs_entry设置值。

对于你想要求解的等式的右边部分( Ax = b ),那么如果b应该是密集的,你应该使用一个简单的C数组:

简单地说: double b[]={10.0,20.0,30.0};

最后你可以调用cs_lsolve(A, b)