Конечно, нет!... Или это так? Проделайте несколько тестов.
Определите x = [10 20 30 40 50]
. Тогда любое из следующих утверждений, как и ожидалось, дает ошибку в Matlab (индексы индексов должны быть либо натуральными целыми положительными, либо логическими):
>> x(1.2)
>> x(-0.3)
>> x([1.4 2 3])
>> x([1.4 2.4 3.4])
>> x([1.4:4])
>> x(end/2)
Однако нецелые значения принимаются в индексах двоеточия. Все последующие работы в последних версиях Matlab, хотя и с предупреждением (Integer операнды необходимы для оператора двоеточия, когда используются в качестве индекса).
>> x(1.2:3)
ans =
10 20
>> x(0.4:3)
ans =
10 10 20
>> x(0.6:3)
ans =
10 20 30
>> x(1.2:0.7:5)
ans =
10 20 30 30 40 50
>> x(-0.4:3)
ans =
10 10 20 30
Он также работает, если выражение двоеточия включает end
:
>> x(1.5:end-2)
ans =
20 30
>> x(1.5:end/6:end-1)
ans =
20 20 30 40
С другой стороны, следующее не работает и дает ту же ошибку, что и выше:
>> x(-0.6:2)
>> x(-0.5:2)
Наблюдаемое поведение может быть суммировано следующим образом:
- Некоторые внутренние округления срабатывают, когда используется индекс двоеточия. Индекс двоеточия является выражением формы
a:b
илиa:b:c
. Округление не выполняется, когда индексный массив является стандартным массивом, например[a b c]
или даже[a:b]
или[a:b:c]
. - Округление выполняется с ближайшим целым числом, за исключением того, что числа между
-0.5
и0.5
с особыми номерами: они округлены до1
вместо до0
. Конечно, если целое число, полученное в результате округления, отрицательно, возникает ошибка.
Подобное поведение наблюдается в последних версиях Octave, за исключением того, что:
-
По-видимому, выполняется нормальное округление до ближайшего целого, не рассматривая числа между
-0.5
и0.5
как особый случай; и поэтому они дают ошибку:>> x(0.4:3) >> x(-0.4:3)
-
Выдается ошибка, когда нецелый диапазон содержит одно значение:
x(2.4:4)
работает, ноx(3.4:4)
не работает (конечно,x([2.4 3.4])
иx(3.4)
тоже не работают).
Кроме этого, результаты те же, что и в Matlab, и выдается предупреждение (нецелый диапазон используется как индекс).
Предупреждения и тот факт, что Octave работает так же, как Matlab, предполагает, что это поведение предназначено. Является ли он документированным? Может ли кто-нибудь дать больше информации или пролить свет на это?