Tensores
Ya hemos visto que en Mathematica las listas planas representan vectores. Ahora veremos que las listas, que no son planas y tienen cierta estructura, representan objetos matemáticos más generales que tienen como casos particulares a los vectores y a las matrices, tensores de rango uno y dos, respectivamente.
La primera lista estructurada inmediata son las matrices (tensores de rango dos). Por ejemplo, si deseamos escribir la matriz $$\left(\begin{array}{cc} a_{1,1} & a_{1,2} \\ a_{2,1} & a_{2,2} \\\end{array}\right),$$ se introduce la siguiente lista de listas:
(*Square matrix of dimension 2 x 2*)
{{Subscript[a, 1, 1], Subscript[a, 1, 2]}, {Subscript[a, 2, 1], Subscript[a, 2, 2]}}Nótese que para trabajar con subíndices usamos la función Subscript y que nuestra matriz se introduce reglón a renglón. Para evitar lo tedioso que es escribir el código de una matriz elemento por elemento, hacemos uso de la función Array de la siguiente manera:
(*Square matrix of dimension 2 x 2 using Array*)
Array[Subscript[a, ##] &, {2, 2}]Desde luego, también existen identificadores para matrices, MatrixQ y SquareMatrixQ, donde el primero aplica para toda clase de matrices sin importar la dimensión de estas y el segundo está restringido a matrices que son cuadradas (mismo número de renglones que de columnas).
Para calcular la dimensión de una matriz existe Dimensions, que aplicada a la matriz anterior nos arroja el siguiente resultado:
(*Using Dimensions with a square matrix*)
Dimensions[Array[Subscript[a, ##] &, {2, 2}]]
(*{2,2}*)Por otra parte, cuando trabajamos con matrices es posible manipular a los vectores de una forma más natural, entendiéndose por natural la forma en la que realizamos operaciones con los vectores a lápiz y papel. Esta situación se hace evidente cuando queremos hacer transposición de vectores, por ejemplo, si aplicamos la función Transpose al vector (\(1,2,3,4)\) el vector resultante seguirá siendo columna, tal y como se muestra a continuación:
(*Using Transpose with a vector*)
Transpose[{1,2,3,4}]
(*{1,2,3,4}*)En cambio, cuando escribimos al vector (\(1,2,3,4)\) en forma matricial, sí logramos observar el cambio que hace la función Transpose, esto es
(*Using Transpose with a matrix of dimension 4 x 1*)
Transpose[{{1},{2},{3},{4}}]
(*{{1,2,3,4}}*)Usando la función MatrixForm se visualiza la operación anterior, mostrándose en el notebook así:
Es evidente que el producto de las matrices anteriores es una matriz, cuyo único elemento de matriz coincide con el producto interior del vector (\(1,2,3,4)\) consigo mismo, y que en código queda como sigue:
(*Matrix product and inner product of vectors*) Transpose[{{1}, {2}, {3}, {4}}] . {{1}, {2}, {3}, {4}} (*{{30}}*) {1, 2, 3, 4} . {1, 2, 3, 4} (*30*)
El siguiente nivel de lista estructurada son las listas de matrices, esto es, tensores de rango mayor o igual a tres. Un ejemplo de tensor de rango tres es:
(*Square matrix of dimension 2 x 2 using Array*)
{{{1, 2}, {1, 2}}, {{1, 2}, {1, 2}}}Si aplicamos MatrixForm al tensor anterior que es de rango tres se observa:
Hasta el momento, hemos mencionado rango sin hacer referencia sobre alguna función que nos permita conocerlo, pero esa función existe y es TensorRank, y en las líneas de código que siguen la usamos para determinar el rango de un vector, una matriz y una listas de matrices:
(*Rank of tensors using TensorRank*)
TensorRank[{1,2,3,4}]
(*1*)
TensorRank[{{1}, {2}, {3}, {4}}]
(*2*)
TensorRank[{{{1, 2}, {1, 2}}, {{1, 2}, {1, 2}}}]
(*3*)Esto sugiere que, en general, debe existir un identificador que clasifique en un mismo conjunto a todas estas listas con estructura, y claro que existe, esta función es TensorQ e identifica tensores de cualquier rango, siendo el resultado de su acción el mismo que el de VectorQ, MatrixQ y SquareMatrixQ, es decir, False o True.
A estas alturas ya puedes preguntarte, ¿por qué Mathematica incluye identificadores de objetos? Bien, la respuesta es sencilla, y es porque desde el punto de vista programático son útiles para el desarrollo de nuevas funciones. En futuras publicaciones esto último se verá con mayor claridad.


No hay comentarios.:
Publicar un comentario