【问题标题】:csparse error while solving sparse system of equations求解稀疏方程组时出现 csparse 错误
【发布时间】:2023-03-27 06:56:01
【问题描述】:

我有一个任务,我必须求解一个线性方程组 Ax = B,其中 A 是 10000 量级的稀疏矩阵。我正在使用 csparse 来解决它。在我的初始实现中,出于演示目的,A 是 3*3 阶单位矩阵,B ={1,2,3}。下面是代码 sn-p,它在状态中返回 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

【问题讨论】:

    标签: c matrix


    【解决方案1】:

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

    【讨论】:

    • 在我将矩阵 A 转换为压缩列格式后,cholsol 工作得非常好。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-06
      • 2019-02-21
      • 2013-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2017-08-26
      相关资源
      最近更新 更多