egison-5.0.0: sample/math/geometry/polar-laplacian-3d-3.egi
-- Spherical Laplacian in 3D using function symbol
declare symbol r, θ, φ : MathExpr
def f := function (r, θ, φ)
def x := [| r, θ, φ |]
def X := [| r * sin θ * cos φ, r * sin θ * sin φ, r * cos θ |]
-- Local basis
def e_i_j : Matrix MathExpr := ∂/∂ X_j x~i
-- Metric tensor
def g_i_j := generateTensor (\[a, b] -> V.* e_a e_b) [3, 3]
def g~i~j := M.inverse g_#_#
assertEqual "Metric tensor"
g_#_#
[| [| 1, 0, 0 |], [| 0, r^2, 0 |], [| 0, 0, r^2 * (sin θ)^2 |] |]_#_#
-- Christoffel symbols
def Γ_i_j_k := withSymbols [j, k, l]
(1 / 2) * (∂/∂ g_j_l x~k + ∂/∂ g_j_k x~l - ∂/∂ g_k_l x~j)
def Γ~i_j_k := withSymbols [i, j, k, l]
g~i~j . Γ_j_k_l
-- Laplacian via Christoffel symbols
def Laplacian := withSymbols [i, j, k]
g~i~j . ∂/∂ (∂/∂ f x~j) x~i - g~i~j . Γ~k_i_j . ∂/∂ f x~k
assertEqual "Laplacian in spherical coordinates"
Laplacian
(∂/∂ (∂/∂ f r) r + 2 * ∂/∂ f r / r + ∂/∂ (∂/∂ f θ) θ / r^2 + cos θ * ∂/∂ f θ / (r^2 * sin θ) + ∂/∂ (∂/∂ f φ) φ / (r^2 * (sin θ)^2))