gpt4 book ai didi

c++ - 使用 Armadillo 库时如何增加显示的位数

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:27 24 4
gpt4 key购买 nike

我正在使用 Armadillo 线性代数库对角化矩阵。我需要增加最后显示/写入文件的位数。根据 Armadillo 的 reference , "arma::mat"将创建一个双矩阵。因此,我尝试使用“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

奇怪的是,它适用于传递给双变量“Trace_A”的迹线,但不适用于矩阵本身。知道我在这里做错了什么吗?

最佳答案

我想我知道怎么做了。可以使用“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

关于c++ - 使用 Armadillo 库时如何增加显示的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com