En matemáticas y programación informática , la notación de índices se utiliza para especificar los elementos de una matriz de números. El formalismo con el que se utilizan los índices varía según la materia. En particular, existen diferentes métodos para hacer referencia a los elementos de una lista, un vector o una matriz , dependiendo de si se está escribiendo un artículo matemático formal para su publicación o si se está escribiendo un programa informático .
En matemáticas, resulta de gran utilidad referirse a los elementos de una matriz mediante subíndices. Los subíndices pueden ser números enteros o variables . La matriz adopta la forma de tensores en general, ya que estos pueden tratarse como matrices multidimensionales. Los casos especiales (y más conocidos) son los vectores (matrices unidimensionales) y las matrices (matrices bidimensionales).
Lo que sigue es solo una introducción al concepto: la notación de índices se utiliza con más detalle en matemáticas (particularmente en la representación y manipulación de operaciones tensoriales ). Consulte el artículo principal para obtener más detalles.
Un vector tratado como una matriz de números escribiéndolo como un vector de fila o un vector de columna (el que se use depende de la conveniencia o el contexto):
La notación de índice permite indicar los elementos de la matriz simplemente escribiendo a i , donde se sabe que el índice i va de 1 a n , debido a las n dimensiones. [1] Por ejemplo, dado el vector:
Entonces algunas entradas son
La notación se puede aplicar a vectores en matemáticas y física . La siguiente ecuación vectorial
También se puede escribir en términos de los elementos del vector (también conocidos como componentes), es decir
donde los índices toman un rango dado de valores. Esta expresión representa un conjunto de ecuaciones, una para cada índice. Si los vectores tienen n elementos cada uno, es decir, i = 1,2,… n , entonces las ecuaciones son explícitamente
Por lo tanto, la notación de índice sirve como una abreviatura eficiente para
Se utiliza más de un índice para describir matrices de números, en dos o más dimensiones, como los elementos de una matriz (véase también la imagen de la derecha);
La entrada de una matriz A se escribe utilizando dos índices, digamos i y j , con o sin comas para separar los índices: a ij o a i,j , donde el primer subíndice es el número de fila y el segundo es el número de columna. La yuxtaposición también se utiliza como notación para la multiplicación; esto puede ser una fuente de confusión. Por ejemplo, si
Entonces algunas entradas son
Para índices mayores que 9, puede ser preferible la notación basada en comas (por ejemplo, 3,12 en lugar de 312 ) .
Las ecuaciones matriciales se escriben de manera similar a las ecuaciones vectoriales, como
en términos de los elementos de las matrices (también conocidos como componentes)
para todos los valores de i y j . Nuevamente, esta expresión representa un conjunto de ecuaciones, una para cada índice. Si las matrices tienen m filas y n columnas, es decir, i = 1, 2, …, m y j = 1, 2, …, n , entonces hay mn ecuaciones.
La notación permite una generalización clara a matrices multidimensionales de elementos: tensores. Por ejemplo,
representando un conjunto de muchas ecuaciones.
En el análisis tensorial, se utilizan superíndices en lugar de subíndices para distinguir entidades covariantes de contravariantes, consulte covarianza y contravarianza de vectores e índices de elevación y disminución .
En varios lenguajes de programación, la notación de índice es una forma de direccionar los elementos de una matriz. Este método se utiliza porque es el más parecido a cómo se implementa en lenguaje ensamblador, donde la dirección del primer elemento se utiliza como base y un múltiplo (el índice) del tamaño del elemento se utiliza para direccionar dentro de la matriz.
Por ejemplo, si una matriz de números enteros se almacena en una región de la memoria de la computadora que comienza en la celda de memoria con la dirección 3000 (la dirección base ), y cada número entero ocupa cuatro celdas (bytes), entonces los elementos de esta matriz están en las ubicaciones de memoria 0x3000, 0x3004, 0x3008, …, 0x3000 + 4( n − 1) (observe la numeración basada en cero ). En general, la dirección del i ésimo elemento de una matriz con dirección base b y tamaño de elemento s es b + es .
En el lenguaje de programación C , podemos escribir lo anterior como *(base + i)
(forma de puntero) o base[i]
(forma de indexación de matriz), que es exactamente equivalente porque el estándar C define la forma de indexación de matriz como una transformación a forma de puntero. Casualmente, dado que la adición de punteros es conmutativa, esto permite expresiones oscuras como 3[base]
que es equivalente a base[3]
. [2]
Las cosas se ponen más interesantes cuando consideramos matrices con más de un índice, por ejemplo, una tabla bidimensional. Tenemos tres posibilidades:
En C, se pueden utilizar los tres métodos. Cuando se utiliza el primer método, el programador decide cómo se disponen los elementos de la matriz en la memoria de la computadora y proporciona las fórmulas para calcular la ubicación de cada elemento. El segundo método se utiliza cuando el número de elementos en cada fila es el mismo y se conoce en el momento en que se escribe el programa. El programador declara que la matriz tiene, por ejemplo, tres columnas escribiendo, por ejemplo elementtype tablename[][3];
, . Luego, uno hace referencia a un elemento particular de la matriz escribiendo tablename[first index][second index]
. El compilador calcula el número total de celdas de memoria ocupadas por cada fila, usa el primer índice para encontrar la dirección de la fila deseada y luego usa el segundo índice para encontrar la dirección del elemento deseado en la fila. Cuando se utiliza el tercer método, el programador declara que la tabla es una matriz de punteros, como en elementtype *tablename[];
. Cuando el programador posteriormente especifica un elemento particular tablename[first index][second index]
, el compilador genera instrucciones para buscar la dirección de la fila especificada por el primer índice y usa esta dirección como base al calcular la dirección del elemento especificado por el segundo índice.
void mult3x3f ( float resultado [][ 3 ], const float A [][ 3 ], const float B [][ 3 ]) { int i , j , k ; para ( i = 0 ; i < 3 ; ++ i ) { para ( j = 0 ; j < 3 ; ++ j ) { resultado [ i ][ j ] = 0 ; para ( k = 0 ; k < 3 ; ++ k ) resultado [ i ][ j ] += A [ i ][ k ] * B [ k ][ j ]; } } }
En otros lenguajes de programación como Pascal, los índices pueden comenzar en 1, por lo que la indexación en un bloque de memoria se puede cambiar para adaptarse a un esquema de direccionamiento de inicio en 1 mediante una simple transformación lineal: en este esquema, la ubicación de memoria del elemento i con dirección base b y tamaño de elemento s es b + ( i − 1) s .