2014-11-08 9 views
2

Я использую библиотеку линейных алгебр Армадилло для диагонализации матриц. Мне нужно увеличить количество цифр, отображаемых/записанных в файл в конце. Согласно Армадилло reference, «arma :: mat» создаст двойную матрицу. Итак, я попытался использовать std :: setprecision из «iomanip», но это не совсем сработало. Вот минимальный код, который фиксирует проблему:Как увеличить количество цифр, отображаемых при использовании библиотеки 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 'setprecision' поток перед печатью. –

ответ

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