Eigen ライブラリを使用して C++ で MCMC アルゴリズムを実装しました。アルゴリズムの主要部分は、最初にいくつかの行列計算が実行された後、結果の行列の行列式が取得され、出力に追加されるループです。例えば:
MatrixXd delta0;
NumericVector out(3);
out[0] = 0;
out[1] = 0;
for (int i = 0; i < s; i++) {
...
delta0 = V*(A.cast<double>()-(A+B).cast<double>()*theta.asDiagonal());
...
I = delta0.determinant()
out[1] += I;
out[2] += std::sqrt(I);
}
return out;
現在、特定の行列では、残念ながら数値のアンダーフローが観察されるため、行列式がゼロとして出力されます(実際にはそうではありません)。
このアンダーフローを回避するにはどうすればよいですか?
1 つの解決策は、行列式の代わりに、行列式のログを取得することです。でも、
- これを行う方法がわかりません。
- これらのログを追加するにはどうすればよいですか?
どんな助けでも大歓迎です。