Learning how to compute Christoffel symbols using Mathematica

  • #1
1,131
158
TL;DR Summary
I want to compute the Christoffel-symbol for a given metric.
I am using the code provided by Artes here, but I am missing something.

The Chrisfoffel-symbol formula is

$$\Gamma^{\mu}_{\phantom{\mu}\nu\sigma}=\frac{1}{2}g^{\mu\alpha}\left\{\frac{\partial g_{\alpha\nu}}{\partial x^{\sigma}}+\frac{\partial g_{\alpha\sigma}}{\partial x^{\nu}}-\frac{\partial g_{\nu\sigma}}{\partial x^{\alpha}}\right\}\quad$$

The metric is given to be


$$
g_{\mu \nu} =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & r^2+b^2 & 0 & 0 \\
0 & 0 & (r^2+b^2)\sin^2(\theta) & 0 \\
0 & 0 & 0 & -1
\end{pmatrix}
$$

The provided solution is:

$$\Gamma^{1}_{22}=-r$$

$$\Gamma^{1}_{33}=-r\sin^2(\theta)$$

$$\Gamma^{2}_{21}=\frac{r}{b^2+r^2}$$

$$\Gamma^{2}_{33}=-\cos(\theta)\sin(\theta)$$

$$\Gamma^{3}_{31}=\frac{r}{b^2+r^2}$$

$$\Gamma^{3}_{32}=\cot(\theta)$$

The code I'm using is

Code:
    xx = {t, x, \[Theta], \[Phi]};

    g  = { {1,0,0,0},
       {0,r^2+b^2,0,0},
       {0,0,(r^2+b^2)Sin[\[Theta]]^2,0},
       {0,0,0,-1}};

    ChristoffelSymbol[g_, xx_] := 
        Block[{n, ig, res}, 
               n = 4; ig = InverseMetric[ g]; 
               res = Table[(1/2)*Sum[ ig[[i,s]]*(-D[ g[[j,k]], xx[[s]]] + 
                                                  D[ g[[j,s]], xx[[k]]] 
                                                + D[ g[[s,k]], xx[[j]]]), 
                                      {s, 1, n}], 
                           {i, 1, n}, {j, 1, n}, {k, 1, n}];
               Simplify[ res]
             ]

But I get

Captura de pantalla (1064).png


What am I missing? Besides, I'd like to learn how could I display the answer (once I know how to actually get it of course).

Any help is appreciated.

Thank you :smile:
 

Answers and Replies

  • #2
What is InverseMetric?
 
  • #3
Oh I did not define the InverseMetric! Thanks for pointing it out.

I now have

Code:
xx = {t, x, \[Theta], \[Phi]};

g = { {1,0,0,0},
{0,r^2+b^2,0,0},
{0,0,(r^2+b^2)Sin[\[Theta]]^2,0},
{0,0,0,-1}};

InverseMetric=Simplify[Inverse[g]]

ChristoffelSymbol[g_, xx_] :=
Block[{n, ig, res},
n = 4; ig = InverseMetric;
res = Table[(1/2)*Sum[ ig[[i,s]]*(-D[ g[[j,k]], xx[[s]]] +
         D[ g[[j,s]], xx[[k]]]
                  + D[ g[[s,k]], xx[[j]]]),
         {s, 1, n}], {i, 1, n}, {j, 1, n}, {k, 1, n}];
    Simplify[ res]
]
ChristoffelSymbol[g, xx]

I now get

Captura de pantalla (1065).png


So apparently I only get ##\Gamma^3_{32}##
 
  • #4
I found an alternative here

Code:
Clear [coord, metric, inversemetric, affine]

n = 4;
coord = {t, x, y,z};

metric = { {1,0,0,0}, {0,r^2+b^2,0,0}, {0,0,(r^2+b^2)Sin[\[Theta]]^2,0},
  {0,0,0,-1}};

inversemetric = Simplify[Inverse[metric]];

affine :=
  affine = Simplify[
Table[(1/2)*
Sum[inversemetric[[i,
s]]*(D[metric[[s, j]], coord[[k]]] +
D[metric[[s, k]], coord[[j]]] -
D[metric[[j, k]], coord[[s]]]), {s, 1, n}], {i, 1, n}, {j,
      1, n}, {k, 1, n}]];

listaffine :=
  Table[If[UnsameQ[affine[[i, j, k]],
0], {ToString[\[CapitalGamma][i - 1, j - 1, k - 1]],
affine[[i, j, k]]}], {i, 1, n}, {j, 1, n}, {k, 1, j}];
TableForm[Partition[DeleteCases[Flatten[listaffine], Null], 2],
TableSpacing -> {2, 2}]

I am struggling now in how to call out the specific Christoffel symbols correctly; I am trying

Code:
affine[[3,3,2]]

But I get zero instead of ##\cot(\theta)##; the same happens to me with other non-zero terms.
 
  • #6
OK I understand how to do it now! :smile: (more details)

My issue was in how to call out the function. Let's go step by step:

1) Define the Christoffel symbol function:

Code:
    ChristoffelSymbol[g_, xx_] := 
     Block[{n, ig, res}, n = Length[xx]; ig = Inverse[g];
      res = Table[(1/2)*
         Sum[ig[[i, s]]*(-D[g[[j, k]], xx[[s]]] + D[g[[j, s]], xx[[k]]] + 
             D[g[[s, k]], xx[[j]]]), {s, 1, n}], {i, 1, n}, {j, 1, n}, {k,
          1, n}];
      Simplify[res]]

2) Define the coordinates and the components of the metric wrt the coordinate basis

Code:
    (* The coordinates *)
    xx = {r, \[Theta], \[Phi], t};

    (* The metric *)
    g = {{1, 0, 0, 0}, {0, r^2 + b^2, 0, 0}, {0, 
        0, (r^2 + b^2) Sin[\[Theta]]^2, 0}, {0, 0, 0, -1}};


3) Relabel the Christoffel symbol function so that you can call out specific Christoffel symbols


Code:
    sol = ChristoffelSymbol[g, xx] (* This calls the function! *);

    sol[[1, 2, 2]](*for instance*)
    (* -r *)
 
  • #7
Gen. Relativity... :cool:
got my answer.
 

Suggested for: Learning how to compute Christoffel symbols using Mathematica

Replies
3
Views
1K
Replies
6
Views
546
Replies
1
Views
177
Replies
1
Views
515
Replies
2
Views
655
Replies
1
Views
652
Replies
0
Views
484
Replies
1
Views
794
Back
Top