7

当数字非常小时,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

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

谢谢您的帮助。

4

2 回答 2

19

基础数学可以告诉你:

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
于 2012-05-06T14:00:41.890 回答
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 = [100, 203]显然,如果A 接近 1(如.

于 2012-05-06T14:03:05.410 回答