Конечно, нет!... Или это так? Проделайте несколько тестов.
Определите 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, предполагает, что это поведение предназначено. Является ли он документированным? Может ли кто-нибудь дать больше информации или пролить свет на это?