3

我有一个任务,我必须解决一个线性方程组 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
4

2 回答 2

2

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

于 2012-11-07T11:55:45.300 回答
0

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

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

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

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

于 2012-11-15T13:43:00.930 回答