I am doing this work by hand, but it takes a lot of time and I make several calculation errors, so I was thinking to make Mathematica to calculate this for me, but I am stuck at the very beginning.

I am working with tensors like this:

$XXV_{ijk} = \dfrac{1}{6}(X_iX_jV_k+X_iX_kV_j+X_jX_iV_k+X_kX_jV_i+X_jX_kV_i+X_kX_iV_j)$ $-\dfrac{1}{5}(\delta_{ij}\, (X\cdot X) V_k+\delta_{ik} (X\cdot V) X_j+\delta_{jk} (X\cdot V) X_i)$

where $X_i$ and $V_i$ are the components of the 3-vectors $\vec{X}$ and $\vec{V}$. I have to multiply these tensors, for example

$XXV \times XXV = \dfrac{2}{25}V^2+\dfrac{8}{25} (X\cdot V)^2$

I think I can obtain the first part with Tuples and Total(?) but I don't know how to obtain the part with the Kroeneker deltas; if I can write these tensors correctly I think I can multiply these tensors with . and Transpose.

As @yarchik has pointd out, I have to add that my tensors have unit length

  • $\begingroup$ Is there a typo in your last term on the first line, $X_kX_iV_k$? There should be a $j$-index somewhere. $\endgroup$
    – Roman
    Jul 19, 2019 at 14:52
  • $\begingroup$ @Roman yes it is a typo $\endgroup$
    – mattiav27
    Jul 19, 2019 at 15:13
  • $\begingroup$ I think your second term still needs a power correction. The answer should be proportional to $V^2$. $\endgroup$
    – yarchik
    Jul 19, 2019 at 15:40
  • $\begingroup$ @yarchik you are right, but this is a typo not a calculation error... $\endgroup$
    – mattiav27
    Jul 19, 2019 at 15:44
  • $\begingroup$ Note that in your example the the correct result should be $\frac{8}{25} V^2 + \frac{2}{25} (X\cdot V)^2$. See all four answers below. $\endgroup$
    – Ray Shadow
    Jul 20, 2019 at 0:15

4 Answers 4


You can write it directly as you see it

xxv[i_,j_,k_]:= 1/6( x[i]x[j]v[k]+x[i]x[k]v[j]
                    +x[j]x[k]v[i]+x[k]x[i]v[j] )
                -1/5( KroneckerDelta[i,j]Sum[x[l]x[l],{l,3}]v[k]
                     +KroneckerDelta[j,k]Sum[x[l]v[l],{l,3}]x[i] )

FullSimplify[ Sum[xxv[i,j,k] xxv[i,j,k],{i,3},{j,3},{k,3}],

Out[1]= 2/25 (4 vv + xv^2)

where I assumed that your vector x is normalized


You can cast this as a symbolic tensor question, and make use of my TensorSimplify package. Install the paclet with:

    "Site" -> "http://raw.githubusercontent.com/carlwoll/TensorSimplify/master"

Once installed, load the package with:


Now, define your tensor using TensorProduct:

XXV = 1/3 (TensorProduct[X,X,V] + TensorProduct[X,V,X] + TensorProduct[V,X,X]) - 
    1/5 (X.X TensorProduct[Inactive[IdentityMatrix][3], V] + 
        X.V TensorTranspose[TensorProduct[Inactive[IdentityMatrix][3],X],{1,3,2}] + 
        X.V TensorProduct[X,Inactive[IdentityMatrix][3]]

Note the use of Inactive[IdentityMatrix][3] instead of IdentityMatrix[3]. Then:

    TensorContract[TensorProduct[XXV, XXV], {{1, 4}, {2, 5}, {3, 6}}],
    Assumptions -> (X|V) ∈ Vectors[3]

2/25 (V.X)^2 X.X + 8/25 V.V (X.X)^2

Using X.X == 1 reproduces your result.


This is how I'd do it; maybe it's useful for you.

Define $\vec{X}$ and $\vec{V}$ as vectors:

X = Array[x, 3];
V = Array[v, 3];

useful $3\times3\times3$ tensors for assembling:

a = Outer[Times, X, X, V];
b = (X.X) Outer[Times, IdentityMatrix[3], V];
c = (X.V) Outer[Times, IdentityMatrix[3], X];

assemble $XXV$:

XXV = (a + Transpose[a, {3, 1, 2}] + Transpose[a, {2, 3, 1}])/3 -
      (b + Transpose[c, {3, 1, 2}] + Transpose[c, {2, 3, 1}])/5;

check a formula:

Total[XXV*XXV, 3] == 2/25 (X.X) ((X.V)^2 + 4 (X.X) (V.V)) // FullSimplify
(*    True    *)
  • $\begingroup$ Nice that you verified my answer. I already started to doubt. $\endgroup$
    – yarchik
    Jul 19, 2019 at 15:20
  • $\begingroup$ @yarchik this is one of my calculation errors... I have corrected the formula in my post $\endgroup$
    – mattiav27
    Jul 19, 2019 at 15:35
  • 1
    $\begingroup$ @mattiav27 it's still wrong, the second term should be 8/25 and you need to specify that you're assuming that $\vec{X}$ has unit length. $\endgroup$
    – Roman
    Jul 19, 2019 at 15:57

You can implement Einstein's summation convention using, for example, temporary variables as summation indices.

ClearAll[delta, CenterDot, dummyIndexQ, tensorSimplify];

SetAttributes[delta, Orderless];
SetAttributes[CenterDot, Orderless];

dummyIndexQ[x_Symbol] := MemberQ[Attributes[x], Temporary];

tensorSimplificationRules = {
    delta[a_?dummyIndexQ, a_] :> 3,
    delta[a_?dummyIndexQ, b_]^2 :> delta[b, b],
    delta[a_, b_?dummyIndexQ] delta[b_, c_] :> delta[a, c],
    delta[i_?dummyIndexQ, j_]t_[i_] :> t[j],
    (t_[i_?dummyIndexQ])^2 :> (t\[CenterDot]t),
    t1_[x_?dummyIndexQ] t2_[x_] :> t1\[CenterDot]t2

tensorSimplify[expr_] := FixedPoint[(Expand[#]//.tensorSimplificationRules)&, expr];

Let's define $XXV_{ijk}$:

xxv[i_, j_, k_] := (1/3 * (v[k] x[i] x[j] + v[j] x[i] x[k] + v[i] x[j] x[k]) - 1/5 * (delta[i,j] (x\[CenterDot]x) v[k] + delta[i,k] (x\[CenterDot]v) x[j] +     delta[j,k] (x\[CenterDot]v) x[i]))

Result for your example $XXV_{abc} XXV_{abc}$:

expr = Module[{a,b,c}, xxv[a,b,c] xxv[a,b,c]];

2/25 (v$\cdot$x)^2 (x$\cdot$x) + 8/25 (v$\cdot$v) (x$\cdot$x)^2

Result for more complicated input $XXV_{abc} XXV_{bcd} XXV_{def} XXV_{efa}$:

expr2 = Module[{a,b,c,d,e,f}, xxv[a,b,c] xxv[b,c,d] xxv[d,e,f] xxv[e,f,a]];

$\frac{524 (x\cdot x)^2 (v\cdot x)^4}{50625}+\frac{1454 v\cdot v (x\cdot x)^3 (v\cdot x)^2}{50625}+\frac{1586 (v\cdot v)^2 (x\cdot x)^4}{50625}$

Note that all summation indices must be listed inside the first argument of Module.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.