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]}")
--------------
Nincsenek megjegyzések:
Megjegyzés küldése