packages feed

egison-3.7.11: sample/math/geometry/hodge-laplacian-polar.egi

;;; Parameters and metrics

(define $N 2)

(define $x [|r θ|])

(define $g__ [| [| 1 0 |] [| 0 r^2 |] |])
(define $g~~ (M.inverse g_#_#))

;;; Hodge Laplacian

(define $d
  (lambda [%X]
    !((flip ∂/∂) x X)))

(define $hodge
  (lambda [%A]
    (let {[$k (df-order A)]}
      (with-symbols {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] (between 1 k))))))))

(define $δ
  (lambda [%A]
    (let {[$k (df-order A)]}
      (* (** -1 (+ (* N (+ k 1)) 1))
         (hodge (d (hodge A)))))))

(define $Δ
  (lambda [%A]
    (match (df-order A) integer
      {[,0 (δ (d A))]
       [,2 (d (δ A))]
       [_ (+ (d (δ A)) (δ (d A)))]})))

(define $f (function [r θ]))

(d f)
;[| f|r f|θ |]

(hodge (d f))
;[| (/ (* -1 f|θ) r) (* r f|r) |]

(d (hodge (d f)))
;[| [| (/ (+ (* -1 f|θ|r r) f|θ) r^2) (+ f|r (* r f|r|r)) |] [| (/ (* -1 f|θ|θ) r) (* r f|r|θ) |] |]

(hodge (d (hodge (d f))))
;(/ (+ f|θ|θ (* r f|r) (* r^2 f|r|r)) r^2)

(Δ f)
;(/ (+ (* -1 f|θ|θ) (* -1 r f|r) (* -1 r^2 f|r|r)) r^2)