2009-07-20 19 views

答えて

2

一つの方法は、LU分解を使用している:

LaVectorLongInt pivots(A.cols()); 

    LUFactorizeIP(A, pivots); 

    double detA = 1; 
    for (int i = 0; i < A.cols(); ++i) 
    detA *= A(i, i); 

警告、のでコピーが、おそらくお勧めしながら、変化します。

+0

他のオプションは提供されていないので、この回答を受け入れたものとして受け入れました。誰かが別の(良い、受け入れ可能な)ソリューションを追加した場合、私はその答えを受け入れます。 –

+0

奇数の順列(ピボット・サイズが奇数)の場合は、負の符号も必要と思う。以下も参照:http://icl.cs.utk.edu/lapack-forum/viewtopic.php?p=341&#p336 –

+0

分解は 'A = PLU'です。ここでLは対角線上にあるものを持つので、 'det(L)= 1'です。 Det(U)= det(P)* 1 * det(U) 'となります。上のコードでは、(ピボットの配列として表される)パーミュテーション行列 'P'の符号は扱われません。 – soegaard

0

私はlapack ++についてよくわかりませんが、標準的なラップトップにはcheckはありません。私が知っている限り、lapack ++はmatricial操作自体を実装するのではなく、他のものを使用します。実際にはいくつかのもの(atlas、mkl(intel math kernel library)など)を切り替えることができます。したがって私の前提は、lapack ++には何らかの行列式演算が存在するということです。行列式を計算する

+0

Lapack ++には、すべてのBLAS操作が含まれています。 BLASには行列式の関数はありませんが、おそらく行列式を得るために使用できる他の方法があります。 –

+0

ご迷惑をおかけして申し訳ございません。私は悪いカルマに値する:-)。 –

関連する問題