All*_*LRH 1 floating-point indexing matlab integer class
简而言之,我的问题是:
Matlab中的双精度实际上是双精度,还是具有附加属性的类作为整数?
以下是问题的背景和动机:)
>> 1:4
ans =
1 2 3 4
>> class(ans)
ans =
double
Run Code Online (Sandbox Code Playgroud)
只是这样做会产生双重...
>> 1.00:4.00
ans =
1 2 3 4
>> class(ans)
ans =
double
Run Code Online (Sandbox Code Playgroud)
......就像这样,即使它被打印为整数.
数字的浮点性质仅表示引入更大的数值不确定性时.
>> acosd(cosd(1:4))
ans =
0.999999999999900 1.999999999999947 3.000000000000045 4.000000000000041
Run Code Online (Sandbox Code Playgroud)
Matlab中的双精度实际上是双精度,还是具有附加属性的类作为整数?
用"整数"定义的向量(当然实际上是双精度),它可以用来索引另一个向量,它通常是整数的属性.
>> A = [9 8 7 6]
A =
9 8 7 6
>> idx = [4 3 2 1]
idx =
4 3 2 1
>> class(idx)
ans =
double
>> A(idx)
ans =
6 7 8 9
Run Code Online (Sandbox Code Playgroud)
我也试过A(acosd(cosd(1:4)))哪个不起作用.
它只是一个双,但您的命令提示符format为您提供最紧凑的视图.特别,
format short
Run Code Online (Sandbox Code Playgroud)
但是你可以把它改为总是显示小数,而且很多都是
format longEng
Run Code Online (Sandbox Code Playgroud)
format帮助页面上还有许多其他选项.
有趣的是,您可以使用非整数作为colon运算符的索引,但它会发出警告.我会认真对待这个警告,因为这个索引行为很奇怪.
正如我在评论中提到的那样,MATLAB使用doubles进行索引的原因与可以在不损失MATLAB精度的情况下指定的整数的最大值有关.双精度(64位)浮点数可精确表示最大为2 ^ 53(9,007,199,254,740,992)的整数,而不会丢失任何精度.MATLAB允许的最大数组大小远低于此数字,因此不存在因浮点精度而导致索引错误的风险.