packages feed

egison-5.0.0: sample/math/geometry/hodge-E3.egi

--
-- Hodge star operator in E³ (Euclidean 3-space)
--

def N := 3

def params := [|x, y, z|]

def g := [|[|1, 0, 0|], [|0, 1, 0|], [|0, 0, 1|]|]

def hodge A :=
  let k := dfOrder A
   in withSymbols [i, j]
        sqrt (abs (M.det g_#_#)) *
        foldl
          (.)
          ((subrefs A (map 1#j_$1 (between 1 k))) . (subrefs (ε' N k) (map 1#i_$1 (between 1 N))))
          (map (\n -> g~(i_n)~(j_n)) (between 1 k))

def dx := [|1, 0, 0|]
def dy := [|0, 1, 0|]
def dz := [|0, 0, 1|]

assertEqual "Hodge star of dx"
  (hodge dx)
  [| [| 0, 0, 0 |], [| 0, 0, 1 |], [| 0, 0, 0 |] |]

assertEqual "Hodge star of dx ∧ dy"
  (hodge (wedge dx dy))
  [| 0, 0, 1 |]