El cálculo requiere dos procesos:
- operaciones de fila del tipo utilizado en la eliminación gaussiana (con algunas restricciones porque exigimos que se conserve la clase de equivalencia de los enteros) y las correspondientes operaciones de columna,
- el algoritmo euclidiano para encontrar el máximo común divisor de dos enteros.
En concreto, se le permite
- intercambiar dos filas o dos columnas,
- multiplicar una fila o columna por $\pm1$ (que son los elementos invertibles en $\mathbf{Z}$ ),
- añadir un múltiplo entero de fila a otra fila (o un múltiplo entero de una columna a otra columna).
El primer objetivo es alcanzar la forma diagonal. Trabajemos primero en la columna 1: utilizando repetidamente la operación 3 para las filas, se puede, siguiendo el algoritmo euclidiano, formar una fila cuyo primer elemento es el GCD de los elementos de la columna 1. De este modo, se puede obtener una matriz con el GCD en el $(1,1)$ y ceros en el resto de la columna 1.
Ahora trabaja en la fila 1: haz lo mismo, pero utilizando operaciones de columna; finalmente tendrás el GCD de la fila 1 en el $(1,1)$ y ceros en el resto de la fila 1. Lo más probable es que hayas estropeado la columna 1, pero no pasa nada. Vuelve y rehaz la columna 1, luego rehaz la fila 1, y repite hasta que todos los elementos de la fila y la columna 1 sean 0 excepto el $(1,1)$ elemento. Se garantiza que este proceso termine porque el GCD se hace más pequeño cada vez.
Ahora puede pasar a la fila/columna 2, y repetir el proceso. Continúe con la fila/columna 3, y así sucesivamente, hasta que haya alcanzado la forma diagonal.
Puede que no haya terminado en este punto, porque los elementos diagonales pueden no satisfacer el requisito de divisibilidad de la forma normal de Smith. Sin embargo, puede hacer que esto se cumpla mediante algunos movimientos adicionales, como en el siguiente ejemplo: $$ \begin{bmatrix}8 & 0\\0 & 12\end{bmatrix}\longrightarrow\begin{bmatrix}8 & 8\\0 & 12\end{bmatrix}\longrightarrow\begin{bmatrix}8 & 8\\-8 & 4\end{bmatrix}\longrightarrow\begin{bmatrix}24 & 8\\0 & 4\end{bmatrix}\longrightarrow\begin{bmatrix}24 & 0\\0 & 4\end{bmatrix}\longrightarrow\begin{bmatrix}4 & 0\\0 & 24\end{bmatrix}. $$ La idea es, de nuevo, utilizar el algoritmo eulidiano. Después de sumar la columna 1 a la columna 2, es posible que haya que hacer varias operaciones de fila para obtener el GCD de los dos elementos diagonales originales. En el ejemplo anterior, sólo fue necesaria una operación de fila para ello.
Adenda: Detalles para el ejemplo particular de la pregunta del OP. Si se suma la fila 2 a la fila 1, y luego se multiplica la fila 1 por $-1$ se obtiene un pivote de 1. A continuación, se pueden restar los múltiplos adecuados de la fila 1 a las filas 2 y 4, y se obtiene $$ \begin{bmatrix} 1 & 561 & -174 & -80 \\ 0 & -3477 & 1080 & 474 \\ 0 & -255 & 81 & 24 \\ 0 & -4182 & 1299 & 570 \end{bmatrix}, $$ que, restando los múltiplos de la columna 1 de las columnas 2, 3 y 4, conduce a $$ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & -3477 & 1080 & 474 \\ 0 & -255 & 81 & 24 \\ 0 & -4182 & 1299 & 570 \end{bmatrix}. $$ A continuación tenemos que hacer una serie de operaciones con las filas 2, 3 y 4 que dan como resultado el GCD de 3477, 255 y 4182. Si siempre elegimos el pivote de menor magnitud no nula, los pasos serían
- Resta 14 veces la fila 3 de la fila 2, y 17 veces la fila 3 de la fila 4.
- Suma 2 veces la fila 2 a la fila 3, y resta la fila 2 de la fila 4.
- Resta la fila 4 de la fila 2, y añade la fila 4 a la fila 3.
- Añadir 3 veces la fila 3 a la fila 2, y 6 veces la fila 3 a la fila 4.
- Suma la fila 2 a la fila 3, y resta la fila 2 a la fila 4.
- Añadir 2 veces la fila 3 a la fila 2.
- Intercambia las filas 2 y 3.
- Niega la fila 2.
Ahora debería tener $$ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 3 & 234 & -1410 \\ 0 & 0 & -651 & 3906 \\ 0 & 0 & -147 & 882 \end{bmatrix}. $$ Ahora puedes restar los múltiplos adecuados de la columna 2 a las columnas 3 y 4. Entonces sólo tienes que lidiar con el $2\times2$ en la parte inferior derecha. Deberías ser capaz de conseguirlo desde aquí.
0 votos
Hay un algoritmo en Wikipedia. es.wikipedia.org/wiki/Smith_normal_form
5 votos
Su título menciona "grupos de anillos y campos", pero no parece aportar nada útil.
1 votos
Sé cómo calcular la forma normal de smith pero ¿cómo se calculan los isomorfismos?
0 votos
¿Hay alguna posibilidad de que puedas explicar algunos pasos entonces, Matt? Sé cómo calcular los isomorfismos. He hecho el cálculo muchas veces pero no me sale la respuesta que he mostrado arriba. Gracias Euden