2014-11-08 40 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