C++ 矩阵非奇异时lapack cgesv处的错误

C++ 矩阵非奇异时lapack cgesv处的错误,c++,matrix,numerical-methods,lapack,numerical,C++,Matrix,Numerical Methods,Lapack,Numerical,这是我的第一篇文章。我通常会向同学寻求帮助,但他们现在有很多工作要做,我太绝望了,无法独自解决这个问题:)。我正在为学校做一个项目,现在我需要解决一个由复数组成的线性方程组。我决定从C++调用LAPACK例程“CGESV”。我使用C++复杂库来处理复数。 问题是,当我调用例程时,我得到错误代码“2”。 从lapack文档: INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th

这是我的第一篇文章。我通常会向同学寻求帮助,但他们现在有很多工作要做,我太绝望了,无法独自解决这个问题:)。我正在为学校做一个项目,现在我需要解决一个由复数组成的线性方程组。我决定从C++调用LAPACK例程“CGESV”。我使用C++复杂库来处理复数。 问题是,当我调用例程时,我得到错误代码“2”。 从lapack文档:

      INFO is INTEGER
      = 0:  successful exit
      < 0:  if INFO = -i, the i-th argument had an illegal value
      > 0:  if INFO = i, U(i,i) is exactly zero.  The factorization
            has been completed, but the factor U is exactly
            singular, so the solution could not be computed.
INFO是整数
=0:成功退出
<0:如果INFO=-i,则第i个参数的值非法
>0:如果INFO=i,U(i,i)正好为零。因式分解
已经完成,但因子U正好是
奇异,因此无法计算解。
因此,元素U(2,2)应该为零,但它不是。 以下是我声明函数的方式:

无效cgesv(int*N,int*NRHS,std::complex*A,int*lda,int*ipiv,std::complex*B,int*ldb,int*INFO)

我就是这样使用它的:

    int *IPIV = new int[NA];
    int INFO, NRHS = 1;
    std::complex<double> *aMatrix = new std::complex<double>[NA*NA];

    for(int i=0; i<NA; i++){
            for(int j=0; j<NA; j++){
                    aMatrix[j*NA+i] = A[i][j]; 
            }
    }

    cgesv_( &NA, &NRHS, aMatrix, &NA, IPIV, B, &NB, &INFO );
int*IPIV=newint[NA];
int INFO,NRHS=1;
std::complex*aMatrix=新std::complex[NA*NA];

对于(int i=0;i我已经找出了错误所在。如果我使用类型复合体,例程将无法工作。
这真的很奇怪,因为到目前为止,我已经尝试过的所有其他拉帕克程序都使用这种类型,甚至是复杂的矩阵求逆,这在某种程度上是类似的。

如果你只需要解一个方程组,试试倍频程或任何其他数值系统。谢谢你的建议。这是一个几乎完成的程序的一部分,它还可以做其他事情s、 现在改变环境是没有意义的。另外,我想弄清楚为什么这不起作用。