2012-01-28 64 views
1

我在查看matlab控制台中的双精度数据时遇到了问题。其实,我从我的数据文件导入矩阵。特定行和列的值为1.543,但在控制台中使用disp(x)时,其中x是导入的矩阵,它显示为1.0e+03 * 0.0002。但是,当我尝试使用disp(x(25,25))访问矩阵中的特定元素时,其中2525是行和列号,它显示为1.543。所以我很困惑。任何澄清。只是当我打印整个矩阵时,它显示为1.0e+03 * 0.0002查看双精度值问题

回答

2

以下命令应该修复它。这只是一个显示问题,矩阵中实际值的精度不受影响:

format shortG 
2

这是由于您的数据的动态范围很高所致。 尝试,例如:

x = [10^-10 10^10]; 
disp(x); 

结果是:

1.0E + 010 *
0.0000 1.0000

看起来像的第一个值是零,但它不是。与第二个相比几乎为零。这并不奇怪。尝试将小的值加到大的值上,然后减去,得到零。这是由于浮点arithmetic.The下面的表达式是true

isequal((x(1)+x(2)) - x(2) , 0) 

可以做些什么?

1)真正高的动态范围可能会导致任何计算中的麻烦。尝试了解它来自哪里,并在更广泛的背景下解决问题。 2)。你可以尝试设置

format long 

它可以改善这种情况视觉对于一些情况。