packages feed

egison-3.7.11: sample/math/geometry/lie.egi

(define $N 3)
(define $params [| x y z |])
(define $g [| [| 1 0 0 |] [| 0 1 0 |] [| 0 0 1 |] |])

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

(define $hodge
  (lambda [%A]
    (let {[$k (df-order A)]}
      (with-symbols {i j}
        (* (sqrt (abs (M.det g_#_#)))
           (foldl . (. A_[j_1]..._[j_k]
                       (ε' N k)_[i_1]..._[i_N])
                  (map 1#g~[i_%1]~[j_%1] (between 1 k))))))))

(define $dx [| 1 0 0 |])
(define $dy [| 0 1 0 |])
(define $dz [| 0 0 1 |])

(define $ι
  (lambda [%X %Y]
    (with-symbols {i}
      (* (df-order Y) (. X...~i (df-normalize Y..._i))))))

(define $Lie
  (lambda [%X %Y]
    (match (df-order Y) integer
      {[,0 (ι X (d Y))]
       [,N (d (ι X Y))]
       [_ (+ (ι X (d Y)) (d (ι X Y)))]})))

(define $ρ (function [t x y z]))
(define $*ρ (df-normalize (hodge ρ)))

(define $u_ (generate-tensor 1#(function [t x y z]) {3}))
(define $u [| u_1 u_2 u_3 |])

(df-normalize (+ (∂/∂ *ρ t) (Lie u *ρ)))
;(tensor {3 3 3} {0 0 0 0 0 (/ (+ ρ|t (* u_1|x ρ) (* u_1 ρ|x) (* u_2|y ρ) (* u_2 ρ|y) (* u_3|z ρ) (* u_3 ρ|z)) 6) 0 (/ (+ (* -1 ρ|t) (* -1 u_1|x ρ) (* -1 u_1 ρ|x) (* -1 u_3|z ρ) (* -1 u_3 ρ|z) (* -1 u_2|y ρ) (* -1 u_2 ρ|y)) 6) 0 0 0 (/ (+ (* -1 ρ|t) (* -1 u_2|y ρ) (* -1 u_2 ρ|y) (* -1 u_1|x ρ) (* -1 u_1 ρ|x) (* -1 u_3|z ρ) (* -1 u_3 ρ|z)) 6) 0 0 0 (/ (+ ρ|t (* u_2|y ρ) (* u_2 ρ|y) (* u_3|z ρ) (* u_3 ρ|z) (* u_1|x ρ) (* u_1 ρ|x)) 6) 0 0 0 (/ (+ ρ|t (* u_3|z ρ) (* u_3 ρ|z) (* u_1|x ρ) (* u_1 ρ|x) (* u_2|y ρ) (* u_2 ρ|y)) 6) 0 (/ (+ (* -1 ρ|t) (* -1 u_3|z ρ) (* -1 u_3 ρ|z) (* -1 u_2|y ρ) (* -1 u_2 ρ|y) (* -1 u_1|x ρ) (* -1 u_1 ρ|x)) 6) 0 0 0 0 0} )

(df-normalize (+ (∂/∂ *ρ t) (Lie u *ρ)))_1_2_3
;(/ (+ ρ|t
;      (* u_1|x ρ) (* u_1 ρ|x)
;      (* u_2|y ρ) (* u_2 ρ|y)
;      (* u_3|z ρ) (* u_3 ρ|z))
;   6)