¿Matlab acepta índices no enteros?

¡Por supuesto no! ... o lo hace? Hagamos algunas pruebas.

Definirx = [10 20 30 40 50]. Entonces, cualquiera de las siguientes declaraciones, como se esperaba, da un error enMatlab (Los índices de subíndice deben ser enteros positivos reales o lógicos):

>> 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)

Sin embargo, los valores no enteros se aceptan eníndices de colon. Todos los siguientes trabajos en versiones recientes de Matlab, aunque con una advertencia (Los operandos enteros son necesarios para el operador de dos puntos cuando se usan como índice)

>> 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

También funciona si la expresión de dos puntos incluyeend:

>> x(1.5:end-2)
ans =
    20    30

>> x(1.5:end/6:end-1)
ans =
    20    20    30    40

Por otro lado, lo siguiente no funciona y da el mismo error que el anterior:

>> x(-0.6:2)
>> x(-0.5:2)

El comportamiento observado puede serresumido como sigue:

Algunosredondeo interno patea cuando uníndice de colon es usado Un índice de dos puntos es una expresión de la formaa:b oa:b:c. No se realiza el redondeo cuando la matriz de indexación es una matriz estándar, como[a b c] o incluso[a:b] o[a:b:c].El redondeo se realiza a laentero más cercano, excepto que los números entre-0.5 y0.5 soncarcasa especial: se redondean a1 en lugar de a0. Por supuesto, si el entero resultante del redondeo es negativo, se produce un error.

Se observa un comportamiento similar en versiones recientes deOctava excepto eso:

Aparentemente, se realiza el redondeo normal al entero más cercano, sin tratar los números entre-0.5 y0.5 como un caso especial; y estos dan un error:

>> x(0.4:3)
>> x(-0.4:3)

Se emite un error cuando el rango no entero contiene un solo valor:x(2.4:4) funciona, perox(3.4:4) no lo hace (por supuesto,x([2.4 3.4]) yx(3.4) no funciona tampoco).

Aparte de esto, los resultados son los mismos que en Matlab, y también se emite una advertencia (Rango no entero usado como índice)

Las advertencias y el hecho de que Octave funciona de manera similar a Matlab sugieren que esto esdestinado a comportamiento. Lo esdocumentado ¿algun lado? ¿Alguien puede darmás información o arrojar algo de luz sobre esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta