如何在Matlab中得到科学记数的指数

时间:2012-05-06 13:51:09

标签: matlab matrix scientific-notation exponent

当数字非常小时,Matlab会自动显示格式为科学记数法。

示例:

A = rand(3) / 10000000000000000;

A =

  1.0e-016 *

    0.6340    0.1077    0.6477
    0.3012    0.7984    0.0551
    0.5830    0.8751    0.9386

是否有一些内置函数可以返回指数?类似于:getExponent(A) = -16

我知道这是一个愚蠢的问题,但我需要检查数百个矩阵,我似乎无法弄明白。

感谢您的帮助。

2 个答案:

答案 0 :(得分:13)

基础数学可以告诉你:

floor(log10(N))

数字的日志基数10告诉您大约在该数字前面的小数位数。

例如,999871234598237549.998E+016

log10(99987123459823754)16.9999441,其最低层是16 - 它基本上可以告诉你“科学记数法中的指数是16,非常接近17”。

Floor总是向下舍入,所以你不必担心小指数:

0.000000000003754 = 3.754E-012
log10(0.000000000003754) = -11.425
floor(log10(0.000000000003754)) = -12

答案 1 :(得分:3)

您可以使用log10(A)。用于打印输出的指数将是A中最大的指数。如果您只关心小数字(< 1),则可以使用

min(floor(log10(A)))

但如果它们也可能很大,那么你需要这样的东西:

a = log10(A);
[v i] = max(ceil(abs(a)));
exponent = v * sign(a(i));

这将找到最大绝对指数,并返回该指数。因此,如果A = [1e-6 1e20],它将返回20。

我实际上并不确定Matlab如何确定打印时使用的指数。显然,如果A接近于1(例如A = [100, 203]),那么它根本不会使用指数,但这个解决方案将返回2.你必须使用它来做一点工作确切地知道印刷矩阵的规则是什么。