Siguiente: , Anterior: , Subir: atensor   [Índice general][Índice]

27.1 Introducción a atensor

El paquete atensor contiene funciones para la manipulación algebraica de tensores. Para hacer uso de atensor es necesario cargarlo en memoria haciendo load("atensor"), seguido de una llamada a la función init_atensor.

La parte más importante de atensor es una batería de reglas de simplificación para el producto no conmutativo ("."). El paquete atensor reconoce algunos tipos de álgebras; las correspondientes reglas de simplificación se activan tan pronto como se hace una llamada a la función init_atensor.

Las capacidades de atensor se pueden demostrar definiendo el álgebra de cuaterniones como un álgebra de Clifford Cl(0,2) con una base de dos vectores. Las tres unidades imaginarias son los dos vectores de la base junto con su producto:

    i = v     j = v     k = v  . v
         1         2         1    2

Aunque el paquete atensor incluye su propia definición para el álgebra de cuaterniones, no se utiliza en el siguiente ejemplo, en el cual se construye la tabla de multiplicación como una matriz:


(%i1) load("atensor");
(%o1)       /share/tensor/atensor.mac
(%i2) init_atensor(clifford,0,0,2);
(%o2)                                done
(%i3) atensimp(v[1].v[1]);
(%o3)                                 - 1
(%i4) atensimp((v[1].v[2]).(v[1].v[2]));
(%o4)                                 - 1
(%i5) q:zeromatrix(4,4);
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%o5)                           [            ]
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%i6) q[1,1]:1;
(%o6)                                  1
(%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
(%o7)                                done
(%i8) q[1,4]:q[4,1]:v[1].v[2];
(%o8)                               v  . v
                                     1    2
(%i9) for i from 2 thru 4 do for j from 2 thru 4 do
      q[i,j]:atensimp(q[i,1].q[1,j]);
(%o9)                                done
(%i10) q;
                   [    1        v         v      v  . v  ]
                   [              1         2      1    2 ]
                   [                                      ]
                   [   v         - 1     v  . v    - v    ]
                   [    1                 1    2      2   ]
(%o10)             [                                      ]
                   [   v      - v  . v     - 1      v     ]
                   [    2        1    2              1    ]
                   [                                      ]
                   [ v  . v      v        - v       - 1   ]
                   [  1    2      2          1            ]

El paquete atensor reconoce como vectores de la base símbolos indexados, donde el símbolo es el almacenado en asymbol y el índice va desde 1 hasta adim. Para símbolos indexados, y sólo para ellos, se evalúan las formas bilineales sf, af y av. La evaluación sustituye el valor de aform[i,j] en lugar de fun(v[i],v[j]), donde v representa el valor de asymbol y fun es af o sf; o sustituye v[aform[i,j]] en lugar de av(v[i],v[j]).

Huelga decir que las funciones sf, af y av pueden volver a definirse.

Cuando se carga el paquete atensor se hacen las siguientes asignaciones de variables:

dotscrules:true;
dotdistrib:true;
dotexptsimp:false;

Si se quiere experimentar con una álgebra no asociativa, también se puede igualar la variable dotassoc a false. En tal caso, sin embargo, atensimp no será siempre capaz de realizar las simplificaciones deseadas.


Siguiente: , Anterior: , Subir: atensor   [Índice general][Índice]