LAPACK を使用して C でカルマン フィルターを実装しようとしていますが、回帰によっていくつかのパラメーターを推定する必要があります。私はdgelsを使用していますが、実行しようとすると奇妙なセグメンテーション違反が発生し続けます。パラメータLWORKに設定しているブロックサイズと関係があるのではないかと思い、LWORK=-1で最適なサイズを問い合わせてみました。ドキュメントによると、WORK の最初の要素には LWORK の最適値が含まれている必要があります。しかし、WORK[0] にアクセスしようとすると、dgels を呼び出す前に割り当てたにもかかわらず、別の segfault が発生します。何が得られるか手がかりはありますか?これがコードで、割り当てたビットと を除いたもの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 Snow Leopard
編集: Intel にはdgels
、Cでの使用方法の良い例があることがわかりました。