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
表示输入数值数组。如果您不介意使用evalc
(eval
的变体,这被认为是不好的做法),您可以这样做:
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,如何调整图形上的轴值(科学记数法 - 精度不够)[重复]