/* vetor analysis */ /* vectanal.mac */ /* 1-st order differntial operators */ prefix("Grad", 142, expr, expr)$ prefix("Div", 142, expr, expr)$ prefix("Rot", 142 , expr, expr)$ "Grad"(f) := block([gv], gv : zeromatrix(3,1), gv[1][1] : diff(f, x), gv[2][1] : diff(f, y), gv[3][1] : diff(f, z), return(gv) )$ "Div"(v) := block([f], f : diff(v[1][1], x) + diff(v[2][1], y) + diff(v[3][1], z), return(f) )$ "Rot"(v) := block([w], w : zeromatrix(3,1), w[1][1] : diff(v[3][1], y) - diff(v[2][1], z), w[2][1] : diff(v[1][1], z) - diff(v[3][1], x), w[3][1] : diff(v[2][1], x) - diff(v[1][1], y), return(w) )$ Laplacian(f) := div (grad (f))$ /* inner and outer products */ infix("@*")$ infix("@x")$ v @* w := block([val], val : v[1][1] * w[1][1] + v[2][1] * w[2][1] + v[3][1] * w[3][1] , return(val) )$ v @x w := block([valvec], valvec : zeromatrix(3,1), valvec[1][1] : v[2][1] * w[3][1] - v[3][1] * w[2][1] , valvec[2][1] : v[3][1] * w[1][1] - v[1][1] * w[3][1] , valvec[3][1] : v[1][1] * w[2][1] - v[2][1] * w[1][1] , return(valvec) )$