Vous êtes sur la page 1sur 7

(* ::Package:: *)

(************************************************************************)
(* This file was generated automatically by the Mathematica front end. *)
(* It contains Initialization cells from a Notebook file, which
*)
(* typically will have the same name as this file except ending in
*)
(* ".nb" instead of ".m".
*)
(*
*)
(* This file is intended to be loaded into the Mathematica kernel using *)
(* the package loading commands Get or Needs. Doing so is equivalent *)
(* to using the Evaluate Initialization Cells menu command in the front *)
(* end.
*)
(*
*)
(* DO NOT EDIT THIS FILE. This entire file is regenerated
*)
(* automatically each time the parent Notebook file is saved in the
*)
(* Mathematica front end. Any changes you make to this file will be
*)
(* overwritten.
*)
(************************************************************************)

(* :Title:RiemannianGeometry2007*)
(* :Context:RiemannianGeometry2007`*)
(* :Author:Luis Javier Hern\[AAcute]ndez Paricio*)(* :Summary:This package conta
ins many programs of the book: Introducci\[OAcute]n a la Geometr\[IAcute]a Difer
encial*)(* :Copyright:\[Copyright] 2007 by Luis Javier Hern\[AAcute]ndez Paricio
*)
(* :Package Version:1.1*)
(* :Mathematica Version:6.0*)(* :Sources:Luis Javier Hern\[AAcute]ndez Paricio.
Introducci\[OAcute]n a la Geometr\[IAcute]a Diferencial.*)
BeginPackage["RiemannianGeometry2007`"]
EuclideanMetric::usage="EuclideanMetric[n] Construye la matriz identidad.";
MinkowskiPseudometric::usage="MinkowskiPseudometric[n] Construye la matriz diago
nal con todo unos salvo el lugar (n,n) que es menos uno";
HiperbolicBall::usage="HiperbolicBall[n, variables] Calcula la m\[EAcute]trica r
iemanniana hiperb\[OAcute]lica en la bola unidad. Tiene como entrada la dimensi\
[OAcute]n del espacio y las variables que se deseen utilizar (exactamente n vari
ables), la salida es la m\[EAcute]trica hiperb\[OAcute]lica en la bola unidad. E
n la esfera unidad no hay definada ninguna matriz, fuera del disco unidad aparec
e inducida una psuedo-m\[EAcute]trica.";
JacobianM::usage="JacobianM[componentes,variables] Obtiene la matriz jacobiana d
e una funci\[OAcute]n dependiente de varias variables y que tiene valores vector
iales. Tiene como entrada componentes que es una lista de funciones que dependen
de las variables que est\[AAcute]n en la segunda entrada. La salida es la matri
z jacobiana obtenida al calcular las derivadas parciales de las componentes repe
cto de las variables. Las filas contienen las derivadas parciales respecto las d
iferentes variables.";

InducedPseudoMetric::usage=
"InducedPseudoMetric[componentes,pseudometrica,variables1,variables2] Calcula la
pseudo-m\[EAcute]trica inducida por una inmersi\[OAcute]n. Dada una funci\[OAcu
te]n de una variedad M en otra N y supongamos que respecto dos cartas de M y N l

a funci\[OAcute]n viene dada por las funciones que forman la lista componentes q
ue es la primera entrada, estas funciones dependen de las variables1 que forman
la tercera entrada y son las coordenadas de la carta que tenemos en la variedad
M. La entrada pseudometrica es la pseudo-m\[EAcute]trica de la variedad N en t\
[EAcute]rminos de la carta considerada en la variedad N, cada coeficiente es una
expresi\[OAcute]n que depende de variables2 que es la \[UAcute]ltima entrada. T
iene como salida la pseudo-m\[EAcute]trica inducida en la variedad M que depende
r\[AAcute] de las coordenadas de M contenidas en la lista variables1.";
Christoffel::usage=" Christoffel[pseudometrica,variables] Calcula los s\[IAcute]
mbolos de Christoffel de una variedad pseudo-riemanniana a partir de los coefici
entes de la pseudo-m\[EAcute]trica. Tiene como entrada la matriz mxm de una pseu
do-m\[EAcute]trica de un abierto coordenado de una variedad M cuyos elementos so
n funciones que dependen de las variables que aparecen en la segunda entrada, es
t\[AAcute]s variables denotan las coordenadas de una carta de la variedad M. La
salida es un tensor de dimensiones mxmxm, formado por las funciones denominadas
como s\[IAcute]mbolos de Christoffel, cada una de \[EAcute]stas depende de las m
ismas variables de las que depend\[IAcute]an los coeficientes pseudom\[EAcute]tr
icos. Los s\[IAcute]mbolos de Chistofell determinan la conexi\[OAcute]n pseudo-r
iemannniana en el abierto coordenado, se utilizan para calcular las geod\[EAcute
]sicas y la curvatura seccional";
GeodesicLines::usage="GeodesicLines[chris,variables,nombretiempo] Obtiene el sis
tema de ecuaciones diferenciales de las geod\[EAcute]sicas de una variedad pseud
o-riemanniana.Tiene como entrada los s\[IAcute]mbolos de Christoffel, las varia
bles de las que dependen y nombretiempo que es el nombre de la variable 'tiempo'
. La salida es una lista que contiene el sistema de ecuaciones diferenciales de
las geod\[EAcute]sicas de la variedad en la carta.";
NGeodesicLines::usage=
"NGeodesicLines[chris,variables,puntoinicial,velocidadinicial,incremento,iteraci
ones] tiene como entrada los coeficientes de Christoffel, las variables de las q
ue dependen, las coordenadas del punto inicial, las coordenadas de la velocidad
inicial, el incremento de tiempo que se va a utilizar para saltar de un punto al
siguiente de la geod\[EAcute]sica y el n\[UAcute]mero de iteraciones que vamos
a realizar para encontrar m\[AAcute]s o menos coordenadas de puntos de la geod\[
EAcute]sica. La salida consiste en un lista de pares, los primeros elementos del
par son coordenadas de puntos de la geod\[EAcute]sica y los segundos elementos
las coordenadas del vector velocidad en ese punto.";
TorsionTensor::usage="TorsionTensor[simboloschristoffel,pseudometrica,variables]
Calcula todos los coeficientes del tensor torsi\[OAcute]n de una variedad riema
nniana a partir de los s\[IAcute]mbolos de Christoffel y de los coeficientes de
la pseudo-m\[EAcute]trica. Tiene como como primera entrada el tensor de los s\[I
Acute]mbolos de Christoffel que seguramente se habr\[AAcute] calculado con la fu
nci\[OAcute]n del paquete Christoffel, est\[OAcute]s s\[IAcute]mbolos dependen d
e las variables que aparecen en la tercera entrada, como segunda entrada la matr
iz mxm de una pseudo-m\[EAcute]trica de un abierto coordenado de una variedad M
cuyos elementos son funciones que tambi\[EAcute]n dependen de las variables que
aparecen en la tercera y \[UAcute]ltima entrada, est\[AAcute]s variables denotan
las coordenadas de una carta de la variedad M. La salida es un tensor de dimens
iones mxmxmxm, formado por las funciones del tensor de torsi\[OAcute]n, cada una
de \[EAcute]stas depende de las mismas variables de las que depend\[IAcute]an l
os coeficientes pseudom\[EAcute]tricos. El tensor de torsi\[OAcute]n se utiliza
para calcular la curvatura seccional y otras curvaturas.";

SectionalCurvature2D::usage="SectionalCurvature2D[tensordetorsion,pseudometrica]

Calcula la curvatura seccional, que coincide con la de Gauss, a partir de los c


oeficientes del tensor de torsi\[OAcute]n y de la m\[EAcute]trica. Tiene como co
mo primera entrada el tensor de torsi\[OAcute]n 2x2x2x2 que seguramente se habr\
[AAcute] calculado con la funci\[OAcute]n TorsionTensor del paquete RiemannianGe
ometry, como segunda entrada la matriz 2x2 de la pseudo-m\[EAcute]trica en un ab
ierto coordenado de una superficie M. La salida es un una funci\[OAcute]n que d
a la curvatura seccional de la superfice que es una variedad de dimensi\[OAcute]
n dos.";
InmersionGeometricCoefficients2D::usage="InmersionGeometricCoefficients2D[compon
entes,inductora,variables1,variables2, nombretiempo] Dada una inmersi\[OAcute]n
de una variedad M en una variedad N que tiene una pseudo-m\[EAcute]trica conocid
a esta funci\[OAcute]n calcula la pseudo-m\[EAcute]trica inducida en la variedad
M y tambi\[EAcute]n obtiene los s\[IAcute]mbolos de Christoffel, el sistema de
ecuaciones diferenciales de las geod\[EAcute]sicas, los coeficientes del tensor
torsi\[OAcute]n y la curvatura seccional la variedad M. Tiene como primera ent
rada componentes que son n funciones con valores reales que dependen de las m va
riables que componen, variables1, que son precisamente las explicitadas en la te
rcera entrada. Estas funciones se supone que se han obtenido al considerar una i
nmersi\[OAcute]n f:M->N entre variedades y tomar sistemas coordenados x e y resp
ectivamente, se tiene que componentes=yfx^{-1}. La segunda entrada es la matriz
de la pseudo-m\[EAcute]trica de la variedad N respecto la carta y, los coeficien
tes pseudo-m\[EAcute]tricos dependen de la cuarta entrada variables2. Las m\[AAc
ute]s usual en los ejemplos que acompa\[NTilde]an este paquete es EuclideanMetri
c[3], que es la matriz identidad de dimensi\[OAcute]n 3x3. La variable nombretie
mpo es el nombre que asignamos al 'tiempo' en el sistema de ecuaciones diferenci
ales que verifican las geod\[EAcute]sicas. La salida consiste en varias l\[IAcut
e]neas que van explicando los resultados que se van obteniendo. Para obtener una
lista de los resultados anteriores basta introducir como input %. Tomando eleme
ntos de \[EAcute]sta se pueden extraer cada resultado que interese para poderlo
ulilizar de nuevo.";
GeometricCoefficients2D::usage="GeometricCoefficients2D[pseudometrica,variables,
nombretiempo] Obtiene los s\[IAcute]mbolos de Christoffel, el sistema de ecuacio
nes diferenciales de las geod\[EAcute]sicas, los coeficientes del tensor torsi\
[OAcute]n de una pseudo-m\[EAcute]trica riemanniana y la curvatura seccional de
una pseudo-m\[EAcute]trica riemanniana. Tiene como primera entrada pseudometric
a, que es la matriz de la pseudo-m\[EAcute]trica de la variedad M respecto la c
arta x, los coeficientes pseudo-m\[EAcute]tricos dependen de la segunda entrada,
variables. La tercera entrada nombretiempo, que es el nombre que asignamos al '
tiempo' en el sistema de ecuaciones diferenciales que calculan las geod\[EAcute]
sicas. La salida consiste en varias l\[IAcute]neas que van explicando los result
ados que se van obteniendo.Para obtener una lista de los resultados anteriores b
asta introducir como input %. Tomando elementos de \[EAcute]sta se pueden extrae
r cada resultado que interese para poderlo ulilizar de nuevo.";
InmersionNGeodesicLines3D::usage=
"InmersionNGeodesicLines3D[componentes,inductora,variables1,variables2,nombretie
mpo,puntoinicial,velocidadinicial,incremento,iteraciones,rango1,rango2] tiene co
mo primera entrada componentes que son n funciones con valores reales que depend
en de las m variables que componen, variables1, que son precisamente las explici
tadas en la tercera entrada. Estas funciones se supone que se han obtenido al co
nsiderar una inmersi\[OAcute]n f:M->N entre variedades y tomar sistemas coordena
dos x e y respectivamente, se tiene que componentes=yfx^{-1}. La segunda entrada
es la matriz de la pseudo-m\[EAcute]trica de la variedad N respecto la carta y,
los coeficientes pseudo-m\[EAcute]tricos dependen de la cuarta entrada variable
s2. La m\[AAcute]s usual en los ejemplos que acompa\[NTilde]an este paquete es E
uclideanMetric[3], que es la matriz identidad de dimensi\[OAcute]n 3x3. La varia
ble nombretiempo es el nombre que asignamos al 'tiempo' en el sistema de ecuacio
nes diferenciales que verifican las geod\[EAcute]sicas. Las siguientes variables

son las coordenadas del punto inicial, las coordenadas de la velocidad inicial,
el incremento de tiempo que se va a utilizar para saltar de un punto al siguien
te de la geod\[EAcute]sica y el n\[UAcute]mero de iteraciones que vamos a realiz
ar para encontrar m\[AAcute]s o menos coordenadas de puntos de la geod\[EAcute]s
ica. La variables, rango1, rango2, son de la forma {variables1[[1]],a,b}, {varia
bles1[[2]],c,d} y determinan los rangos para dibujar en param\[EAcute]tricas la
superficie dada por la inmersi\[OAcute]n definida en la variable componentes. En
variables1[[1]] se repite la primera de las variables que componen variables1 y
an\[AAcute]logamente para variables1[[2]]. ";
GeometricCoefficients::usage="GeometricCoefficients[pseudometrica,variables,nomb
retiempo] Obtiene los s\[IAcute]mbolos de Christoffel, el sistema de ecuaciones
diferenciales de las geod\[EAcute]sicas y los coeficientes del tensor torsi\[OAc
ute]n de una pseudo-m\[EAcute]trica riemanniana. Tiene como primera entrada pse
udometrica, que es la matriz de la pseudo-m\[EAcute]trica de la variedad M resp
ecto la carta x, los coeficientes pseudo-m\[EAcute]tricos dependen de la entrada
variables. La tercera entrada, nombretiempo, que es el nombre que asignamos al
'tiempo' en el sistema de ecuaciones diferenciales que verifican las geod\[EAcut
e]sicas. La salida consiste en varias l\[IAcute]neas que van explicando los resu
ltados que se van obteniendo.Para obtener una lista de los resultados anteriores
basta introducir como input %. Tomando elementos de \[EAcute]sta se pueden extr
aer cada resultado que interese para poderlo ulilizar de nuevo. A diferencia de
la funci\[OAcute]n GeometricCoefficients2D funciona en cualquier dimensi\[OAcute
]n, pero no calcula la curvatura seccional.";
Begin["Private`"]
EuclideanMetric[n_]:=IdentityMatrix[n];
MinkowskiPseudometric[n_]:=ReplacePart[IdentityMatrix[n],-1,{n,n}];
HiperbolicBall[n_,variables_]:=Module[{},
DiagonalMatrix[Table[(n^2/(1-Sum[(variables[[i]]^2),{i,n}])^2),{n}]]];
JacobianM[componentes_,variables_]:=Module[{x},x=variables;
Table[D[componentes[[i]],x[[j]]],{i,1,Length[componentes]},{j,1,Length[variables
]}]];
InducedPseudoMetric[componentes_,pseudometrica_,variables1_,variables2_]:=Module
[{ja,semiinducida,cambia},cambia=Table[variables2[[i]]->componentes[[i]],{i,1,Le
ngth[variables2]}];
semiinducida=pseudometrica//.cambia;
ja=Simplify[JacobianM[componentes,variables1]];
Simplify[(Transpose[ja].semiinducida.ja)]];
Christoffel[pseudometrica_,variables_]:=Module[{x,pseudometricainversa,expresion
,dimension},
x=variables;
dimension=Length[variables];
pseudometricainversa:=Inverse[pseudometrica];expresion[l_,m_,j_,i_]:=pseudometri
cainversa[[l,m]] (D[pseudometrica[[j,l]],x[[i]]]+D[pseudometrica[[l,i]],x[[j]]]D[pseudometrica[[i,j]],x[[l]]]);chrisgamma[m_,j_,i_]:=Simplify[(1/2)Sum[expresio
n[l,m,j,i],{l,dimension}]];Array[chrisgamma,{dimension,dimension,dimension}]];

GeodesicLines[chris_,variables_,nombretiempo_]:=Module[{x,dimension,s},x=variabl
es ;
dimension=Length[variables] ;
s=nombretiempo ;
equis=Table[x[[i]][s],{i,1,dimension}] ;
Table[D[equis[[k]],{s,2}]+Sum[Sum[D[equis[[i]],s] chris[[k,i,j]] D[equis[[j]],s
],{j,dimension}],{i,dimension}],{k,1,dimension}]] ;
NGeodesicLines[chris_,variables_,puntoinicial_,velocidadinicial_,incremento_,ite
raciones_]:=Module[{x,dimension,i},
x=variables ;
dimension=Length[variables] ;
i=incremento;
nuevo[anti_,deri_,incre_]:=anti+deri * incre ;
aceleracion[punto_,velocidad_]:=-Table[Sum[Sum[velocidad[[i]]*
(chris[[k,i,j]]/.Table[x[[i]]->punto[[i]],{i,1,dimension}])
velocidad[[j]],{j,dimension}],{i,dimension}],{k,1,dimension}];
pasito[{punto_,velo_}]:=Module[{ace},
ace=aceleracion[punto,velo];
{nuevo[punto,velo,i]+((i*i)/2)*ace,nuevo[velo,ace,i]}];
resultado=NestList[pasito,{puntoinicial,velocidadinicial},iteraciones]
] ;
InmersionNGeodesicLines3D[componentes_,inductora_,variables1_,variables2_,nombre
tiempo_,puntoinicial_,velocidadinicial_,incremento_,iteraciones_,rango1_,rango2_
]:=Module[{psm,Chris,ecuaciones,x,dimension,i,sup3D,funcion,nuevo,aceleracion,pa
sito,resultado},
psm=InducedPseudoMetric[componentes,inductora,variables1,variables2];
Chris=Christoffel[psm,variables1];
ecuaciones=GeodesicLines[Chris,variables1, nombretiempo];
Print["Las ecuaciones diferenciales de las geod\[EAcute]sicas son:"];
Print[ecuaciones];
x=variables1 ;
dimension=Length[variables1] ;
i=incremento;
nuevo[anti_,deri_,incre_]:=anti+deri * incre ;
aceleracion[punto_,velocidad_]:=-Table[Sum[Sum[velocidad[[i]]*
(Chris[[k,i,j]]/.Table[x[[i]]->punto[[i]],{i,1,dimension}])
velocidad[[j]],{j,dimension}],{i,dimension}],{k,1,dimension}];
pasito[{punto_,velo_}]:=Module[{ace},
ace=aceleracion[punto,velo];
{nuevo[punto,velo,i]+((i*i)/2)*ace,nuevo[velo,ace,i]}];
resultado=NestList[pasito,{puntoinicial,velocidadinicial},iteraciones];
sup3D=ParametricPlot3D[componentes,rango1,rango2];
funcion[a_,b_]:=componentes/.{variables1[[1]]->a,variables1[[2]]->b};
(*Print["La siguiente lista est\[AAcute] formada por pares, el primer elemento d
el par son las coordenadas de un punto de la geon\[EAcute]sica y el segunde elem
ento del par las coordenadas del vector velocidad a la que se recorre la geodesi
ca en ese punto"];
Print[resultado];*)
Print["Geod\[EAcute]sica con el punto y la velocidad inicial introducidos:"];
Show[{sup3D,Graphics3D[{Thick,(*Dashed,*)Green,Line[Table[componentes/.{variable
s1[[1]]->First[Transpose[resultado]][[j]][[1]],
variables1[[2]]->First[Transpose[resultado]][[j]][[2]]},{j,1, Length[resultado]}
]]}]}]
];
TorsionTensor[simboloschristoffel_,pseudometrica_,variables_]:=Module[{christoff

el,localpseudometrica, dimension},
dimension=Length[variables];
x=variables;
christoffel=simboloschristoffel;
torsion[l_,i_,j_,k_]:=Sum[christoffel[[s,i,k]] christoffel[[l,j,s]],{s,dimension
}]-Sum[christoffel[[s,j,k]] christoffel[[l,i,s]],{s,dimension}]+D[christoffel[[
l,i,k]],x[[j]]]-D[christoffel[[l,j,k]],x[[i]]];
torten[i_,j_,k_,s_]:=Simplify[Sum[torsion[l,i,j,k] pseudometrica[[l,s]],{l,dime
nsion}]];
Array[torten, {dimension,dimension, dimension, dimension}]];
SectionalCurvature2D[tensordetorsion_,pseudometrica_]:=Simplify[tensordetorsion[
[1,2,1,2]]/(pseudometrica[[1,1]] pseudometrica[[2,2]]-pseudometrica[[1,2]]^2)];
InmersionGeometricCoefficients2D[componentes_,inductora_,variables1_,variables2_
,nombretiempo_]:=Module[{psm,Chris,ecuaciones, tor,sc},
psm=InducedPseudoMetric[componentes,inductora,variables1,variables2];
Chris=Christoffel[psm,variables1];
tor=TorsionTensor[Chris,psm,variables1];
sc=SectionalCurvature2D[tor,psm];
ecuaciones=GeodesicLines[Chris,variables1, nombretiempo];
Print["La matriz de la pseudom\[EAcute]trica es la siguiente:"];
Print[psm//MatrixForm];
Print["Los s\[IAcute]mbolos de Christofell son los siguientes:"];
Print[Chris];
Print["Las ecuaciones diferenciales de las geod\[EAcute]sicas son:"];
Print[ecuaciones];
Print["Los coeficientes del tensor de torsi\[OAcute]n son:"];
Print[tor];
Print["La curvatura seccional viene dada por"];
Print[sc];
Print["Para obtener los resultados anteriores
introduce despu\[EAcute]s de la ejecuci\[OAcute]n '%' como un input"];
{psm,Chris,ecuaciones,tor,sc};];
GeometricCoefficients2D[pseudometrica_,variables_,nombretiempo_]:=Module[{psm,Ch
ris,ecuaciones, tor,sc},
psm=pseudometrica;
Chris=Christoffel[psm,variables];
tor=TorsionTensor[Chris,psm,variables];
sc=SectionalCurvature2D[tor,psm];
ecuaciones=GeodesicLines[Chris,variables, nombretiempo];
Print["La matriz de la pseudom\[EAcute]trica es la siguiente:"];
Print[psm//MatrixForm];
Print["Los s\[IAcute]mbolos de Christofell son los siguientes:"];
Print[Chris];
Print["Las ecuaciones diferenciales de las geod\[EAcute]sicas son:"];
Print[ecuaciones];
Print["Los coeficientes del tensor de torsi\[OAcute]n son:"];
Print[tor];
Print["La curvatura seccional viene dada por"];
Print[sc];
Clear[lista];
Print["Para obtener los resultados anteriores
introduce despu\[EAcute]s de la ejecuci\[OAcute]n '%' como un input"];
lista={psm,Chris,ecuaciones,tor,sc};];
GeometricCoefficients[pseudometrica_,variables_,nombretiempo_]:=Module[{psm,Chri
s,ecuaciones, tor},
psm=pseudometrica;

Chris=Christoffel[psm,variables];
tor=TorsionTensor[Chris,psm,variables];
ecuaciones=GeodesicLines[Chris,variables, nombretiempo];
Print["La matriz de la pseudom\[EAcute]trica es la siguiente:"];
Print[psm//MatrixForm];
Print["Los s\[IAcute]mbolos de Christofell son los siguientes:"];
Print[Chris];
Print["Las ecuaciones diferenciales de las geod\[EAcute]sica son:"];
Print[ecuaciones];
Print["Los coeficientes del tensor de torsi\[OAcute]n son:"];
Print[tor];
Clear[lista];
Print["Para obtener los resultados anteriores
introduce despu\[EAcute]s de la ejecuci\[OAcute]n '%' como un input"];
lista={psm,Chris,ecuaciones,tor};];

End[]
EndPackage[]

Vous aimerez peut-être aussi