我有一个任务,我必须解决线性方程组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
答案 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]);
我在我的程序中实现了它,现在一切都运行得很好。