4

Armadillo 線形代数ライブラリを使用して行列を対角化しています。最後にファイルに表示/書き込みされる桁数を増やす必要があります。Armadillo のリファレンスによると、「arma::mat」は double 行列を作成します。そこで、iomanip の std::setprecision を使ってみたのですが、なかなかうまくいきませんでした。問題をキャプチャする最小限のコードを次に示します。

#include<iostream>
#include<armadillo>
#include<iomanip>

int main()
{
   double Trace_A = 0.;
   arma::mat A;
   A = :arma::randu<arma::mat>(5,5);
   Trace = arma::trace(A);         

   // Normal output
   std::cout << "A = \n" <<A ;
   std::cout << "Trace(A) = " << Trace_A << std::endl;
   std::cout << "---------------------------------------------" << std::endl;

   // Displaying more digits
   std::cout << std::fixed << std::setprecision(15);
   std::cout << "A = \n" << A;
   std::cout << "Trace(A) = " << Trace_A << std::endl;
}

そして、ここに私が得るものがあります:

A = 
   0.8402   0.1976   0.4774   0.9162   0.0163
   0.3944   0.3352   0.6289   0.6357   0.2429
   0.7831   0.7682   0.3648   0.7173   0.1372
   0.7984   0.2778   0.5134   0.1416   0.8042
   0.9116   0.5540   0.9522   0.6070   0.1567
Trace(A) = 1.83848
---------------------------------------------
A = 
   0.8402   0.1976   0.4774   0.9162   0.0163
   0.3944   0.3352   0.6289   0.6357   0.2429
   0.7831   0.7682   0.3648   0.7173   0.1372
   0.7984   0.2778   0.5134   0.1416   0.8042
   0.9116   0.5540   0.9522   0.6070   0.1567
Trace(A) = 1.838476590271330 

興味深いことに、これは double 変数 "Trace_A" に渡されるトレースでは機能しますが、マトリックス自体では機能しません。私がここで間違っていることは何か分かりますか?

4

2 に答える 2