How can we find or approximate the curve equations of azimuthal and elevation angles between two repeatedly rotating vectors?

38 Views Asked by At

Let $f:\mathbb{R}^3\times\mathbb{R}^3\times\mathbb{R}^3\to \mathbb{R}^2$ a function that takes two vectors $\vec{v},\vec{v}_{err}\in\mathbb{R}^3$ and the triple $(\varphi,\theta,\psi)\in\mathbb{R}^3$ of Euler angles as input and outputs a real pair containing the two discrepancies, namely those between the azimuthal and the elevation angles of the vectors $\vec{v},\vec{v}_{err}$ in the spherical coordinate system:

$$ f\left(\vec{v},\vec{v}_{err},(\varphi,\theta,\psi)\right)=(\Delta_{az}, \Delta_{el}) $$

We rotate both vectors $\vec{v},\vec{v}_{err}$ by the Euler angles $(\varphi,\theta,\psi)$ and obtain the rotated vectors $\vec{w}=U_n\cdot (\vec{v}\cdot\vec{\sigma})\cdot U_n^{\dagger}$ and $\vec{w}_{err}=U_n\cdot (\vec{v}_{err}\cdot\vec{\sigma})\cdot U_n^{\dagger}$. Between these two resulting rotated vectors $\vec{w}$ and $\vec{w}_{err}$ we determine the azimuth angular discrepancy $\Delta_{az}$ and the elevation angular discrepancy $\Delta_{el}$ as follows:

$$ \begin{array}{ll} \Delta_{az}&=\min\left(\left|\varphi_{az}(\vec{w}_{err})-\varphi_{az}(\vec{w})\right|,2\pi-\left|\varphi_{az}(\vec{w}_{err})-\varphi_{az}(\vec{w})\right|\right)\\ \Delta_{el}&=\min\left(\left|\theta_{el}(\vec{w}_{err})-\theta_{el}(\vec{w})\right|,2\pi-\left|\theta_{el}(\vec{w}_{err})-\theta_{el}(\vec{w})\right|\right) \end{array} $$

We consider the orbits of this dynamical system generated by $f$ as the error propagation. For $f$, we denote by $f^i=f\circ f^{i-1}$ the $i$-fold iterate of $f$ with the convention $f^0$ beeing the identity map. As input for the function $f$, let us set $\vec{v}=(1,0,0)$ and $\vec{v}_{err}=(0.98,0,-0.19866933)$ and $(\varphi,\theta,\psi)=(\frac{\pi}{100},\frac{\pi}{100},\frac{\pi}{100})$. Below is a plot of the orbit $\left(f^0,f^1,f^2,\ldots,f^{199}\right)$:

enter image description here

The above-shown plot depicts the curves of the angular deviation (azimuth/blue $\Delta_{az}$ and elevation/orange $\Delta_{el}$) due to 200 rotations of both vectors by $\frac{\pi}{100}$. Note that in the above-given example the vector $\vec{v}_{err}$ results from the single rotation of vector $\vec{v}=(1,0,0)$ by the Euler angles $(0,0.2,0)$.

The rotation of a vector around the Euler angles $(\varphi,\theta,\psi)$ is performed using the $SU(2)$ formula as follows:

$$ U(\varphi,\theta,\psi)=e^{-i\frac{\varphi}{2}\sigma_3}e^{-i\frac{\theta}{2}\sigma_2}e^{-i\frac{\psi}{2}\sigma_3}=\begin{pmatrix} e^{-i\frac{\varphi+\psi}{2}}\cos\frac{\theta}{2} & -e^{-i\frac{\varphi-\psi}{2}}\sin\frac{\theta}{2}\\ e^{i\frac{\varphi-\psi}{2}}\sin\frac{\theta}{2} & e^{i\frac{\varphi+\psi}{2}}\cos\frac{\theta}{2}\end{pmatrix} $$

My question: Is there a way to obtain or approximate the two curves (the orange and the blue one)?

Supportive Code:

I implemented a small piece of Mathematica Code that produces the above-shown plot:

qubitmatrixToCartesian[Mq_] := (
   q1 = Re[(Mq[[1, 2]] + Mq[[2, 1]])/2];
   q2 = Re[(Mq[[2, 1]] - Mq[[1, 2]])/(2*I)];
   q3 = Re[Mq[[1, 1]]];
   Return[{q1, q2, q3}];
   );
rnSU2euler[vec_, rx_, ry_, rz_] := (
   sphericalVec = ToSphericalCoordinates[vec];
   θ = sphericalVec[[2]];
   φ = sphericalVec[[3]];
   sx = PauliMatrix[1];
   sy = PauliMatrix[2];
   sz = PauliMatrix[3];
   Mq = Sin[θ]*Cos[φ]*sx + Sin[θ]*Sin[φ]*sy + 
     Cos[θ]*sz;
   Un = {{Exp[-I*(rx + rz)/2]*Cos[ry/2], -Exp[-I*(rx - rz)/2]*
       Sin[ry/2]}, {Exp[I*(rx - rz)/2]*Sin[ry/2], 
      Exp[I*(rx + rz)/2]*Cos[ry/2]}};
   Return [Un . Mq . ConjugateTranspose[Un]];
   );
rotateVector[vec_, rx_, ry_, rz_] := (
   Return[qubitmatrixToCartesian[rnSU2euler[vec, rx, ry, rz]]];
   );
subtractAngles[a1_, a2_] := (
   d = Abs[a1 - a2];
   Return[Min[d, 2*Pi - d]];
   );
errorPropagation[n_, vec_, vecError_, rx_, ry_, rz_] := (
   v = NestList[rotateVector[#, rx, ry, rz] &, N@vec, n];
   vErr = NestList[rotateVector[#, rx, ry, rz] &, N@vecError, n];
   spherical = Map[ToSphericalCoordinates, v];
   sphericalErr = Map[ToSphericalCoordinates, vErr];
   {MapThread[subtractAngles, {sphericalErr[[All, 3]], spherical[[All, 3]]}], 
    MapThread[subtractAngles, {sphericalErr[[All, 2]], spherical[[All, 2]]}]}
   );
ListLinePlot[
 errorPropagation[200, {1, 0, 0}, 
  N[rotateVector[{1, 0, 0}, 0, 0.2, 0]], Pi/100, Pi/100, Pi/100]]