当数字非常小时,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
?
我知道这是一个愚蠢的问题,但我需要检查数百个矩阵,我似乎无法弄明白。
感谢您的帮助。
答案 0 :(得分:13)
基础数学可以告诉你:
floor(log10(N))
数字的日志基数10告诉您大约在该数字前面的小数位数。
例如,99987123459823754
为9.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.你必须使用它来做一点工作确切地知道印刷矩阵的规则是什么。