我在使用 ATLAS 库计算矩阵的逆时遇到错误。
我得到错误输出:
进入 DTRSM 参数编号 9 时有非法值
已中止(核心已转储)
我从以下位置找到了此代码: https://cpp.hotexamples.com/examples/-/-/dgetrf_/cpp-dgetrf_-function-examples.html
我想使用 ATLAS 库计算 5x5 矩阵的逆矩阵,但我无法计算它 因为这个问题:
testinv.c:30:17:警告:函数“dgetri_”的隐式声明在 C99 中无效 [-Wimplicit-function-declaration] dgetri_ (&N,A,&N,IPIV,WORK,&LWORK,&INFO); ^
testinv.c:38:9:警告:函数“dgetrf_”的隐式声明在 C99 中无效 [-Wimplicit-function-declaration] dgetrf_ (&N,&N,A,&N,IPIV,&INFO); ^
testinv.c:40:17:警告:函数“dgetri_”的隐式声明在 C99 中无效 [-Wimplicit-function-declaration] dgetri_ (&N,A,&N,IPIV,WORK,&LWORK,&INFO); ^
生成 3 个警告。 cc -o testinv testinv.o -lm
进入 DTRSM 参数编号 9 时有非法值
已中止(核心已转储)
这是我的代码:
#include<math.h>
#include<cblas.h>
#include<stdlib.h>
int main ( ){
int INFO;
int N;
static int * IPIV=NULL;
static int LWORK=0;
static double * WORK=NULL;
static int last_n=0;
N = 25;
double A[25] = {
0.67, 0.00, 0.00, 0.00, 0.00,
-0.20, 3.82, 0.00, 0.00, 0.00,
0.19,-0.13, 3.27, 0.00, 0.00,
-1.06, 1.06, 0.11, 5.86, 0.00,
0.46,-0.48, 1.10,-0.98, 3.54
};
if ( N>last_n){
if (NULL==IPIV){
WORK = malloc(sizeof(double));
} else {
free(IPIV);
}
LWORK = -1;
dgetri_ (&N,A,&N,IPIV,WORK,&LWORK,&INFO);
LWORK=(int)WORK[0];
free(WORK);
WORK = malloc(LWORK*sizeof(double));
IPIV = malloc(N*sizeof(int));
last_n = N;
}
dgetrf_ (&N,&N,A,&N,IPIV,&INFO);
if ( INFO==0){
dgetri_ (&N,A,&N,IPIV,WORK,&LWORK,&INFO);
}
printf("INFO \n");
return 0;
据我所知,您正在尝试使用 ATLAS 库,但在编译时并未包含它。看看这个,让我知道它是否仍然是一个问题:https://michaellindon.github.io/lindonslog/programming/atlas-blas-lapack-linear-algebra-libraries/index.html