使用CSparse库用C表示稀疏矩阵
我不明白如何使用CSparese库在C中轻松表示稀疏矩阵 这就是我想要的使用CSparse库用C表示稀疏矩阵,c,matrix,linear-algebra,sparse-matrix,C,Matrix,Linear Algebra,Sparse Matrix,我不明白如何使用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结构如下所示 typedef struct cs_sparse /* matrix in compressed-column or triplet form */ { csi nz
| 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结构如下所示
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;
A.m = N;
A.n = N;
A.p = &columnIndices[0];
A.i = &rowIndices[0];
A.x = &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\u load
从文件中读取矩阵。(每行一个条目,行列双行
,您可以看到)
或者使用cs_条目
设置矩阵值:cs_条目(矩阵,i,j,0.42)代码>
你可能想看看这个,而且
更新
数据结构A
不应包含有关b
的任何信息。整个数据结构是a
的稀疏表示。此外,您不应该自己初始化它,而是让cs\u spalloc
来完成这项工作。(例如cs_spalloc(0,0,1,1,1)
)。
然后使用cs_条目设置值
对于要求解的方程的右侧部分(Ax=b
),如果假设b
为稠密,则应使用简单的C数组:
简单地说:double b[]={10.0,20.0,30.0}代码>
最后,您可以调用cs\u lsolve(A,b)
哇,太好了!但是我如何设置系数呢?解决问题的方法是C_lsolve?关于解决问题的部分,你的问题不是很清楚,但我猜你想解决类似于Ax=b
的问题。您可以使用cs\u usolve(A,x)
。向量b
由指针x
给出,输出由x
给出。(x是稠密的)这就是我要尝试的,cs_条目(&A,0,0,1.0);cs_条目(&A,0,1,0.0);cs_条目(&A,0,2,2.0);cs_条目(&A,1,0,3.0);cs_条目(&A,1,1,4.0);cs_条目(&A,1,2,0.0);cs_条目(&A,2,0,0.0);cs_条目(&A,2,1,0.0);cs_条目(&A,2,2,5.0);你想知道如何创建b
向量吗?这是一个简单的C数组。或者您希望b
也是稀疏的?我需要解决示例中的问题,以了解csparse是如何工作的。我在我的问题中发布了一个更新,里面有我的代码。它不起作用。但我不明白怎么回事。你的矩阵在实践中有多大?例如,大矩阵918*918我发布的代码只是为了了解如何使用这个库。。。但我需要处理更大的矩阵