Matlab中如何获取科学记数法的指数

Posted

技术标签:

【中文标题】Matlab中如何获取科学记数法的指数【英文标题】:How to get Exponent of Scientific Notation in Matlab 【发布时间】:2012-05-06 13:51:09 【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

【参考方案1】:

基础数学可以告诉你:

floor(log10(N))

一个数字的以 10 为底的对数告诉您该数字中小数点前大约有多少位。

例如,999871234598237549.998E+016

log10(99987123459823754)16.9999441,其底是16——基本上可以告诉你“科学计数法的指数是16,非常接近17”。

楼层总是向下取整,因此您无需担心小指数:

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

【讨论】:

【参考方案2】:

您可以使用log10(A)。用于打印的指数将是 A 中的最大量级指数。如果您只关心小数(

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。你必须稍微玩弄一下才能弄清楚规则的确切含义打印矩阵是。

【讨论】:

以上是关于Matlab中如何获取科学记数法的指数的主要内容,如果未能解决你的问题,请参考以下文章

在pandas python中将指数或科学数转换为整数

尝试用 Java 编写科学计算器但无法使指数按钮工作

Python:带有上标指数的科学记数法

如何在 Matlab 中显示没有科学计数法的长数字?

Matlab,如何调整图形上的轴值(科学记数法 - 精度不够)[重复]

从科学记数法中提取指数