我正在尝试使用 LAPACK 在 C 中实现卡尔曼滤波器,并且需要通过回归估计一些参数。我正在使用dgels,但是当我尝试运行它时不断出现奇怪的段错误。我认为这可能与我在参数 LWORK 中设置的块大小有关,所以我尝试通过设置 LWORK = -1 来查询最佳大小。根据文档,WORK 的第一个元素应该包含 LWORK 的最佳值。但是当我尝试访问 WORK[0] 时,我得到了另一个段错误,尽管在调用 dgels 之前已经分配了它!有什么线索吗?这是代码,减去我分配的位double *A, *B
和int p->N
.
char T = 'T'; // Transpose A
int n = 1000;
int LWORK = -1;
int INFO = 0;
double * WORK = (double *) malloc (200*sizeof(double));
printf("%e\n",WORK[0]); // This works
dgels_(&T, &(p->N), &n, &(p->N), A, &(p->N), B, &n, &WORK, &LWORK, &INFO);
printf("%e\n",WORK[0]); // This segfaults
gcc 4.2.1,Mac OS X 雪豹
编辑:原来英特尔有一个很好的例子来说明如何在dgels
C中使用