packages feed

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))))