Coding in Quaternions and Matrices

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 3K views
leon1127
Messages
484
Reaction score
0
I am currently doing some research in Clifford Algebra. My topic is to find explicit representation of its basis through matrices with entries in clifford algebra itself. At this moment I am trying to write code in mathematica to do KroneckerProduct and Quaternion multiplication. Now I have encounter a coding problem about mathematica.
In the package of << Algebra`Quaternions`, quaternion multiplication is defined with ** instead of *, where in matrix multiplication product of entries are defined with *. Thus when I use quaternion entries in my matrix multiplication, its matrix product will give me, say, Quaternion[0,1,0,0]Quaternion[0,0,1,0] instead of Quaternion[0,0,0,1]
where Quaternion[a,b,c,d] = a + b i + c j + d k.
Does anyone have any idea to override this function.

Thank you.
 
Physics news on Phys.org
I have rewritten my problem due to my horrible english. PLease forgive me.
I am currently doing some research in Clifford Algebra. My topic is to find explicit representation of its basis through matrices with entries in clifford algebra itself. At this moment I am trying to write code in mathematica to do KroneckerProduct and Quaternion multiplication. Now I have encounter a coding problem about mathematica.
In the package of << Algebra`Quaternions`, quaternion multiplication is defined with ** (non-commutative multiplicative operator) instead of *, where matrix multiplication assumes communtivity of elements. Of course this is not the case when I use non-commutative ring on my matrices.

for examples
When I do {{0,Quaternion[0,0,1,0]},{Quaternion[0,0,1,0],0}} * {{0,-Quaternion[0,1,0,0]},{Quaternion[0,1,0,0],0}}, it will give me {{0, 0, Quaternion[0, 0, 1, 0] Quaternion[0, 1, 0, 0], 0}, {0, 0, 0, Quaternion[0, -1, 0, 0] Quaternion[0, 0, 1, 0]},{Quaternion[0, 0, 1,0] Quaternion[0, 1, 0, 0], 0, 0, 0}, {0, Quaternion[0, -1, 0, 0] Quaternion[0, 0, 1, 0], 0, 0}}

My main problem is that when I try to define the following operation Quaternion[a_, b_, c_, d_]Quaternion[e_, f_, g_, h_] := Quaternion[a, b, c, d] ** Quaternion[e, f, g, h]. It automatically assumes commutativity, i.e Quaternion[0,1,0,0]Quaternion[0,0,1,0] = Quaternion[0,0,1,0]Quaternion[0,1,0,0]. But we know they should anticommute instead.

Does anyone have any idea to override this function.

Thank you.