quaternions, second plea for help

• To: mathgroup at yoda.physics.unc.edu
• Subject: quaternions, second plea for help
• From: Jack K. Cohen <jkc at dix.mines.colorado.edu>
• Date: Sun, 11 Oct 92 09:19:43 -0600

```This is a followup to my request for a non-List implementation of
quaternions.  Someone suggested that I show my feeble attempts and
let people see if they can boost me over the hill.

First I tried a straight forward entry of the multiplication table:
i i ^= -1;
j j ^= -1;
k k ^= -1;
i j ^= k;
j k ^= i;
k i ^= j;
j i ^= -k;
k j ^= -i;
i k ^= -j;
i/: i^2 = -1;
j/: j^2 = -1;
k/: k^2 = -1;

Some rules work OK:
i i
-1
i j
k

But the non-commutative ones won't, because Mma follows the earlier
rules first and "knows" that Times is commutative:

j i
k

So next I tried using NonCommutativeMultiply, which would seem
"made" for the job:

i ** i ^= -1;
j ** j ^= -1;
k ** k ^= -1;
i ** j ^= k;
j ** k ^= i;
k ** i ^= j;
j ** i ^= -k;
k ** j ^= -i;
i ** k ^= -j;

Now *all* the rules indeed work:
i ** i
-1
i ** j
k
j ** i
-k

But when I "go for the gold":
q = q0 + q1 i + q2 j + q3 k;
p = p0 + p1 i + p2 j + p3 k;
p ** q
(p0 + i p1 + j p2 + k p3) ** (q0 + i q1 + j q2 + k q3)

Mma doesn't apply the distributative law by default with the **
operator.  In fact, some reflection/trials reveal that at a more
basic level, I also have to give simplification rules for things like:

i p1 ** j q2
(because how can Mma know that p1, q2, etc. are "intended" to be reals?).

I am hoping that someone out there has some experience with using **
or with constructing other abstract data types, because it is clear
to me that running around plugging one gap after the other in a
non-systematic way is the road to ugliness.

```

• Prev by Date: RealInterval needing N
• Next by Date: Re: fateman?
• Previous by thread: RealInterval needing N
• Next by thread: Re: fateman?