[math-fun] Quaternion eigenvectors, Part Deux
The following exposition is known [Hitzer], but not well known, as Wikipedia & other obvious sources don't cover it. It is well known that every 4D rotation R can be expressed as Q -> FQG, for quaternions F,G which depend upon the rotation R. It is also well known that every 4D rotation can be expressed as the *independent* rotations of 2 planes orthogonal to one another, each with their own separate rotation. Unfortunately, it isn't so well known how to elegantly find the rotation R and the 2 orthogonal subspaces given the two quaternions F,G. Given *unit* quaternions F,G, we can extract the 'scalar' and 'vector' parts of F,G as follows: s(F) = (F+F')/2 ; scalar part of F s(G) = (G+G')/2 ; scalar part of G V(F) = (F-F')/2 ; 'pure' vector part of F V(G) = (G-G')/2 ; 'pure' vector part of G where F',G' are the 'conjugates' of F,G, respectively. We will also need the 'pure', 'unit' vectors f,g: f = V(F)/|V(F)| = V(F)/sqrt(|V(F)|^2) = V(F)/sqrt(-V(F)^2) g = V(G)/|V(G)| = V(G)/sqrt(|V(G)|^2) = V(G)/sqrt(-V(G)^2) (Since |V|^2 = VV' = V(-V) = -V^2 for any *pure* vector V.) We now have s(f)=s(g)=0 and |f|=|g|=1. Now |F|=|G|=1, so we can express F,G as: F = exp(f*a) = cos(a)+f*sin(a), for some real angle a. G = exp(g*b) = cos(b)+g*sin(b), for some real angle b. Here's the tough part: finding the eigenvectors of the linear operator Q->FQG. Consider the quaternions 1+fg and f-g. Some observations: s(f-g) = 0 ; pure vector <=> 0 scalar part s(1+fg) = s(1)+s(fg) = 1-(f.g) ; (f.g) is vector dot product = 1-cos(theta) ; theta is angle between f,g = 2 sin(theta/2)^2 n(f-g) = (f-g)(f-g)' = (f-g)(f'-g') = ff'+gg'-gf'-fg' = 1 + 1 - (gf'+fg') = 2 + fg + gf = 2 + 2 s(fg) = 2 (1 + s(fg)) = 2 (1 - f.g) = 2 (1-cos(theta)) ; theta is angle between f,g = 4 sin(theta/2)^2 So |f-g| = 2 sin(theta/2). n(1+fg) = (1+fg)(1+fg)' = (1+fg)(1+g'f') = 1 + fg + g'f' + fgg'f' = 2 + 2 s(fg) = 2 + 2 (-f.g) = 2 - 2 f.g = 2 (1-f.g) = 2 (1-cos(theta)) = 4 sin(theta/2)^2 So |1+fg| = 2 sin(theta/2). dot(f-g,1+fg) = ((f-g)(1+fg)'+(1+fg)(f-g)')/2 = ((f-g)(1+g'f')+(1+fg)(f'-g'))/2 = ((f-g-gg'f+fg'f')+(f'-g'+fgf'-fgg'))/2 = (f+fg'f'-g-f'+f'-g'+fgf'-f)/2 = (fg'f'-g-g'+fgf')/2 = (f(-g)(-f)-g-(-g)+fg(-f))/2 = (fgf-fgf)/2 = 0 So, 1+fg is perpendicular to f-g in 4D, but both have the same length. Consider the operation of f()g on 1+fg and f-g: f(1+fg)g = (f+ffg)g = fg+ffgg = fg+(-1)(-1) = fg+1 = 1+fg f(f-g)g = (ff-fg)g = ffg-fgg = (-1)g-f(-1) = -g+f = f-g So, 1+fg and f-g are *eigenvectors* for the eigenvalue +1 ! Similarly, consider 1-fq and f+g: s(f+g) = 0 ; pure vector <=> 0 scalar part s(1-fg) = s(1)-s(fg) = 1+(f.g) ; (f.g) is vector dot product = 1+cos(theta) ; theta is angle between f,g = 2 cos(theta/2)^2 n(f+g) = (f+g)(f'+g') = ff'+gg'+fg'+gf' = 1 + 1 - fg - gf = 2 - (fg+gf) = 2 - 2 s(fg) = 2 - 2 (-f.g) = 2 + 2 f.g = 2 (1+f.g) = 2 (1+cos(theta)) = 4 cos(theta/2)^2 So |f+g| = 2 cos(theta/2). n(1-fg) = (1-fg)(1-fg)' = (1-fg)(1-g'f') = 1 - fg - g'f' + fgg'f' = 1 - fg - gf + 1 = 2 - (fg+gf) = 2 - 2 s(fg) = 2 - 2 (-f.g)) = 2 + 2 f.g = 2 + 2 cos(theta) = 2 (1+cos(theta)) = 4 cos(theta/2)^2 So |1-fg| = 2 cos(theta/2). dot(f+g,1-fg) = ((f+g)(1-fg)'+(1-fg)(f+g)')/2 = ((f+g)(1-g'f')+(1-fg)(f'+g'))/2 = ((f+g-fg'f'-gg'f')+(f'+g'-fgf'-fgg'))/2 = (f+g-fg'f'-f'+f'+g'-fgf'-f)/2 = (-fg'f'-fgf'+g+g')/2 = (-fgf+fgf)/2 = 0 So f+g is perpendicular to 1-fg in 4D, and both have the same length. Consider the operation of f()g on f+g and 1-fg: f(f+g)g = ffg+fgg = (-1)g+f(-1) = -g-f = -(f+g) f(1-fg)g = (f-ffg)g = fg-ffgg = fg-(-1)(-1) = fg-1 = -(1-fg) So, f+g and 1-fg are *eigenvectors* for the eigenvalue -1 ! Finally, the two 2D subspaces spanned by (1+fg,f-g) and (f+g,1-fg) respectively are orthogonal to one another: dot(f+g,f-g) = ((f+g)(f-g)'+(f-g)(f+g)')/2 = ((f+g)(f'-g')+(f-g)(f'+g'))/2 = (ff'-gg'+gf'-fg'+ff'-gg'-gf'+fg')/2 = (gf'-fg'-gf'+fg')/2 = 0 dot(1-fg,1+fg) = ((1-fg)(1+fg)'+(1+fg)(1-fg)')/2 = ((1-fg)(1+g'f')+(1+fg)(1-g'f'))/2 = (1-fg+g'f'-fgg'f'+1-g'f'+fg-fgg'f')/2 = (1-fg+g'f'-1+1-g'f'+fg-1)/2 = 0 dot(f+g,1+fg) = ((f+g)(1+fg)'+(1+fg)(f+g)')/2 = ((f+g)(1+g'f')+(1+fg)(f'+g'))/2 = (f+g+fg'f'+gg'f'+f'+g'+fgf'+fgg')/2 = (f+g+fg'f'+f'+f'+g'+fgf'+f)/2 = (f+g+fgf-f-f-g-fgf+f)/2 = 0 dot(f-g,1-fg) = ((f-g)(1-fg)'+(1-fg)(f-g)')/2 = ((f-g)(1-g'f')+(1-fg)(f'-g'))/2 = (f-g-fg'f'+gg'f'+f'-g'-fgf'+fgg')/2 = (f-g-fgf+f'+f'-g'+fgf+f)/2 = (f-g-fgf-f-f+g+fgf+f)/2 = 0 Since our four 4D vectors (1+fg,f-g,f+g,1-fg) are all orthogonal to one another, and the dimension of the quaternions is four, these four vectors span the space of all quaternions. Although our four 4D vectors (1+fg,f-g,f+g,1-fg) are orthogonal, they are NOT normalized, as |1+fg| = |f-g| = 2 sin(theta/2) |1-fg| = |f+g| = 2 cos(theta/2) Nevertheless, it is remarkable and convenient that the 2 vectors spanning the +1 subspace have the *same length*, and the 2 vectors spanning the -1 subspace also have the same length. Now that we have basis vectors for the entire space and the two orthogonal subspaces, we would still love to quickly 'split' a given quaternion into two parts, the part with eigenvalue +1 and the part with eigenvalue -1. Now consider the following *projection* operations: Pp: Q -> (Q+fQg)/2 Pm: Q -> (Q-fQg)/2 A projection operation is idempotent: Pp(Pp(Q)) = Pp((Q+fQg)/2)) = ((Q+fQg)/2 + f(Q+fQg)g/2)/2 = (Q/2 + fQg/2 + fQg/2 + ffQgg/2)/2 = (Q/2 + fQg + (-1)Q(-1)/2)/2 = (Q+fQg)/2 = Pp(Q) Pm(Pm(Q)) = Pm((Q-fQg)/2) = ((Q-fQg)/2 - f(Q-fQg)g/2)/2 = (Q/2 -fQg/2 - fQg/2 + ffQgg/2)/2 = (Q/2 -fQg + Q/2)/2 = (Q-fQg)/2 = Pm(Q) These project operators cancel one another: Pp(Pm(Q)) = Pp((Q-fQg)/2) = ((Q-fQg)/2 + f(Q-fQg)g/2)/2 = (Q/2 - fQg/2 + fQg/2 -ffQgg/2)/2 = (Q/2 - Q/2)/2 = 0 Pm(Pp(Q)) = Pm((Q+fQg)/2) = ((Q+fQg)/2 - f(Q+fQg)g/2)/2 = (Q/2 + fQg/2 - fQg/2 - ffQgg/2)/2 = (Q/2 - Q/2)/2 = 0 Now consider the operation of Pp, Pm on our four basis vectors (1+fg,f-g,f+g,1-fg): Pp(1+fg) = (1+fg + f(1+fg)g)/2 = (1 + fg + fg + ffgg)/2 = (2+2fg)/2 = 1+fg Pp(f-g) = (f-g + f(f-g)g)/2 = (f - g + ffg - fgg)/2 = (f - g - g + f)/2 = (2f - 2g)/2 = f-g Pp(f+g) = (f+g + f(f+g)g)/2 = (f + g + ffg + fgg)/2 = (f + g - g - f)/2 = 0 Pp(1-fg) = (1-fg + f(1-fg)g)/2 = (1 - fg + fg - ffgg)/2 = 0 Pm(1+fg) = (1+fg - f(1+fg)g)/2 = (1 + fg - fg -ffgg)/2 = 0 Pm(f-g) = (f-g - f(f-g)g)/2 = (f - g - ffg + fgg)/2 = (f - g + g - f)/2 = 0 Pm(f+g) = (f+g - f(f+g)g)/2 = (f + g - ffg - fgg)/2 = (f + g + g + f)/2 = f+g Pm(1-fg) = (1-fg - f(1-fg)g)/2 = (1 - fg - fg + ffgg)/2 = (1 - 2fg + 1)/2 = (2-2fg)/2 = 1-fg So we can use Pp, Pm to separate a given quaternion into 2 components: Q = Pp(Q)+Pm(Q). Pp(Q)+Pm(Q) = (Q+fQg)/2 + (Q-fQg)/2 = Q/2 + fQg/2 + Q/2 - fQg/2 = Q This analysis shows the two eigenvalues +-1 operating on their own separate 2D subspaces and components: fQg = f(Pp(Q)+Pm(Q))g = f(Pp(Q))g + f(Pm(Q))g = (+1)Pp(Q) + (-1)Pm(Q) = Pp(Q) - Pm(Q) But wait, there's more! n(Q) = QQ' = n(Pp(Q)+Pm(Q) = n(Pp(Q)) + n(Pm(Q)) = Pp(Q)Pp(Q)' + Pm(Q)Pm(Q)' So the 'norm' n(Q) also splits into the sum of the norms of the 2 projected components. We have so far restricted ourselves to the pure unit vectors f,g. But F,G are full (unit) quaternions complete with scalar parts: F = exp(f*a) = cos(a)+f*sin(a), for some real angle a. G = exp(g*b) = cos(b)+g*sin(b), for some real angle b. Given Q=Pp(Q)+Pm(Q), we can analyze FQG as follows: FQG = F(Pp(Q)+Pm(Q))G = F(Pp(Q))G + F(Pm(Q))G = exp(f*a)Pp(Q)exp(g*b) + exp(f*a)Pm(Q)exp(g*b) = exp(f*(a-b))Pp(Q) + exp(f*(a+b))Pp(Q) = exp(f*a) (exp(-f*b)Pp(Q) + exp(f*b)Pp(Q)) or FQG = Pp(Q)exp(g*(b-a)) + Pm(Q)exp(g*(b+a)) = (Pp(Q)exp(-g*a) + Pm(Q)exp(g*a)) exp(g*b) So we can either express the result of FQG in terms of exp(f*something) or exp(g*something). We can now relax the requirement that |F|=|G|=1. The projection operators still work correctly, but we must insert |F| and |G| where appropriate into our equations, e.g., FQG = |F|exp(f*a)Pp(Q)|G|exp(g*b) + |F|exp(f*a)Pm(Q)|G|exp(g*b) = |F|exp(f*(a-b))Pp(Q)|G|+ |F|exp(f*(a+b))Pp(Q)|G| = |F|exp(f*a) (exp(-f*b)Pp(Q) + exp(f*b)Pp(Q))|G| = F (exp(-f*b)Pp(Q) + exp(f*b)Pp(Q)) |G| Or, FQG = |F|Pp(Q)exp(g*(b-a))|G| + |F|Pm(Q)exp(g*(b+a))|G| = |F| (Pp(Q)exp(-g*a) + Pm(Q)exp(g*a)) exp(g*b)|G| = |F| (Pp(Q)exp(-g*a) + Pm(Q)exp(g*a)) G ---------------------------------- [Hitzer] Google "Hitzer" "quaternion" in scholar.google.com to pull up a number of relevant articles by Eckhard Hitzer, e.g., Eckhard Hitzer, "The orthogonal planes split of quaternions and its relation to quaternion geometry of rotations". 30th International Colloquium on Group Theoretical Methods in Physics (Group30), Journal of Physics: Conference Series 597 (2015) 012042, doi:10.1088/1742-6596/597/1/012042. https://iopscience.iop.org/article/10.1088/1742-6596/597/1/012042/pdf
participants (1)
-
Henry Baker