Spin Tensors as Ininitesimal Changes of Rotations edit page

Spin tensors are skew symmetric tensors that can be used to describe small rotational changes. Lets consider an arbitrary reference rotation

rot_ref = rotation.byEuler(10*degree,20*degree,30*degree);

and pertube it by a rotation about the axis (123) and angle delta. Since multiplication of rotations is not communatativ we have to distinguish between left and right pertubations

delta = 0.01*degree;
rot_123 = rotation.byAxisAngle(vector3d(1,2,3),delta);
rot_right = rot_123 * rot_ref;
rot_left = rot_ref * rot_123;

We may now ask for the first order Taylor coefficients of the pertubation as delta goes to zero which we find by the formula

\[ T = \lim_{\delta \to 0} \frac{\tilde R - R}{\delta} \]

T_right = (rot_right.matrix - rot_ref.matrix)./delta
T_left = (rot_left.matrix - rot_ref.matrix)./delta
T_right =
   -0.4002   -0.4146    0.7724
    0.5727   -0.5873   -0.2035
   -0.2484    0.5297   -0.1218
T_left =
   -0.5399   -0.6025    0.5816
    0.7530   -0.5816    0.1368
   -0.2648    0.1140    0.0122

Both matrices T_right and T_left are elements of the tangential space attached to the reference rotation rot_ref. Those matrices are characterized by the fact that they becomes scew symmetric matrices when multiplied from the left or from the right with the inverse of the reference rotation

S_right_L =  matrix(inv(rot_ref)) * T_right
S_right_R = T_right * matrix(inv(rot_ref))

S_left_L =  matrix(inv(rot_ref)) * T_left
S_left_R = T_left * matrix(inv(rot_ref))
S_right_L =
   -0.0000   -0.5892    0.4501
    0.5893   -0.0001   -0.6709
   -0.4501    0.6710   -0.0001
S_right_R =
   -0.0001   -0.8018    0.5345
    0.8018   -0.0001   -0.2672
   -0.5345    0.2673   -0.0000
S_left_L =
   -0.0001   -0.8018    0.5345
    0.8018   -0.0001   -0.2672
   -0.5345    0.2673   -0.0000
S_left_R =
   -0.0001   -0.9575    0.2758
    0.9575   -0.0001    0.0850
   -0.2758   -0.0850   -0.0000

A scew symmetric 3x3 matrix S is essentially determined by its entries \(S_{21}\), \(S_{31}\) and \(S_{32}\). Writing these values as a vector \((S_32,-S_{31},S_{21})\) we obtain for the matrices S_right_R and S_left_L exactly the rotational axis of our pertubation

vector3d(spinTensor(S_right_R)) * sqrt(14)

vector3d(spinTensor(S_left_L))  *sqrt(14)
ans = vector3d
 
ans = vector3d

For the other two matrices those vectors are related to the rotational axis by the reference rotation rot_ref

rot_ref * vector3d(spinTensor(S_right_L)) * sqrt(14)

inv(rot_ref) * vector3d(spinTensor(S_left_R)) * sqrt(14)
ans = vector3d
 
ans = vector3d

The Functions Exp and Log

The above definition of the spin tensor works only well if the pertupation rotation has small rotational angle. For large pertubations the matrix logarithm provides the correct way to translate rotational changes into skew symmetric matrices

S = logm(rot_ref * rot_123,rot_ref)

S = logm(rot_123 * rot_ref,rot_ref,'left')
S = spinTensor (xyz)
  rank: 2 (3 x 3)
 
 *10^-5
       0 -13.994   9.329
  13.994       0  -4.665
  -9.329   4.665       0
 
S = spinTensor (xyz)
  rank: 2 (3 x 3)
 
 *10^-5
       0 -13.994   9.329
  13.994       0  -4.665
  -9.329   4.665       0

Again the entries \(S_{21}\), \(S_{31}\) and \(S_{32}\) exactly coincide with the rotional axis multiplied with the rotational angle

vector3d(S) * sqrt(14)
ans = vector3d

More directly this disorientation vector may be computed from two rotations by the command log

rot_123 = rotation.byAxisAngle(vector3d(1,2,3),1)
log(rot_ref * rot_123,rot_ref) * sqrt(14)

log(rot_123 * rot_ref,rot_ref,'left') * sqrt(14)
rot_123 = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  87.0892 33.2984 320.219
 
 
ans = vector3d
 
ans = vector3d

The other way round

Given a skew symmetric matrix S or a disorientation vector v we may use the command exp to apply this rotational pertubation to a reference rotation rot_ref

S = logm(rot_ref * rot_123,rot_ref);
rot_ref * rot_123
exp(S,rot_ref)

v = log(rot_ref * rot_123,rot_ref);
exp(v,rot_ref)
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  94.0497 29.4341 358.508
 
 
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  94.0497 29.4341 358.508
 
 
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  94.0497 29.4341 358.508
S = logm(rot_123 * rot_ref,rot_ref,'left');
rot_123 * rot_ref
exp(S,rot_ref,'left')

v = log(rot_123 * rot_ref,rot_ref,'left');
exp(v,rot_ref,'left')
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062
 
 
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062
 
 
ans = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062

Disorientations under the presence of crystal symmetry

Under the presence of crystal symmetry the order whether a rotational pertupation is applied from the left or from the right. Lets perform the above calculations step by step in the presence of trigonal crystal symmetry

cs = crystalSymmetry('321');

% consider an arbitrary rotation
ori_ref = orientation.byEuler(10*degree,20*degree,30*degree,cs);

% next we disturb rot_ref by a rotation about the axis (123)
mori_123 = orientation.byAxisAngle(Miller(1,2,-3,3,cs),1)

% first we multiply from the right
ori = ori_ref * mori_123
mori_123 = misorientation (321 → 321)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  61.8386 40.0064 340.052
 
 
ori = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  79.3156 43.3785  9.9013

and compute the scew symmetric pertubation matrices

S_right_L =  matrix(inv(rot_ref)) * T_right
S_right_R = T_right * matrix(inv(rot_ref))

S_left_L =  matrix(inv(rot_ref)) * T_left
S_left_R = T_left * matrix(inv(rot_ref))
S_right_L =
   -0.0000   -0.5892    0.4501
    0.5893   -0.0001   -0.6709
   -0.4501    0.6710   -0.0001
S_right_R =
   -0.0001   -0.8018    0.5345
    0.8018   -0.0001   -0.2672
   -0.5345    0.2673   -0.0000
S_left_L =
   -0.0001   -0.8018    0.5345
    0.8018   -0.0001   -0.2672
   -0.5345    0.2673   -0.0000
S_left_R =
   -0.0001   -0.9575    0.2758
    0.9575   -0.0001    0.0850
   -0.2758   -0.0850   -0.0000

make it a vector

vR1 = vector3d(spinTensor(S_right_L))  *sqrt(14)
vR2 = inv(rot_ref) * vector3d(spinTensor(S_right_R)) * sqrt(14)

lR1 = rot_ref * vector3d(spinTensor(S_left_L))  *sqrt(14)
lR2 = vector3d(spinTensor(S_left_R)) * sqrt(14)
vR1 = vector3d
 
vR2 = vector3d
 
lR1 = vector3d
 
lR2 = vector3d

logarithm to vector3d

log(ori_ref * mori_123,ori_ref)

log(rot_123 * ori_ref,ori_ref,'left') * sqrt(14)
ans = Miller (321)
       h       k       i       l
  0.2335  0.4671 -0.7006  0.7006
 
ans = vector3d

logarithm to skew symmetric matrix

S = logm(ori_ref * mori_123,ori_ref)
round(vector3d(S))

S = logm(rot_123 * ori_ref,ori_ref,'left')
vector3d(S) * sqrt(14)
S = spinTensor (321)
  rank: 2 (3 x 3)
 
 *10^-2
      0 -70.06  46.71
  70.06      0 -53.94
 -46.71  53.94      0
 
ans = Miller (321)
  h  k  i  l
  1  2 -3  3
 
S = spinTensor (xyz)
  rank: 2 (3 x 3)
 
 *10^-2
      0 -80.18  53.45
  80.18      0 -26.73
 -53.45  26.73      0
 
ans = vector3d

The other way round

S = logm(ori_ref * mori_123,ori_ref);
ori_ref * mori_123
exp(S,ori_ref)

v = log(ori_ref * mori_123,ori_ref);
exp(v,ori_ref)
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  79.3156 43.3785  9.9013
 
 
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  79.3156 43.3785  9.9013
 
 
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  79.3156 43.3785  9.9013
S = logm(rot_123 * ori_ref,ori_ref,'left');
rot_123 * ori_ref
exp(S,ori_ref,'left')

v = log(rot_123 * ori_ref,ori_ref,'left');
exp(v,ori_ref,'left')
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062
 
 
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062
 
 
ans = orientation (321 → xyz)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  74.5535 51.5051 9.61062