我无法理解如何使用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