This is an old revision of the document!


ExpandAndEliminate


Description

  • ExpandAndEliminate expands out product of sums and positive integer powers and permanently eliminates metric and Kronecker deltas.
  • ExpandAndEliminate is equivalent to sequential applying Expand & EliminateMetrics but works faster since applies EliminateMetrics at each level of expand procedure.
  • ExpandAndEliminate is equal to Expand[EliminateMetrics] & EliminateMetrics.
  • When no metric tensors or Kronecker deltas involved, ExpandAndEliminate works same as Expand.
  • ExpandAndEliminate[simplifications] or ExpandAndEliminate[[Simplifications: simplifications]] will apply additional simplifications at each level of expand procedure

Examples


Expand product of sums and eliminate metrics:

def t = '(A_a*g_mn + A_m*g_an + A_n*g_am)*(A^a*g^mn + A^m*g^an + A^n*g^am)'.t
println ExpandAndEliminate >> t
   > 6*A_{n}*A^{n}+3*d^{n}_{n}*A_{m}*A^{m}


When no metric tensors or Kronecker deltas involved, ExpandAndEliminate works same as Expand:

println Expand >> '(A_m^m + 1)**3'.t
   > 3*A_{m}^{m}*A_{a}^{a}+A_{m}^{m}*A_{a}^{a}*A_{b}^{b}+1+3*A_{b}^{b}


Details

ExpandAndEliminate is equivalent to sequential applying Expand & EliminateMetrics but works faster since it applies EliminateMetrics at each level of expand procedure. One can check the advantages of ExpandAndEliminate in the following example with random tensors:

//create random generator, which generates 
// random tensors consisting of metric and A_m
def randomTensor = new RandomTensor()
randomTensor.clearNamespace()
randomTensor.addToNamespace('g_mn'.t, 'A_m'.t)

def a, b
//loop to warm up JVM 
for (def i in 0..1000) {
    //next random tensor
    def t = randomTensor.nextTensorTree(4, 3, 8, '_a'.si)

    //this will typically 10 times faster
    timing {
        a = ExpandAndEliminate >> t
    }
    //than this
    timing {
        b = (Expand & EliminateMetrics) >> t
    }

    assert a == b
    println ''
}
The sample output will looks like:
Time: 14 ms.
Time: 88 ms.

Time: 52 ms.
Time: 553 ms.

Time: 40 ms.
Time: 577 ms.

See also