使用CSparse库用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

我不明白如何使用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 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我发布的代码只是为了了解如何使用这个库。。。但我需要处理更大的矩阵