Принимает ли Matlab нецелые индексы?

Конечно, нет! ... или так? Давайте сделаем несколько тестов.

определять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, хотя и с предупреждением (Целочисленные операнды требуются для оператора двоеточия при использовании в качестве индекса).

>> 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, Конечно, если целое число, полученное в результате округления, является отрицательным, возникает ошибка.

Подобное поведение наблюдается в последних версияхоктава Кроме этого:

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

Ответы на вопрос(1)

Ваш ответ на вопрос