1
A
答えて
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
私はlapack ++についてよくわかりませんが、標準的なラップトップにはcheckはありません。私が知っている限り、lapack ++はmatricial操作自体を実装するのではなく、他のものを使用します。実際にはいくつかのもの(atlas、mkl(intel math kernel library)など)を切り替えることができます。したがって私の前提は、lapack ++には何らかの行列式演算が存在するということです。行列式を計算する
+0
Lapack ++には、すべてのBLAS操作が含まれています。 BLASには行列式の関数はありませんが、おそらく行列式を得るために使用できる他の方法があります。 –
+0
ご迷惑をおかけして申し訳ございません。私は悪いカルマに値する:-)。 –
関連する問題
- 1. 計算共分散行列式
他のオプションは提供されていないので、この回答を受け入れたものとして受け入れました。誰かが別の(良い、受け入れ可能な)ソリューションを追加した場合、私はその答えを受け入れます。 –
奇数の順列(ピボット・サイズが奇数)の場合は、負の符号も必要と思う。以下も参照:http://icl.cs.utk.edu/lapack-forum/viewtopic.php?p=341p336 –
分解は 'A = PLU'です。ここでLは対角線上にあるものを持つので、 'det(L)= 1'です。 Det(U)= det(P)* 1 * det(U) 'となります。上のコードでは、(ピボットの配列として表される)パーミュテーション行列 'P'の符号は扱われません。 – soegaard