Académique Documents
Professionnel Documents
Culture Documents
2
, (1)
donde k
0
= 0, 1. El archivo de texto con extensi on .mpl
que debemos crear (si es que a un no existe en el directorio
metrics) es:
Ndim := 4 :
x1 := r :
x2 := theta :
x3 := phi :
x4 := t :
g11 := A(t)2/(1+k0/4*r2)2 :
g22 := A(t)2*r2/(1+k0/4*r2)2 :
g33 := A(t)2*r2*sin(theta)2/(1+k0/4*r2)2
:
g44 := -1 :
# Metrica Robertson-Walker
# Coordenadas esfericas r,theta,phi,t
# k0 = 0,1,-1
Si a este archivo lo nombramos RW.mpl, entonces la ins-
truccion de GRTensor que carga esta m etrica es
> qload(RW);
N otese que la extension .mpl ha sido omitida. El archivo .mpl
indica el n umero de dimensiones, los nombres de cada coor-
denada, as como comentarios pertinentes que Maple no lee
(lineas que inician con el caracter #). Una vez ejecutada la
instrucci on qload GRTensor responde con la m etrica dada
exactamente por (1). GRTensor est a ahora listo para denir
y calcular tensores para dicha m etrica. La Fig. 1 ilustra la
acci on de las instrucciones grtw y qload para la m etrica
RW.mpl.
3. Tensores predenidos: modo de c alculo
GRTensor tiene una lista amplia de tensores y obje-
tos tensoriales de uso com un predenidos, por ejemplo, la
m etrica inversa y el determinante de la m etrica, g
ab
, g, los
smbolos de Christoffel,
a
bc
, los tensores de Riemann, Ric-
ci, Einstein, Weyl, (R
a
bcd
, R
a
b
, G
a
b
, C
a
bcd
) y todos sus obje-
tos duales obtenidos por contracciones con la m etrica (su-
bir y bajar ndices), as como los escalares que resultan de
sus contracciones entre ellos: escalar de Ricci, Kretschmann,
(R = R
a
a
, K = R
abcd
R
abcd
). La lista de objetos predenidos
puede ser consultada accediendo a la hoja de ayuda en linea
grt-objects.
Los objetos predenidos pueden ser calculados directa-
mente mediante la instrucci on grcalc. El uso de esta
instrucci on determina el modo de c alculo de GRTensor
en el que la posici on de cada ndice se especica con dn
(ndice abajo) y up (ndice arriba). Por ejemplo, si quere-
mos que GRTensor calcule el tensor R
a
b
(tensor mixto de
Ricci, debemos teclear
> grcalc(R(up,dn));
Para que GRtensor despliegue el tensor tecleamos
> grdisplay(R(up,dn));
De la misma forma podemos calcular y desplegar cualquier
otro objeto predenido (ver Fig. 2). La instrucci on grcalcd
calcula y despliega el tensor.
Rev. Mex. Fs. S 53 (4) (2007) 159170
DEFINCI
ON Y C
a
2
en a (asumir que a
es real positivo), o que exprese (e
a
)
2
como e
2a
, usamos la
instrucci on simplify con la opci on symbolic. Para mayor
detalle sobre estas simplicaciones ver Ref. 4.
Una manipulaci on algebr aica muy utilizada es la sustitu-
ci on de una variable por otra (o por un valor num erico). En el
caso de la m etrica RW, tenemos una funci on arbitraria A(t),
por lo que podra ser util el poder sustituir esta funci on por
un ansatz o una funci on explcita (por ejemplo A(t) = t
1/2
).
La instrucci on de sustituci on en Maple est andar es subs y
su sintaxis es muy simple: para sutituir x = k/3 en la ex-
presi on x sinx, tecleamos:
> subs(x = k*Pi/3, x*sin(x) );
Si sustituimos una forma explcita de A(t) en una expresi on
que contenga a esta funci on y derivadas de la misma, en-
tonces para que se evaluen las derivadas debemos aplicar la
instrucci on eval despu es de haber sustituido con subs. Por
ejemplo, si queremos sustituir A(t) = t
2/3
en la expresi on
1 +
A/A
2
(con = d/dt), le asignamos el nombre F a esta
expresi on y la sustituci on y evaluaci on se da mediante:
> F := 1+diff(A(t),t)/A(t)2;
> subs( A(t) = t(2/3), F);
> eval(%);
donde el smbolo % indica que eval act ua sobre el resultado
de la instrucci on inmediatamente anterior.
3.2. Simplicaci on, factorizaci on y sustituci on con GR-
Tensor.
Sin embargo, las instrucciones de Maple est andar que hemos
descrito anteriormente no pueden ser aplicadas directamente
a objetos calculados por GRTensor. Por lo tanto, una opci on
es transformar objetos de GRTensor en objetos de Maple
(arreglos), lo cual discutiremos mas adelante. La otra opci on
es aplicar globalmente las instrucciones de Maple con ins-
trucciones propias de GRTensor. Por ejemplo, si queremos
aplicar expand a todas las componentes de R(up,dn)
(o sea, R
a
b
), podemos usar la instrucci on gralter que
puede trabajar en forma interactiva
> gralter(R(up,dn));
apareciendo inmediatamente un men u interactivo de opcio-
nes que identica cada instrucci on predenida con un n ume-
ro. El n umero 6 identica a expand, por lo que al teclear
este n umero, esta instrucci on es aplicada a cada componente
de R(up,dn). Para usar gralter en forma nointeractiva
(cuando ya se conoce las instrucciones que aplica) simple-
mente se teclea el nombre de la instrucci on (o su n umero)
como segundo argumento de gralter.
Una opci on muy util de gralter es autoAlias, cuyo
efecto es reemplazar A(t) simplemente por A, mientras que
sus derivadas dA(t)/dt y d
2
A(t)/dt
2
son respectivamente
reemplazadas por A
t
y A
tt
. Este efecto permite tratar con
expresiones mas compactas por lo que es de gran ayuda para
la visualizaci on de componentes tensoriales. Como ejemplo,
aplicamos gralter con la opci on autoAlias seguido
inmediatamente de expand (ver Fig. 3):
> gralter(R(up,dn), autoAlias);
Rev. Mex. Fs. S 53 (4) (2007) 159170
DEFINCI
ON Y C
ON Y C
_
1
2
,c
,c
+V ()
_
g
ab
. (5)
Para la m etrica RW necesariamente = (t), por lo que
V = V (t). Tenemos entonces
,a
= [0, 0, 0,
,t
]. Construi-
mos primero este objeto tensorial de rango 1:
Rev. Mex. Fs. S 53 (4) (2007) 159170
166 R.A. SUSSMAN
> grdef(DPhi{a} := [0,0,0,diff(Phi(t),t)]);
> grcalc(DPhi(dn));
> grdisplay( );
Inmediatamente podemos denir (5), pues el tensor m etrico
est a predenido:
> grdef(TS{a b} :=
DPhi{a}*DPhi{b}-(1/2*DPhi{c}*DPhi{c}+V(t))*g{a
b});
> grcalc(TS(up,dn));
> grdisplay( );
La ecuaci on de KleinGordon sigue de calcular la divergen-
cia J
a
= T
ab
;b
con el tensor (5):
> grdef(JS{a} := TS{a b;b});
> grcalc(JS(up));
> gralter(JS(up), expand);
> gralter(JS(up), autoAlias);
> grdisplay( );
Si tomamos en cuenta que
V /
t
b
t
a
r
b
) =
r
[a
t
b]
,
donde los par entesis rectangulares [... ] indican anti
simetrizaci on. En GRTensor este tensor antisim etrico se
dene y calcula mediante las instrucciones:
> grdef(F{a b} :=
psi(t,r)* kdelta{[a $t}*kdelta{b] $r});
> grcalc(F(dn,dn));
> grdisplay( );
N otese c omo GRTensor reconoce el smbolo de anti-
simetrizaci on de ndices [a .. b] en grdef. Tambi en,
estas instrucciones ilustran c omo es posible denir el tensor
delta de Kronecker con un ndice jo, o sea dado por una
coordenada en particular (anteponiendo el smbolo $ antes
del nombre t o r en grdef).
Tambi en es importante remarcar que GRTensor tam-
bi en reconoce el smbolo de simetrizaci on de indices
(a ..b) dentro de grdef, de manera que el tensor
u
(a;b)
(1/2)(u
a;b
+ u
b;a
) puede ser r apidamente denido
y calculado a partir de un vector 4velocidad u
a
. El primer
paso es denir, calcular y normalizar u
a
(ya que u
b
u
b
= 1).
Rev. Mex. Fs. S 53 (4) (2007) 159170
DEFINCI
ON Y C
a
t
= (1/A)
a
t
, este tensor podra tener co-
mo unicas componentes diferentes de cero a: P
r
r
= 2,
P
= P
r
b
+
a
b
+
a
b
, (10)
la cual podemos denir y calcular en GRTensor mediante
> grdef(P{a b} :=
-2*PI(t,r)*kdelta{a $r}*kdelta{$r b}
+ PI(t,r)*kdelta{a $theta}*kdelta{$theta b}
+ PI(t,r)*kdelta{a $phi}*kdelta{$phi b});
> grcalc(P(up,dn));
> grdisplay( );
El tensor de momentoenerga mas general que podemos aso-
ciar a la m etrica (6) es
T
ab
= ( +p)u
a
u
b
+pg
ab
+P
ab
+ 2q
(a
u
b)
, (11)
donde , p (densidad de energa y presi on isotr opica) son
funciones de (t, r), P
ab
es el tensor denido anteriormen-
te (presiones anisotr opicas) y q
a
(ujo de energa) satisface
q
a
u
a
= 0. Para la m etrica (6) este covector es q
a
= Q
r
a
,
donde Q = Q(t, r) es una funci on arbitraria. Denimos y
calculamos primero q
a
:
> grdef(q{a} :=Q(t,r)*kdelta{a $r});
> grcalc(q(dn));
e inmediatamente denimos y calculamos T
ab
dado por (11):
> grdef(T{a b} :=
(mu(t,r)+p(t,r))*u{a}*u{b} + p(t,r)*g{a
b}
+ P{a b} + 2*q{(a}*u{b)});
> grcalc(T(up,dn));
Las ecuaciones de Einstein (G
a
b
= T
a
b
) forman un objeto
tensorial que se dene y calcula como:
> grdef(EE{a b} := G{a b} = kappa*
T{a b});
> grcalc(EE(up,dn));
> gralter( , autoAlias);
> grdisplay( );
La divergencia T
ab
;b
se dene y calcula tal y como lo hici-
mos para la m etrica RobertsonWalker:
> grdef(J{a} := T{ab;b});
> grcalc(J(up));
> gralter( , autoAlias);
> grdisplay( );
Sin embargo, este vector es ahora mucho mas complicado
que el calculado para (1).
Para tensores de rango mayor que 2, la simetra o anti-
simetra sobre dos ndices nocontiguos se denota mediante
barras verticales. Por ejemplo, si el tensor V
abc
es sim etrico o
antisim etrico con respecto a los ndices a y c, esto se denota
como
V
(a|b|c)
o V
[a|b|c]
. (12)
Podemos formar un tensor de rango 3 atrav es de
V
abc
=P
ab;c
, donde P
ab
es el tensor de presiones anisotr opi-
cas de (11). Si queremos denir la parte sim etrica de este
tensor con respecto a los ndices a y c, primero denimos
y calculamos V
abc
, para luego denir y calcular su parte
sim etrica
> grdef(V{a b c} := P{a b;c});
> grcalc(V(dn,dn,dn));
> grdef(VS{(a b c} := V{(a |b| c)});
> grcalc(VS(dn,dn,dn));
> gralter( , autoAlias);
> grdisplay( );
N otese c omo GRTensor reconoce las barras verticales |..|
en grdef.
5.2. Derivadas covariantes y operadores diferenciales
Dado un objeto tensorial previamente denido (o predeni-
do) y ya calculado, podemos calcular su derivada covariante
sin tener que denir un nuevo tensor. Por ejemplo, si quere-
mos calcular el tensor dado por la derivada covariante R
a
b;c
,
Rev. Mex. Fs. S 53 (4) (2007) 159170
168 R.A. SUSSMAN
no necesitamos denirlo con grdef, lo podemos calcular
directamente agregando un tercer ndice cdn:
> grcalc(R(up,dn,cdn));
Lo mismo podemos hacer con la derivada covariante de cual-
quier objeto tensorial denido y calculado con grdef y
grcalc, por ejemplo, para los tensores u
a
y P
ab
ya calcula-
dos, podemos calcular directamente u
a
;b
o P
ab
;c
, agregando
un ndice extra cdn o cup (seg un sea el caso):
> grcalc(u(up,cdn));
> grcalc(P(dn,dn,cup));
Tambi en es posible calcular objetos tensoriales formados me-
diante derivadas ordinarias, como por ejemplo R
a
b,c
o P
ab
,c
.
Estos objetos se calculan tambi en directamente usando como
ndices extra pdn o pup, seg un sea el caso.
GRTensor tiene predenidos varios operadores diferen-
ciales que act uan sobre objetos tensoriales, como por ejem-
plo el operador delambertiano y la derivada de Lie a lo
largo de un vector v
a
. Si consideramos un tensor A
ab
, estos
operadores son:
A
ab
= g
cd
A
ab
;c;d
, (13)
v
A
ab
= A
ab ;c
v
c
+A
bc
v
c
;a
+A
ab
v
c
;b
. (14)
Suponiendo que A
ab
ya ha sido denido y calculado, las
ecuaciones anteriores se calculan con GRTensor mediante
> grcalc(Box[A(up,up)]);
> grcalc(LieD[v(up),A(dn,dn)]);
En particular, la condici on que determina si v
a
es un vector
de Killing (ya sea un vector de Killing propio o vector confor-
me de Killing) viene dada por la derivada de Lie con respecto
a v
c
, pero aplicada al caso particular en que A
ab
= g
ab
. To-
mando en cuenta que g
ab;c
= 0 obtenemos a partir de (14) la
condici on siguiente:
v
g
ab
g
ab
= v
(a;b)
g
ab
= 0, (15)
donde es un escalar. El vector v
a
es vector de Killing pro-
pio si = 0, lo cual dene una isometra, mientras que si
es una constante (= 0) v
a
dene una simetra homot etica
(autosimilaridad). GRTensor permite para un vector arbitra-
rio v
a
vericar si se cumple la condici on (15), dando el valor
de (si no es cero), mediante la instrucci on:
> grcalc ( KillingTest[v] );
Otros operadores diferenciales son derivadas direcciona-
les a lo largo de vectores base, as como Dsq y CDsq aso-
ciados respectivamente a
,a
,a
y
;a
;a
para un escalar
previamente denido = (x
a
).
5.3. Tensores asociados a una 4-velocidad
Dado un campo de 4-velocidades u
a
podemos denir varios
tensores que surgen de la descomposici on invariante de u
a;b
:
u
a
;a
, escalar de expansi on
u
a
u
a;b
u
b
, 4aceleraci on
ab
u
(a;b)
+ u
a
u
b
3
h
ab
, deformaci on (shear)
ab
u
[a;b]
u
a
u
b
, vorticidad
E
ab
C
abcd
u
c
u
d
, Tensor el ectrico de Weyl (16)
Estas cantidades tienen una clara interpretaci on fsica y
geom etrica y son muy utiles en el estudio de espaciotiempos
cosmol ogicos. Estos objetos tensoriales ya est an predenidos
por lo que, habiendo denido y calculado u
a
, los podemos
calcular directamente con grcalc. Si usamos u(up) pre-
viamente calculado para (6), las siguientes instrucciones nos
permiten calcular estos objetos (en el orden en que aparecen
en (16)):
> grcalc(expscalar[u]);
> grcalc(acc[u](dn));
> grcalc(shear[u](dn,dn));
> grcalc(vor[u](dn,dn));
> grcalc(E[u](dn,dn));
Asociados a los tensores
ab
,
ab
tenemos a los escalares
= [
ab
ab
]
1/2
, = [
ab
ab
]
1/2
, (17)
los cuales se calculan con:
> grcalc(shear[u]);
> grcalc(vor[u]);
Otras cantidades asociadas a un vector u
a
son la parte
magn etica del tensor de Weyl y la ecuaci on de Raychaud-
huri:
u
a
,a
+
2
3
+ u
a
;a
u
a
u
a
+
2
2
=
2
(+3p). (18)
cuyo lado izquierdo est a completamente determinado en
t erminos de los objetos (16) y (17).
Aunque hemos usado a la 4velocidad u
a
como ejemplo
del c alculo de los tensores en (16), (17) y (18), podramos ha-
ber utilizado cualquier campo vectorial v
a
normalizado, ya
sea temporal (v
a
v
a
= 1) o espacial (v
a
v
a
= 1), pero no
nulo o tipoluz (v
a
v
a
= 0).
6. Tensores en una base nocoordenada.
Hasta ahora hemos visto c omo GRTensor permite denir y
calcular objetos tensoriales denidos en una base de coorde-
nadas (base holon omica). Tambi en es posible denir y calcu-
Rev. Mex. Fs. S 53 (4) (2007) 159170
DEFINCI
ON Y C
(1)
a
=
_
_
1
2M
r
_
1/2
, 0, 0, 0
_
, (20)
(2)
a
= [0, r, 0, 0] , (21)
(3)
a
= [0, 0, r sin, 0] , (22)
(4)
a
=
_
0, 0, 0,
_
1
2M
r
_
1/2
_
, (23)
la m etrica (19) toma la forma ortonormal lorenziana:
(a)(b)
=
(a)
c
(b)
d
g
cd
= diag[1, 1, 1, 1], (24)
donde g
ab
es el inverso matricial de la m etrica dada en (19) y
el ndice de la t etrada toma los valores (a) = 1, 2, 3, 4.
Todos los tensores predenidos que calculamos en ba-
ses de coordenadas se calculan para la base (23) y la m etrica
(24). Sin embargo, GRTensor debe cargar (23) y (24) leyendo
un archivo de texto diferente al usado en las m etricas dadas
en base de coordenadas (aunque dicho archivo debe estar
tambi en ubicado en el mismo subdirectorio metrics que
contiene los archivos de las m etricas en base de coordena-
das). Para el espaciotiempo de Schwarzschild con la t etrada
(23) este archivo debe tener la forma:
Ndim := 4 :
x1 := r :
x2 := theta :
x3 := phi :
x4 := t :
eta11 := 1 :
eta22 := 1 :
eta33 := 1 :
eta44 := -1 :
bd11 := (1-2*M/r)(-1/2) :
bd22 := r :
bd33 := r*sin(theta) :
bd44 := (1-2*M/r)(1/2) :
# Metrica de Schwarzschild en base ortonormal
Si a este archivo lo llamamos schwb.mpl, entonces pa-
ra cargar GRTensor y esta m etrica tecleamos
> grtw();
> qload(schwb);
Una vez cargada la m etrica (24) y la base (23), la instrucci on
de GRTensor para calcular (por ejemplo) el tensor de Rie-
mann R
(a)
(b)(c)(d)
es
> grcalc(R(bup,bdn,bdn,bdn));
Como muestra el ejemplo, tenemos exactamente la misma
sintaxis que en la base de coordenadas, excepto que en vez
de denotar los ndices como up y dn los denotamos como
bup y bdn, mientras que para tensores nuevos formados con
derivadas covariantes se agregan ndices cbup o cbdn seg un
sea el caso (ver hoja de ayuda grt basis).
Para denir tensores nuevos mediante grdef usamos
exactamente la misma sintaxis que en los casos de ba-
ses coordenadas, excepto que los ndices se escriben en
par entesis: (a) o (a), respectivamente para ndices co-
variantes y contravariantes. Por ejemplo, denimos el vector
W
(a)
= [r, 0, 0, t] y lo calculamos junto con su derivada co-
variante W
(a)
;(b)
> grdef(W(a):=[r,0,0,t]);
> grcalc(W(bup));
> grcalc(W(bup,cbdn));
Ahora denimos y calculamos el tensor
Z
(a)(b)(c)
= R
(a)(b)(c)(d)
W
(d)
y su derivada covariante Z
(a)(b)(c)
;(d)
> grdef(Z{(a)(b)(c)}:=R{(a)(b)(c)(d)*W(d)});
> grcalc(Z(bdn,bdn,bdn));
> grcalc(Z(bdn,bdn,bdn,cbup));
Hemos usado como ejemplo una t etrada ortonormal, pero
tambi en es posible utilizar t etradas de NewmanPenrose.
Tanto para uno como para el otro (o cualquier) tipo de t etra-
das GRTensor tiene predenidos escalares invariantes asocia-
dos a los tensores de Riemann y Weyl, ligados a varias clasi-
caciones invariantes de espaciotiempos, incluyendo la clasi-
caci on de Petrov (ver hojas de ayuda grt basis y gr invars).
7. Otras instrucciones importantes.
En esta secci on ofrecemos un resumen de algunas instruccio-
nes utiles que no fueron descritas en las secciones anteriores.
grapply
Aplica una funci on o rutina de Maple a todo compo-
nente, pero (a diferencia de grmap) no modica la
forma calculada del tensor en la memoria de GR-
Tensor. La salida de esta instrucci on es a la hoja de
trabajo o a un archivo de texto. Es particularmente util
para construir una salida de L
A
T
E
X de tensores calcu-
lados y modicados atrav es de la funci on latex, que
genera el c odigo de L
A
T
E
X de cualquier objeto eva-
luado en una sesi on de Maple. Por ejemplo, si hemos
Rev. Mex. Fs. S 53 (4) (2007) 159170
170 R.A. SUSSMAN
calculado el tensor de Ricci, R
ab
, para alguna m etri-
ca, podemos generar el c odigo L
A
T
E
Xde dicho objeto y
desplegarlo en la pantalla mediante:
> grapply ( R(dn,dn), latex, x );
o bien, guardarlo en un archivo de texto con la opci on
le = especicando la trayectoria del archivo:
> grapply ( R(dn,dn), latex, x,
file=trayectoria );
grcalc1(Tensor(), [comp]);
Calcula una sola componente especca de objeto ten-
sorial. Para desplegarla en la pantalla es necesario usar
grcomponent
grclear( arg );
Borra la memoria de un tensor calculado (no borra de-
niciones hechas con grdef, eso lo hace grundef).
El resultado de esta instrucci on depende de la variable
arg:
arg = objeto tensorial (por ejemplo
R(up,dn)), borra el objeto tensorial cal-
culado en la sesi on, mas no la m etrica car-
gada.
arg = results, borra todos los tensores
calculados, mas no la m etrica cargada.
arg = metric, borra tambi en m etrica (pero
no la base, en caso de estar usando una base
nocoordenada).
arg = spacetime, tambi en la base.
grsavedef(GRTobjects, trayectoria ); y
grloaddef(GRTobjects, trayectoria );
Permite guardar en un archivo de texto (ubicado en
trayectoria) deniciones de tensores hechas
mediante grdef. Dichas deniciones se pueden car-
gar a una sesi on de GRTensor mediante grloaddef.
Acknowledgments
El autor agradece apoyo nanciero por parte del proyecto
PAPIIT-DGAPA n umero IN-117803. Tambi en agradece apo-
yo por parte del ICN-UNAM y de la DGFM-SMF.
Ap endice
Es muy ilustrativo mostrar c omo podemos utilizar las instruc-
ciones de manipulaci on y simplicaci on de Maple para trans-
formar las ecuaciones de campo (G
ab
= T
ab
) y de balance
(T
ab
;b
= 0) en un sistema de ecuaciones diferenciales de pri-
mer orden que puede ser integrado con m etodos num ericos.
i. El material del presente artculo est a basado en el curso Apli-
caciones del c omputo simb olico a la Relatividad General, im-
partido por el autor en el VI Taller de la Divisi on de Gravita-
ci on y Fsica Matem atica de la Sociedad Mexicana de Fsica,
Metepec, Puebla, noviembre de 2005. El material del curso e
informaci on util sobre GRTensor puede ser descargado del sitio
www.smf.dgfm/VI taller/curso sussman.
ii. De aquen adelante describiremos exclusivamente el uso de
GRTensor en Maple, considerando que este m odulo corre en
Mathematica en froma completamente equivalente).
iii. En general es importante no usar nombres que coincidan con el
de alg un tensor, predenido o denido por el usuario. Esta regla
se aplica ya sea a objetos tensoriales que el usuario quiere de-
nir, o a nombres de ndinces, e incluso a variables usadas en la
sesi on de Maple. Esto descarta, por ejemplo, la posibilidad de
usar nombres como: g (tensor m etrico), R (tensores de Riemann
y Ricci), G (tensor de Einstein) y C (tensor de Weyl). Sugerimos
al lector consultar la hoja de ayuda en linea grt objects.
1. P. Musgrave, D. Pollney y K. Lake (1996), Queens Univer-
sity, Kingston, Ontario, Canada. El software y documentaci on
de GRTensor est a disponible en el sitio www.grtensor.org
2. Waterloo Maplesoft Inc.
3. Wolfram Research Institute
4. www.smf.org.mx/dgfm/VI taller/curso sussman
Rev. Mex. Fs. S 53 (4) (2007) 159170