2026. július 27., hétfő

Christoffel-szimbólumok számítása a metrikus tenzor parciális deriváltjaiból. python programmal

Ez a program a kétdimenziós polárkoordináta-rendszer metrikáját használja példaként, és kiszámítja a másodfajú Christoffel-szimbólumokat a metrikus tenzor parciális deriváltjaiból.
------------------------

from sympy import symbols, cos, sin, Matrix, diff, simplify

# 1. Koordináták definiálása
r, theta = symbols('r theta')
coords = [r, theta]

# 2. Metrikus tenzor (g_ij) definiálása polárkoordinátákban
# ds^2 = dr^2 + r^2 d_theta^2
g = Matrix([[1, 0], 
            [0, r**2]])

# 3. Inverz metrikus tenzor (g^ij) kiszámítása
g_inv = g.inv()

# Dimenzió meghatározása
n = len(coords)

# 4. Christoffel-szimbólumok kiszámítása a definíció alapján:
# Gamma^k_{ij} = 0.5 * g^{kl} * (g_{li,j} + g_{lj,i} - g_{ij,l})
christoffel = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]

for k in range(n):
    for i in range(n):
        for j in range(n):
            term_sum = 0
            for l in range(n):
                # Parciális deriváltak: diff(g[l, i], coords[j]) jelentése g_{li,j}
                d1 = diff(g[l, i], coords[j])
                d2 = diff(g[l, j], coords[i])
                d3 = diff(g[i, j], coords[l])
                term_sum += g_inv[k, l] * (d1 + d2 - d3)
            
            christoffel[k][i][j] = simplify(0.5 * term_sum)

# 5. Eredmények kiíratása
for k in range(n):
    for i in range(n):
        for j in range(n):
            if christoffel[k][i][j] != 0:
                print(f"Gamma^{k+1}_{ {i+1},{j+1} } = {christoffel[k][i][j]}")
--------------
A megadott Python-program a kétdimenziós sík Christoffel-szimbólumait számolja ki polárkoordinátákban 

Nincsenek megjegyzések:

Megjegyzés küldése