Seção 20.6 Sage
Muchos cálculos, en áreas aparentemente muy diversas de las matemáticas, se pueden traducir en preguntas sobre combinaciones lineales, u otras áreas de álgebra lineal. Por ende Sage tiene una extensa e importante implementación de tópicos como los espacios vectoriales.
Subseção 20.6.1 Espacios Vectoriales
La forma más simple de crear un espacio vectorial es comenzando con un cuerpo y usando un exponente para indicar el número de coordenadas de los vectores en el espacio.
Los elementos pueden ser obtenidos con el constructor de vectores.
Notemos que los vectores se muestran con paréntesis, lo que ayuda a distinguirlos de las listas (pero se ven como tuplas). Los vectores se despliegan horizontalmente, pues en Sage no existe la distinción entre “vector fila” y “vector columna”, pero una vez que aparezcan las matrices deberemos preocuparnos de esta distinción. Finalmente, notemos cómo los elementos del cuerpo finito han sido convertidos a una representación diferente.
Una vez que tenemos espacios vectoriales llenos de vectores, podemos hacer cálculos con ellos. En última instancia, toda la acción en un espacio vectorial se reduce a suma de vectores y multiplicación por escalares, que juntas crean combinaciones lineales.
Subseção 20.6.2 Subespacios
Sage puede crear subespacios de diferentes formas, tales como en la cración de los espacios de columnas o de filas de matrices. Pero la forma más directa es comenzar con un conjunto de vectores y usarlos como conjunto generador.
Notemos que la información mostrada sobre S
incluye una “matriz base.” Las filas de esta matriz forman una base del espacio vectorial. Podemos ubtener la base, como una lista de vectores (no como filas de una matriz), con el método .basis()
.
Notemos que Sage convirtió el conjunto generador de dos vectores en una base con dos vectores. Esto se debe en parte al hecho que el conjunto original de vectores es linealmente dependiente, pero otro cambio más sustantivo tuvo lugar.
Este es un buen momento para discutir algo se las matemáticas que hacen funcionar las rutinas de Sage. Un espacio vectorial sobre un cuerpo infinito, como los reales o los racionales, es un conjunto infinito. Sin importar cuán enorme parezca la memoria de un computador, siempre será finita. Cómo hace Sage para meter un conjunto infinito en una máquina finita? La idea principal es que un espacio vectorial de dimensión finita tiene un conjunto finito de generadores, que conocemos como una base. Des esta manera, Sage lo único que realmente necesita es conocer los elementos de una base (dos vectores en el ejemplo anterior) para ser capaza de trabajar con la infinidad de posibles elementos del subespacio.
Más aún, para cualquier base asociada a un espacio vectorial, Sage calcula combinaciones lineales para convertirla en otra base “estándar”. Esta nueva base tiene la propiedad de que como columnas de una matriz, la matriz está en forma escalonada reducida. Usted lo puede apreciar en la matriz base de arriba. La forma escalonada reducida de una matriz es única, de esta manera la base estándar le permite a Sage reconocer cuándo dos espacios vectoriales son iguales. Acá hay un ejemplo.
Como se puede sospechar, es fácil determinar la dimensión de un espacio vectorial.
Subseção 20.6.3 Independencia Lineal
Hay diversas formas en Sage para determinar si un conjunto de vectores es linealmente independiente, y para encontrar relaciones de dependencia lineal si es que las hay. La técnica que mostraremos acá es un test simple para saber si un conjunto de vectores es linealmente independiente o no. Simplemente use los vectores como conjunto generador para un subespacio, y verifique la dimensión de este subespacio. La dimensión es igual al número de vectores en el conjunto generador si y solo si el conjunto generador es linealmente independiente.
El primer conjunto de vectores, [u, v, w]
, es linealmente independiente, mientras el segundo conjunto, [u, v, a^3*u + a^11*v]
, no lo es.
Subseção 20.6.4 Espacios Vectoriales Abstractos
Sage implementa demasiados espacios vectoriales abstractos de forma directa, tales como \(P_n\text{,}\) el espacio vectorial de polinomios de grado menor o igual a \(n\text{.}\) Esto se debe en parte al hecho que un espacio vectorial de dimensión finita sobre un cuerpo \(F\) es isomorfo al espacio vectorial \(F^n\text{.}\) Por esto Sage captura toda la funcionalidad de los espacios vectoriales de dimensión finita, y le deja al usuario realizar la conversión de acuerdo al isomorfismo (lo que puede ser trivial con la elección de una base obvia).
Pero hay instancias en que anillos se comportan naturalmente como espacios vectoriales y podemos aprovechar esta estructura adicional. Veremos mucho más sobre esto en los capítulos sobre cuerpos y teoría de Galois. Como un ejemplo, los cuerpos finitos tienen un generador y las primeras potencias del generador forman una base. Considere crear un espacio vectorial a partir de los elementos de un cuerpo finito de orden \(7^6=117\,649\text{.}\) Como elementos de un cuerpo sabemos que se pueden sumar, de manera que definiremos esta como la suma en nuestro espacio vectorial. Para cualquier entero mód 7, podemos multiplicar un elemento del cuerpo por el entero, así es que definimos este como nuestro producto por escalares. Más adelante, estaremos seguros que estas definiciones nos llevan a un espacio vectorial, pero créanos por ahora. Acá algunas operaciones en nuestro espacio vectorial nuevo.
Puede que esto le parezca muy parecido a la forma en que sumamos polinomios, y los multiplicamos por escalares. Tendría razón, pero note que en esta construcción de espacio vectorial, hemos ignorado por completo la posibilidad de multiplicar dos elementos del cuerpo entre ellos. Como espacio vectorial con escalares en \({\mathbb Z}_7\text{,}\) una base consiste de las primeras seis potencias del generador, \(\{1,\,a,\,a^2,\,a^3,\,a^4,\,a^5\}\text{.}\) (Note como contar desde cero es natural en este contexto.) Puede que haya notado que Sage consistentemente reescribe los elementos del cuerpo como combinaciones lineales — ahora tenemos una buena explicacíón.
Acá está lo que sabe Sage sobre un cuerpo finito como un espacio vectorial. Primero, sabe que el cuerpo finito es un espacio vectorial, y cuál es el cuerpo de escalares.
Así, el cuerpo finito (como espacio vectorial) es isomorfo al espacio vectorial \(({\mathbb Z}_7)^6\text{.}\) Notemos que este no es un isomorfismo de anillos o de cuerpos ya que no se hace cargo completamente de la multiplicación de elementos, aunque ésta es posible en el cuerpo.
Segundo, los elementos del cuerpo pueden ser convertidos fácilmente en elementos del espacio vectorial.
Notemos que Sage escribe los elementos del cuerpo partiendo de las potencias mayores del generador, mientras la base usada está ordenada partiendo de las potencias menores. Los siguientes cálculos ilustran el isomorfismo que preserva la estructura entre el cuerpo finito mismo y su interpretación como el espacio vectorial, \(({\mathbb Z}_7)^6\text{.}\)
Subseção 20.6.5 Álgebra Lineal
Sage tiene mucha funcionalidad para álgebra lineal de lo que hemos descrito o de lo que necesitaremos en los siguientes capítulos. Cree espacios vectoriales y vectores en ellos (con distintos cuerpos de escalares), y use la completación con TAB en estos objetos para ver la gran cantidad de métodos disponibles.