18. ํ ์ ํด์ (Tensor Analysis)
18. ํ ์ ํด์ (Tensor Analysis)¶
ํ์ต ๋ชฉํ¶
- ํ ์์ ์ ์๋ฅผ ์ขํ ๋ณํ ๋ฒ์น์ ๊ด์ ์์ ์ดํดํ๊ณ , ์ค์นผ๋ผยท๋ฒกํฐยทํ๋ ฌ์ ํ ์์ ํน์ํ ๊ฒฝ์ฐ๋ก ๋ถ๋ฅํ ์ ์๋ค
- ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ๊ณผ ์ธ๋ฑ์ค ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ ์ ๋ฐฉ์ ์์ ๊ฐ๊ฒฐํ๊ฒ ํํํ๊ณ ์กฐ์ํ ์ ์๋ค
- ๋ฐ๋ณ(contravariant)ยท๊ณต๋ณ(covariant) ํ ์์ ๋ณํ ๋ฒ์น์ ๊ตฌ๋ถํ๊ณ , ๊ณ๋ ํ ์๋ฅผ ํตํ ์ธ๋ฑ์ค ์ฌ๋ฆผ/๋ด๋ฆผ์ ์ํํ ์ ์๋ค
- ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ์ ๊ณต๋ณ ๋ฏธ๋ถ์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ๊ณก์ ์ขํ๊ณ์์ ํ ์์ ๋ฏธ๋ถ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์๋ค
- ๋ฆฌ๋ง ๊ณก๋ฅ ํ ์์ ์ ์์ ๊ธฐํํ์ ์๋ฏธ๋ฅผ ์ดํดํ๊ณ , ๊ฐ๋จํ ๊ณต๊ฐ์์ ๊ณก๋ฅ ์ ๊ณ์ฐํ ์ ์๋ค
- ํ ์ ํด์์ ๋ฌผ๋ฆฌ์ ์์ฉ(์๋ ฅ ํ ์, ์ ์๊ธฐ์ฅ ํ ์, ์์ธ์ํ์ธ ๋ฐฉ์ ์)์ ์์ ํ๊ณ Python์ผ๋ก ๊ณ์ฐํ ์ ์๋ค
ํ ์๋ ์ ํ์ํ๊ฐ? ์์ฐ ๋ฒ์น์ ์ขํ๊ณ์ ์ ํ์ ๋ฌด๊ดํด์ผ ํ๋ค. ์ค์นผ๋ผ(rank-0)์ ๋ฒกํฐ(rank-1)๋ง์ผ๋ก๋ ์๋ ฅ, ๊ด์ฑ ๋ชจ๋ฉํธ, ์ ์๊ธฐ์ฅ ๊ฐ์ ๋ฌผ๋ฆฌ๋์ ๊ธฐ์ ํ ์ ์๋ค. ํ ์๋ ์์์ ์ขํ ๋ณํ์์ ๋ช ํํ ๋ณํ ๋ฒ์น์ ๋ฐ๋ฅด๋ ๊ธฐํํ์ ๋์์ผ๋ก, ๋ฌผ๋ฆฌ ๋ฒ์น์ ์ขํ๊ณ์ ๋ ๋ฆฝ์ ์ธ ํํ๋ก ํํํ๋ ์์ฐ์ค๋ฌ์ด ์ธ์ด์ด๋ค.
1. ํ ์์ ๊ธฐ๋ณธ ๊ฐ๋ ¶
1.1 ๋๊ธฐ: ์ ์ค์นผ๋ผ์ ๋ฒกํฐ๋ง์ผ๋ก๋ ๋ถ์กฑํ๊ฐ¶
๋ฌผ๋ฆฌํ์์ ๋ง์ ์์ ์ค์นผ๋ผ(์จ๋, ์๋์ง)๋ ๋ฒกํฐ(ํ, ์๋)๋ก ์ถฉ๋ถํ ๊ธฐ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌผ๋ฆฌ๋์ ํ๋์ ๋ฐฉํฅ์ด ์๋๋ผ ๋ ๊ฐ ์ด์์ ๋ฐฉํฅ ์ ๋ณด๋ฅผ ํ์๋ก ํ๋ค:
- ์๋ ฅ ํ ์(stress tensor) $\sigma_{ij}$: ๋ฉด์ ๋ฐฉํฅ($j$)๊ณผ ๊ทธ ๋ฉด์ ์์ฉํ๋ ํ์ ๋ฐฉํฅ($i$)
- ๊ด์ฑ ๋ชจ๋ฉํธ ํ ์(moment of inertia tensor) $I_{ij}$: ๊ฐ์๋ ๋ฐฉํฅ๊ณผ ๊ฐ์ด๋๋ ๋ฐฉํฅ์ ๊ด๊ณ
- ์ ์๊ธฐ์ฅ ํ ์(electromagnetic field tensor) $F_{\mu\nu}$: ์ ๊ธฐ์ฅ๊ณผ ์๊ธฐ์ฅ์ ํตํฉํ๋ ๋ฐ๋์นญ ํ ์
์ด๋ค์ ๋ชจ๋ rank-2 ํ ์๋ก, $n$์ฐจ์ ๊ณต๊ฐ์์ $n^2$๊ฐ์ ์ฑ๋ถ์ ๊ฐ์ง๋ค.
1.2 ์ขํ ๋ณํ๊ณผ ํ ์์ ์ ์¶
์ขํ ๋ณํ $x^i \to x'^i(x^1, x^2, \ldots, x^n)$์์, rank-$k$ ํ ์๋ ๊ทธ ์ฑ๋ถ์ด ๋ค์๊ณผ ๊ฐ์ ํน์ ํ ๋ณํ ๋ฒ์น์ ๋ฐ๋ฅด๋ ๋์์ด๋ค:
- Rank-0 (์ค์นผ๋ผ): $\phi' = \phi$ (๋ถ๋ณ)
- Rank-1 (๋ฒกํฐ): $A'^i = \frac{\partial x'^i}{\partial x^j}A^j$ (๋ฐ๋ณ ๋ฒกํฐ์ ๊ฒฝ์ฐ)
- Rank-2 ํ ์: $T'^{ij} = \frac{\partial x'^i}{\partial x^k}\frac{\partial x'^j}{\partial x^l}T^{kl}$
์ผ๋ฐ์ ์ผ๋ก, ํ ์๋ ๋ค์ค์ ํ ์ฌ์(multilinear map)์ผ๋ก ์ ์ํ ์ ์๋ค. rank-$(p,q)$ ํ ์๋ $p$๊ฐ์ ๊ณต๋ณ ๋ฒกํฐ(covector)์ $q$๊ฐ์ ๋ฐ๋ณ ๋ฒกํฐ๋ฅผ ๋ฐ์ ์ค์๋ฅผ ๋ด๋๋ ๋ค์ค์ ํ ํจ์์ด๋ค.
1.3 ํ ์์ ๊ณ์(Rank/Order)¶
| Rank | ์ฑ๋ถ ์ ($n$์ฐจ์) | ๋ฌผ๋ฆฌ์ ์์ |
|---|---|---|
| 0 | $1$ | ์จ๋, ์ง๋, ์๋์ง |
| 1 | $n$ | ํ, ์๋, ์ ๊ธฐ์ฅ |
| 2 | $n^2$ | ์๋ ฅ, ๊ด์ฑ ๋ชจ๋ฉํธ, ๊ณ๋ ํ ์ |
| 3 | $n^3$ | ์์ (piezoelectric) ํ ์ |
| 4 | $n^4$ | ๋ฆฌ๋ง ๊ณก๋ฅ ํ ์, ํ์ฑ ํ ์ |
1.4 Python: ์ขํ ๋ณํ ์์ ¶
import numpy as np
# === 2์ฐจ์ ํ์ ๋ณํ์์ ํ
์ ๋ณํ ๋ฒ์น ๊ฒ์ฆ ===
# ํ์ ๊ฐ๋
theta = np.pi / 6 # 30๋
# ๋ณํ ํ๋ ฌ: x'^i = R^i_j x^j
R = np.array([
[np.cos(theta), np.sin(theta)],
[-np.sin(theta), np.cos(theta)]
])
print(f"ํ์ ํ๋ ฌ R (ฮธ = {np.degrees(theta):.0f}ยฐ):")
print(R)
# --- Rank-1 ํ
์ (๋ฒกํฐ) ๋ณํ ---
A = np.array([3.0, 4.0]) # ์๋ ์ขํ๊ณ์ ๋ฒกํฐ
A_prime = R @ A # A'^i = R^i_j A^j
print(f"\n์๋ ๋ฒกํฐ: A = {A}")
print(f"๋ณํ๋ ๋ฒกํฐ: A' = {A_prime}")
print(f"|A| = {np.linalg.norm(A):.4f}, |A'| = {np.linalg.norm(A_prime):.4f}")
# ํฌ๊ธฐ ๋ณด์กด ํ์ธ
# --- Rank-2 ํ
์ ๋ณํ ---
# ์๋ ฅ ํ
์ ์์
T = np.array([
[10.0, 3.0],
[3.0, 5.0]
]) # ๋์นญ ํ
์
# T'^{ij} = R^i_k R^j_l T^{kl} = R T R^T
T_prime = R @ T @ R.T
print(f"\n์๋ ํ
์:\n{T}")
print(f"๋ณํ๋ ํ
์:\n{T_prime}")
# ํ
์์ ๋ถ๋ณ๋(trace, determinant) ํ์ธ
print(f"\ntr(T) = {np.trace(T):.4f}, tr(T') = {np.trace(T_prime):.4f}")
print(f"det(T) = {np.linalg.det(T):.4f}, det(T') = {np.linalg.det(T_prime):.4f}")
# ๋๊ฐํฉ๊ณผ ํ๋ ฌ์์ ์ขํ ๋ณํ์ ๋ถ๋ณ
2. ์ธ๋ฑ์ค ํ๊ธฐ๋ฒ๊ณผ ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ¶
2.1 ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ¶
์์ธ์ํ์ธ(Einstein)์ ํฉ์ฐ ๊ท์ฝ์ ํ ์ ํํ์ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋๋ ํ๊ธฐ๋ฒ์ด๋ค:
๊ฐ์ ํญ์์ ์ ์ธ๋ฑ์ค์ ์๋ ์ธ๋ฑ์ค๊ฐ ๋์ผํ ๋ฌธ์๋ก ๋ฐ๋ณต๋๋ฉด, ๊ทธ ์ธ๋ฑ์ค์ ๋ํด ํฉ์ฐํ๋ค.
$$ A^i B_i \equiv \sum_{i=1}^{n} A^i B_i $$
์์ ์ธ๋ฑ์ค(free index): ํญ์ ์๋ณ์ ๊ณตํต์ผ๋ก ๋ํ๋๋ ์ธ๋ฑ์ค (๋ฐฉ์ ์์ ๊ฐ ์ฑ๋ถ์ ํํ)
๋๋ฏธ ์ธ๋ฑ์ค(dummy index): ํฉ์ฐ ๊ท์ฝ์ ์ํด ํฉ์ฐ๋๋ ๋ฐ๋ณต ์ธ๋ฑ์ค (๋ฌธ์ ๊ต์ฒด ๊ฐ๋ฅ)
$$ A^i B_i = A^j B_j \quad (\text{๋๋ฏธ ์ธ๋ฑ์ค } i \text{๋ฅผ } j\text{๋ก ๊ต์ฒด ๊ฐ๋ฅ}) $$
2.2 ํฌ๋ก๋ค์ปค ๋ธํ $\delta_{ij}$¶
ํฌ๋ก๋ค์ปค ๋ธํ(Kronecker delta)๋ ๋จ์ ํ๋ ฌ์ ์ฑ๋ถ์ ํด๋นํ๋ค:
$$ \delta_{ij} = \begin{cases} 1 & (i = j) \\ 0 & (i \ne j) \end{cases} $$
์ฃผ์ ์ฑ์ง: - $\delta_{ij} A^j = A^i$ (์ธ๋ฑ์ค ์นํ ์ญํ ) - $\delta_{ii} = n$ ($n$์ฐจ์์์์ ๋๊ฐํฉ) - $\delta_{ij}\delta_{jk} = \delta_{ik}$
2.3 ๋ ๋น-์น๋นํ ๊ธฐํธ $\varepsilon_{ijk}$¶
๋ ๋น-์น๋นํ ๊ธฐํธ(Levi-Civita symbol)๋ ์์ ๋ฐ๋์นญ ๊ธฐํธ์ด๋ค:
$$ \varepsilon_{ijk} = \begin{cases} +1 & (ijk) \text{๊ฐ }(123)\text{์ ์ง์ ์นํ} \\ -1 & (ijk) \text{๊ฐ }(123)\text{์ ํ์ ์นํ} \\ 0 & \text{์ธ๋ฑ์ค ์ค ๋ฐ๋ณต์ด ์์ผ๋ฉด} \end{cases} $$
์ธ์ ๊ณผ ํ๋ ฌ์์ ํํ:
$$ (\mathbf{A} \times \mathbf{B})_i = \varepsilon_{ijk} A_j B_k $$
$$ \det(M) = \varepsilon_{ijk} M_{1i} M_{2j} M_{3k} $$
2.4 $\varepsilon$-$\delta$ ํญ๋ฑ์¶
ํ ์ ๊ณ์ฐ์์ ๋งค์ฐ ์ ์ฉํ ํญ๋ฑ์:
$$ \varepsilon_{ijk}\varepsilon_{imn} = \delta_{jm}\delta_{kn} - \delta_{jn}\delta_{km} $$
์ด ํญ๋ฑ์์ผ๋ก๋ถํฐ ๋ฒกํฐ ์ผ์ค๊ณฑ ๋ฑ ๋ค์ํ ํญ๋ฑ์์ ์ ๋ํ ์ ์๋ค:
$$ \mathbf{A} \times (\mathbf{B} \times \mathbf{C}) = \mathbf{B}(\mathbf{A} \cdot \mathbf{C}) - \mathbf{C}(\mathbf{A} \cdot \mathbf{B}) $$
2.5 Python: numpy.einsum์ ์ด์ฉํ ํ ์ ์ฐ์ฐ¶
import numpy as np
# === numpy.einsum: ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ์ Python ๊ตฌํ ===
A = np.array([1.0, 2.0, 3.0])
B = np.array([4.0, 5.0, 6.0])
# ๋ด์ : A^i B_i
dot = np.einsum('i,i->', A, B)
print(f"๋ด์ AยทB = {dot}") # 32.0
# ์ธ์ (ํ
์๊ณฑ): C^{ij} = A^i B^j
outer = np.einsum('i,j->ij', A, B)
print(f"\n์ธ์ AโB:\n{outer}")
# ํ๋ ฌ-๋ฒกํฐ ๊ณฑ: (Mv)^i = M^{ij} v_j
M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=float)
v = np.array([1.0, 0.0, -1.0])
Mv = np.einsum('ij,j->i', M, v)
print(f"\nMv = {Mv}")
# ํ๋ ฌ ๊ณฑ: (AB)^{ik} = A^{ij} B^{jk}
N = np.random.rand(3, 3)
MN = np.einsum('ij,jk->ik', M, N)
print(f"\nํ๋ ฌ ๊ณฑ MN (einsum):\n{MN}")
print(f"ํ๋ ฌ ๊ณฑ MN (numpy): \n{M @ N}")
# ๋๊ฐํฉ(trace): T^i_i
trace = np.einsum('ii->', M)
print(f"\ntr(M) = {trace}")
# ์ด์ค ์ถ์ฝ(double contraction): A_{ij} B_{ij}
A2 = np.random.rand(3, 3)
B2 = np.random.rand(3, 3)
double_contract = np.einsum('ij,ij->', A2, B2)
print(f"A:B (์ด์ค ์ถ์ฝ) = {double_contract:.4f}")
# --- ๋ ๋น-์น๋นํ ๊ธฐํธ์ ์ธ์ ---
# 3์ฐจ์ ๋ ๋น-์น๋นํ ๊ธฐํธ ์์ฑ
def levi_civita_3d():
"""3์ฐจ์ ๋ ๋น-์น๋นํ ๊ธฐํธ ฮต_{ijk}๋ฅผ ์์ฑ"""
eps = np.zeros((3, 3, 3))
eps[0, 1, 2] = eps[1, 2, 0] = eps[2, 0, 1] = 1
eps[0, 2, 1] = eps[2, 1, 0] = eps[1, 0, 2] = -1
return eps
eps = levi_civita_3d()
# ์ธ์ : (A ร B)_i = ฮต_{ijk} A_j B_k
cross_einsum = np.einsum('ijk,j,k->i', eps, A, B)
cross_numpy = np.cross(A, B)
print(f"\nA ร B (einsum): {cross_einsum}")
print(f"A ร B (numpy): {cross_numpy}")
# ฮต-ฮด ํญ๋ฑ์ ๊ฒ์ฆ: ฮต_{ijk} ฮต_{imn} = ฮด_{jm}ฮด_{kn} - ฮด_{jn}ฮด_{km}
lhs = np.einsum('ijk,imn->jkmn', eps, eps)
delta = np.eye(3)
rhs = np.einsum('jm,kn->jkmn', delta, delta) - np.einsum('jn,km->jkmn', delta, delta)
print(f"\nฮต-ฮด ํญ๋ฑ์ ๊ฒ์ฆ: {np.allclose(lhs, rhs)}")
3. ๋ฐ๋ณยท๊ณต๋ณ ํ ์¶
3.1 ๋ฐ๋ณ ๋ฒกํฐ (Contravariant Vector)¶
์ขํ ๋ณํ $x^i \to x'^i$์์, ๋ฐ๋ณ ๋ฒกํฐ(contravariant vector)์ ์ฑ๋ถ์ ์ขํ์ ๋ฏธ๋ถ์ฒ๋ผ ๋ณํํ๋ค:
$$ A'^i = \frac{\partial x'^i}{\partial x^j}A^j $$
์ ์ธ๋ฑ์ค(upper index)๋ก ํ๊ธฐํ๋ฉฐ, ๋ณ์ ๋ฒกํฐ $dx^i$๊ฐ ๋ํ์ ์ธ ์์ด๋ค.
3.2 ๊ณต๋ณ ๋ฒกํฐ (Covariant Vector)¶
๊ณต๋ณ ๋ฒกํฐ(covariant vector, 1-form)์ ์ฑ๋ถ์ ๊ธฐ์ธ๊ธฐ(gradient)์ฒ๋ผ ๋ณํํ๋ค:
$$ A'_i = \frac{\partial x^j}{\partial x'^i}A_j $$
์๋ ์ธ๋ฑ์ค(lower index)๋ก ํ๊ธฐํ๋ฉฐ, ์ค์นผ๋ผ ํจ์์ ํธ๋ฏธ๋ถ $\partial_i \phi = \frac{\partial \phi}{\partial x^i}$๊ฐ ๋ํ์ ์ธ ์์ด๋ค.
3.3 ํผํฉ ํ ์์ ์ธ๋ฑ์ค ์ฌ๋ฆผ/๋ด๋ฆผ¶
ํผํฉ ํ ์(mixed tensor): ์ยท์๋ ์ธ๋ฑ์ค๋ฅผ ๋ชจ๋ ๊ฐ์ง ํ ์. ์๋ฅผ ๋ค์ด rank-$(1,1)$ ํ ์ $T^i{}_j$๋:
$$ T'^i{}_j = \frac{\partial x'^i}{\partial x^k}\frac{\partial x^l}{\partial x'^j}T^k{}_l $$
์ธ๋ฑ์ค ์ฌ๋ฆผ/๋ด๋ฆผ์ ๊ณ๋ ํ ์๋ฅผ ํตํด ์ํํ๋ค:
$$ A^i = g^{ij}A_j \quad (\text{์ฌ๋ฆผ}), \qquad A_i = g_{ij}A^j \quad (\text{๋ด๋ฆผ}) $$
3.4 Python: ๋ฐ๋ณ/๊ณต๋ณ ๋ณํ ์์ ¶
import numpy as np
import sympy as sp
# === ๊ทน์ขํ โ ์ง๊ต์ขํ ๋ณํ์์ ๋ฐ๋ณ/๊ณต๋ณ ๋ฒกํฐ ===
r_val, theta_val = 2.0, np.pi / 4 # (r, ฮธ) = (2, 45ยฐ)
# ์ง๊ต ์ขํ โ ๊ทน์ขํ ๋ณํ์ ์ผ์ฝ๋น์
# x = r cosฮธ, y = r sinฮธ
# โx^i/โx'^j ๊ณ์ฐ (x' = ๊ทน์ขํ, x = ์ง๊ต์ขํ)
# โ(x,y)/โ(r,ฮธ) : ์ง๊ต๋ฅผ ๊ทน์ขํ๋ก ๋ฏธ๋ถ
J = np.array([
[np.cos(theta_val), -r_val * np.sin(theta_val)], # โx/โr, โx/โฮธ
[np.sin(theta_val), r_val * np.cos(theta_val)] # โy/โr, โy/โฮธ
])
# ์ญ์ผ์ฝ๋น์: โ(r,ฮธ)/โ(x,y)
J_inv = np.linalg.inv(J)
print("์ผ์ฝ๋น์ โ(x,y)/โ(r,ฮธ):")
print(J)
print(f"\n์ญ์ผ์ฝ๋น์ โ(r,ฮธ)/โ(x,y):")
print(J_inv)
# ์ง๊ต์ขํ์์์ ๋ฒกํฐ (๋ฐ๋ณ ์ฑ๋ถ)
A_cart = np.array([1.0, 1.0]) # (Ax, Ay)
# ๋ฐ๋ณ ๋ณํ: A'^i = (โx'^i/โx^j) A^j
# ๊ทน์ขํ์ ๋ฐ๋ณ ์ฑ๋ถ = J_inv @ A_cart
A_polar_contra = J_inv @ A_cart
print(f"\n์ง๊ต์ขํ ๋ฒกํฐ A = {A_cart}")
print(f"๊ทน์ขํ ๋ฐ๋ณ ์ฑ๋ถ (A^r, A^ฮธ) = {A_polar_contra}")
# ๊ณต๋ณ ๋ณํ: A'_i = (โx^j/โx'^i) A_j
# ๊ทน์ขํ์ ๊ณต๋ณ ์ฑ๋ถ = J^T @ A_cart
A_polar_cov = J.T @ A_cart
print(f"๊ทน์ขํ ๊ณต๋ณ ์ฑ๋ถ (A_r, A_ฮธ) = {A_polar_cov}")
# ๊ทน์ขํ์ ๊ณ๋ ํ
์๋ก ๊ฒ์ฆ: g_{ij} = diag(1, rยฒ)
g = np.diag([1.0, r_val**2])
A_cov_from_contra = g @ A_polar_contra
print(f"\ng_{ij} A^j = {A_cov_from_contra}")
print(f"์ง์ ๊ณ์ฐํ ๊ณต๋ณ ์ฑ๋ถ๊ณผ ์ผ์น: {np.allclose(A_polar_cov, A_cov_from_contra)}")
4. ๊ณ๋ ํ ์ (Metric Tensor)¶
4.1 ์ ์(Line Element)์ ๊ณ๋ ํ ์์ ์ ์¶
์ขํ๊ณ์์ ๋ ์ธ์ ํ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ(์ ์, line element)๋ ๊ณ๋ ํ ์ $g_{ij}$์ ์ํด ์ ์๋๋ค:
$$ ds^2 = g_{ij} \, dx^i \, dx^j $$
๊ณ๋ ํ ์๋ ๋ด์ ์ ์ ์ํ๋ ๋์นญ rank-2 ๊ณต๋ณ ํ ์์ด๋ค: $g_{ij} = g_{ji}$.
4.2 ๋ค์ํ ์ขํ๊ณ์์์ ๊ณ๋ ํ ์¶
์ง๊ต ์ขํ $(x, y, z)$:
$$ ds^2 = dx^2 + dy^2 + dz^2 \quad \Rightarrow \quad g_{ij} = \delta_{ij} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
์ํต ์ขํ $(\rho, \phi, z)$:
$$ ds^2 = d\rho^2 + \rho^2 d\phi^2 + dz^2 \quad \Rightarrow \quad g_{ij} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \rho^2 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
๊ตฌ๋ฉด ์ขํ $(r, \theta, \phi)$:
$$ ds^2 = dr^2 + r^2 d\theta^2 + r^2 \sin^2\theta \, d\phi^2 \quad \Rightarrow \quad g_{ij} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & r^2 & 0 \\ 0 & 0 & r^2\sin^2\theta \end{pmatrix} $$
4.3 ๊ณก๋ฉด ์์ ๊ณ๋ ํ ์¶
2์ฐจ์ ๊ตฌ๋ฉด ($r = R$ ๊ณ ์ ):
$$ ds^2 = R^2 d\theta^2 + R^2 \sin^2\theta \, d\phi^2 \quad \Rightarrow \quad g_{ij} = R^2\begin{pmatrix} 1 & 0 \\ 0 & \sin^2\theta \end{pmatrix} $$
4.4 ์ญ๊ณ๋ ํ ์์ ์ฒด์ ์์¶
์ญ๊ณ๋ ํ ์(inverse metric) $g^{ij}$๋ $g^{ik}g_{kj} = \delta^i{}_j$๋ฅผ ๋ง์กฑํ๋ค.
์ฒด์ ์์: ์ขํ๊ณ์ ์ฒด์ ์์๋ ๊ณ๋ ํ ์์ ํ๋ ฌ์์ผ๋ก ๊ฒฐ์ ๋๋ค:
$$ dV = \sqrt{|g|} \, dx^1 \, dx^2 \cdots dx^n, \quad g = \det(g_{ij}) $$
4.5 Python: ๊ณ๋ ํ ์ ๊ณ์ฐ¶
import sympy as sp
# === ๋ค์ํ ์ขํ๊ณ์์ ๊ณ๋ ํ
์ ๊ณ์ฐ ===
def compute_metric(coords, transform):
"""
์ขํ ๋ณํ์ผ๋ก๋ถํฐ ๊ณ๋ ํ
์๋ฅผ ๊ณ์ฐํ๋ค.
Parameters:
coords: ๊ณก์ ์ขํ ๋ณ์ ๋ฆฌ์คํธ
transform: ์ง๊ต์ขํ ํํ ๋ฆฌ์คํธ [x(...), y(...), z(...)]
Returns:
๊ณ๋ ํ
์ ํ๋ ฌ (SymPy Matrix)
"""
n = len(coords)
r = sp.Matrix(transform)
g = sp.zeros(n, n)
for i in range(n):
for j in range(i, n):
g[i, j] = sp.trigsimp(r.diff(coords[i]).dot(r.diff(coords[j])))
g[j, i] = g[i, j]
return g
# ๊ตฌ๋ฉด ์ขํ
r, theta, phi = sp.symbols('r theta phi', positive=True)
g_sph = compute_metric(
[r, theta, phi],
[r * sp.sin(theta) * sp.cos(phi),
r * sp.sin(theta) * sp.sin(phi),
r * sp.cos(theta)]
)
print("๊ตฌ๋ฉด ์ขํ ๊ณ๋ ํ
์:")
sp.pprint(g_sph)
print(f"det(g) = {sp.trigsimp(g_sph.det())}")
print(f"sqrt(|g|) = {sp.sqrt(sp.trigsimp(g_sph.det()))}")
# r^4 sin^2(theta) โ sqrt = r^2 sin(theta)
# 2์ฐจ์ ๊ตฌ๋ฉด (r = R ๊ณ ์ )
R = sp.Symbol('R', positive=True)
g_sphere = compute_metric(
[theta, phi],
[R * sp.sin(theta) * sp.cos(phi),
R * sp.sin(theta) * sp.sin(phi),
R * sp.cos(theta)]
)
print("\n2์ฐจ์ ๊ตฌ๋ฉด ๊ณ๋ ํ
์:")
sp.pprint(g_sphere)
# ์ญ๊ณ๋ ํ
์
g_sph_inv = g_sph.inv()
print("\n๊ตฌ๋ฉด ์ขํ ์ญ๊ณ๋ ํ
์ g^{ij}:")
sp.pprint(sp.simplify(g_sph_inv))
# ๊ฒ์ฆ: g^{ik} g_{kj} = ฮด^i_j
identity_check = sp.simplify(g_sph_inv * g_sph)
print(f"\ng^{{ik}} g_{{kj}} = I ๊ฒ์ฆ: {identity_check == sp.eye(3)}")
5. ํ ์ ๋์¶
5.1 ํ ์์ ๋ง์ ๊ณผ ์ค์นผ๋ผ ๊ณฑ¶
๊ฐ์ type์ ํ ์๋ผ๋ฆฌ๋ง ๋ํ ์ ์๋ค:
$$ (A + B)^{ij} = A^{ij} + B^{ij}, \quad (\alpha A)^{ij} = \alpha A^{ij} $$
5.2 ํ ์๊ณฑ (Tensor Product, Outer Product)¶
rank-$(p,q)$ ํ ์์ rank-$(r,s)$ ํ ์์ ํ ์๊ณฑ์ rank-$(p+r, q+s)$ ํ ์๋ฅผ ์์ฑํ๋ค:
$$ (A \otimes B)^{ij}{}_{kl} = A^i{}_k \, B^j{}_l $$
5.3 ์ถ์ฝ (Contraction)¶
์ ์ธ๋ฑ์ค์ ์๋ ์ธ๋ฑ์ค ํ๋์ฉ์ ๊ฐ์ ๋ฌธ์๋ก ๋๊ณ ํฉ์ฐํ๋ฉด rank๊ฐ 2๋งํผ ์ค์ด๋ ๋ค:
$$ T^i{}_{ij} = \sum_i T^i{}_{ij} \quad (\text{rank-}(2,1) \to \text{rank-}(1,0)) $$
๋ํ์ ์ธ ์: ๋๊ฐํฉ(trace) $T^i{}_i = \text{tr}(T)$
5.4 ๋์นญํ์ ๋ฐ๋์นญํ¶
๋์นญ ํ ์: $T_{ij} = T_{ji}$
$$ T_{(ij)} = \frac{1}{2}(T_{ij} + T_{ji}) \quad (\text{๋์นญํ}) $$
๋ฐ๋์นญ ํ ์: $T_{ij} = -T_{ji}$
$$ T_{[ij]} = \frac{1}{2}(T_{ij} - T_{ji}) \quad (\text{๋ฐ๋์นญํ}) $$
์์์ rank-2 ํ ์๋ ๋์นญ ๋ถ๋ถ๊ณผ ๋ฐ๋์นญ ๋ถ๋ถ์ผ๋ก ๋ถํด๋๋ค:
$$ T_{ij} = T_{(ij)} + T_{[ij]} $$
5.5 Python: ํ ์ ๋์ ์ฐ์ฐ¶
import numpy as np
# === ํ
์ ๋์ ์ฐ์ฐ ===
# rank-2 ํ
์ (3ร3)
T = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
], dtype=float)
# ๋์นญ ๋ถ๋ถ๊ณผ ๋ฐ๋์นญ ๋ถ๋ถ ๋ถํด
T_sym = 0.5 * (T + T.T) # T_{(ij)}
T_antisym = 0.5 * (T - T.T) # T_{[ij]}
print("์๋ ํ
์ T:")
print(T)
print("\n๋์นญ ๋ถ๋ถ T_{(ij)}:")
print(T_sym)
print("\n๋ฐ๋์นญ ๋ถ๋ถ T_{[ij]}:")
print(T_antisym)
print(f"\n๋ณต์ ๊ฒ์ฆ: T = T_sym + T_antisym? {np.allclose(T, T_sym + T_antisym)}")
# ํ
์๊ณฑ (outer product)
A = np.array([1, 2, 3], dtype=float)
B = np.array([4, 5, 6], dtype=float)
AB_outer = np.einsum('i,j->ij', A, B) # A^i B^j
print(f"\nํ
์๊ณฑ AโB:\n{AB_outer}")
# ์ถ์ฝ (contraction)
# rank-2 ํ
์์ trace: T^i_i
trace_T = np.einsum('ii->', T)
print(f"\n์ถ์ฝ (trace): T^i_i = {trace_T}")
# rank-4 ํ
์์์ ์ถ์ฝ
R = np.random.rand(3, 3, 3, 3)
# R^i_{jkl} โ ์ฒซ์งธ์ ์
์งธ ์ธ๋ฑ์ค ์ถ์ฝ โ R^i_{jil} = S_{jl}
S = np.einsum('ijil->jl', R)
print(f"\nrank-4 ํ
์ ์ถ์ฝ ๊ฒฐ๊ณผ (rank-2): shape = {S.shape}")
6. ๊ณต๋ณ ๋ฏธ๋ถ๊ณผ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ¶
6.1 ์ผ๋ฐ ๋ฏธ๋ถ์ ๋ฌธ์ ์ ¶
๊ณก์ ์ขํ๊ณ์์ ํ ์์ ์ผ๋ฐ ํธ๋ฏธ๋ถ $\partial_i A^j$๋ ํ ์๊ฐ ์๋๋ค. ์ด๋ ๊ธฐ์ ๋ฒกํฐ ์์ฒด๊ฐ ์ ๋ง๋ค ๋ณํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๋ฐ๋ฅธ ๋ฏธ๋ถ ์ฐ์ฐ์๊ฐ ํ์ํ๋ฉฐ, ์ด๊ฒ์ด ๊ณต๋ณ ๋ฏธ๋ถ(covariant derivative)์ด๋ค.
6.2 ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ์ ์ ์¶
ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ(Christoffel symbol of the second kind) $\Gamma^k{}_{ij}$๋ ๊ณ๋ ํ ์๋ก๋ถํฐ ๊ณ์ฐ๋๋ค:
$$ \Gamma^k{}_{ij} = \frac{1}{2}g^{kl}\left(\frac{\partial g_{jl}}{\partial x^i} + \frac{\partial g_{il}}{\partial x^j} - \frac{\partial g_{ij}}{\partial x^l}\right) $$
ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ๋ ํ ์๊ฐ ์๋๋ค (๋น๊ท ์ง ๋ณํ ๋ฒ์น์ ๋ฐ๋ฆ). ์ด๋ ์ขํ๊ณ์ "๋น๊ด์ฑ" ํจ๊ณผ๋ฅผ ๋ณด์ ํ๋ ์ญํ ์ ํ๋ค.
๋์นญ์ฑ: $\Gamma^k{}_{ij} = \Gamma^k{}_{ji}$ (๊ณ๋ ํ ์๊ฐ ๋นํ๋ฆผ์ด ์๋ ๊ฒฝ์ฐ)
6.3 ๊ณต๋ณ ๋ฏธ๋ถ¶
๋ฐ๋ณ ๋ฒกํฐ์ ๊ณต๋ณ ๋ฏธ๋ถ:
$$ \nabla_i A^j = \partial_i A^j + \Gamma^j{}_{ik} A^k $$
๊ณต๋ณ ๋ฒกํฐ์ ๊ณต๋ณ ๋ฏธ๋ถ:
$$ \nabla_i A_j = \partial_i A_j - \Gamma^k{}_{ij} A_k $$
์ผ๋ฐ ํ ์์ ๊ณต๋ณ ๋ฏธ๋ถ (์ ์ธ๋ฑ์ค๋ง๋ค $+\Gamma$, ์๋ ์ธ๋ฑ์ค๋ง๋ค $-\Gamma$):
$$ \nabla_i T^j{}_k = \partial_i T^j{}_k + \Gamma^j{}_{il} T^l{}_k - \Gamma^l{}_{ik} T^j{}_l $$
๊ณ๋ ํ ์์ ๊ณต๋ณ ๋ฏธ๋ถ: $\nabla_i g_{jk} = 0$ (๋ฉํธ๋ฆญ ์ ํฉ์ฑ ์กฐ๊ฑด)
6.4 ํํ ์ด๋๊ณผ ์ธก์ง์ ๋ฐฉ์ ์¶
๋ฒกํฐ $A^i$๋ฅผ ๊ณก์ $x^i(\tau)$๋ฅผ ๋ฐ๋ผ ํํ ์ด๋(parallel transport)ํ๋ ์กฐ๊ฑด:
$$ \frac{DA^i}{D\tau} = \frac{dA^i}{d\tau} + \Gamma^i{}_{jk}\frac{dx^j}{d\tau}A^k = 0 $$
์ธก์ง์ (geodesic)์ ์ ์ ๋ฒกํฐ ์์ฒด๋ฅผ ํํ ์ด๋ํ๋ ๊ณก์ ์ด๋ค:
$$ \frac{d^2x^k}{d\tau^2} + \Gamma^k{}_{ij}\frac{dx^i}{d\tau}\frac{dx^j}{d\tau} = 0 $$
ํํ ๊ณต๊ฐ์์ ์ธก์ง์ ์ ์ง์ ์ด๊ณ , ๊ตฌ๋ฉด ์์์๋ ๋์(great circle)์ด๋ค.
6.5 Python: ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ์ ์ธก์ง์ ๊ณ์ฐ¶
import sympy as sp
# === ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ ๊ณ์ฐ ํจ์ ===
def christoffel_symbols(g, coords):
"""
๊ณ๋ ํ
์๋ก๋ถํฐ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ ฮ^k_{ij}๋ฅผ ๊ณ์ฐํ๋ค.
Parameters:
g: ๊ณ๋ ํ
์ (SymPy Matrix)
coords: ์ขํ ๋ณ์ ๋ฆฌ์คํธ
Returns:
ฮ[k][i][j] ํํ์ 3์ฐจ์ ๋ฆฌ์คํธ
"""
n = len(coords)
g_inv = g.inv()
Gamma = [[[sp.Integer(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):
s = sp.Integer(0)
for l in range(n):
s += sp.Rational(1, 2) * g_inv[k, l] * (
sp.diff(g[j, l], coords[i]) +
sp.diff(g[i, l], coords[j]) -
sp.diff(g[i, j], coords[l])
)
Gamma[k][i][j] = sp.simplify(s)
return Gamma
# --- ๊ตฌ๋ฉด ์ขํ์์ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ ---
r, theta, phi = sp.symbols('r theta phi', positive=True)
g_sph = sp.diag(1, r**2, r**2 * sp.sin(theta)**2)
coords_sph = [r, theta, phi]
Gamma_sph = christoffel_symbols(g_sph, coords_sph)
print("๊ตฌ๋ฉด ์ขํ์ 0์ด ์๋ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ:")
names = ['r', 'ฮธ', 'ฯ']
for k in range(3):
for i in range(3):
for j in range(i, 3):
if Gamma_sph[k][i][j] != 0:
print(f" ฮ^{names[k]}_{{{names[i]}{names[j]}}} = {Gamma_sph[k][i][j]}")
# --- 2์ฐจ์ ๊ตฌ๋ฉด ์์ ์ธก์ง์ (์์น ๊ณ์ฐ) ---
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
def geodesic_sphere(tau, y, R_val=1.0):
"""
๋จ์ ๊ตฌ๋ฉด ์์ ์ธก์ง์ ๋ฐฉ์ ์.
y = [ฮธ, ฯ, dฮธ/dฯ, dฯ/dฯ]
"""
th, ph, dth, dph = y
# 2์ฐจ์ ๊ตฌ๋ฉด์ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ
# ฮ^ฮธ_{ฯฯ} = -sinฮธ cosฮธ
# ฮ^ฯ_{ฮธฯ} = ฮ^ฯ_{ฯฮธ} = cosฮธ/sinฮธ
d2th = np.sin(th) * np.cos(th) * dph**2
d2ph = -2.0 * np.cos(th) / np.sin(th) * dth * dph if np.sin(th) > 1e-10 else 0.0
return [dth, dph, d2th, d2ph]
# ์ด๊ธฐ ์กฐ๊ฑด: ์ ๋์์ ๋ถ๋ ๋ฐฉํฅ์ผ๋ก ์ถ๋ฐ
th0, ph0 = np.pi / 2, 0.0
dth0, dph0 = -0.3, 1.0 # ๋ถ์ชฝ์ผ๋ก ์ฝ๊ฐ + ๋์ชฝ์ผ๋ก
y0 = [th0, ph0, dth0, dph0]
sol = solve_ivp(geodesic_sphere, [0, 8], y0, max_step=0.01, dense_output=True)
# ๊ตฌ๋ฉด ์์ ์ธก์ง์ ํ์
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
# ๊ตฌ๋ฉด ๊ทธ๋ฆฌ๊ธฐ
u = np.linspace(0, np.pi, 40)
v = np.linspace(0, 2*np.pi, 40)
U, V = np.meshgrid(u, v)
X = np.sin(U) * np.cos(V)
Y = np.sin(U) * np.sin(V)
Z = np.cos(U)
ax.plot_surface(X, Y, Z, alpha=0.15, color='lightblue')
# ์ธก์ง์ (๋์)
th_geo = sol.y[0]
ph_geo = sol.y[1]
xg = np.sin(th_geo) * np.cos(ph_geo)
yg = np.sin(th_geo) * np.sin(ph_geo)
zg = np.cos(th_geo)
ax.plot(xg, yg, zg, 'r-', linewidth=2.5, label='์ธก์ง์ (๋์)')
ax.plot([xg[0]], [yg[0]], [zg[0]], 'go', markersize=8, label='์ถ๋ฐ์ ')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('๊ตฌ๋ฉด ์์ ์ธก์ง์ ')
ax.legend()
plt.tight_layout()
plt.savefig('geodesic_sphere.png', dpi=150, bbox_inches='tight')
plt.show()
7. ๊ณก๋ฅ ํ ์ (Curvature)¶
7.1 ๋ฆฌ๋ง ๊ณก๋ฅ ํ ์¶
๋ฆฌ๋ง ๊ณก๋ฅ ํ ์(Riemann curvature tensor) $R^l{}_{kij}$๋ ๊ณต๋ณ ๋ฏธ๋ถ์ ๋น๊ตํ์ฑ์ผ๋ก ์ ์๋๋ค:
$$ (\nabla_i \nabla_j - \nabla_j \nabla_i)A^l = R^l{}_{kij}A^k $$
ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ ๋ช ์์ ํํ:
$$ R^l{}_{kij} = \partial_i \Gamma^l{}_{jk} - \partial_j \Gamma^l{}_{ik} + \Gamma^l{}_{im}\Gamma^m{}_{jk} - \Gamma^l{}_{jm}\Gamma^m{}_{ik} $$
7.2 ๊ธฐํํ์ ์๋ฏธ¶
๋ฆฌ๋ง ๊ณก๋ฅ ํ ์๋ ๋ซํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฒกํฐ๋ฅผ ํํ ์ด๋ํ์ ๋ ์๋ ๋ฒกํฐ์ ๋ฌ๋ผ์ง๋ ์ ๋๋ฅผ ์ธก์ ํ๋ค.
- ํํ ๊ณต๊ฐ: $R^l{}_{kij} = 0$ (ํํ ์ด๋์ด ๊ฒฝ๋ก์ ๋ฌด๊ด)
- ๊ณก๋ฅ ์ด ์๋ ๊ณต๊ฐ: $R^l{}_{kij} \ne 0$ (๊ฒฝ๋ก ์์กด์ )
7.3 ๋ฆฌ์น ํ ์, ์ค์นผ๋ผ ๊ณก๋ฅ , ์์ธ์ํ์ธ ํ ์¶
๋ฆฌ์น ํ ์(Ricci tensor): ๋ฆฌ๋ง ํ ์์ ์ถ์ฝ
$$ R_{ij} = R^k{}_{ikj} $$
์ค์นผ๋ผ ๊ณก๋ฅ (Ricci scalar): ๋ฆฌ์น ํ ์์ ์ถ์ฝ
$$ R = g^{ij}R_{ij} $$
2์ฐจ์ ๊ณก๋ฉด์ ๊ฐ์ฐ์ค ๊ณก๋ฅ (Gaussian curvature):
$$ K = \frac{R}{2} \quad (\text{2์ฐจ์์์}) $$
- ๊ตฌ๋ฉด ($r = a$): $K = 1/a^2 > 0$
- ํ๋ฉด: $K = 0$
- ์๊ณก๋ฉด: $K < 0$
์์ธ์ํ์ธ ํ ์(Einstein tensor):
$$ G_{ij} = R_{ij} - \frac{1}{2}g_{ij}R $$
$G_{ij}$๋ $\nabla_i G^{ij} = 0$ (๋น์ํค ํญ๋ฑ์์ ์ํด)์ ๋ง์กฑํ๋ฉฐ, ์ด๋ ์๋์ง-์ด๋๋ ๋ณด์กด๊ณผ ์ง๊ฒฐ๋๋ค.
7.4 Python: ๊ณก๋ฅ ๊ณ์ฐ¶
import sympy as sp
# === ๋ฆฌ๋ง ๊ณก๋ฅ ํ
์ ๊ณ์ฐ ํจ์ ===
def riemann_tensor(Gamma, coords):
"""
ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ๋ก๋ถํฐ ๋ฆฌ๋ง ๊ณก๋ฅ ํ
์ R^l_{kij}๋ฅผ ๊ณ์ฐํ๋ค.
"""
n = len(coords)
R = [[[[sp.Integer(0) for _ in range(n)]
for _ in range(n)]
for _ in range(n)]
for _ in range(n)]
for l in range(n):
for k in range(n):
for i in range(n):
for j in range(n):
# โ_i ฮ^l_{jk} - โ_j ฮ^l_{ik}
term = sp.diff(Gamma[l][j][k], coords[i]) - \
sp.diff(Gamma[l][i][k], coords[j])
# + ฮ^l_{im} ฮ^m_{jk} - ฮ^l_{jm} ฮ^m_{ik}
for m in range(n):
term += Gamma[l][i][m] * Gamma[m][j][k] - \
Gamma[l][j][m] * Gamma[m][i][k]
R[l][k][i][j] = sp.simplify(term)
return R
def ricci_tensor(R_riem, n):
"""๋ฆฌ์น ํ
์ R_{ij} = R^k_{ikj}"""
Ric = sp.zeros(n, n)
for i in range(n):
for j in range(n):
s = sp.Integer(0)
for k in range(n):
s += R_riem[k][i][k][j]
Ric[i, j] = sp.simplify(s)
return Ric
def scalar_curvature(Ric, g_inv, n):
"""์ค์นผ๋ผ ๊ณก๋ฅ R = g^{ij} R_{ij}"""
R_scalar = sp.Integer(0)
for i in range(n):
for j in range(n):
R_scalar += g_inv[i, j] * Ric[i, j]
return sp.simplify(R_scalar)
# --- 2์ฐจ์ ๊ตฌ๋ฉด (r = a)์ ๊ฐ์ฐ์ค ๊ณก๋ฅ ๊ณ์ฐ ---
theta, phi = sp.symbols('theta phi', positive=True)
a = sp.Symbol('a', positive=True)
g_sphere = sp.diag(a**2, a**2 * sp.sin(theta)**2)
coords_sphere = [theta, phi]
# ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ
Gamma_sp = christoffel_symbols(g_sphere, coords_sphere)
print("2์ฐจ์ ๊ตฌ๋ฉด์ 0์ด ์๋ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ:")
snames = ['ฮธ', 'ฯ']
for k in range(2):
for i in range(2):
for j in range(i, 2):
if Gamma_sp[k][i][j] != 0:
print(f" ฮ^{snames[k]}_{{{snames[i]}{snames[j]}}} = {Gamma_sp[k][i][j]}")
# ๋ฆฌ๋ง ํ
์
R_riem_sp = riemann_tensor(Gamma_sp, coords_sphere)
# ๋ฆฌ์น ํ
์
Ric_sp = ricci_tensor(R_riem_sp, 2)
print(f"\n๋ฆฌ์น ํ
์ R_{{ij}}:")
sp.pprint(Ric_sp)
# ์ค์นผ๋ผ ๊ณก๋ฅ
g_sp_inv = g_sphere.inv()
R_sc = scalar_curvature(Ric_sp, g_sp_inv, 2)
print(f"\n์ค์นผ๋ผ ๊ณก๋ฅ R = {R_sc}")
# ๊ฐ์ฐ์ค ๊ณก๋ฅ (2์ฐจ์์์ K = R/2)
K = sp.simplify(R_sc / 2)
print(f"๊ฐ์ฐ์ค ๊ณก๋ฅ K = R/2 = {K}")
# ์ถ๋ ฅ: K = 1/a^2 (์์ ์ผ์ ํ ๊ณก๋ฅ โ ๊ตฌ๋ฉด)
8. ๋ฌผ๋ฆฌ์ ์์ฉ¶
8.1 ์ฐ์์ฒด ์ญํ: ์๋ ฅ ํ ์¶
์ฝ์ ์๋ ฅ ํ ์(Cauchy stress tensor) $\sigma_{ij}$๋ ์ฐ์์ฒด ๋ด๋ถ์ ์์์ ๋ฉด์ ์์ฉํ๋ ์๋ ฅ์ ๊ธฐ์ ํ๋ค. ๋ฉด์ ๋ฒ์ ๋ฐฉํฅ์ด $\hat{n}$์ผ ๋, ๊ทธ ๋ฉด์ ์์ฉํ๋ ๋จ์ ๋ฉด์ ๋น ํ(๊ฒฌ์ธ๋ ฅ, traction)์:
$$ t_i = \sigma_{ij} n_j $$
$\sigma_{ij}$๋ ๋์นญ ํ ์($\sigma_{ij} = \sigma_{ji}$, ๊ฐ์ด๋๋ ๋ณด์กด์ ์ํด)์ด๋ฉฐ, ๋๊ฐ ์ฑ๋ถ์ ๋ฒ์ ์๋ ฅ(normal stress), ๋น๋๊ฐ ์ฑ๋ถ์ ์ ๋จ ์๋ ฅ(shear stress)์ด๋ค.
import numpy as np
import matplotlib.pyplot as plt
# === 2D ์๋ ฅ ํ
์์ ๋ชจ์ด ์ (Mohr's Circle) ===
# ์๋ ฅ ํ
์ ฯ = [[ฯ_xx, ฯ_xy], [ฯ_xy, ฯ_yy]]
sigma_xx, sigma_yy, tau_xy = 50.0, 20.0, 15.0
sigma = np.array([[sigma_xx, tau_xy],
[tau_xy, sigma_yy]])
# ์ฃผ์๋ ฅ (๊ณ ์ ๊ฐ)
eigenvalues, eigenvectors = np.linalg.eigh(sigma)
sigma_1 = eigenvalues[1] # ์ต๋ ์ฃผ์๋ ฅ
sigma_2 = eigenvalues[0] # ์ต์ ์ฃผ์๋ ฅ
print(f"์ฃผ์๋ ฅ: ฯโ = {sigma_1:.2f} MPa, ฯโ = {sigma_2:.2f} MPa")
print(f"์ฃผ์๋ ฅ ๋ฐฉํฅ:\n{eigenvectors}")
# ๋ชจ์ด ์ ๊ทธ๋ฆฌ๊ธฐ
center = (sigma_1 + sigma_2) / 2
radius = (sigma_1 - sigma_2) / 2
fig, ax = plt.subplots(figsize=(8, 6))
circle = plt.Circle((center, 0), radius, fill=False, color='blue', linewidth=2)
ax.add_patch(circle)
# ์๋ ์๋ ฅ ์ํ ํ์
ax.plot(sigma_xx, tau_xy, 'ro', markersize=8, label=f'(ฯ_xx, ฯ_xy) = ({sigma_xx}, {tau_xy})')
ax.plot(sigma_yy, -tau_xy, 'go', markersize=8, label=f'(ฯ_yy, -ฯ_xy) = ({sigma_yy}, {-tau_xy})')
ax.plot([sigma_1, sigma_2], [0, 0], 'k^', markersize=10, label=f'์ฃผ์๋ ฅ ฯโ={sigma_1:.1f}, ฯโ={sigma_2:.1f}')
ax.axhline(y=0, color='gray', linestyle='-', alpha=0.3)
ax.axvline(x=0, color='gray', linestyle='-', alpha=0.3)
ax.set_xlabel('๋ฒ์ ์๋ ฅ ฯ (MPa)')
ax.set_ylabel('์ ๋จ ์๋ ฅ ฯ (MPa)')
ax.set_title('๋ชจ์ด ์ (Mohr\'s Circle)')
ax.set_aspect('equal')
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('mohr_circle.png', dpi=150, bbox_inches='tight')
plt.show()
8.2 ์ ์๊ธฐํ: ์ ์๊ธฐ์ฅ ํ ์ $F_{\mu\nu}$¶
ํน์ ์๋๋ก ์ ์ ์๊ธฐํ์์, ์ ๊ธฐ์ฅ $\mathbf{E}$์ ์๊ธฐ์ฅ $\mathbf{B}$๋ ํ๋์ ๋ฐ๋์นญ rank-2 ํ ์ $F_{\mu\nu}$๋ก ํตํฉ๋๋ค:
$$ F_{\mu\nu} = \begin{pmatrix} 0 & -E_x/c & -E_y/c & -E_z/c \\ E_x/c & 0 & -B_z & B_y \\ E_y/c & B_z & 0 & -B_x \\ E_z/c & -B_y & B_x & 0 \end{pmatrix} $$
๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ํ ์ ํํ:
$$ \partial_\mu F^{\mu\nu} = \mu_0 J^\nu \quad (\text{๋น๊ท ์ง ๋ฐฉ์ ์: ๊ฐ์ฐ์ค ๋ฒ์น + ์ํ๋ฅด-๋งฅ์ค์ฐ ๋ฒ์น}) $$
$$ \partial_{[\lambda} F_{\mu\nu]} = 0 \quad (\text{๊ท ์ง ๋ฐฉ์ ์: ํจ๋ฌ๋ฐ์ด ๋ฒ์น + ์๊ธฐ ๊ฐ์ฐ์ค ๋ฒ์น}) $$
์ด ํํ์ ๋ก๋ ์ธ ๋ณํ์์์ ๊ณต๋ณ์ฑ์ ์๋ช ํ๊ฒ ๋ง๋ ๋ค.
import numpy as np
# === ์ ์๊ธฐ์ฅ ํ
์ ๊ตฌ์ฑ ๋ฐ ๋ก๋ ์ธ ๋ณํ ===
c = 1.0 # ์์ฐ ๋จ์ (c = 1)
def em_field_tensor(E, B):
"""์ ๊ธฐ์ฅ E์ ์๊ธฐ์ฅ B๋ก๋ถํฐ ์ ์๊ธฐ์ฅ ํ
์ F_ฮผฮฝ๋ฅผ ๊ตฌ์ฑํ๋ค."""
Ex, Ey, Ez = E
Bx, By, Bz = B
F = np.array([
[0, -Ex/c, -Ey/c, -Ez/c],
[Ex/c, 0, -Bz, By ],
[Ey/c, Bz, 0, -Bx ],
[Ez/c, -By, Bx, 0 ]
])
return F
# x ๋ฐฉํฅ ์ ๊ธฐ์ฅ๋ง ์๋ ๊ฒฝ์ฐ
E = np.array([1.0, 0.0, 0.0])
B = np.array([0.0, 0.0, 0.0])
F = em_field_tensor(E, B)
print("์ ์๊ธฐ์ฅ ํ
์ F_ฮผฮฝ (์์ ์ ๊ธฐ์ฅ):")
print(F)
# ๋ก๋ ์ธ ๋ณํ (x ๋ฐฉํฅ, ์๋ v = 0.6c)
v = 0.6
gamma = 1.0 / np.sqrt(1 - v**2)
beta = v
# ๋ก๋ ์ธ ๋ณํ ํ๋ ฌ ฮ^ฮผ'_ฮฝ
Lambda = np.array([
[gamma, -gamma*beta, 0, 0],
[-gamma*beta, gamma, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
])
# ํ
์ ๋ณํ: F'^{ฮผฮฝ} = ฮ^ฮผ_ฮฑ ฮ^ฮฝ_ฮฒ F^{ฮฑฮฒ}
# ๋จผ์ F^{ฮผฮฝ} = ฮท^{ฮผฮฑ} ฮท^{ฮฝฮฒ} F_{ฮฑฮฒ} (๋ฏผ์ฝํ์คํค ๊ณ๋์ผ๋ก ์ธ๋ฑ์ค ์ฌ๋ฆผ)
eta = np.diag([-1, 1, 1, 1]) # ๋ฏผ์ฝํ์คํค ๊ณ๋ (-,+,+,+)
F_up = eta @ F @ eta # F^{ฮผฮฝ}
F_prime_up = Lambda @ F_up @ Lambda.T
F_prime = eta @ F_prime_up @ eta # F'_{ฮผฮฝ}๋ก ๋ด๋ฆผ
print(f"\n๋ก๋ ์ธ ๋ณํ ํ (v = {v}c):")
print(f"F'_ฮผฮฝ:")
print(np.round(F_prime, 4))
# ๋ณํ๋ ์ ๊ธฐ์ฅ๊ณผ ์๊ธฐ์ฅ ์ถ์ถ
E_prime = np.array([F_prime[0, 1], F_prime[0, 2], F_prime[0, 3]]) * (-c)
B_prime = np.array([F_prime[2, 3], F_prime[3, 1], F_prime[1, 2]])
print(f"\n๋ณํ๋ ์ ๊ธฐ์ฅ: E' = {np.round(E_prime, 4)}")
print(f"๋ณํ๋ ์๊ธฐ์ฅ: B' = {np.round(B_prime, 4)}")
print("์์ ์ ๊ธฐ์ฅ์ด ๋ก๋ ์ธ ๋ณํ์ ์ํด ์๊ธฐ์ฅ ์ฑ๋ถ์ ํ๋ํจ!")
# ๋ก๋ ์ธ ๋ถ๋ณ๋ ๊ฒ์ฆ
inv1 = -0.5 * np.einsum('ij,ij->', F, F) # F_{ฮผฮฝ}F^{ฮผฮฝ}/2
inv1_prime = -0.5 * np.einsum('ij,ij->', F_prime, F_prime)
print(f"\n๋ก๋ ์ธ ๋ถ๋ณ๋ F_ฮผฮฝ F^ฮผฮฝ: ์๋ = {inv1:.4f}, ๋ณํ ํ = {inv1_prime:.4f}")
8.3 ์ผ๋ฐ ์๋๋ก : ์์ธ์ํ์ธ ์ฅ๋ฐฉ์ ์¶
์ผ๋ฐ ์๋๋ก ์ ํต์ฌ์ธ ์์ธ์ํ์ธ ์ฅ๋ฐฉ์ ์(Einstein field equations)์ ์๊ณต๊ฐ์ ๊ธฐํํ(๊ณก๋ฅ )๊ณผ ๋ฌผ์ง-์๋์ง ๋ถํฌ๋ฅผ ์ฐ๊ฒฐํ๋ค:
$$ G_{\mu\nu} + \Lambda g_{\mu\nu} = \frac{8\pi G}{c^4}T_{\mu\nu} $$
์ฌ๊ธฐ์: - $G_{\mu\nu} = R_{\mu\nu} - \frac{1}{2}g_{\mu\nu}R$: ์์ธ์ํ์ธ ํ ์ (๊ธฐํํ) - $\Lambda$: ์ฐ์ฃผ์์ - $T_{\mu\nu}$: ์๋์ง-์ด๋๋ ํ ์ (๋ฌผ์ง)
์๋ฐ๋ฅด์ธ ์คํธ ๊ณ๋(Schwarzschild metric): ๊ตฌ๋์นญ ์ง๊ณต ํด
$$ ds^2 = -\left(1 - \frac{r_s}{r}\right)c^2 dt^2 + \left(1 - \frac{r_s}{r}\right)^{-1}dr^2 + r^2 d\theta^2 + r^2\sin^2\theta \, d\phi^2 $$
์ฌ๊ธฐ์ $r_s = 2GM/c^2$๋ ์๋ฐ๋ฅด์ธ ์คํธ ๋ฐ์ง๋ฆ์ด๋ค.
import sympy as sp
# === ์๋ฐ๋ฅด์ธ ์คํธ ๊ณ๋์ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ ๊ณ์ฐ ===
t, r, theta, phi = sp.symbols('t r theta phi')
r_s, c_sym = sp.symbols('r_s c', positive=True)
# ์๋ฐ๋ฅด์ธ ์คํธ ๊ณ๋ ํ
์ (๋๊ฐ)
f = 1 - r_s / r # f(r) = 1 - r_s/r
g_schw = sp.diag(
-f * c_sym**2, # g_{tt}
1 / f, # g_{rr}
r**2, # g_{ฮธฮธ}
r**2 * sp.sin(theta)**2 # g_{ฯฯ}
)
coords_schw = [t, r, theta, phi]
print("์๋ฐ๋ฅด์ธ ์คํธ ๊ณ๋ ํ
์:")
sp.pprint(g_schw)
# ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ ๊ณ์ฐ (์๊ฐ ์์ ๊ฐ๋ฅ)
Gamma_schw = christoffel_symbols(g_schw, coords_schw)
print("\n์๋ฐ๋ฅด์ธ ์คํธ ๊ณ๋์ 0์ด ์๋ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ:")
coord_names = ['t', 'r', 'ฮธ', 'ฯ']
for k in range(4):
for i in range(4):
for j in range(i, 4):
val = Gamma_schw[k][i][j]
if val != 0:
print(f" ฮ^{coord_names[k]}_{{{coord_names[i]}{coord_names[j]}}} = {val}")
์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: ํ ์ ๋ณํ¶
2์ฐจ์์์ ์ขํ ๋ณํ $x' = x\cosh\alpha + y\sinh\alpha$, $y' = x\sinh\alpha + y\cosh\alpha$ (๋ก๋ ์ธ ๋ถ์คํธ)๊ฐ ์ฃผ์ด์ก์ ๋:
(a) ๋ณํ ํ๋ ฌ $\frac{\partial x'^i}{\partial x^j}$๋ฅผ ๊ตฌํ๋ผ.
(b) ๋ฒกํฐ $A^i = (3, 4)$๋ฅผ ์ ์ขํ๊ณ๋ก ๋ณํํ๋ผ ($\alpha = 0.5$).
(c) ํ ์ $T^{ij} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$๋ฅผ ์ ์ขํ๊ณ๋ก ๋ณํํ๋ผ.
๋ฌธ์ 2: ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ¶
๋ค์ ํ ์ ํํ์ ํฉ์ฐ ๊ธฐํธ ์์ด ์์ธ์ํ์ธ ํฉ์ฐ ๊ท์ฝ์ผ๋ก ์ฐ๊ณ , 3์ฐจ์์์ ์ ๊ฐํ๋ผ:
(a) ๋ฒกํฐ์ ๋ด์ $\sum_i A^i B_i$
(b) ํ๋ ฌ ๊ณฑ $\sum_k M^i{}_k N^k{}_j$
(c) $\varepsilon_{ijk}\varepsilon_{imn}$์ $\delta$-ํญ๋ฑ์์ผ๋ก ํ์ํ๋ผ.
๋ฌธ์ 3: ๊ณ๋ ํ ์์ ์ธ๋ฑ์ค ์ฌ๋ฆผ/๋ด๋ฆผ¶
2์ฐจ์ ๊ทน์ขํ $(r, \theta)$์์ $ds^2 = dr^2 + r^2 d\theta^2$์ด๋ค.
(a) ๊ณ๋ ํ ์ $g_{ij}$์ ์ญ๊ณ๋ ํ ์ $g^{ij}$๋ฅผ ๊ตฌํ๋ผ.
(b) ๋ฐ๋ณ ๋ฒกํฐ $A^i = (A^r, A^\theta) = (2, 1/r)$์ ๊ณต๋ณ ์ฑ๋ถ $A_i = g_{ij}A^j$๋ฅผ ๊ตฌํ๋ผ.
(c) $A^i A_i$๋ฅผ ๊ณ์ฐํ์ฌ ๋ฒกํฐ ํฌ๊ธฐ์ ์ ๊ณฑ์ด ์ขํ์ ๋ฌด๊ดํ ๋ถ๋ณ๋์์ ํ์ธํ๋ผ.
๋ฌธ์ 4: ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ¶
2์ฐจ์ ๊ทน์ขํ์ ๊ณ๋ ํ ์ $g = \text{diag}(1, r^2)$์ ๋ํด:
(a) ๋ชจ๋ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ $\Gamma^k{}_{ij}$๋ฅผ ๊ณ์ฐํ๋ผ.
(b) ๋ฒกํฐ์ฅ $A^r = \cos\theta$, $A^\theta = -\sin\theta / r$์ ๊ณต๋ณ ๋ฐ์ฐ $\nabla_i A^i$๋ฅผ ๊ณ์ฐํ๋ผ.
(c) ์ด ๊ฒฐ๊ณผ๊ฐ ์ง๊ต ์ขํ์์์ ๋ฐ์ฐ๊ณผ ์ผ์นํจ์ ํ์ธํ๋ผ.
๋ฌธ์ 5: ์ธก์ง์ ¶
2์ฐจ์ ์๊ณก๋ฉด(pseudosphere, $K = -1$)์ ๊ณ๋์ด $ds^2 = du^2 + e^{-2u}dv^2$๋ก ์ฃผ์ด์ง๋ค.
(a) ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ๋ฅผ ๊ตฌํ๋ผ.
(b) ๊ฐ์ฐ์ค ๊ณก๋ฅ $K$๋ฅผ ๊ณ์ฐํ์ฌ $K = -1$์์ ํ์ธํ๋ผ.
(c) ์ธก์ง์ ๋ฐฉ์ ์์ ์ฐ๊ณ , $u = \text{const}$ ๊ณก์ ์ด ์ธก์ง์ ์ธ์ง ํ๋ณํ๋ผ.
๋ฌธ์ 6: ๊ณก๋ฅ ํ ์¶
ํ ๋ฌ์ค(torus) ํ๋ฉด์ ๊ณ๋์ด ๋งค๊ฐ๋ณ์ $(\theta, \phi)$๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค:
$$ ds^2 = a^2 d\theta^2 + (R + a\cos\theta)^2 d\phi^2 $$
์ฌ๊ธฐ์ $R$์ ํ ๋ฌ์ค์ ํฐ ๋ฐ์ง๋ฆ, $a$๋ ์์ ๋ฐ์ง๋ฆ์ด๋ค.
(a) ๊ฐ์ฐ์ค ๊ณก๋ฅ $K(\theta)$๋ฅผ ๊ตฌํ๋ผ.
(b) $K > 0$, $K = 0$, $K < 0$์ธ ์์ญ์ $\theta$ ๊ฐ์ผ๋ก ๊ตฌ๋ถํ๋ผ.
(c) ๊ฐ์ฐ์ค-๋ณด๋ค ์ ๋ฆฌ $\int K \, dA = 2\pi\chi$์์ $\chi = 0$ (ํ ๋ฌ์ค์ ์ค์ผ๋ฌ ์)์์ ํ์ธํ๋ผ.
๋ฌธ์ 7: ์ ์๊ธฐ์ฅ ํ ์¶
์ ๊ธฐ์ฅ $\mathbf{E} = E_0 \hat{x}$, ์๊ธฐ์ฅ $\mathbf{B} = B_0 \hat{z}$๊ฐ ์ฃผ์ด์ก์ ๋:
(a) ์ ์๊ธฐ์ฅ ํ ์ $F_{\mu\nu}$๋ฅผ ๊ตฌ์ฑํ๋ผ.
(b) ๋ก๋ ์ธ ๋ถ๋ณ๋ $F_{\mu\nu}F^{\mu\nu}$์ $\frac{1}{2}\varepsilon^{\mu\nu\rho\sigma}F_{\mu\nu}F_{\rho\sigma}$๋ฅผ ๊ณ์ฐํ๋ผ.
(c) $x$-๋ฐฉํฅ ๋ก๋ ์ธ ๋ถ์คํธ($v = 0.8c$)๋ก ๋ณํํ ํ์ $\mathbf{E}'$, $\mathbf{B}'$๋ฅผ ๊ตฌํ๋ผ.
๋ฌธ์ 8: ์๋ ฅ ํ ์์ ์ฃผ์ถ¶
3์ฐจ์ ์๋ ฅ ํ ์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค:
$$ \sigma_{ij} = \begin{pmatrix} 100 & 30 & 0 \\ 30 & 50 & 20 \\ 0 & 20 & 80 \end{pmatrix} \text{ (MPa)} $$
(a) ์ฃผ์๋ ฅ(principal stresses)๊ณผ ์ฃผ์๋ ฅ ๋ฐฉํฅ์ ๊ตฌํ๋ผ (๊ณ ์ ๊ฐ/๊ณ ์ ๋ฒกํฐ).
(b) ์ต๋ ์ ๋จ ์๋ ฅ์ ๊ตฌํ๋ผ.
(c) ํฐ ๋ฏธ์ ์ค ์๋ ฅ(von Mises stress)์ ๊ณ์ฐํ๋ผ: $\sigma_v = \sqrt{\frac{1}{2}[(\sigma_1-\sigma_2)^2 + (\sigma_2-\sigma_3)^2 + (\sigma_3-\sigma_1)^2]}$.
์ฌํ ํ์ต¶
๋ฏธ๋ถ ํ์ (Differential Forms)¶
ํ ์ ํด์์ ํ๋์ ์ธ์ด์ธ ๋ฏธ๋ถ ํ์(differential forms)์ ๋ฐ๋์นญ ๊ณต๋ณ ํ ์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋ค๋ฃฌ๋ค. ์ธ๋์(exterior algebra)์ ์ธ๋ฏธ๋ถ(exterior derivative) $d$๋ฅผ ์ฌ์ฉํ์ฌ:
- 0-ํ์ = ์ค์นผ๋ผ ํจ์
- 1-ํ์ = $\omega = A_i dx^i$
- 2-ํ์ = $F = \frac{1}{2}F_{ij}dx^i \wedge dx^j$
๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ๋ฏธ๋ถ ํ์์ผ๋ก ๊ทน๋๋ก ๊ฐ๊ฒฐํด์ง๋ค: $dF = 0$, $d{*F} = J$
๋ฆฌ ๋ฏธ๋ถ (Lie Derivative)¶
๋ฆฌ ๋ฏธ๋ถ(Lie derivative) $\mathcal{L}_X T$๋ ๋ฒกํฐ์ฅ $X$๋ฅผ ๋ฐ๋ผ ํ ์ $T$์ ๋ณํ๋ฅผ ์ขํ์ ๋ฌด๊ดํ๊ฒ ์ ์ํ๋ค. ์ด๋ ๋์นญ๊ณผ ๋ณด์กด ๋ฒ์น(ํฌ๋ง ๋ฒกํฐ์ฅ)์ ๋ค๋ฃจ๋ ํต์ฌ ๋๊ตฌ์ด๋ค.
์ฌ๋ค๋ฐ๊ณผ ๊ฒ์ด์ง ์ด๋ก (Fiber Bundles and Gauge Theory)¶
์-๋ฐ์ค ์ด๋ก (Yang-Mills theory)์์ ๊ฒ์ด์ง ๊ฒฐํฉ(gauge connection)์ ํฌ๋ฆฌ์คํ ํ ๊ธฐํธ์ ์ผ๋ฐํ์ด๋ฉฐ, ๊ณก๋ฅ ์ ์ฅ ๊ฐ๋ ํ ์(field strength tensor)์ ๋์ํ๋ค. ์ด๋ ํ์ค ๋ชจํ์ ์ํ์ ๊ธฐ์ด๋ฅผ ์ด๋ฃฌ๋ค.
๊ณ์ฐ ๋๊ตฌ¶
| ๋๊ตฌ | ์ธ์ด | ์ค๋ช |
|---|---|---|
sympy.diffgeom |
Python | ๋ฏธ๋ถ ๊ธฐํ ๊ณ์ฐ |
einsteinpy |
Python | ์ผ๋ฐ ์๋๋ก ํ ์ ๊ณ์ฐ |
xAct / xTensor |
Mathematica | ์ ๋ฌธ์ ํ ์ ๋์ ์์คํ |
SageManifolds |
SageMath | ๋ฏธ๋ถ ๋ค์์ฒด ๊ณ์ฐ |
cadabra2 |
Python/C++ | ์ฅ๋ก (field theory) ํ ์ ๊ณ์ฐ |
์ถ์ฒ ์ฐธ๊ณ ์๋ฃ¶
- Boas, M. L. (2005). Mathematical Methods in the Physical Sciences, 3rd ed., Chapter 10. Wiley.
- Carroll, S. M. (2019). Spacetime and Geometry, 2nd ed. Cambridge University Press.
- ์ผ๋ฐ ์๋๋ก ์์์ ํ ์ ํด์์ ์ํ ์ต๊ณ ์ ๊ต์ฌ
- Schutz, B. (2009). A First Course in General Relativity, 2nd ed. Cambridge University Press.
- Arfken, G. B., Weber, H. J., & Harris, F. E. (2012). Mathematical Methods for Physicists, 7th ed., Chapter 3. Academic Press.
- Nakahara, M. (2003). Geometry, Topology and Physics, 2nd ed. CRC Press.
- ๋ฏธ๋ถ ํ์, ์ฌ๋ค๋ฐ, ๊ฒ์ด์ง ์ด๋ก ์ ์ํ์ ๊ธฐ์ด
์ด์ : 17. ๋ณ๋ถ๋ฒ ๋ค์: ๊ณผ์ ์๋ฃ! 00. ๊ฐ์๋ก ๋์๊ฐ๊ธฐ