c/c++语言开发共享使用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)

      以上就是c/c++开发分享使用CSparse库在C中表示稀疏矩阵相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519063.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐