求解稀疏方程组时的csparse错误

时间:2012-09-10 13:18:30

标签: c matrix

我有一个任务,我必须解决线性方程组Ax = B,其中A是10000的数量级的稀疏矩阵。我使用csparse来解决它。在我的初始实现中,出于演示目的,A是3 * 3阶标识矩阵,B = {1,2,3}。下面是代码片段,它在状态中返回0,这意味着我的实现中存在一些错误。我做错了什么?

    cs A;
    int  N = 3;
    double b[]={1,2,3};
    double data[]={1,1,1};
    int columnIndices[]={0,1,2};
    int 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;
    int status =  cs_cholsol(0,&A,&b[0]);
    NSLog(@"status=%d",status);   // status always returns 0, which means error

2 个答案:

答案 0 :(得分:2)

您必须将输入矩阵转换为CSC。求解器函数检查矩阵格式,如果是坐标形式则返回0。 顺便说一句。有一个类似的例子,我无法让“cholsol”工作,但“lsolve”工作正常(转换为CSC后)。

答案 1 :(得分:0)

上面的矩阵A是矩阵三元组形式。首先,我们需要将其转换为压缩列格式(B),然后应用cs_chsol函数来获取结果。

//将矩阵三元组转换为列压缩格式

cs *B = cs_compress(&A);
int status =  cs_cholsol(0,&B,&b[0]);

我在我的程序中实现了它,现在一切都运行得很好。