Processing math: 100%

12 votos

Visualización de tablas de Cayley en grupos

introducir descripción de la imagen aquí

¿Cómo puedo hacer gráficos como este? Colores aleatorios. Tengo un script en GAP que imprime filas de números, pero quiero que estén coloreados con colores aleatorios

G:=Units(Integers mod 2^3);
n:=Order(G);
M:=MultiplicationTable(G);

for i in [1..n] do
for j in [1..n] do
Print(M[i][j]," ");
od;
Print("\n");
od;
Print("\n");

Me gustaría ver la tabla de grupos para poder pensar mejor en el grupo

 1 2 3 4
 2 1 4 3
 3 4 1 2
 4 3 2 1

0 votos

Ver el sitio web de Wolfram en mathworld.wolfram.com/FiniteGroupC2xC2.html

10voto

bentsai Puntos 1886

También podrías escribir un script de GAP para producir la matriz en R. Por ejemplo:

MatrixToR:=function(M)
  local nrow,ncol;
  nrow:=Size(M);
  ncol:=Size(M[1]);
  Print("A = matrix(c(");
  for i in [1..nrow] do
    for j in [1..ncol] do
      if(i=nrow and j=ncol) then Print(M[i][j]); continue; fi;
      Print(M[i][j],", ");
    od;
  od;
  Print("),nrow=",nrow,",ncol=",ncol,",byrow=TRUE)\n");
end;;

Entonces, si ejecutamos esto

MatrixToR(MultiplicationTable(Random(AllSmallGroups(12))));

se produce:

A = matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2, 1, 5, 6, 3, 4, 9, 10, 7, 8, 12, 11, 3, 5, 1, 7, 2, 9, 4, 11, 6, 12, 8, 10, 4, 6, 7, 8, 9, 10, 11, 1, 12, 2, 3, 5, 5, 3, 2, 9, 1, 7, 6, 12, 4, 11, 10, 8, 6, 4, 9, 10, 7, 8, 12, 2, 11, 1, 5, 3, 7, 9, 4, 11, 6, 12, 8, 3, 10, 5, 1, 2, 8, 10, 11, 1, 12, 2, 3, 4, 5, 6, 7, 9, 9, 7, 6, 12, 4, 11, 10, 5, 8, 3, 2, 1, 10, 8, 12, 2, 11, 1, 5, 6, 3, 4, 9, 7, 11, 12, 8, 3, 10, 5, 1, 7, 2, 9, 4, 6, 12, 11, 10, 5, 8, 3, 2, 9, 1, 7, 6, 4),nrow=12,ncol=12,byrow=TRUE)

lo cual se puede ingresar en R y trazar en color utilizando la función plotrix color2D.matplot, como sigue

require(plotrix)
color2D.matplot(A)

lo cual trazará

Resultado final

(Posiblemente necesites ejecutar install.packages("plotrix") para instalar el paquete de R.)

0 votos

¿Los paquetes que mencionaste anteriormente funcionan en Windows? ¿O funcionan en Linux?

0 votos

Corro Ubuntu Linux, así que estos métodos funcionan para ese sistema operativo. El método LaTeX/tikz seguramente funcionará en Windows (solo necesitas instalar latex y tikz, lo cual se puede hacer bastante fácilmente a través de TeXnicCenter y MikTeX). No he ejecutado el método R en Windows, pero me sorprendería si fuera significativamente diferente que en Linux.

8voto

bentsai Puntos 1886

No creo que haya una característica así en GAP (o, al menos, no soy consciente de una). Pero sería posible escribir un script para producir código LaTeX. Por ejemplo:

MatrixToLaTeX:=function(M)
  local i,j,m,n;
  m:=Size(M);
  n:=Size(M[1]);
  Print("\\begin{tikzpicture}\n\\tikzset{square matrix/.style={\n    matrix of nodes,\n    column sep=-\\pgflinewidth,\n    row sep=-\\pgflinewidth,\n    nodes={draw,\n      minimum height=#1,\n      anchor=center,\n      text width=#1,\n      align=center,\n      inner sep=0pt\n      },\n    },\n  square matrix/.default=1.2cm\n}\n\n");
  Print("\\matrix[square matrix]\n{\n");
  for i in [1..m] do
    for j in [1..n-1] do
      Print("|[fill=blue!",10+8*M[i][j],"]| & ");
    od;
    Print("|[fill=blue!",10+8*M[i][n],"]| \\\\\n");
  od;
  Print("};\n\n\\end{tikzpicture}\n");
end;;

que, cuando lo ejecutamos

gap> MatrixToLaTeX(MultiplicationTable(Random(AllSmallGroups(12))));

produce la entrada tikz:

\begin{tikzpicture}
\tikzset{square matrix/.style={
    matrix of nodes,
    column sep=-\pgflinewidth,
    row sep=-\pgflinewidth,
    nodes={draw,
      minimum height=#1,
      anchor=center,
      text width=#1,
      align=center,
      inner sep=0pt
      },
    },
  square matrix/.default=1.2cm
}

\matrix[square matrix]
{
|[fill=blue!18]| & |[fill=blue!26]| & |[fill=blue!34]| & |[fill=blue!42]| & |[fill=blue!50]| & |[fill=blue!58]| & |[fill=blue!66]| & |[fill=blue!74]| & |[fill=blue!82]| & |[fill=blue!90]| & |[fill=blue!98]| & |[fill=blue!106]| \\
|[fill=blue!26]| & |[fill=blue!18]| & |[fill=blue!50]| & |[fill=blue!58]| & |[fill=blue!34]| & |[fill=blue!42]| & |[fill=blue!82]| & |[fill=blue!90]| & |[fill=blue!66]| & |[fill=blue!74]| & |[fill=blue!106]| & |[fill=blue!98]| \\
|[fill=blue!34]| & |[fill=blue!50]| & |[fill=blue!18]| & |[fill=blue!66]| & |[fill=blue!26]| & |[fill=blue!82]| & |[fill=blue!42]| & |[fill=blue!98]| & |[fill=blue!58]| & |[fill=blue!106]| & |[fill=blue!74]| & |[fill=blue!90]| \\
|[fill=blue!42]| & |[fill=blue!90]| & |[fill=blue!66]| & |[fill=blue!74]| & |[fill=blue!106]| & |[fill=blue!26]| & |[fill=blue!98]| & |[fill=blue!18]| & |[fill=blue!50]| & |[fill=blue!58]| & |[fill=blue!34]| & |[fill=blue!82]| \\
|[fill=blue!50]| & |[fill=blue!34]| & |[fill=blue!26]| & |[fill=blue!82]| & |[fill=blue!18]| & |[fill=blue!66]| & |[fill=blue!58]| & |[fill=blue!106]| & |[fill=blue!42]| & |[fill=blue!98]| & |[fill=blue!90]| & |[fill=blue!74]| \\
|[fill=blue!58]| & |[fill=blue!74]| & |[fill=blue!82]| & |[fill=blue!90]| & |[fill=blue!98]| & |[fill=blue!18]| & |[fill=blue!106]| & |[fill=blue!26]| & |[fill=blue!34]| & |[fill=blue!42]| & |[fill=blue!50]| & |[fill=blue!66]| \\
|[fill=blue!66]| & |[fill=blue!106]| & |[fill=blue!42]| & |[fill=blue!98]| & |[fill=blue!90]| & |[fill=blue!50]| & |[fill=blue!74]| & |[fill=blue!34]| & |[fill=blue!26]| & |[fill=blue!82]| & |[fill=blue!18]| & |[fill=blue!58]| \\
|[fill=blue!74]| & |[fill=blue!58]| & |[fill=blue!98]| & |[fill=blue!18]| & |[fill=blue!82]| & |[fill=blue!90]| & |[fill=blue!34]| & |[fill=blue!42]| & |[fill=blue!106]| & |[fill=blue!26]| & |[fill=blue!66]| & |[fill=blue!50]| \\
|[fill=blue!82]| & |[fill=blue!98]| & |[fill=blue!58]| & |[fill=blue!106]| & |[fill=blue!74]| & |[fill=blue!34]| & |[fill=blue!90]| & |[fill=blue!50]| & |[fill=blue!18]| & |[fill=blue!66]| & |[fill=blue!26]| & |[fill=blue!42]| \\
|[fill=blue!90]| & |[fill=blue!42]| & |[fill=blue!106]| & |[fill=blue!26]| & |[fill=blue!66]| & |[fill=blue!74]| & |[fill=blue!50]| & |[fill=blue!58]| & |[fill=blue!98]| & |[fill=blue!18]| & |[fill=blue!82]| & |[fill=blue!34]| \\
|[fill=blue!98]| & |[fill=blue!82]| & |[fill=blue!74]| & |[fill=blue!34]| & |[fill=blue!58]| & |[fill=blue!106]| & |[fill=blue!18]| & |[fill=blue!66]| & |[fill=blue!90]| & |[fill=blue!50]| & |[fill=blue!42]| & |[fill=blue!26]| \\
|[fill=blue!106]| & |[fill=blue!66]| & |[fill=blue!90]| & |[fill=blue!50]| & |[fill=blue!42]| & |[fill=blue!98]| & |[fill=blue!26]| & |[fill=blue!82]| & |[fill=blue!74]| & |[fill=blue!34]| & |[fill=blue!58]| & |[fill=blue!18]| \\
};

\end{tikzpicture}

que añadimos a un documento LaTeX y compilamos para obtener:

Salida compilada

Para usar esto, necesitamos lo siguiente en el preámbulo de LaTeX:

\usepackage{tikz}
\usetikzlibrary{matrix}

5voto

Adam Tuttle Puntos 7982

Puedes hacer algo similiar a lo que estás pidiendo directamente en GAP si estás corriendo en una terminal que puede interpretar escapes de color. No sé si esto funcionará en Windows, pero parece que funciona bien en UNIX.

Define algunos colores:

FGC := [ "30m", "31m", "32m", "33m", "34m", "35m", "36m", "37m" ];; # colores de primer plano
BGC := [ "40m", "41m", "42m", "43m", "44m", "45m", "46m", "47m" ];; # colores de fondo

Para tu pequeño ejemplo, solo necesitamos los colores de primer plano, pero podrías manejar un grupo más grande usando varias combinaciones de colores de primer plano y fondo. Modifica tu bucle de la siguiente manera.

for i in [1..n] do
for j in [1..n] do
    k := M[ i ][ j ];
    Print( "\033[", FGC[ k ] ); # establecer color
    Print( k );                 # imprimir número
    Print( "\033[0m" );         # resetear
    Print( " " );               # espacio
od;
Print( "\n" );
od;;

Obtengo algo así en mi terminal:

Instantánea de la terminal

No es tan agradable como las soluciones gráficas, pero te da algo sin tener que mover tus datos a otro paquete. Es posible que puedas desarrollar esta idea en algo más completo.

0 votos

¡Esto es realmente muy bonito! Lamentablemente, hay muy pocos colores para grupos más grandes.

4voto

Alexander Gruber Puntos 21477

No sé cómo podrías hacerlo en GAP, pero si lo sacas de GAP y lo pones en Mathematica en la forma {{1,2,3,4},{2,1,4,3},{3,4,1,2},{4,3,2,1}} (lo cual debería ser fácil) entonces puedes usar MatrixPlot. Por ejemplo,

A = {{1,2,3,4},{2,1,4,3},{3,4,1,2},{4,3,2,1}};
MatrixPlot[A, ColorFunction -> "Rainbow", Frame -> False]

produce

Rainbow.

Puedes ver el conjunto completo de esquemas de color predefinidos aquí. Si no te gustan esos, puedes hacer los tuyos propios sin mucho trabajo adicional.

3voto

Adam Tuttle Puntos 7982

Si tienes acceso a Maple, hay un comando incorporado para hacer esto. Puedes crear la tabla de Cayley de manera bastante directa a partir de la matriz GAP en Maple de la siguiente manera.

M := [ [ 1, 2, 3, 4 ], [ 2, 1, 4, 3 ], [ 3, 4, 1, 2 ], [ 4, 3, 2, 1 ] ]:
m := Matrix( M ):
with( Magma ):
CayleyColourTable( m );

Esto produce una imagen algo así:

Cayley Colour Table

Luego puedes usar opciones para ajustar la salida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X