2014-11-08 28 views
2

我正在使用Armadillo线性代数库来对角化矩阵。我需要增加最后显示/写入文件的位数。根据Armadillo的reference,“arma :: mat”将创建一个双矩阵。所以,我尝试从“iomanip”使用std :: setprecision,但它并没有工作。下面是抓住了问题的最小码:如何增加使用Armadillo库时显示的位数

#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 

奇怪的是,它为它传递给双变量“Trace_A”跟踪但不适用于矩阵本身。任何想法我在这里做错了吗?

+0

没有。据推测,lib本身在打印之前会对流进行精确设置。 – 2014-11-08 16:46:59

回答

3

我想我想通了如何做到这一点。它可以使用 “raw_print” 来完成:

A.raw_print(std::cout); 

这给:

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 

0.84018771715 0.19755136929 0.47739705186 0.91619506800 0.01630057162 
0.39438292682 0.33522275571 0.62887092476 0.63571172796 0.24288677063 
0.78309922376 0.76822959481 0.36478447279 0.71729692943 0.13723157679 
0.79844003348 0.27777471080 0.51340091020 0.14160255536 0.80417675423 
0.91164735794 0.55396995580 0.95222972517 0.60696887626 0.15667908925