egison-4.1.0: sample/math/geometry/hodge-laplacian-polar.egi
-- Parameters and metrics
def N := 2
def x := [|r, θ|]
def g_i_j := [| [| 1, 0 |], [| 0, r^2 |] |]_i_j
def g~i~j := [| [| 1, 0 |], [| 0, 1 / r^2 |] |]~i~j
-- Hodge Laplacian
def d %A := !(flip ∂/∂) x A
def hodge %A :=
let k := dfOrder A in
withSymbols [i, j]
(sqrt (abs (M.det g_#_#))) * (foldl (.) ((ε' N k)_(i_1)..._(i_N) . A..._(j_1)..._(j_k))
(map 1#g~(i_%1)~(j_%1) [1..k]))
def δ %A :=
let k := dfOrder A in
-1^(N * (k + 1) + 1) * (hodge (d (hodge A)))
def Δ %A :=
match (dfOrder A) as integer with
| #0 -> δ (d A)
| #N -> d (δ A)
| _ -> d (δ A) + δ (d A)
def f := function (r, θ)
assertEqual "exterior derivative" (d f) [| ∂/∂ f r, ∂/∂ f θ |]
assertEqual "hodge operator" (hodge (d f)) [| (-1 * ∂/∂ f θ) / r, r * (∂/∂ f r) |]
assertEqual "Laplacian" (Δ f) ((-1 / r^2) * ((∂/∂ (∂/∂ f θ) θ) + r * (∂/∂ f r) + (r^2 * (∂/∂ (∂/∂ f r) r))))