0

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での使用方法の良い例があることがわかりました。

4

1 に答える 1

0

ここではFORTRAN APIに従っていません。配列は最初の要素への参照として渡されますが、最初の要素への参照への参照として渡されます (つまり、WORK代わりに を使用する必要があります&WORK)。

また、DGELS のドキュメントを読んで、その引数の意味を正しく理解していることを確認してください (例: NRHSLDA、およびLDB)。

はい、 C intサイズには注意してください。FORTRAN列優先順序を使用し、Cは行優先順序を使用するという事実(ウィキペディアの記事)。

于 2013-01-25T13:10:33.927 に答える