O použití systému xAct se dozvíte na přednášce NTMF075, 
kterou má Alfonso García-Parrado Gómez-Lobo tento semestr
http://www.xact.es/xActCourse_Prague/

Exit[]

Nejprve musíme 
1. importovat potřebné knihovny 
2. deklarovat jak se budou jmenovat tenzorové indexy,
3. jak se mají jmenovat souřadice
4. a jak mají zobrazovat indexy u komponent tenzorů

<<xAct`xTensor`
Needs["xAct`xCoba`"]

DefManifold[M,4,{a,b,c,d,e,f}]
DefChart[Sph,M,{0,1,2,3},{u[],r[],θ[],ϕ[]}]
$CIndexForm=True;
(*Sph/:CIndexForm[0,Sph]="u";Sph/:CIndexForm[1,Sph]="r";Sph/:CIndexForm[2,Sph]="θ";Sph/:CIndexForm[3,Sph]="φ";*)

V našem problému vystupují ještě dva metrické potenciály a skalární pole

DefScalarFunction[V]
DefScalarFunction[β]
DefScalarFunction[Φ]

Metriku je pohodlné zadat výrazem pro (ds^2)

ds2=- Exp[2β[u[],r[]]] du(2dr+ V[u[],r[]]/r[] du) +r[]^2(dθ^2+Sin[θ[]]^2 dϕ^2)

ds2Matrix=CoefficientArrays[ds2,{du,dr,dθ,dϕ},"Symmetric"->True][[3]]//Normal//Simplify;
MatrixForm[%]

Zde začíná magie programu xAct:
vezmi zadanou metriku, s ní kompatibilní koavriantní derivaci a spočti potřebné tenzory až do toho Einsteinova

metricg=CTensor[ds2Matrix,{-Sph,-Sph}];
metricg[-a,-b]
SetCMetric[metricg,Sph,SignatureOfMetric->{3,1,0}]
MetricCompute[metricg,Sph,"Einstein"[-1,-1](*,Verbose->True*)]
cd=CovDOfMetric[metricg];

Aby se parciální derivace ve výsledcích zobrazovaly obvyklým způsobem, zavedeme překlad značení   Derivative[0,1][Φ][u,r] -> (Subscript[Φ, r])

pdsim := {Derivative[k_,l_][f_][u,r]:> Subscript@@Join[{f},Table[u,k],Table[ r,l]],f_[u,r]:> f}

Expanze vycházejícíc radiální geodetiky

el = CTensor[{0,Exp[-2β[u[],r[]]],0,0},{Sph}]

(*je nulová:  (Subscript[ℓ, a])(ℓ^a)==0 *)
metricg[-a,-b] el[a] el[b]

(*je správně parametrizovaná: (D/(dλ))(ℓ^b)== (ℓ^a)(Subscript[∇, a])(ℓ^b)==0 *)
el[a] cd[-a][el[b]]

(* expanze θ == (Subscript[∇, a])(ℓ^a) == ... == (2/r)(ℓ^((r))) *)
cd[-a][el[a]]

Protože nikde nesmíme zapomenout poctivě označovat skalární pole poměrně nepohodlným zápisem Φ[u[],r[]], zavedeme zkratku

ssΦ :=Φ[u[],r[]]

Výraz (Subscript[∇, a])(∇^a)Φ se spočte takto

\[Square]Φ = cd[-a][  cd[a][  ssΦ  ]  ]//Simplify;
%/.pdsim

Pokud počítáte (∇^a)(Subscript[∇, a])Φ , což je totéž, musí se navíc ještě přidat operace ContractBasis (zkuste to bez ní, a uvidíte, proč navštěvovat NTMF075)

(cd[a][cd[-a][ssΦ]]//ContractBasis//Simplify)/.pdsim

Pro skalární pole máme
(Subscript[T, ab]) = (Subscript[∇, a])Φ(Subscript[∇, b])Φ-(1/2)(Subscript[g, ab])(∇^c) Φ (Subscript[∇, c ])Φ
bohužel to musím zapsat trochu delší

gradΦ2 =cd[-c][ssΦ] cd[c][ssΦ]//ContractBasis//Simplify

TΦ = metricg[-a,-c]metricg[-b,-d]cd[c][ssΦ] cd[d][ssΦ]-1/2 metricg[-a,-b]gradΦ2//ContractBasis//Simplify

Einsteinovy rovice pak jsou

Einstein[cd][-a,-b] - 8Pi TΦ
Gminus8PiT = (%//Head)/.CTensor->(#1&)/.pdsim//Simplify;
%//MatrixForm

{eeuu,eeur,eerθ,eerr,eeθθ,eeϕϕ} = Gminus8PiT//Flatten//DeleteDuplicates

Thus we finally get  the “hypersurface” equations (2.4) in [Puerrer et al 2005]:

Solve[ eerr==0,(Subscript[β, r])][[1]]
Solve[ eeur==0/.%,(Subscript[V, r])][[1]]