2012-02-26 18 views
0

私はLAPACKのDPOTRS関数について、C内から呼び出されたときに助けを求めたいと思います。 (実際には固有値3,1で)GNU/Linux上でC内のLAPACKからDPOTRSを呼び出す

今、私の関数は正しく動作しません。不正な結果が返されます。

double A[] = {2.0, 1.0, 1.0, 2.0}; 
double b[] = {1.5, 0.0}; 
printf("%5.3f %5.3f\n", b[0], b[1]); 
info = dpotrs('U',2,1,A,2,b,2); 
printf("%d\n", info); 
printf("%5.3f %5.3f\n", b[0], b[1]); 

これはコードです。 dpotrsは次のコードを使用して手動でインポートされます:

static long dpotrs(char UPLO, long N, long NRHS, double* A, long LDA, double* B, long LDB) 
{ 
    extern void dpotrs_(char* UPLOp, long* Np, long* NRHSp, double* A, long* LDAp, double* B, long* LDBp, long* infop); 
    long info; 
    dpotrs_(&UPLO, &N, &NRHS, A, &LDA, B, &LDB, &info); 
    return info; 
} 

これは間違った結果を返します。正しい結果が1.000、-0.500

はしかし、私は0.469、-0.188

を受け取ることになる。しかし、それはうまくいったかのようにその上に、情報は、0を返します!

そして、皆さん、それは私の心を揺さぶるものです。

ありがとうございます!

答えて

1

私はあなたには、いくつかのドキュメントを読んでする必要があると思う:

* 
* Purpose 
* ======= 
* 
* DPOTRS solves a system of linear equations A*X = B with a symmetric 
* positive definite matrix A using the Cholesky factorization 
* A = U**T*U or A = L*L**T computed by DPOTRF. 
* 

DPOTRSへの入力行列はLAPACK、上または下三角形式ですでにコレスキー因数分解行列でなければなりません。ステップをスキップしました。 ADPOTRF最初にと分解し、それを使って1つ以上の右辺をDPOTRSで解決します。

+0

これは間違いありません、ありがとうございます。 – user1233977

+0

しかし、私は失礼である理由はないことを強調したいと思います。 このマニュアルでは、不明瞭な英語が使用されています。私と技術大学の4人の教授が読んだところでは、正定の対称行列Aを使い、DPOTRFで計算したコレスキー分解を使ってシステムを解くということです。 それでも、ありがとうございます。あなたは私の質問に答えました。 – user1233977

+0

@ user1233977:回答者が失礼だとは思わない。カルト、多分、しかし、失礼ではありません。 –

関連する問題