1 @c English version 2011-03-14
3 * Introducción a ctensor::
4 * Funciones y variables para ctensor::
7 @node Introducción a ctensor, Funciones y variables para ctensor, ctensor, ctensor
8 @section Introducción a ctensor
10 El paquete @code{ctensor} dispone de herramientas para manipular componentes de tensores. Para poder hacer uso de @code{ctensor} es necesario cargarlo previamente en memoria ejecutando @code{load("ctensor")}. Para comenzar una sesión interactiva con @code{ctensor}, ejecutar la función @code{csetup()}. Primero se le pregunta al usuario la dimensión de la variedad. Si la dimensión es 2, 3 o 4, entonces la lista de coordenadas será por defecto @code{[x,y]}, @code{[x,y,z]}
11 o @code{[x,y,z,t]}, respectivamente. Estos nombres pueden cambiarse asignando una nueva lista de coordenadas a la variable @code{ct_coords} (que se describe más abajo), siendo el usuario advertido sobre este particular.
12 Se debe tener cuidado en evitar que los nombres de las coordenadas entren en conflicto con los nombres de otros objetos en Maxima.
14 A continuación, el usuario introduce la métrica, bien directamente, o desde un fichero especificando su posición ordinal.
16 @c As an example of a file of common metrics, see @code{share/tensor/metrics.mac}.
17 La métrica se almacena en la matriz @code{lg}. Por último, la métrica inversa se obtiene y almacena en la matriz @code{ug}. También se dispone de la opción de efectuar todos los cálculos en serie de potencias.
19 Se desarrolla a continuación un ejemplo para la métrica estática, esférica y simétrica, en coordenadas estándar, que se aplicará posteriormente al problema de derivar las ecuaciones de vacío de Einstein (de las que se obtiene la solución de Schwarzschild). Muchas de las funciones de @code{ctensor} se mostrarán en los ejemplos para la métrica estándar.
22 (%i1) load("ctensor");
23 (%o1) /share/tensor/ctensor.mac
25 Enter the dimension of the coordinate system:
27 Do you wish to change the coordinate names?
30 1. Enter a new metric?
32 2. Enter a metric from a file?
34 3. Approximate a metric with a Taylor series?
37 Is the matrix 1. Diagonal 2. Symmetric 3. Antisymmetric 4. General
50 Enter functional dependencies with the DEPENDS function or 'N' if none
52 Do you wish to see the metric?
93 (%t9) mcs = - ---------
96 (%t10) mcs = - cos(y) sin(y)
108 @node Funciones y variables para ctensor, , Introducción a ctensor, ctensor
109 @section Funciones y variables para ctensor
111 @subsection Inicialización y preparación
113 @deffn {Función} csetup ()
114 Es la función del paquete @code{ctensor} que inicializa el paquete y permite al usuario introducir una métrica de forma interactiva. Véase @code{ctensor} para más detalles.
117 @deffn {Función} cmetric (@var{dis})
118 @deffnx {Función} cmetric ()
119 Es la función del paquete @code{ctensor} que calcula la métrica inversa y prepara el paquete para cálculos ulteriores.
121 Si @code{cframe_flag} vale @code{false}, la función calcula la métrica inversa @code{ug} a partir de la matriz @code{lg} definida por el usuario. Se calcula también la métrica determinante y se almacena en la variable @code{gdet}. Además, el paquete determina si la métrica es diagonal y ajusta el valor de @code{diagmetric} de la forma apropiada. Si el argumento opcional @var{dis} está presente y no es igual a @code{false}, el usuario podrá ver la métrica inversa.
123 Si @code{cframe_flag} vale @code{true}, la función espera que los valores de @code{fri} (la matriz del sistema de referencia inverso) y @code{lfg} (la matriz del sistema de referencia) estén definidos. A partir de ellos, se calculan la matriz del sistema de referencia @code{fr} y su métrica @code{ufg}.
128 @deffn {Función} ct_coordsys (@var{sistema_coordenadas}, @var{extra_arg})
129 @deffnx {Función} ct_coordsys (@var{sistema_coordenadas})
131 Prepara un sistema de coordenadas predefinido y una métrica. El argumento @var{sistema_coordenadas} puede ser cualquiera de los siguientes símbolos:
135 Símbolo Dim Coordenadas Descripción/comentarios
136 --------------------------------------------------------------------------------
137 cartesian2d 2 [x,y] Sistema de coordenadas cartesianas en 2D
138 polar 2 [r,phi] Sistema de coordenadas polares
139 elliptic 2 [u,v] Sistema de coordenadas elípticas
140 confocalelliptic 2 [u,v] Coordenadas elípticas confocales
141 bipolar 2 [u,v] Sistema de coordenas bipolares
142 parabolic 2 [u,v] Sistema de coordenadas parabólicas
143 cartesian3d 3 [x,y,z] Sistema de coordenadas cartesianas en 3D
144 polarcylindrical 3 [r,theta,z] Polares en 2D con cilíndrica z
145 ellipticcylindrical 3 [u,v,z] Elípticas en 2D con cilíndrica z
146 confocalellipsoidal 3 [u,v,w] Elipsoidales confocales
147 bipolarcylindrical 3 [u,v,z] Bipolares en 2D con cilíndrica z
148 paraboliccylindrical 3 [u,v,z] Parabólicas en 2D con cilíndrica z
149 paraboloidal 3 [u,v,phi] Coordenadas paraboloidales
150 conical 3 [u,v,w] Coordenadas cónicas
151 toroidal 3 [u,v,phi] Coordenadas toroidales
152 spherical 3 [r,theta,phi] Sistema de coordenadas esféricas
153 oblatespheroidal 3 [u,v,phi] Coordenadas esferoidales obleadas
154 oblatespheroidalsqrt 3 [u,v,phi]
155 prolatespheroidal 3 [u,v,phi] Coordenadas esferoidales prolatas
156 prolatespheroidalsqrt 3 [u,v,phi]
157 ellipsoidal 3 [r,theta,phi] Coordenadas elipsoidales
158 cartesian4d 4 [x,y,z,t] Sistema de coordenadas cartesianas en 4D
159 spherical4d 4 [r,theta,eta,phi] Sistema de coordenadas esféricas en 4D
160 exteriorschwarzschild 4 [t,r,theta,phi] Métrica de Schwarzschild
161 interiorschwarzschild 4 [t,z,u,v] Métrica interior de Schwarzschild
162 kerr_newman 4 [t,r,theta,phi] Métrica simétrica con carga axial
166 El argumento @code{sistema_coordenadas} puede ser también una lista de funciones de transformación, seguida de una lista que contenga los nombres de las coordenadas. Por ejemplo, se puede especificar una métrica esférica como se indica a continuación:
170 (%i1) load("ctensor");
171 (%o1) /share/tensor/ctensor.mac
172 (%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
173 r*sin(theta),[r,theta,phi]]);
175 (%i3) lg:trigsimp(lg);
182 [ 0 0 r cos (theta) ]
184 (%o4) [r, theta, phi]
190 Las funciones de transformación se pueden utilizar también si @code{cframe_flag} vale @code{true}:
194 (%i1) load("ctensor");
195 (%o1) /share/tensor/ctensor.mac
196 (%i2) cframe_flag:true;
198 (%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
199 r*sin(theta),[r,theta,phi]]);
202 [ cos(phi) cos(theta) - cos(phi) r sin(theta) - sin(phi) r cos(theta) ]
204 (%o4) [ sin(phi) cos(theta) - sin(phi) r sin(theta) cos(phi) r cos(theta) ]
206 [ sin(theta) r cos(theta) 0 ]
209 (%i6) lg:trigsimp(lg);
216 [ 0 0 r cos (theta) ]
220 El argumento opcional @var{extra_arg} puede ser cualquiera de los siguientes:
222 @code{cylindrical} indica a @code{ct_coordsys} que añada una coordenada cilíndrica más.
224 @code{minkowski} indica a @code{ct_coordsys} que añada una coordenada más con signatura métrica negativa.
226 @code{all} indica a @code{ct_coordsys} que llame a @code{cmetric} y a @code{christof(false)} tras activar la métrica.
228 Si la variable global @code{verbose} vale @code{true}, @code{ct_coordsys} muestra los valores de @code{dim}, @code{ct_coords}, junto con @code{lg} o @code{lfg} y @code{fri}, dependiendo del valor de @code{cframe_flag}.
232 @deffn {Función} init_ctensor ()
233 Inicializa el paquete @code{ctensor}.
235 La función @code{init_ctensor} reinicializa el paquete @code{ctensor}. Borra todos los arreglos ("arrays") y matrices utilizados por @code{ctensor} y reinicializa todas las variables, asignando a @code{dim} el valor 4 y la métrica del sistema de referencia a la de Lorentz.
239 @subsection Los tensores del espacio curvo
241 El propósito principal del paquete @code{ctensor} es calcular los tensores del espacio (-tiempo) curvo, en especial los tensores utilizados en relatividad general.
243 Cuando se utiliza una métrica, @code{ctensor} puede calcular los siguientes tensores:
249 lcs -- mcs -- ric -- uric
251 \ tracer - ein -- lein
253 riem -- lriem -- weyl
260 El paquete @code{ctensor} también puede trabajar con sistemas de referencia móviles. Si @code{cframe_flag} vale @code{true}, se pueden calcular los siguientes tensores:
266 fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
268 lg -- ug | weyl tracer - ein -- lein
276 @deffn {Función} christof (@var{dis})
277 Es una función del paquete @code{ctensor}. Calcula los símbolos de Christoffel de ambos tipos. El argumento @var{dis} determina qué resultados se mostrarán de forma inmediata. Los símbolos de Christoffel de primer y segundo tipo se almacenan en los arreglos @code{lcs[i,j,k]} y @code{mcs[i,j,k]}, respectivamente, y se definen simétricos en sus dos primeros índices. Si el argumento de @code{christof} es @code{lcs} o @code{mcs} entonces serán mostrados únicamente los valores no nulos de @code{lcs[i,j,k]} o @code{mcs[i,j,k]}, respectivamente. Si el argumento es @code{all} entonces se mostrarán los valores no nulos de @code{lcs[i,j,k]} y @code{mcs[i,j,k]}. Si el argumento vale @code{false} entonces no se mostrarán los elementos. El arreglo @code{mcs[i,j,k]} está definido de tal modo que el último índice es contravariante.
280 @deffn {Función} ricci (@var{dis})
281 Es una función del paquete @code{ctensor}. La función @code{ricci} calcula las componentes covariantes (simétricas)
282 @code{ric[i,j]} del tensor de Ricci. Si el argumento @var{dis} vale @code{true}, entonces se muestran las componentes no nulas.
286 @deffn {Función} uricci (@var{dis})
287 Esta función calcula en primer lugar las componentes covariantes @code{ric[i,j]} del tensor de Ricci. Después se calcula el tensor de Ricci utilizando la métrica contravariante. Si el valor del argumento @var{dis} vale @code{true}, entonces se mostrarán directamente las componentes @code{uric[i,j]} (el índice @var{i} es covariante y el @var{j} contravariante). En otro caso, @code{ricci(false)} simplemente calculará las entradas del arreglo @code{uric[i,j]} sin mostrar los resultados.
291 @deffn {Función} scurvature ()
293 Devuelve la curvatura escalar (obtenida por contracción del tensor de Ricci) de la variedad de Riemannian con la métrica dada.
297 @deffn {Función} einstein (@var{dis})
298 Es una función del paquete @code{ctensor}. La función @code{einstein} calcula el tensor de Einstein después de que los símbolos de Christoffel y el tensor de Ricci hayan sido calculados (con las funciones @code{christof} y @code{ricci}). Si el argumento @var{dis} vale @code{true}, entonces se mostrarán los valores no nulos del tensor de Einstein @code{ein[i,j]}, donde @code{j} es el índice contravariante. La variable @code{rateinstein} causará la simplificación racional de estas componentes. Si @code{ratfac} vale @code{true} entonces las componentes también se factorizarán.
302 @deffn {Función} leinstein (@var{dis})
303 Es el tensor covariante de Einstein. La función @code{leinstein} almacena los valores del tensor covariante de Einstein en el arreglo @code{lein}. El tensor covariante de Einstein se calcula a partir del tensor de Einstein @code{ein} multiplicándolo por el tensor métrico. Si el argumento @var{dis} vale @code{true}, entonces se mostrarán los valores no nulos del tensor covariante de Einstein.
307 @deffn {Función} riemann (@var{dis})
308 Es una función del paquete @code{ctensor}. La función @code{riemann} calcula el tensor de curvatura de Riemann a partir de la métrica dada y de los símbolos de Christoffel correspondientes. Se utiliza el siguiente convenio sobre los índices:
312 R[i,j,k,l] = R = | - | + | | - | |
313 ijk ij,k ik,j mk ij mj ik
316 Esta notación es consistente con la notación utilizada por el paquete @code{itensor} y su función @code{icurvature}. Si el argumento opcional @var{dis} vale @code{true}, se muestran las componentes no nulas únicas de @code{riem[i,j,k,l]}. Como en el caso del tensor de Einstein, ciertas variables permiten controlar al usuario la simplificación de las componentes del tensor de Riemann. Si @code{ratriemann} vale @code{true}, entonces se hará la simplificación racional. Si @code{ratfac} vale @code{true}, entonces se factorizarán todas las componentes.
318 Si la variable @code{cframe_flag} vale @code{false}, el tensor de Riemann se calcula directamente a partir de los símbolos de Christoffel. Si @code{cframe_flag} vale @code{true}, el tensor covariante de Riemann se calcula a partir de los coeficientes del campo.
322 @deffn {Función} lriemann (@var{dis})
323 Es el tensor covariante de Riemann (@code{lriem[]}).
325 Calcula el tensor covariante de Riemann como un arreglo @code{lriem}. Si el argumento @var{dis} vale @code{true}, sólo se muestran los valores no nulos.
327 Si la variable @code{cframe_flag} vale @code{true}, el tensor covariante de Riemann se calcula directamente de los coeficientes del campo. En otro caso, el tensor de Riemann (3,1) se calcula en primer lugar.
329 Para más información sobre la ordenación de los índices, véase @code{riemann}.
333 @deffn {Función} uriemann (@var{dis})
334 Calcula las componentes contravariantes del tensor de curvatura de Riemann como un arreglo @code{uriem[i,j,k,l]}. Éstos se muestran si @var{dis} vale @code{true}.
338 @deffn {Función} rinvariant ()
339 Calcula la invariante de Kretchmann (@code{kinvariant}) obtenida por contracción de los tensores.
342 lriem[i,j,k,l]*uriem[i,j,k,l].
345 Este objeto no se simplifica automáticamente al ser en ocasiones muy grande.
349 @deffn {Función} weyl (@var{dis})
350 Calcula el tensor conforme de Weyl. Si el argumento @var{dis} vale @code{true}, se le mostrarán al usuario las componentes no nulas @code{weyl[i,j,k,l]}. En otro caso, estas componentes serán únicamente calculadas y almacenadas. Si la variable @code{ratweyl} vale @code{true}, entonces las componentes se simplifican racionalmente; si @code{ratfac} vale @code{true} los resultados también se simplificarán.
354 @subsection Desarrollo de Taylor
356 El paquete @code{ctensor} puede truncar resultados e interpretarlos como aproximaciones de Taylor. Este comportamiento se controla con lavariable @code{ctayswitch}; cuando vale @code{true}, @code{ctensor} utiliza internamente la función @code{ctaylor} cuando simplifica resultados.
358 La función @code{ctaylor} es llamada desde las siguientes funciones del paquete @code{ctensor}:
363 ---------------------------------
364 christof() Sólo para mcs
373 @deffn {Función} ctaylor ()
375 La función @code{ctaylor} trunca su argumento convirtiéndolo en un desarrollo de Taylor por medio de la función @code{taylor} e invocando después a @code{ratdisrep}. Esto tiene el efecto de eliminar términos de orden alto en la variable de expansión @code{ctayvar}. El orden de los términos que deben ser eliminados se define @code{ctaypov}; el punto alrededor del cual se desarrolla la serie se especifica en @code{ctaypt}.
377 Como ejemplo, considérese una sencilla métrica que es una perturbación de la de Minkowski. Sin añadir restricciones, incluso una métrica diagonal produce expansiones del tensor de Einstein que pueden llegar a ser muy complejas:
381 (%i1) load("ctensor");
382 (%o1) /share/tensor/ctensor.mac
385 (%i3) derivabbrev:true;
387 (%i4) ct_coords:[t,r,theta,phi];
388 (%o4) [t, r, theta, phi]
389 (%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],[0,0,0,r^2*sin(theta)^2]);
398 [ 0 0 0 r sin (theta) ]
399 (%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
418 [ 0 0 0 r sin (theta) + h44 l ]
419 (%i9) cmetric(false);
421 (%i10) einstein(false);
444 Sin embargo, si se recalcula este ejemplo como una aproximación lineal en la variable @code{l}, se obtienen expresiones más sencillas:
448 (%i14) ctayswitch:true;
456 (%i18) christof(false);
460 (%i20) einstein(false);
480 (%i22) ratsimp(ein[1,1]);
482 (%o22) - (((h11 h22 - h11 ) (l ) r - 2 h33 l r ) sin (theta)
486 - 2 h44 l r - h33 h44 (l ) )/(4 r sin (theta))
493 Esta capacidad del paquete @code{ctensor} puede ser muy útil; por ejemplo, cuando se trabaja en zonas del campo gravitatorio alejadas del origen de éste.
497 @subsection Campos del sistema de referencia
499 Cuando la variable @code{cframe_flag} vale @code{true}, el paquete @code{ctensor} realiza sus cálculos utilizando un sistema de referencia móvil.
501 @deffn {Función} frame_bracket (@var{fr}, @var{fri}, @var{diagframe})
502 Es el sistema de referencia soporte (@code{fb[]}).
504 Calcula el soporte del sistema de referencia de acuerdo con la siguiente definición:
508 ifb = ( ifri - ifri ) ifr ifr
514 @subsection Clasificación algebraica
516 Una nueva funcionalidad (Noviembre de 2004) de @code{ctensor} es su capacidad de obtener la clasificación de Petrov de una métrica espaciotemporal de dimensión 4. Para una demostración de esto véase el fichero
517 @code{share/tensor/petrov.dem}.
519 @deffn {Función} nptetrad ()
520 Calcula la cuaterna nula de Newman-Penrose (@code{np}). Véase @code{petrov} para un ejemplo.
522 La cuaterna nula se construye bajo la suposición de que se está utilizando una métrica tetradimensional ortonormal con signatura métrica (-,+,+,+). Los componentes de la cuaterna nula se relacionan con la inversa de la matriz del sistema de referencia de la siguiente manera:
526 np = (fri + fri ) / sqrt(2)
529 np = (fri - fri ) / sqrt(2)
532 np = (fri + %i fri ) / sqrt(2)
535 np = (fri - %i fri ) / sqrt(2)
542 @deffn {Función} psi (@var{dis})
543 Calcula los cinco coeficientes de Newman-Penrose @code{psi[0]}...@code{psi[4]}.
544 Si @code{dis} vale @code{true}, se muestran estos coeficientes.
545 Véase @code{petrov} para un ejemplo.
547 @c AQUI HAY UN PARRAFO COMPLETO POR TRADUCIR (Mario)
548 Estos coeficientes se calculan a partir del tensor de Weyl.
552 @deffn {Función} petrov ()
553 Calcula la clasificación de Petrov de la métrica caracterizada por @code{psi[0]}...@code{psi[4]}.
555 Por ejemplo, lo que sigue demuestra cómo obtener la clasificación de Petrov para la métrica de Kerr:
558 (%i1) load("ctensor");
559 (%o1) /share/tensor/ctensor.mac
560 (%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
562 (%i3) ct_coordsys(exteriorschwarzschild,all);
567 (%i6) nptetrad(true);
570 [ sqrt(r - 2 m) sqrt(r) ]
571 [ --------------- --------------------- 0 0 ]
572 [ sqrt(2) sqrt(r) sqrt(2) sqrt(r - 2 m) ]
574 [ sqrt(r - 2 m) sqrt(r) ]
575 [ --------------- - --------------------- 0 0 ]
576 [ sqrt(2) sqrt(r) sqrt(2) sqrt(r - 2 m) ]
578 [ r %i r sin(theta) ]
579 [ 0 0 ------- --------------- ]
582 [ r %i r sin(theta) ]
583 [ 0 0 ------- - --------------- ]
586 sqrt(r) sqrt(r - 2 m)
587 (%t7) npi = matrix([- ---------------------, ---------------, 0, 0],
588 sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)
590 sqrt(r) sqrt(r - 2 m)
591 [- ---------------------, - ---------------, 0, 0],
592 sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)
595 [0, 0, ---------, --------------------],
596 sqrt(2) r sqrt(2) r sin(theta)
599 [0, 0, ---------, - --------------------])
600 sqrt(2) r sqrt(2) r sin(theta)
626 La función de clasificación de Petrov se basa en el algoritmo publicado en "Classifying geometries in general relativity: III Classification in practice" de Pollney, Skea, and d'Inverno, Class. Quant. Grav. 17 2885-2902 (2000).
627 Excepto para algunos ejemplos sencillos, esta implementación no ha sido exhaustivamente probada, por lo que puede contener errores.
631 @subsection Torsión y no metricidad
633 El paquete @code{ctensor} es capaz de calcular e incluir coeficientes de torsión y no metricidad en los coeficientes de conexión.
635 Los coeficientes de torsión se calculan a partir de un tensor suministrado por el usuario, @code{tr}, el cual debe ser de rango (2,1). A partir de ahí, los coeficientes de torsión @code{kt} se calculan de acuerdo con las siguientes fórmulas:
642 kt = -------------------------------
652 @c AQUI FALTA UN PARRAFO
654 Los coeficientes de no metricidad se calculan a partir de un vector de no metricidad, @code{nm}, suministrado por el usuario. A partir de ahí, los coeficientes de no metricidad, @code{nmc}, se calculan como se indica a continuación:
659 -nm D - D nm + g nm g
661 nmc = ------------------------------
666 donde D es la delta de Kronecker.
668 @c AQUI FALTAN DOS PARRAFOS
670 @deffn {Función} contortion (@var{tr})
672 Calcula los coeficientes (2,1) de contorsión del tensor de torsión @var{tr}.
676 @deffn {Función} nonmetricity (@var{nm})
678 Calcula los coeficientes (2,1) de no metricidad del vector de no metricidad @var{nm}.
682 @subsection Otras funcionalidades
684 @deffn {Función} ctransform (@var{M})
685 Es una función del paquete @code{ctensor}. Realiza una transformación de coordenadas a partir de una matriz cuadrada simétrica @var{M} arbitraria. El usuario debe introducir las funciones que definen la transformación.
689 @deffn {Función} findde (@var{A}, @var{n})
691 Devuelve la lista de las ecuaciones diferenciales que corresponden a los elementos del arreglo cuadrado @var{n}-dimensional. El argumento @var{n} puede ser 2 ó 3; @code{deindex} es una lista global que contiene los índices de @var{A} que corresponden a estas ecuaciones diferenciales. Para el tensor de Einstein (@code{ein}), que es un arreglo bidimensional, si se calcula para la métrica del ejemplo de más abajo, @code{findde} devuelve las siguientes ecuaciones diferenciales independientes:
694 (%i1) load("ctensor");
695 (%o1) /share/tensor/ctensor.mac
696 (%i2) derivabbrev:true;
700 (%i4) lg:matrix([a,0,0,0],[0,x^2,0,0],[0,0,x^2*sin(y)^2,0],[0,0,0,-d]);
710 (%i5) depends([a,d],x);
712 (%i6) ct_coords:[x,y,z,t];
716 (%i8) einstein(false);
720 (%o9) [d x - a d + d, 2 a d d x - a (d ) x - a d d x + 2 a d d
724 - 2 a d , a x + a - a]
727 (%o10) [[1, 1], [2, 2], [4, 4]]
733 @deffn {Función} cograd ()
734 Calcula el gradiente covariante de una función escalar permitiendo al usuario
735 elegir el nombre del vector correspondiente, tal como ilustra el ejemplo que acompaña
736 a la definición de la función @code{contragrad}.
740 @deffn {Function} contragrad ()
742 Calcula el gradiente contravariante de una función escalar permitiendo al usuario elegir el nombre del vector correspondiente, tal como muestra el siguiente ejemplo para la métrica de Schwarzschild:
746 (%i1) load("ctensor");
747 (%o1) /share/tensor/ctensor.mac
748 (%i2) derivabbrev:true;
750 (%i3) ct_coordsys(exteriorschwarzschild,all);
759 (%i7) contragrad(f,g2);
764 (%o8) [0, -------------, 0, 0]
771 @deffn {Función} dscalar ()
772 Calcula el tensor de d'Alembertian de la función escalar una vez se han declarado las dependencias. Por ejemplo:
775 (%i1) load("ctensor");
776 (%o1) /share/tensor/ctensor.mac
777 (%i2) derivabbrev:true;
779 (%i3) ct_coordsys(exteriorschwarzschild,all);
783 (%i5) factor(dscalar(p));
785 p r - 2 m p r + 2 p r - 2 m p
787 (%o5) --------------------------------------
794 @deffn {Función} checkdiv ()
796 Calcula la divergencia covariante del tensor de segundo rango (mixed second rank tensor), cuyo primer índice debe ser covariante, devolviendo las @code{n} componentes correspondientes del campo vectorial (la divergencia), siendo @code{n = dim}. @c FALTA POR COMPLETAR ESTE PARRAFO.
799 @deffn {Función} cgeodesic (@var{dis})
800 Es una función del paquete @code{ctensor} que calcula las ecuaciones geodésicas del movimiento para una métrica dada, las cuales se almacenan en el arreglo @code{geod[i]}. Si el argumento @var{dis} vale @code{true} entonces se muestran estas ecuaciones.
804 @deffn {Función} bdvac (@var{f})
806 Genera las componentes covariantes de las ecuaciones del campo vacío de la teoría gravitacional de Brans- Dicke gravitational. El campo escalar se especifica con el argumento @var{f}, el cual debe ser el nombre de una función no evaluada (precedida de apóstrofo) con dependencias funcionales, por ejemplo, @code{'p(x)}.
808 Las componentes del tensor covariante (second rank covariant field tensor) se almacenan en el arreglo @code{bd}.
812 @deffn {Función} invariant1 ()
814 Genera el tensor de Euler-Lagrange (ecuaciones de campo) para la densidad invariante de R^2. Las ecuaciones de campo son las componentes del arreglo @code{inv1}.
818 @subsection Utilidades
820 @deffn {Función} diagmatrixp (@var{M})
822 Devuelve @code{true} si @var{M} es una matriz diagonal o un arreglo bidimensional.
826 @deffn {Función} symmetricp (@var{M})
828 Devuelve @code{true} si @var{M} es una matriz simétrica o un arreglo bidimensional.
832 @deffn {Función} ntermst (@var{f})
833 Permite hacerse una idea del tamaño del tensor @var{f}. @c FALTA COMPLETAR PARRAFO
838 @deffn {Función} cdisplay (@var{ten})
839 Muestra todos los elementos del tensor @var{ten} como arreglo multidimensional. Tensors de rango 0 y 1, así como otros tipos de variables, se muestran como en @code{ldisplay}. Tensors de rango 2 se muestran como matrices bidimensionales, mientras que tensores de mayor rango se muestran como listas de matrices bidimensionales. Por ejemplo, el tensor de Riemann de la métrica de Schwarzschild se puede ver como:
842 (%i1) load("ctensor");
843 (%o1) /share/tensor/ctensor.mac
846 (%i3) ct_coordsys(exteriorschwarzschild,all);
848 (%i4) riemann(false);
850 (%i5) cdisplay(riem);
854 [ 3 m (r - 2 m) m 2 m ]
855 [ 0 - ------------- + -- - ---- 0 0 ]
859 riem = [ m (r - 2 m) ]
860 1, 1 [ 0 0 ----------- 0 ]
865 [ 0 0 0 ----------- ]
870 [ 0 ------------- 0 0 ]
881 [ 0 0 - ----------- 0 ]
892 [ 0 0 0 - ----------- ]
905 [ - ------------ 0 0 0 ]
914 [ ------------ 0 0 0 ]
921 2, 2 [ 0 0 - ------------ 0 ]
926 [ 0 0 0 - ------------ ]
933 [ 0 0 ------------ 0 ]
944 [ 0 0 0 ------------ ]
983 [ 0 0 0 ------- + 1 ]
1004 [ ------------- 0 0 0 ]
1015 [ 0 ------------- 0 0 ]
1026 [ 0 0 - --------------- 0 ]
1031 [ - ------------- 0 0 0 ]
1036 riem = [ 0 - ------------- 0 0 ]
1041 [ 0 0 --------------- 0 ]
1051 @deffn {Función} deleten (@var{L}, @var{n})
1052 Devuelve una nueva lista consistente en @var{L} sin su @var{n}-ésimo elemento.
1055 @subsection Variables utilizadas por @code{ctensor}
1057 @defvr {Variable opcional} dim
1058 Valor por defecto: 4
1060 Es la dimensión de la variedad, que por defecto será 4. La instrucción @code{dim: n} establecerá la dimensión a cualquier otro valor @code{n}.
1064 @defvr {Variable opcional} diagmetric
1065 Valor por defecto: @code{false}
1067 Si @code{diagmetric} vale @code{true} se utilizarán rutinas especiales para calcular todos los objetos geométricos teniendo en cuenta la diagonalidad de la métrica, lo que redundará en una reducción del tiempo de cálculo. Esta opción se fija automáticamente por @code{csetup} si se especifica una métrica diagonal.
1071 @defvr {Variable opcional} ctrgsimp
1073 Provoca que se realicen simplificaciones trigonométricas cuando se calculan tensores. La variable @code{ctrgsimp} afecta únicamente a aquellos cálculos que utilicen un sistema de referencia móvil.
1077 @defvr {Variable opcional} cframe_flag
1079 Provoca que los cálculos se realicen respecto de un sistema de referencia móvil. @c FALTA POR COMPLETAR EL PARRAFO
1083 @defvr {Variable opcional} ctorsion_flag
1085 Obliga a que se calcule también el tensor de contorsión junto con los coeficientes de conexión. El propio tensor de contorsión se calcula con la función @code{contortion} a partir del tensor @code{tr} suministrado por el usuario.
1089 @defvr {Variable opcional} cnonmet_flag
1091 Obliga a que se calculen también los coeficientes de no metricidad junto con los coeficientes de conexión. Los coeficientes de no metricidad se calculan con la función @code{nonmetricity} a partir del vector de no metricidad@code{nm} suministrado por el usuario.
1095 @defvr {Variable opcional} ctayswitch
1097 Si vale @code{true}, obliga a que ciertos cálculos de @code{ctensor} se lleven a cabo utilizando desarrollos de series de
1098 Taylor. Estos cálculos hacen referencia a las funciones @code{christof}, @code{ricci}, @code{uricci}, @code{einstein} y @code{weyl}.
1102 @defvr {Variable opcional} ctayvar
1104 Variable utilizada para desarrollos de Taylor cuando la variable @code{ctayswitch} vale @code{true}.
1108 @defvr {Variable opcional} ctaypov
1110 Máximo exponente utilizado en los desarrollos de Taylor cuando @code{ctayswitch} vale @code{true}.
1114 @defvr {Variable opcional} ctaypt
1116 Punto alrededor del cual se realiza un desarrollo de Taylor cuando @code{ctayswitch} vale @code{true}.
1120 @defvr {Variable opcional} gdet
1122 Es el determinante del tensor métrico @code{lg}, calculado por @code{cmetric} cuando @code{cframe_flag} vale @code{false}.
1126 @defvr {Variable opcional} ratchristof
1128 Obliga a que la función @code{christof} aplique la simplificación racional.
1132 @defvr {Variable opcional} rateinstein
1133 Valor por defecto: @code{true}
1135 Si vale @code{true} entonces se hará la simplificación racional en los componentes no nulos de los tensores de Einstein; si @code{ratfac} vale @code{true} entonces las componentes también serán factorizadas.
1139 @defvr {Variable opcional} ratriemann
1140 Valor por defecto: @code{true}
1142 Es una de las variables que controlan la simplificación de los tensores de Riemann; si vale @code{true}, entonces se llevará a cabo la simplificación racional; si @code{ratfac} vale @code{true} entonces las componentes también serán factorizadas.
1146 @defvr {Variable opcional} ratweyl
1147 Valor por defecto: @code{true}
1149 Si vale @code{true}, entonces la función @code{weyl} llevará a cabo la simplificación racional de los valores del tensor de Weyl. si @code{ratfac} vale @code{true} entonces las componentes también serán factorizadas.
1152 @defvr {Variable} lfg
1153 Es la covariante de la métrica del sistema de referencia. Por defecto, está inicializada al sistema de referencia tetradimensional de Lorentz con signatura (+,+,+,-). Se utiliza cuando @code{cframe_flag} vale @code{true}.
1156 @defvr {Variable} ufg
1157 Es la métrica del sistema de referencia inverso. La calcula @code{lfg} cuando @code{cmetric} es invocada tomando @code{cframe_flag} el valor @code{true}.
1160 @defvr {Variable} riem
1161 Es el tensor (3,1) de Riemann. Se calcula cuando se invoca la función @code{riemann}. Para información sobre el indexado, véase la descripción de @code{riemann}.
1163 Si @code{cframe_flag} vale @code{true}, @code{riem} se calcula a partir del tensor covariante de Riemann @code{lriem}.
1167 @defvr {Variable} lriem
1169 Es el tensor covariante de Riemann. Lo calcula la función @code{lriemann}.
1173 @defvr {Variable} uriem
1175 Es el tensor contravariante de Riemann. Lo calcula la función @code{uriemann}.
1179 @defvr {Variable} ric
1181 Es el tensor de Ricci. Lo calcula la función @code{ricci}.
1185 @defvr {Variable} uric
1187 Es el tensor contravariante de Ricci. Lo calcula la función @code{uricci}.
1191 @defvr {Variable} lg
1193 Es el tensor métrico. Este tensor se debe especificar (como matriz cuadrada de orden @code{dim}) antes de que se hagan otros cálculos.
1197 @defvr {Variable} ug
1199 Es la inversa del tensor métrico. Lo calcula la función @code{cmetric}.
1203 @defvr {Variable} weyl
1205 Es el tensor de Weyl. Lo calcula la función @code{weyl}.
1209 @defvr {Variable} fb
1211 Son los coeficientes del sistema de referencia soporte, tal como los calcula @code{frame_bracket}.
1215 @defvr {Variable} kinvariant
1217 Es la invariante de Kretchmann, tal como la calcula la función @code{rinvariant}.
1221 @defvr {Variable} np
1223 Es la cuaterna nula de Newman-Penrose, tal como la calcula la función @code{nptetrad}.
1227 @defvr {Variable} npi
1229 Es la cuaterna nula "raised-index Newman-Penrose". Lo calcula la función @code{nptetrad}.
1230 Se define como @code{ug.np}. El producto @code{np.transpose(npi)} es constante:
1233 (%i39) trigsimp(np.transpose(npi));
1245 @defvr {Variable} tr
1247 Tensor de rango 3 suministrado por el usuario y que representa una torsión. Lo utiliza la función @code{contortion}.
1250 @defvr {Variable} kt
1252 Es el tensor de contorsión, calculado a partir de @code{tr} por la función @code{contortion}.
1255 @defvr {Variable} nm
1257 Vector de no metricidad suministrado por el usuario. Lo utiliza la función @code{nonmetricity}.
1260 @defvr {Variable} nmc
1262 Son los coeficientes de no metricidad, calculados a partir de @code{nm} por la función @code{nonmetricity}.
1266 @defvr {Variable del sistema} tensorkill
1268 Variable que indica si el paquete de tensores se ha inicializado. Utilizada por @code{csetup} y reinicializada por @code{init_ctensor}.
1272 @defvr {Variable opcional} ct_coords
1273 Valor por defecto: @code{[]}
1275 La variable @code{ct_coords} contiene una lista de coordenadas. Aunque se define normalmente cuando se llama a la función @code{csetup}, también se pueden redefinir las coordenadas con la asignación @code{ct_coords: [j1, j2, ..., jn]} donde @code{j} es el nuevo nombre de las coordenadas. Véase también @code{csetup}.
1279 @subsection Nombres reservados
1281 Los siguientes nombres se utilizan internamente en el paquete @code{ctensor} y no deberían redefinirse:
1285 ---------------------------------------
1286 _lg() Toma el valor @code{lfg} si se utiliza métrica del sistema de referencia,
1287 @code{lg} en otro caso
1288 _ug() Toma el valor @code{ufg} si se utiliza métrica del sistema de referencia,
1289 @code{ug} en otro caso
1290 cleanup() Elimina elementos de la lista @code{deindex}
1291 contract4() Utilizada por @code{psi()}
1292 filemet() Utilizada por @code{csetup()} cuando se lee la métrica desde un fichero
1293 findde1() Utilizada por @code{findde()}
1294 findde2() Utilizada por @code{findde()}
1295 findde3() Utilizada por @code{findde()}
1296 kdelt() Delta de Kronecker (no generalizada)
1297 newmet() Utilizada por @code{csetup()} para establecer una métrica interactivamente
1298 setflags() Utilizada por @code{init_ctensor()}
1301 sermet() Utilizada por @code{csetup()} para definir una métrica como serie de Taylor
1303 tmetric() Métrica del sistema de referencia, utilizada por @code{cmetric()}
1304 cuando @code{cframe_flag:true}
1305 triemann() Tensor de Riemann en la base del sistema de referencia, se utiliza cuando
1306 @code{cframe_flag:true}
1307 tricci() Tensor de Ricci en la base del sistema de referencia, se utiliza cuando
1308 @code{cframe_flag:true}
1309 trrc() Coeficientes de rotación de Ricci, utilizada por @code{christof()}