MATLAB 中的科学记数法

Posted

技术标签:

【中文标题】MATLAB 中的科学记数法【英文标题】:Scientific notation in MATLAB 【发布时间】:2015-07-19 18:36:18 【问题描述】:

假设我有一个包含以下元素的数组: 1.0e+14 * 1.3325 1.6485 2.0402 1.0485 1.2027 2.0615 1.7432 1.9709 1.4807 0.9012

现在,有没有办法单独获取1.0e+14 *(基数和指数)? 如果我执行arr(10),那么这将返回9.0120e+13 而不是0.9012e+14

假设问题是获取数组中系数小于 1 的任何元素。有没有办法获得1.0e+14,这样我就可以做arr(i) < 1.0e+14

【问题讨论】:

答案取决于你想对结果做什么。例如,它应该是字符串还是数字?请编辑您的问题以包含有关上下文的更多详细信息。 基本上,当从数组中检索任何元素时,我希望它们具有相同的基数和指数。因此,例如,0.9012e+14 而不是 9.0120e+13 所以你想要一个 string 作为输出,对吧? 我认为他想强制一个给定的基地。 @LuisMendo 除非你想要 strings,否则说“0.9012e+14 而不是 9.0120e+13”是没有意义的。 数值上,0.9012e+14和9.0120e+13是一样的 【参考方案1】:

我假设你想要字符串输出。

a 表示输入数值数组。如果您不介意使用evalceval 的变体,这被认为是不好的做法),您可以这样做:

s = evalc('disp(a)');
s = regexp(s, '[\de+-\.]+', 'match');

这会生成一个包含所需字符串的元胞数组。

例子:

>> a = [1.2e-5 3.4e-6]
a =
   1.0e-04 *
    0.1200    0.0340
>> s = evalc('disp(a)');
>> s = regexp(s, '[\de+-\.]+', 'match')
s = 
    '1.0e-04'    '0.1200'    '0.0340'

【讨论】:

首先非常感谢您的帮助。虽然,我想要整数输出,但我认为这是解决问题的一种方法。【参考方案2】:

Here 是 Alain 的原始答案。

基础数学可以告诉你:

地板(log10(N))

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

例如,99987123459823754 是 9.998E+016

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

现在你有了科学记数法的指数。这应该可以让您实现您的目标;-)。

根据您想对指数和数字做什么,您还可以定义自己的方法。 this 线程中描述了一个示例。

【讨论】:

这是***.com/questions/10471031/…的副本,没有署名!

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

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

从 csv 中读取 ms 中的时间戳,在 Matlab 中以科学格式显示

matlab中怎么设置非科学计数法?

matlab科学记数法问题

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

将 CSV 导入 MATLAB 的正确科学记数法