summaryrefslogtreecommitdiff
path: root/tensors.mac
diff options
context:
space:
mode:
Diffstat (limited to 'tensors.mac')
-rw-r--r--tensors.mac21
1 files changed, 21 insertions, 0 deletions
diff --git a/tensors.mac b/tensors.mac
new file mode 100644
index 0000000..dea722a
--- /dev/null
+++ b/tensors.mac
@@ -0,0 +1,21 @@
+/* Contract indices in expression */
+
+/* NOTE: buildq works like splicing a list with quasiquote in lisp; escaped
+items are defined at start of quote */
+contr(expr, var) ::= (
+ if listp(var) and length(var) > 1 then
+ block([head, tail],
+ head : first(var),
+ tail : rest(var),
+ buildq([expr, head, tail], sum(contr(expr, tail), head, 1, 4)))
+ elseif listp(var) and length(var) = 1 then
+ block([head],
+ head : first(var),
+ buildq([expr, head], sum(expr, head, 1, 4)))
+ elseif listp(var) then
+ expr
+ else
+ buildq([expr, var], sum(expr, var, 1, 4)))$
+
+/* Differentiate with respect to nth coordinate */
+cdiff(func, coord) := diff(func, ct_coords[coord])$