{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 3-sphere: vector fields and left-invariant parallelization\n", "\n", "This worksheet demonstrates a few capabilities of\n", "[SageManifolds](http://sagemanifolds.obspm.fr) (version 1.0, as included in SageMath 7.5)\n", "on the example of the 3-dimensional sphere, $\\mathbb{S}^3$.\n", "\n", "Click [here](https://raw.githubusercontent.com/sagemanifolds/SageManifolds/master/Worksheets/v1.0/SM_sphere_S3_vectors.ipynb) to download the worksheet file (ipynb format). To run it, you must start SageMath with the Jupyter notebook, via the command sage -n jupyter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*NB:* a version of SageMath at least equal to 7.5 is required to run this worksheet:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'SageMath version 7.5.1, Release Date: 2017-01-15'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "version()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we set up the notebook to display mathematical objects using LaTeX formatting:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%display latex" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also define a viewer for 3D plots (use 'threejs' or 'jmol' for interactive 3D graphics):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "viewer3D = 'threejs' # must be 'threejs', jmol', 'tachyon' or None (default)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To increase the computational speed, we ask for demanding computations to be parallelly performed on 8 cores:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Parallelism().set(nproc=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## $\\mathbb{S}^3$ as a 3-dimensional differentiable manifold\n", "\n", "We start by declaring $\\mathbb{S}^3$ as a differentiable manifold of dimension 3 over $\\mathbb{R}$:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "S3 = Manifold(3, 'S^3', latex_name=r'\\mathbb{S}^3', start_index=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first argument, 3, is the dimension of the manifold, while the second argument is the symbol used to label the manifold, with the LaTeX output specified by the argument latex_name. The argument start_index sets the index range to be used on the manifold for labelling components w.r.t. a basis or a frame: start_index=1 corresponds to $\\{1,2,3\\}$; the default value is start_index=0, yielding to $\\{0,1,2\\}$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "print(S3)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "3-dimensional differentiable manifold S^3" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Coordinate charts on $\\mathbb{S}^3$\n", "\n", "The 3-sphere cannot be covered by a single chart. At least two charts are necessary, for instance the charts associated with the stereographic projections from two distinct points, $N$ and $S$ say,\n", "which we may call the *North pole* and the *South pole* respectively. Let us introduce the open subsets covered by these two charts: \n", "$$U := \\mathbb{S}^3\\setminus\\{N\\}$$ \n", "$$V := \\mathbb{S}^3\\setminus\\{S\\}$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset U of the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "U = S3.open_subset('U') ; print(U)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset V of the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "V = S3.open_subset('V') ; print(V)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We declare that $\\mathbb{S}^3 = U \\cup V$:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "S3.declare_union(U, V)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Then we introduce the stereographic chart on $U$, denoting by $(x,y,z)$ the coordinates resulting from the stereographic projection from the North pole onto the equatorial plane:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (U, (x, y, z))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoN. = U.chart()\n", "stereoN" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x: (-oo, +oo); y: (-oo, +oo); z: (-oo, +oo)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoN.coord_range()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, we introduce on $V$ the coordinates $(x',y',z')$ corresponding to the stereographic projection from the South pole onto the equatorial plane:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (V, (xp, yp, zp))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS. = V.chart(\"xp:x' yp:y' zp:z'\")\n", "stereoS" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "xp: (-oo, +oo); yp: (-oo, +oo); zp: (-oo, +oo)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS.coord_range()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have to specify the **transition map** between the charts stereoN = $(U,(x,y,z))$ and stereoS = $(V,(x',y',z'))$; it is given by the standard inversion formulas:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "xp = x/(x^2 + y^2 + z^2)\n", "yp = y/(x^2 + y^2 + z^2)\n", "zp = z/(x^2 + y^2 + z^2)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r2 = x^2+y^2+z^2\n", "stereoN_to_S = stereoN.transition_map(stereoS, \n", " (x/r2, y/r2, z/r2), \n", " intersection_name='W',\n", " restrictions1= x^2+y^2+z^2!=0, \n", " restrictions2= xp^2+yp^2+zp^2!=0)\n", "stereoN_to_S.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above declaration, 'W' is the name given to the open subset where the two charts overlap: $W := U\\cap V$, the condition $x^2+y^2+z^2\\not=0$ defines $W$ as a subset of $U$, and the condition $x'^2+y'^2+z'^2\\not=0$ defines $W$ as a subset of $V$.\n", "\n", "The inverse coordinate transformation is computed by means of the method inverse():" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x = xp/(xp^2 + yp^2 + zp^2)\n", "y = yp/(xp^2 + yp^2 + zp^2)\n", "z = zp/(xp^2 + yp^2 + zp^2)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS_to_N = stereoN_to_S.inverse()\n", "stereoS_to_N.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the situation is of course perfectly symmetric regarding the coordinates $(x,y,z)$ and $(x',y',z')$.\n", "\n", "At this stage, the user's atlas has four charts:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[Chart (U, (x, y, z)),\n", " Chart (V, (xp, yp, zp)),\n", " Chart (W, (x, y, z)),\n", " Chart (W, (xp, yp, zp))]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S3.atlas()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For future reference, we store $W=U\\cap V$ into a Python variable:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset W of the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "W = U.intersection(V)\n", "print(W)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The North and South poles\n", "\n", "$N$ is the point of $V$ of stereographic coordinates $(x',y',z')=(0,0,0)$:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point N on the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "N = V((0,0,0), chart=stereoS, name='N')\n", "print(N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "while $S$ is the point of $U$ of stereographic coordinates $(x,y,z)=(0,0,0)$:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point S on the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "S = U((0,0,0), chart=stereoN, name='S')\n", "print(S)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have of course" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([N not in U, N in V, S in U, S not in V])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Embedding of $\\mathbb{S}^3$ into $\\mathbb{R}^4$\n", "\n", "Let us first declare $\\mathbb{R}^4$ as a 4-dimensional manifold covered by a single chart (the so-called **Cartesian coordinates**):" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (R^4, (T, X, Y, Z))" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R4 = Manifold(4, 'R^4', r'\\mathbb{R}^4')\n", "X4. = R4.chart()\n", "X4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The embedding of $\\mathbb{S}^3$ into $\\mathbb{R}^4$ is then defined by the standard formulas relating the stereographic coordinates to the ambient Cartesian ones when considering a **stereographic projection** from the point $(-1,0,0,0)$ to the equatorial plane $T=0$:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi: S^3 --> R^4\n", "on U: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))\n", "on V: (xp, yp, zp) |--> (T, X, Y, Z) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*xp/(xp^2 + yp^2 + zp^2 + 1), 2*yp/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1))" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rp2 = xp^2 + yp^2 + zp^2\n", "Phi = S3.diff_map(R4, {(stereoN, X4): \n", " [(1-r2)/(r2+1), 2*x/(r2+1), \n", " 2*y/(r2+1), 2*z/(r2+1)],\n", " (stereoS, X4):\n", " [(rp2-1)/(rp2+1), 2*xp/(rp2+1), \n", " 2*yp/(rp2+1), 2*zp/(rp2+1)]},\n", " name='Phi', latex_name=r'\\Phi')\n", "Phi.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With this choice of stereographic projection, the \"North\" pole is actually the point of coordinates $(-1,0,0,0)$ in $\\mathbb{R}^4$:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(-1, 0, 0, 0)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X4(Phi(N))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "while the \"South\" pole is the point of coordinates $(1,0,0,0)$:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1, 0, 0, 0)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X4(Phi(S))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hyperspherical coordinates\n", "\n", "The hyperspherical coordinates $(\\chi, \\theta, \\phi)$ generalize the standard spherical coordinates $(\\theta, \\phi)$ on $\\mathbb{S}^2$. They are defined on the open domain $A\\subset W \\subset \\mathbb{S}^3$ that is the complement of the \"origin meridian\"; since the latter is defined by $y=0$ and $x\\geq 0$, we declare:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset A of the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "A = W.open_subset('A', coord_def={stereoN.restrict(W): (y!=0, x<0), \n", " stereoS.restrict(W): (yp!=0, xp<0)})\n", "print(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then declare the chart $(A,(\\chi,\\theta,\\phi))$ by specifying the intervals spanned by the various coordinates:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (A, (ch, th, ph))" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spher. = A.chart(r'ch:(0,pi):\\chi th:(0,pi):\\theta ph:(0,2*pi):\\phi')\n", "spher" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "ch: (0, pi); th: (0, pi); ph: (0, 2*pi)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spher.coord_range()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The specification of the hyperspherical coordinates is completed by providing the transition map to the stereographic chart $(A,(x,y,z))$:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x = cos(ph)*sin(ch)*sin(th)/(cos(ch) + 1)\n", "y = sin(ch)*sin(ph)*sin(th)/(cos(ch) + 1)\n", "z = cos(th)*sin(ch)/(cos(ch) + 1)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "den = 1 + cos(ch)\n", "spher_to_stereoN = spher.transition_map(stereoN.restrict(A), \n", " (sin(ch)*sin(th)*cos(ph)/den,\n", " sin(ch)*sin(th)*sin(ph)/den,\n", " sin(ch)*cos(th)/den))\n", "spher_to_stereoN.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also provide the inverse transition map, asking to check that the provided formulas are indeed correct (argument verbose=True):" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Check of the inverse coordinate transformation:\n", " ch == 2*arctan(sqrt(-cos(ch) + 1)/sqrt(cos(ch) + 1))\n", " th == arctan2(sqrt(-cos(ch) + 1)*sin(th)/sqrt(cos(ch) + 1), cos(th)*sin(ch)/(cos(ch) + 1))\n", " ph == pi - arctan2(sin(ch)*sin(ph)*sin(th)/(cos(ch) + 1), -cos(ph)*sin(ch)*sin(th)/(cos(ch) + 1))\n", " x == x\n", " y == y\n", " z == z\n" ] } ], "source": [ "spher_to_stereoN.set_inverse(2*atan(sqrt(x^2+y^2+z^2)),\n", " atan2(sqrt(x^2+y^2), z),\n", " atan2(-y, -x)+pi,\n", " verbose=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The check is passed, modulo some lack of trigonometric simplifications in the first three lines." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "ch = 2*arctan(sqrt(x^2 + y^2 + z^2))\n", "th = arctan2(sqrt(x^2 + y^2), z)\n", "ph = pi + arctan2(-y, -x)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spher_to_stereoN.inverse().display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The transition map $(A,(\\chi,\\theta,\\phi))\\rightarrow (A,(x',y',z'))$ is obtained by combining the transition maps $(A,(\\chi,\\theta,\\phi))\\rightarrow (A,(x,y,z))$ and $(A,(x,y,z))\\rightarrow (A,(x',y',z'))$:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "xp = (cos(ch) + 1)*cos(ph)*sin(th)/sin(ch)\n", "yp = (cos(ch) + 1)*sin(ph)*sin(th)/sin(ch)\n", "zp = (cos(ch) + 1)*cos(th)/sin(ch)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spher_to_stereoS = stereoN_to_S.restrict(A) * spher_to_stereoN\n", "spher_to_stereoS.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, the transition map $(A,(x',y',z'))\\rightarrow (A,(\\chi,\\theta,\\phi))$ is obtained by combining the transition maps $(A,(x',y',z'))\\rightarrow (A,(x,y,z))$ and $(A,(x,y,z))\\rightarrow (A,(\\chi,\\theta,\\phi))$:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "ch = 2*arctan(1/sqrt(xp^2 + yp^2 + zp^2))\n", "th = arctan2(sqrt(xp^2 + yp^2)/(xp^2 + yp^2 + zp^2), zp/(xp^2 + yp^2 + zp^2))\n", "ph = pi - arctan2(yp/(xp^2 + yp^2 + zp^2), -xp/(xp^2 + yp^2 + zp^2))" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS_to_spher = spher_to_stereoN.inverse() * stereoS_to_N.restrict(A)\n", "stereoS_to_spher.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this stage, the user atlas of $\\mathbb{S}^3$ is" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[Chart (U, (x, y, z)),\n", " Chart (V, (xp, yp, zp)),\n", " Chart (W, (x, y, z)),\n", " Chart (W, (xp, yp, zp)),\n", " Chart (A, (x, y, z)),\n", " Chart (A, (xp, yp, zp)),\n", " Chart (A, (ch, th, ph))]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S3.atlas()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us get the coordinate expression of the restriction of the embedding $\\Phi$ to $A$:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi: S^3 --> R^4\n", "on A: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.display(stereoN.restrict(A), X4)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi: S^3 --> R^4\n", "on A: (ch, th, ph) |--> (T, X, Y, Z) = (cos(ch), cos(ph)*sin(ch)*sin(th), sin(ch)*sin(ph)*sin(th), cos(th)*sin(ch))" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.display(spher, X4)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi: S^3 --> R^4\n", "on U: (x, y, z) |--> (T, X, Y, Z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*x/(x^2 + y^2 + z^2 + 1), 2*y/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1))\n", "on V: (xp, yp, zp) |--> (T, X, Y, Z) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*xp/(xp^2 + yp^2 + zp^2 + 1), 2*yp/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1))\n", "on A: (ch, th, ph) |--> (T, X, Y, Z) = (cos(ch), cos(ph)*sin(ch)*sin(th), sin(ch)*sin(ph)*sin(th), cos(th)*sin(ch))" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Projections from $\\mathbb{R}^4$ to $\\mathbb{S}^3$\n", "\n", "We will need some projection operators from (a subset of) $\\mathbb{R}^4$ to $\\mathbb{S}^3$.\n", "\n", "First, let $\\mathbb{R}^4_N$ be $\\mathbb{R}^4$ minus the hyperplane $T=-1$:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [], "source": [ "R4N = R4.open_subset('R4N', latex_name=r'\\mathbb{R}^4_N', \n", " coord_def={X4: T!=-1})\n", "X4N = X4.restrict(R4N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and let us consider the following projection $\\Pi_N: \\mathbb{R}^4_N \\to U\\subset\\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "P_N: R4N --> U\n", " (T, X, Y, Z) |--> (x, y, z) = (X/(T + 1), Y/(T + 1), Z/(T + 1))" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ProjN = R4N.diff_map(U, {(X4N, stereoN): \n", " [X/(1+T), Y/(1+T), Z/(1+T)]},\n", " name='P_N', latex_name=r'\\Pi_N')\n", "ProjN.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, let $\\mathbb{R}^4_S$ be $\\mathbb{R}^4$ minus the hyperplane $T=1$ and $\\Pi_S$ the \n", "following projection $\\mathbb{R}_S\\to V\\subset \\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "R4S = R4.open_subset('R4S', latex_name=r'\\mathbb{R}^4_S', \n", " coord_def={X4: T!=1})\n", "X4S = X4.restrict(R4S)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "P_S: R4S --> V\n", " (T, X, Y, Z) |--> (xp, yp, zp) = (-X/(T - 1), -Y/(T - 1), -Z/(T - 1))" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ProjS = R4S.diff_map(V, {(X4S, stereoS): \n", " [X/(1-T), Y/(1-T), Z/(1-T)]},\n", " name='P_S', latex_name=r'\\Pi_S')\n", "ProjS.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that once applied to an embedded point of $U\\cap V\\subset \\mathbb{S}^3$, this projection reduces to the identity:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(a^2 + 1, b, c)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var('a b c', domain='real')\n", "p = S3((1+a^2,b,c), chart=stereoN)\n", "stereoN(p)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([p in U, p in V])" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([ProjN(Phi(p)) == p, ProjS(Phi(p)) == p])" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = S3((1+a^2,b,c), chart=stereoS)\n", "all([ProjN(Phi(p)) == p, ProjS(Phi(p)) == p])" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1/2*sqrt(3), 1/2*cos(b)*sin(a), 1/2*sin(a)*sin(b), 1/2*cos(a))" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = R4((sqrt(3)/2, sin(a)*cos(b)/2, sin(a)*sin(b)/2, cos(a)/2))\n", "X4(q)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([q in R4N, q in R4S])" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([Phi(ProjN(q)) == q, Phi(ProjS(q)) == q])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quaternions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We consider the (division) algebra of quaternions $\\mathbb{H}$ as $\\mathbb{R}^4$ endowed with the following (non-commutative) product:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def qprod(p,q):\n", " if p in R4 and q in R4:\n", " T1, X1, Y1, Z1 = X4(p)\n", " T2, X2, Y2, Z2 = X4(q)\n", " return R4(((T1*T2-X1*X2-Y1*Y2-Z1*Z2).simplify_full(),\n", " (T1*X2+X1*T2+Y1*Z2-Z1*Y2).simplify_full(),\n", " (T1*Y2-X1*Z2+Y1*T2+Z1*X2).simplify_full(),\n", " (T1*Z2+X1*Y2-Y1*X2+Z1*T2).simplify_full()))\n", " if p in S3 and q in S3:\n", " a = qprod(Phi(p),Phi(q))\n", " if X4(a) == (-1,0,0,0):\n", " return N\n", " return ProjN(R4N(a))\n", " raise ValueError(\"Cannot evaluate qprod of {} and {}\".format(p,q))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we have extended the definition of the quaternionic product to $\\mathbb{S}^3$ via the embedding $\\Phi$. \n", "\n", "### Distinguished quaternions on $\\mathbb{S}^3$\n", "\n", "Let us introduce two special points on $\\mathbb{S}^3$: $\\mathbf{1}$ and $-\\mathbf{1}$." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1, 0, 0, 0)" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "One = S3((0,0,0), chart=stereoN, name='1', latex_name=r'\\mathbf{1}')\n", "X4(Phi(One))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see from the Cartesian coordinates of $\\Phi(\\mathbf{1})$, the point $\\mathbf{1}$ is actually nothing but the \"South\" pole used to define the stereographic chart $(V,(x',y',z'))$:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "One == S" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(-1, 0, 0, 0)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minusOne = S3((0,0,0), chart=stereoS, name='-1', latex_name=r'-\\mathbf{1}')\n", "X4(Phi(minusOne))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The point $\\mathbf{-1}$ is thus nothing but the \"North\" pole used to define the stereographic chart $(U,(x,y,z))$:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minusOne == N" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we introduce the points $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ on $\\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 1, 0, 0)" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "I = S3((1,0,0), chart=stereoN, name='i', latex_name=r'\\mathbf{i}')\n", "X4(Phi(I))" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1, 0, 0)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS(I)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 0, 1, 0)" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "J = S3((0,1,0), chart=stereoN, name='j', latex_name=r'\\mathbf{j}')\n", "X4(Phi(J))" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 1, 0)" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS(J)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since $\\mathbf{j}$ lies in $A$, contrary to $\\mathbf{i}$, we may ask for its hyperspherical coordinates:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1/2*pi, 1/2*pi, 1/2*pi)" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spher(J)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 0, 0, 1)" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "K = S3((0,0,1), chart=stereoN, name='k', latex_name=r'\\mathbf{k}')\n", "X4(Phi(K))" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 0, 1)" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoS(K)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hamilton's fundamental relations\n", "$$\\mathbf{i} \\mathbf{j} \\mathbf{k} = \\mathbf{-1}$$\n", "$$\\mathbf{i} \\mathbf{j} = \\mathbf{k},\\quad \\mathbf{j} \\mathbf{k} = \\mathbf{i}, \\quad \\mathbf{k} \\mathbf{i} = \\mathbf{j}$$\n", "are satisfied:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qprod(I, qprod(J,K)) == minusOne" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([qprod(I,J) == K, qprod(J,K) == I,\n", " qprod(K,I) == J])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These relations imply $\\mathbf{i}^2 = \\mathbf{-1}$, $\\mathbf{j}^2 = \\mathbf{-1}$ and $\\mathbf{k}^2 = \\mathbf{-1}$:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([qprod(One,One) == One, qprod(I,I) == minusOne,\n", " qprod(J,J) == minusOne, qprod(K,K) == minusOne])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us introduce $\\mathbf{-i}$, $\\mathbf{-j}$ and $\\mathbf{-k}$, as points of $\\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, -1, 0, 0)" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minusI = qprod(minusOne, I)\n", "X4(Phi(minusI))" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 0, -1, 0)" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minusJ = qprod(minusOne, J)\n", "X4(Phi(minusJ))" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(0, 0, 0, -1)" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minusK = qprod(minusOne, K)\n", "X4(Phi(minusK))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Quaternionic conjugation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the comments below (but not in the SageMath code), we shall identify $\\mathbf{1}\\in \\mathbb{S}^3$ with $\\Phi(\\mathbf{1})\\in \\mathbb{R}^4$, $\\mathbf{i}\\in \\mathbb{S}^3$ with $\\Phi(\\mathbf{i})\\in \\mathbb{R}^4$, etc. In particular, we consider $(\\mathbf{1}, \\mathbf{i}, \\mathbf{j},\\mathbf{k})$ as a basis of the quaternion algebra $\\mathbb{H}$. \n", "\n", "The *conjugate* of a quaternion $q = T + X\\mathbf{i} + Y\\mathbf{j} + Z\\mathbf{k}$ is $\\bar{q} = T - X\\mathbf{i} - Y\\mathbf{j} - Z\\mathbf{k}$; hence we define:\n" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def qconj(p):\n", " if p in R4:\n", " T, X, Y, Z = X4(p)\n", " return R4((T, -X, -Y, -Z))\n", " if p in S3:\n", " a = qconj(Phi(p))\n", " if X4(a) == (-1,0,0,0):\n", " return N\n", " return ProjN(a)\n", " raise ValueError(\"Cannot evaluate qconf of {}\".format(p)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In particular, we have $\\bar{\\mathbf{1}} = \\mathbf{1}$, $\\bar{\\mathbf{i}} = -\\mathbf{i}$, $\\bar{\\mathbf{j}} = -\\mathbf{j}$ and $\\bar{\\mathbf{k}} = -\\mathbf{k}$:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([qconj(One) == One, \n", " qconj(I) == minusI,\n", " qconj(J) == minusJ, \n", " qconj(K) == minusK])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The conjugate of an element of $\\mathbb{S}^3$" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(-a, -b, -c)" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "assume(a != 0) # to ensure that qconj(p) is not N\n", "p = S3((a,b,c), chart=stereoN)\n", "stereoN(qconj(p))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(-a, -b, -c)" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = S3((a,b,c), chart=stereoS)\n", "stereoS(qconj(p))" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [], "source": [ "forget(a!=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Norm of a quaternion\n", "\n", "The quaternionic norm $\\| q\\| = \\sqrt{q\\bar{q}}$ coincide with the Euclidean norm in $\\mathbb{R}^4$, so that $\\mathbb{S}^3$ can be viewed as the set of unit quaternions; hence we define:" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def qnorm(p):\n", " if p in R4:\n", " T, X, Y, Z = X4(p)\n", " return (sqrt(T^2 + X^2 + Y^2 + Z^2)).simplify_full()\n", " if p in S3:\n", " return 1\n", " raise ValueError(\"Cannot evaluate qnorm of {}\".format(p)) " ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "sqrt(a^2 + b^2 + c^2 + d^2)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var('d', domain='real')\n", "q = R4((a,b,c,d))\n", "qnorm(q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that $\\| q\\|^2 = q\\bar{q}$:" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R4((qnorm(q)^2,0,0,0)) == qprod(q, qconj(q))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As elements of $\\mathbb{S}^3$, $\\mathbf{1}$, $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ have all unit norm:" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(qnorm(One), qnorm(I), qnorm(J), qnorm(K)) == (1, 1, 1, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lie group structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Right translation by $\\mathbf{i}$\n", "\n", "The right translation by $\\mathbf{i}$ is the map $\\bar{R}_{\\mathbf{i}}: p \\mapsto p \\mathbf{i}$. We define it first at the level of $\\mathbb{R}^4$:" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R^4 --> R^4\n", " (T, X, Y, Z) |--> (-X, T, Z, -Y)" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = R4((T,X,Y,Z))\n", "RI_R4 = R4.diff_map(R4, X4(qprod(p, Phi(I))))\n", "RI_R4.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Focusing on its action on $\\mathbb{S}^3$, we consider then the map ${\\bar R}_{\\mathbf{i}}\\circ\\Phi$:" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "S^3 --> R^4\n", "on U: (x, y, z) |--> (T, X, Y, Z) = (-2*x/(x^2 + y^2 + z^2 + 1), -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1), 2*z/(x^2 + y^2 + z^2 + 1), -2*y/(x^2 + y^2 + z^2 + 1))\n", "on V: (xp, yp, zp) |--> (T, X, Y, Z) = (-2*xp/(xp^2 + yp^2 + zp^2 + 1), (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 1))\n", "on A: (ch, th, ph) |--> (T, X, Y, Z) = (-cos(ph)*sin(ch)*sin(th), cos(ch), cos(th)*sin(ch), -sin(ch)*sin(ph)*sin(th))" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RI_S3_R4 = RI_R4 * Phi\n", "RI_S3_R4.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let $U_{\\mathbf{i}} := U \\setminus \\{\\mathbf{i}\\}$; since the coordinates of $\\mathbf{i}$ in the chart $(U,(x,y,z))$ are $(1,0,0)$, we declare $U_{\\mathbf{i}}$ as" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [], "source": [ "UI = U.open_subset('U_I', latex_name=r'U_{\\mathbf{i}}',\n", " coord_def={stereoN: (x!=1, y!=0, z!=0)})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we restrict $R_{\\mathbf{i}}\\circ\\Phi$ to $U_{\\mathbf{i}}$ the codomain can be taken to be $\\mathbb{R}^4_N$ since $\\mathbf{i}$ is the only point of $\\mathbb{S}^3$ for which $T(R_{\\mathbf{i}}(p)) = -1$. Hence we may apply the operator $\\Pi_N$ to define the right translation by $\\mathbf{i}$ as a map $U_{\\mathbf{i}}\\to U$:" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "U_I --> U\n", " (x, y, z) |--> (x, y, z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 - 2*x + 1), 2*z/(x^2 + y^2 + z^2 - 2*x + 1), -2*y/(x^2 + y^2 + z^2 - 2*x + 1))" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RI_UI = ProjN * RI_S3_R4.restrict(UI, subcodomain=R4N)\n", "RI_UI.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, if we restrict $R_{\\mathbf{i}}\\circ\\Phi$ to $V_{-\\mathbf{i}} := V \\setminus\\{-\\mathbf{i}\\}$, we get a map $V_{-\\mathbf{i}} \\to \\mathbb{R}^4_{S}$, so that composing by $\\Pi_S$, the right translation by $\\mathbf{i}$ becomes a map $V_{-\\mathbf{i}}\\to V$:" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "V_mI --> V\n", " (xp, yp, zp) |--> (xp, yp, zp) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 2*xp + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 2*xp + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 2*xp + 1))" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VmI = V.open_subset('V_mI', latex_name=r'V_{-\\mathbf{i}}',\n", " coord_def={stereoS: (xp!=-1, yp!=0, zp!=0)})\n", "RI_VmI = ProjS * RI_S3_R4.restrict(VmI, subcodomain=R4S)\n", "RI_VmI.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We note that $\\mathbb{S}^3 = U_{\\mathbf{i}} \\cup V_{-\\mathbf{i}}$:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [], "source": [ "S3.declare_union(UI, VmI)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consequently, we can define the right translation by $\\mathbf{i}$ as a map \n", "$R_{\\mathbf{i}}: \\mathbb{S}^3\\to \\mathbb{S}^3$ by providing the coordinate expressions obtained above on $U_{\\mathbf{i}}$ and $V_{-\\mathbf{i}}$: " ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": true }, "outputs": [], "source": [ "RI = S3.diff_map(S3, name='R_I', latex_name=r'{R_{\\mathbf{i}}}')\n", "RI.add_expression(stereoN.restrict(UI), stereoN, \n", " RI_UI.expr(stereoN.restrict(UI), stereoN))\n", "RI.add_expression(stereoS.restrict(VmI), stereoS, \n", " RI_VmI.expr(stereoS.restrict(VmI), stereoS))" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R_I: S^3 --> S^3\n", "on U_I: (x, y, z) |--> (x, y, z) = (-(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 - 2*x + 1), 2*z/(x^2 + y^2 + z^2 - 2*x + 1), -2*y/(x^2 + y^2 + z^2 - 2*x + 1))" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RI.display(stereoN.restrict(UI), stereoN)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R_I: S^3 --> S^3\n", "on V_mI: (xp, yp, zp) |--> (xp, yp, zp) = ((xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 2*xp + 1), 2*zp/(xp^2 + yp^2 + zp^2 + 2*xp + 1), -2*yp/(xp^2 + yp^2 + zp^2 + 2*xp + 1))" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RI.display(stereoS.restrict(VmI), stereoS)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check the formulas $R_{\\mathbf{i}}(\\mathbf{1})=\\mathbf{i}$, $R_{\\mathbf{i}}(-\\mathbf{1})=-\\mathbf{i}$, $R_{\\mathbf{i}}(\\mathbf{i})=-\\mathbf{1}$, $R_{\\mathbf{i}}(-\\mathbf{i})=\\mathbf{1}$, $R_{\\mathbf{i}}(\\mathbf{j})=-\\mathbf{k}$, $R_{\\mathbf{i}}(-\\mathbf{j})=\\mathbf{k}$, $R_{\\mathbf{i}}(\\mathbf{k})=\\mathbf{j}$ and $R_{\\mathbf{i}}(-\\mathbf{k})=-\\mathbf{j}$:" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([RI(One)==I, RI(minusOne)==minusI, \n", " RI(I)==minusOne, RI(minusI)==One,\n", " RI(J)==minusK, RI(minusJ)==K,\n", " RI(K)==J, RI(minusK)==minusJ])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Left-invariant vector field induced by the right translation by $\\mathbf{i}$\n", "\n", "Let us recall the expression of the right translation by $\\mathbf{i}$ on $\\mathbb{R}^4$:" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R^4 --> R^4\n", " (T, X, Y, Z) |--> (-X, T, Z, -Y)" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RI_R4.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We turn it into a vector field $E_{\\mathbf{i}}$ on $\\mathbb{R}^4$ by identifying $T_p\\mathbb{R}^4$ and $\\mathbb{R}^4$ at each point $p\\in\\mathbb{R}^4$:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_I = -X d/dT + T d/dX + Z d/dY - Y d/dZ" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EI = R4.vector_field(name='E_I', latex_name=r'E_{\\mathbf{i}}')\n", "EI[:] = RI_R4.expression()\n", "EI.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"radial\" vector field on $\\mathbb{R}^4$ is" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "r = T d/dT + X d/dX + Y d/dY + Z d/dZ" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = R4.vector_field(name='r')\n", "r[:] = (T,X,Y,Z)\n", "r.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is clear that $r\\cdot E_{\\mathbf{i}}=0$, where $\\cdot$ denotes the standard Euclidean scalar product in $\\mathbb{R}^4$. We can check this property explicitely by introducing the Euclidean metric:" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "h = dT*dT + dX*dX + dY*dY + dZ*dZ" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h = R4.metric('h')\n", "h[0,0], h[1,1], h[2,2], h[3, 3] = 1, 1, 1, 1\n", "h.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "so that $r\\cdot E_{\\mathbf{i}} = h(r, E_{\\mathbf{i}})$:" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h(r, EI) == 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This proves that the vector field $E_{\\mathbf{i}}$ is tangent to $\\mathbb{S}^3$, or more precisely to the embedded submanifold $\\Phi(\\mathbb{S}^3)$. Consequently, there exists a vector field $\\varepsilon_{\\mathbf{i}}$ on $\\mathbb{S}^3$, the pushforward of which by $\\Phi$ is \n", "$E_{\\mathbf{i}}$:\n", "$$\n", " E_{\\mathbf{i}} = \\Phi^* \\varepsilon_{\\mathbf{i}}\n", "$$\n", "Let us determine the components of $\\varepsilon_{\\mathbf{i}}$ in the vector frame \n", "$\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ associated with the stereographic coordinates on $U$:" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Coordinate frame (U, (d/dx,d/dy,d/dz))" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameN = stereoN.frame()\n", "frameN" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pushforwards by $\\Phi$ of the stereographic frame vectors are:" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[Vector field Phi^*(d/dx) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n", " Vector field Phi^*(d/dy) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n", " Vector field Phi^*(d/dz) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4]" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameN_R4 = [Phi.pushforward(frameN[i]) for i in S3.irange()]\n", "frameN_R4" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vector field Phi^*(d/dx) along the Open subset U of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4\n" ] } ], "source": [ "print(frameN_R4[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The expressions of $\\Phi^* \\frac{\\partial}{\\partial x}$, $\\Phi^* \\frac{\\partial}{\\partial y}$\n", "and $\\Phi^* \\frac{\\partial}{\\partial z}$ in terms of the canonical vector frame $\\left(\\frac{\\partial}{\\partial T}, \\frac{\\partial}{\\partial X},\\frac{\\partial}{\\partial Y},\\frac{\\partial}{\\partial Z}\\right)$ of $\\mathbb{R}^4$ are" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi^*(d/dx) = -4*x/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 2*(x^2 - y^2 - z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX - 4*x*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY - 4*x*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameN_R4[0].display()" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi^*(d/dy) = -4*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 4*x*y/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX + 2*(x^2 - y^2 + z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY - 4*y*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameN_R4[1].display()" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi^*(d/dz) = -4*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dT - 4*x*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dX - 4*y*z/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dY + 2*(x^2 + y^2 - z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) d/dZ" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameN_R4[2].display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us denote by $(a,b,c)$ the components of $\\left. \\varepsilon_{\\mathbf{i}} \\right|_{U}$ in the stereographic frame:\n", "$$\\left. \\varepsilon_{\\mathbf{i}} \\right|_{U} = a \\frac{\\partial}{\\partial x}\n", " + b \\frac{\\partial}{\\partial y}\n", " + c \\frac{\\partial}{\\partial z}$$\n", "Since $\\Phi^*\\varepsilon_{\\mathbf{i}}=\\left. E_{\\mathbf{i}} \\right| _{\\Phi(\\mathbb{S}^3)}$, \n", "we get the linear system\n", "$$a\\, \\Phi^* \\frac{\\partial}{\\partial x} + b \\, \\Phi^* \\frac{\\partial}{\\partial y} \n", " + c\\, \\Phi^* \\frac{\\partial}{\\partial z} =\n", " \\left. E_{\\mathbf{i}} \\right| _{\\Phi(U)}$$\n", "to be solved in $(a,b,c)$. The right-hand side is" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*x/(x^2 + y^2 + z^2 + 1),\n", " -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n", " 2*z/(x^2 + y^2 + z^2 + 1),\n", " -2*y/(x^2 + y^2 + z^2 + 1)]" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = U((x,y,z), chart=stereoN, name='p')\n", "EIp = EI.at(Phi(p))\n", "EIp[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence the system:" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-4*(a*x + b*y + c*z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -2*x/(x^2 + y^2 + z^2 + 1),\n", " -2*(a*x^2 + 2*b*x*y - a*y^2 + 2*c*x*z - a*z^2 - a)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n", " 2*(b*x^2 - 2*a*x*y - b*y^2 - 2*c*y*z + b*z^2 + b)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == 2*z/(x^2 + y^2 + z^2 + 1),\n", " 2*(c*x^2 + c*y^2 - c*z^2 - 2*(a*x + b*y)*z + c)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) == -2*y/(x^2 + y^2 + z^2 + 1)]" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EIp[i]\n", " for i in R4.irange()]\n", "eqs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The unique solution is" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[{a: 1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2, b: x*y + z, c: x*z - y}]" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "sol" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The expression of $\\varepsilon_{\\mathbf{i}}$ in terms of the frame associated with the stereographic coordinates on $U$ is thus" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "epsI = sol[0][a] * frameN[1] + sol[0][b] * frameN[2] + sol[0][c] * frameN[3]\n", "epsI.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Global vector frame on $\\mathbb{S}^3$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The vector field $E_{\\mathbf{i}}$ never vanishes on $\\Phi(\\mathbb{S}^3)$, since it vanishes only at $(T,X,Y,Z)=(0,0,0,0)$. It follows that $\\varepsilon_{\\mathbf{i}}$ never vanishes on $\\mathbb{S}^3$. \n", "Similarly, starting from the right translation by $\\mathbf{j}$ and the right translation by $\\mathbf{k}$, we can construct global vector fields $\\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_{\\mathbf{k}}$ that are always nonzero on $\\mathbb{S}^3$. \n", "Moreover, the vector fields\n", "$\\varepsilon_{\\mathbf{i}}$, $\\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_{\\mathbf{k}}$ are linearly independent at any point of $\\mathbb{S}^3$. They thus form a global vector frame of $\\mathbb{S}^3$. This means that, as any Lie group, $\\mathbb{S}^3$ is a **parallelizable manifold**. This contrasts with $\\mathbb{S}^2$. Actually the only parallelizable spheres are $\\mathbb{S}^1$, $\\mathbb{S}^3$ and $\\mathbb{S}^7$.\n", "\n", "Let us declare the global vector frame $(\\varepsilon_{\\mathbf{i}}, \\varepsilon_{\\mathbf{j}}, \\varepsilon_{\\mathbf{k}})$, using the notations $\\varepsilon_1 := \\varepsilon_{\\mathbf{i}}$, $\\varepsilon_2 := \\varepsilon_{\\mathbf{j}}$ and $\\varepsilon_3 := \\varepsilon_{\\mathbf{k}}$:" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector frame (S^3, (E_1,E_2,E_3))" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E = S3.vector_frame('E', latex_symbol=r'\\varepsilon')\n", "E" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stereographic components of the vector field $\\varepsilon_1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On $U$, we can set the components of $\\varepsilon_1$ in the stereographic frame $\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ to those obtained above:" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = (1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E[1].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[1].display(stereoN.frame())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that the pushforward of $\\varepsilon_1$ by $\\Phi$ coincides with $E_{\\mathbf{i}}$:" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Phi^*(E_1) = -2*x/(x^2 + y^2 + z^2 + 1) d/dT - (x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1) d/dX + 2*z/(x^2 + y^2 + z^2 + 1) d/dY - 2*y/(x^2 + y^2 + z^2 + 1) d/dZ" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E1U_R4 = Phi.pushforward(E[1].restrict(U))\n", "E1U_R4.display()" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([E1U_R4[i] == EIp[i] for i in R4.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us now determine the components of $\\varepsilon_1$ in the vector frame $\\left(\\frac{\\partial}{\\partial x'}, \\frac{\\partial}{\\partial y'}, \\frac{\\partial}{\\partial z'}\\right)$ associated with the stereographic chart from the South pole:" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Coordinate frame (V, (d/dxp,d/dyp,d/dzp))" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameS = stereoS.frame()\n", "frameS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the same procedure as for the stereographic frame from the North pole:" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[Vector field Phi^*(d/dxp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n", " Vector field Phi^*(d/dyp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4,\n", " Vector field Phi^*(d/dzp) along the Open subset V of the 3-dimensional differentiable manifold S^3 with values on the 4-dimensional differentiable manifold R^4]" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frameS_R4 = [Phi.pushforward(frameS[i]) for i in S3.irange()]\n", "frameS_R4" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*xp/(xp^2 + yp^2 + zp^2 + 1),\n", " (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n", " 2*zp/(xp^2 + yp^2 + zp^2 + 1),\n", " -2*yp/(xp^2 + yp^2 + zp^2 + 1)]" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = V((xp,yp,zp), chart=stereoS, name='p')\n", "EIp = EI.at(Phi(p))\n", "EIp[:]" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[4*(a*xp + b*yp + c*zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == -2*xp/(xp^2 + yp^2 + zp^2 + 1),\n", " -2*(a*xp^2 + 2*b*xp*yp - a*yp^2 + 2*c*xp*zp - a*zp^2 - a)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n", " 2*(b*xp^2 - 2*a*xp*yp - b*yp^2 - 2*c*yp*zp + b*zp^2 + b)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == 2*zp/(xp^2 + yp^2 + zp^2 + 1),\n", " 2*(c*xp^2 + c*yp^2 - c*zp^2 - 2*(a*xp + b*yp)*zp + c)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) == -2*yp/(xp^2 + yp^2 + zp^2 + 1)]" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EIp[i] \n", " for i in R4.irange()]\n", "eqs" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[{a: -1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2, b: -xp*yp + zp, c: -xp*zp - yp}]" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "sol" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = (-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dxp + (-xp*yp + zp) d/dyp + (-xp*zp - yp) d/dzp" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E[1].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[1].display(stereoS.frame())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we check the correctness by" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E1V_R4 = Phi.pushforward(E[1].restrict(V))\n", "all([E1V_R4[i] == EIp[i] for i in R4.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stereographic components of the vector field $\\varepsilon_2$\n", "\n", "The vector field $\\varepsilon_2 = \\varepsilon_{\\mathbf{j}}$ is induced by the right translation by $\\mathbf{j}$:" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R^4 --> R^4\n", " (T, X, Y, Z) |--> (-Y, -Z, T, X)" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = R4((T,X,Y,Z))\n", "RJ_R4 = R4.diff_map(R4, X4(qprod(p, Phi(J))))\n", "RJ_R4.display()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_J = -Y d/dT - Z d/dX + T d/dY + X d/dZ" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EJ = R4.vector_field(name='E_J', latex_name=r'E_{\\mathbf{j}}')\n", "EJ[:] = RJ_R4.expression()\n", "EJ.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We determine the components of $\\varepsilon_2$ in the stereographic frame from the North pole as we did for $\\varepsilon_1$:" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*y/(x^2 + y^2 + z^2 + 1),\n", " -2*z/(x^2 + y^2 + z^2 + 1),\n", " -(x^2 + y^2 + z^2 - 1)/(x^2 + y^2 + z^2 + 1),\n", " 2*x/(x^2 + y^2 + z^2 + 1)]" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = U((x,y,z), chart=stereoN)\n", "EJp = EJ.at(Phi(p))\n", "EJp[:]" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = (x*y - z) d/dx + (-1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2) d/dy + (y*z + x) d/dz" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EJp[i]\n", " for i in R4.irange()]\n", "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "E[2].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[2].display(stereoN.frame())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check:" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E2U_R4 = Phi.pushforward(E[2].restrict(U))\n", "all([E2U_R4[i] == EJp[i] for i in R4.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We turn now to the stereographic components from the South pole:" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*yp/(xp^2 + yp^2 + zp^2 + 1),\n", " -2*zp/(xp^2 + yp^2 + zp^2 + 1),\n", " (xp^2 + yp^2 + zp^2 - 1)/(xp^2 + yp^2 + zp^2 + 1),\n", " 2*xp/(xp^2 + yp^2 + zp^2 + 1)]" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = V((xp,yp,zp), chart=stereoS)\n", "EJp = EJ.at(Phi(p))\n", "EJp[:]" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = (-xp*yp - zp) d/dxp + (1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dyp + (-yp*zp + xp) d/dzp" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EJp[i] \n", " for i in R4.irange()]\n", "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "E[2].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[2].display(stereoS.frame())" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E2V_R4 = Phi.pushforward(E[2].restrict(V))\n", "all([E2V_R4[i] == EJp[i] for i in R4.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stereographic components of the vector field $\\varepsilon_3$\n", "\n", "The vector field $\\varepsilon_3 = \\varepsilon_{\\mathbf{k}}$ is induced by the right translation by $\\mathbf{k}$:" ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R^4 --> R^4\n", " (T, X, Y, Z) |--> (-Z, Y, -X, T)" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = R4((T,X,Y,Z))\n", "RK_R4 = R4.diff_map(R4, X4(qprod(p, Phi(K))))\n", "RK_R4.display()" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_K = -Z d/dT + Y d/dX - X d/dY + T d/dZ" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EK = R4.vector_field(name='E_K', latex_name=r'E_{\\mathbf{k}}')\n", "EK[:] = RK_R4.expression()\n", "EK.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The components of $\\varepsilon_3$ in the two stereographic frames are obtained in the same manner as for $\\varepsilon_1$ and $\\varepsilon_2$" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = (x*z + y) d/dx + (y*z - x) d/dy + (-1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2) d/dz" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = U((x,y,z), chart=stereoN)\n", "EKp = EK.at(Phi(p))\n", "eqs = [(a*frameN_R4[0][i] + b*frameN_R4[1][i] + c*frameN_R4[2][i]).expr() == EKp[i]\n", " for i in R4.irange()]\n", "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "E[3].restrict(U)[stereoN.frame(),:,stereoN] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[3].display(stereoN.frame())" ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E3U_R4 = Phi.pushforward(E[3].restrict(U))\n", "all([E3U_R4[i] == EKp[i] for i in R4.irange()])" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = (-xp*zp + yp) d/dxp + (-yp*zp - xp) d/dyp + (1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2) d/dzp" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = V((xp,yp,zp), chart=stereoS)\n", "EKp = EK.at(Phi(p))\n", "eqs = [(a*frameS_R4[0][i] + b*frameS_R4[1][i] + c*frameS_R4[2][i]).expr() == EKp[i] \n", " for i in R4.irange()]\n", "sol = solve(eqs, (a,b,c), solution_dict=True)\n", "E[3].restrict(V)[stereoS.frame(),:, stereoS] = (sol[0][a], sol[0][b], sol[0][c])\n", "E[3].display(stereoS.frame())" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E3V_R4 = Phi.pushforward(E[3].restrict(V))\n", "all([E3V_R4[i] == EKp[i] for i in R4.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Summary\n", "\n", "The vector fields on $\\mathbb{R}^4$ induced by the right translations by respectively $\\mathbf{i}$, $\\mathbf{j}$ and $\\mathbf{k}$ are" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_I = -X d/dT + T d/dX + Z d/dY - Y d/dZ" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_J = -Y d/dT - Z d/dX + T d/dY + X d/dZ" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_K = -Z d/dT + Y d/dX - X d/dY + T d/dZ" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show(EI.display())\n", "show(EJ.display())\n", "show(EK.display())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a check, we note that the above formulas coincide with those given in Problem 8-6 of Lee's textbook [*Introduction to Smooth Manifolds*](https://dx.doi.org/10.1007/978-1-4419-9982-5), 2nd ed., Springer (New York) (2013).\n", "\n", "The vector fields $E_{\\mathbf{i}}$, $E_{\\mathbf{j}}$ and $E_{\\mathbf{k}}$ are tangent to $\\Phi(\\mathbb{S}^3)\\subset\\mathbb{R}^4$ and therefore induce three vectors fields on $\\mathbb{S}^3$, $\\varepsilon_1$, $\\varepsilon_2$ and $\\varepsilon_3$, which form a global vector frame of $\\mathbb{S}^3$. The components of these vector fields with respect to the (local) stereographic frames are " ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = (1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2) d/dx + (x*y + z) d/dy + (x*z - y) d/dz" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = (x*y - z) d/dx + (-1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2) d/dy + (y*z + x) d/dz" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = (x*z + y) d/dx + (y*z - x) d/dy + (-1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2) d/dz" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " \n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = (-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dxp + (-xp*yp + zp) d/dyp + (-xp*zp - yp) d/dzp" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = (-xp*yp - zp) d/dxp + (1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2) d/dyp + (-yp*zp + xp) d/dzp" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = (-xp*zp + yp) d/dxp + (-yp*zp - xp) d/dyp + (1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2) d/dzp" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in S3.irange():\n", " show(E[i].display(stereoN.frame()))\n", "print(\" \")\n", "for i in S3.irange():\n", " show(E[i].display(stereoS.frame()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To complete the connection between the global frame $(\\varepsilon_i)$ and the stereographic frames in $U$ and $V$, we shall declare the change-of-basis formulas related the two frames, so that they can be used automatically by SageMath when necessary. Starting with $U$, we first consider the restriction of the global frame to $U$:" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector frame (U, (E_1,E_2,E_3))" ] }, "execution_count": 128, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U = E.restrict(U); E_U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The automorphism $P$ such that on $U$, $\\varepsilon_i = P\\left(\\frac{\\partial}{\\partial x^i}\\right)$ is read directely on the components of $\\varepsilon_i$ with respect to the\n", "frame $\\left(\\frac{\\partial}{\\partial x^i}\\right) = \\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z} \\right)$:" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[ 1/2*x^2 - 1/2*y^2 - 1/2*z^2 + 1/2 x*y - z x*z + y]\n", "[ x*y + z -1/2*x^2 + 1/2*y^2 - 1/2*z^2 + 1/2 y*z - x]\n", "[ x*z - y y*z + x -1/2*x^2 - 1/2*y^2 + 1/2*z^2 + 1/2]" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P = U.automorphism_field()\n", "for i in S3.irange():\n", " for j in S3.irange():\n", " P[j,i] = E_U[i][j]\n", "P[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check of the formula $\\varepsilon_i = P\\left(\\frac{\\partial}{\\partial x^i}\\right)$:" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([E_U[i] == P(frameN[i]) for i in S3.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We declare the change of frame by the method set_change_of_frame:" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": true }, "outputs": [], "source": [ "U.set_change_of_frame(frameN, E_U, P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The inverse is automatically computed:" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[ 2*(x^2 - y^2 - z^2 + 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(x*y + z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(x*z - y)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]\n", "[ 4*(x*y - z)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) -2*(x^2 - y^2 + z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(y*z + x)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]\n", "[ 4*(x*z + y)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) 4*(y*z - x)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1) -2*(x^2 + y^2 - z^2 - 1)/(x^4 + y^4 + z^4 + 2*(x^2 + 1)*y^2 + 2*(x^2 + y^2 + 1)*z^2 + 2*x^2 + 1)]" ] }, "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U.change_of_frame(E_U, frameN)[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We do the same thing on $V$:" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector frame (V, (E_1,E_2,E_3))" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_V = E.restrict(V); E_V" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-1/2*xp^2 + 1/2*yp^2 + 1/2*zp^2 - 1/2 -xp*yp - zp -xp*zp + yp]\n", "[ -xp*yp + zp 1/2*xp^2 - 1/2*yp^2 + 1/2*zp^2 - 1/2 -yp*zp - xp]\n", "[ -xp*zp - yp -yp*zp + xp 1/2*xp^2 + 1/2*yp^2 - 1/2*zp^2 - 1/2]" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P = V.automorphism_field()\n", "for i in S3.irange():\n", " for j in S3.irange():\n", " P[j,i] = E_V[i][j]\n", "P[:]" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([E_V[i] == P(frameS[i]) for i in S3.irange()])" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": true }, "outputs": [], "source": [ "V.set_change_of_frame(frameS, E_V, P)" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[-2*(xp^2 - yp^2 - zp^2 + 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(xp*yp - zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(xp*zp + yp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]\n", "[ -4*(xp*yp + zp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) 2*(xp^2 - yp^2 + zp^2 - 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(yp*zp - xp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]\n", "[ -4*(xp*zp - yp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) -4*(yp*zp + xp)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1) 2*(xp^2 + yp^2 - zp^2 - 1)/(xp^4 + yp^4 + zp^4 + 2*(xp^2 + 1)*yp^2 + 2*(xp^2 + yp^2 + 1)*zp^2 + 2*xp^2 + 1)]" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "V.change_of_frame(E_V, frameS)[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### $\\mathbb{S}^3$ as a parallelizable manifold\n", "\n", "Because it admits a global vector frame, $\\mathbb{S}^3$ is a parallelizable manifold:" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S3.is_manifestly_parallelizable()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equivalently, the set $\\chi(\\mathbb{S}^3)$ of vector fields on $\\mathbb{S}^3$ is a **free module of finite rank** over the algebra $C^\\infty(\\mathbb{S}^3)$ (the algebra of smooth scalar fields on $\\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Free module X(S^3) of vector fields on the 3-dimensional differentiable manifold S^3" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "XS3 = S3.vector_field_module()\n", "XS3" ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isinstance(XS3, FiniteRankFreeModule)" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Category of finite dimensional modules over Algebra of differentiable scalar fields on the 3-dimensional differentiable manifold S^3\n" ] } ], "source": [ "print(XS3.category())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a free module, $\\chi(\\mathbb{S}^3)$ admits a basis, which is nothing but the global vector frame constructed above:" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Vector frame (S^3, (E_1,E_2,E_3))" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "XS3.default_basis()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Structure coefficients of the global frame\n", "\n", "On $U$, we may compute the **Lie brackets** $[\\varepsilon_i, \\varepsilon_j]$ of two vectors of the global frame:" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "2 E_3" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[1].bracket(E_U[2]).display(E_U)" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "-2 E_2" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[1].bracket(E_U[3]).display(E_U)" ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "2 E_1" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[2].bracket(E_U[3]).display(E_U)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equivalently, the structure coefficients of the frame $\\varepsilon$ are" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "3-indices components w.r.t. Vector frame (U, (E_1,E_2,E_3)), with antisymmetry on the index positions (1, 2)" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C = E_U.structure_coeff(); C" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "C_123 = 2 \n", "C_132 = -2 \n", "C_213 = -2 \n", "C_231 = 2 \n", "C_312 = 2 \n", "C_321 = -2 " ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.display('C')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By definition, the structure coefficients $C_{kij}$ obey the relation\n", "$[\\varepsilon_i, \\varepsilon_j] = C_{kij} \\, \\varepsilon_k$, as we can check:" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[1].bracket(E_U[2]) == sum(C[[k,1,2]]*E_U[k] for k in S3.irange())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tangent space at the unit element\n", "\n", "The Lie algebra of $\\mathbb{S}^3$ can be identified with the tangent space at the unit element $\\mathbf{1}$:" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Tangent space at Point 1 on the 3-dimensional differentiable manifold S^3" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T1 = S3.tangent_space(One)\n", "T1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The values taken by the global frame vectors at $\\mathbf{1}$ are" ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = 1/2 d/dx" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = 1/2 d/dy" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = 1/2 d/dz" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in S3.irange():\n", " show(E[i].at(One).display())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each of these vectors belongs to $T_{\\mathbf{1}}\\mathbb{S}^3$:" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Tangent space at Point 1 on the 3-dimensional differentiable manifold S^3" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E[1].at(One).parent()" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "True" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all([E[i].at(One).parent() is T1 for i in S3.irange()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simple expressions of $(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)$ in terms of the basis $\\left(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z}\\right)$ of $T_{\\mathbf{1}}\\mathbb{S}^3$ induced by the stereographic coordinates stems from the fact that\n", "the $\\mathbb{R}^4$ vectors $(E_{\\mathbf{i}}, E_{\\mathbf{j}}, E_{\\mathbf{k}})$ coincide with \n", "the vectors $\\left(\\frac{\\partial}{\\partial X}, \\frac{\\partial}{\\partial Y}, \\frac{\\partial}{\\partial Z}\\right)$ at $\\Phi(\\mathbf{1})$:" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_I = d/dX" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EI.at(Phi(One)).display()" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_J = d/dY" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EJ.at(Phi(One)).display()" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_K = d/dZ" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EK.at(Phi(One)).display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The extra factor $1/2$, which appears in the above expressions of $(\\varepsilon_1, \\varepsilon_2, \\varepsilon_3)$, arises from the fact that the stereographic coordinates $(x,y,z)$ have been defined with respect to the hyperplane $T=0$ and not to the hyperplane $T=1$ (to which $\\Phi(\\mathbf{1})$ belongs). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Link with the Hopf coordinates\n", "\n", "The Hopf coordinates have been introduced in the worksheet [3-sphere: charts, quaternions and the Hopf fribration](http://nbviewer.jupyter.org/github/sagemanifolds/SageManifolds/blob/master/Worksheets/v1.0/SM_sphere_S3_Hopf.ipynb)." ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": false }, "outputs": [], "source": [ "B = U.open_subset('B', coord_def={stereoN.restrict(U): \n", " [x^2+y^2!=0, x^2+y^2+z^2!=1, \n", " (1-x^2-y^2-z^2)*x-2*y*z!=0]})" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Chart (B, (eta, alpha, beta))" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hcoord. = B.chart(r\"eta:(0,pi/2):\\eta alpha:(0,2*pi):\\alpha beta:(0,2*pi):\\beta\")\n", "Hcoord" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x = cos(alpha + beta)*sin(eta)/(cos(eta)*sin(alpha) + 1)\n", "y = sin(alpha + beta)*sin(eta)/(cos(eta)*sin(alpha) + 1)\n", "z = cos(alpha)*cos(eta)/(cos(eta)*sin(alpha) + 1)" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hcoord_to_stereoN = Hcoord.transition_map(\n", " stereoN.restrict(U),\n", " (sin(eta)*cos(alp+bet)/(1+cos(eta)*sin(alp)),\n", " sin(eta)*sin(alp+bet)/(1+cos(eta)*sin(alp)),\n", " cos(eta)*cos(alp)/(1+cos(eta)*sin(alp))))\n", "Hcoord_to_stereoN.display()" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "eta = arcsin(2*sqrt(x^2 + y^2)/(x^2 + y^2 + z^2 + 1))\n", "alpha = pi + arctan2(x^2 + y^2 + z^2 - 1, -2*z)\n", "beta = -arctan2(x^2 + y^2 + z^2 - 1, -2*z) + arctan2(-y, -x)" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hcoord_to_stereoN.set_inverse(asin(2*sqrt(x^2+y^2)/(1+x^2+y^2+z^2)),\n", " atan2(x^2+y^2+z^2-1, -2*z) + pi,\n", " atan2(-y,-x) - atan2(x^2+y^2+z^2-1, -2*z))\n", "Hcoord_to_stereoN.inverse().display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us express the vectors of the global frame $\\varepsilon$ in terms of the vector frame $\\left(\\frac{\\partial}{\\partial\\eta}, \\frac{\\partial}{\\partial\\alpha}, \\frac{\\partial}{\\partial\\beta}\\right)$ associated with the Hopf coordinates:" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = (2*cos(alpha)*cos(beta)*sin(alpha) + (2*cos(alpha)^2 - 1)*sin(beta))*abs(cos(eta)*sin(alpha) + 1)*cos(eta)*sin(eta)/((cos(eta)*sin(alpha) + 1)*sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1)*abs(cos(eta))) d/deta + (2*cos(alpha)*sin(alpha)*sin(beta) + (2*sin(alpha)^2 - 1)*cos(beta))*sin(eta)/cos(eta) d/dalpha - (2*cos(alpha)*sin(alpha)*sin(beta) - (2*cos(alpha)^2 - 1)*cos(beta))/(cos(eta)*sin(eta)) d/dbeta" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[1].display(Hcoord.frame(), Hcoord)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is a lack of simplifications: we should have $|\\cos\\eta\\sin\\alpha+1| = \\cos\\eta\\sin\\alpha+1$. Moreover, since $\\eta\\in(0,\\pi/2)$, $|\\cos\\eta|=\\cos\\eta$ and $\\sqrt{\\cos\\eta+1}\\sqrt{-\\cos\\eta+1}=|\\sin\\eta|=\\sin\\eta$. Accordingly the component $\\varepsilon_1^{\\ \\, \\eta}$ can be simplified to" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(2*cos(alpha)*cos(beta)*sin(alpha) + (2*cos(alpha)^2 - 1)*sin(beta))*sin(eta)/(sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1))" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E1_eta = E_U[1][Hcoord.frame(), 1, Hcoord].expr()\n", "E1_eta = E1_eta.subs({abs(cos(eta)): cos(eta), \n", " abs(cos(eta)*sin(alp)+1): cos(eta)*sin(alp)+1})\n", "E1_eta" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which can be simplified further to $\\varepsilon_1^{\\ \\, \\eta}=\\sin(2\\alpha+\\beta)$. \n", "Similarly, we notice that $\\varepsilon_1^{\\ \\, \\alpha}=-\\cos(2\\alpha+\\beta)\\tan\\eta$ and \n", "$\\varepsilon_1^{\\ \\, \\beta}=\\cos(2\\alpha+\\beta)/(\\cos\\eta\\sin\\eta)$. Hence, we substitute these values for the components of $\\varepsilon_1$ via the method add_comp (NB: the method set_comp would erase the other sets of components):" ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_1 = sin(2*alpha + beta) d/deta - cos(2*alpha + beta)*tan(eta) d/dalpha + cos(2*alpha + beta)/(cos(eta)*sin(eta)) d/dbeta" ] }, "execution_count": 163, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[1].add_comp(Hcoord.frame())[1, Hcoord] = sin(2*alp+bet)\n", "E_U[1].add_comp(Hcoord.frame())[2, Hcoord] = -cos(2*alp+bet) * tan(eta)\n", "E_U[1].add_comp(Hcoord.frame())[3, Hcoord] = cos(2*alp+bet) / (cos(eta)*sin(eta))\n", "E_U[1].display(Hcoord.frame(), Hcoord)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, the components of $\\varepsilon_2$ require some simplification \"by hand\":" ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = (2*cos(alpha)*sin(alpha)*sin(beta) + (2*sin(alpha)^2 - 1)*cos(beta))*abs(cos(eta)*sin(alpha) + 1)*cos(eta)*sin(eta)/((cos(eta)*sin(alpha) + 1)*sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1)*abs(cos(eta))) d/deta - (2*cos(alpha)*cos(beta)*sin(alpha) - (2*sin(alpha)^2 - 1)*sin(beta))*sin(eta)/cos(eta) d/dalpha + (2*cos(alpha)*cos(beta)*sin(alpha) + (2*cos(alpha)^2 - 1)*sin(beta))/(cos(eta)*sin(eta)) d/dbeta" ] }, "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[2].display(Hcoord.frame(), Hcoord)" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(2*cos(alpha)*sin(alpha)*sin(beta) + (2*sin(alpha)^2 - 1)*cos(beta))*sin(eta)/(sqrt(cos(eta) + 1)*sqrt(-cos(eta) + 1))" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E2_eta = E_U[2][Hcoord.frame(), 1, Hcoord].expr()\n", "E2_eta = E2_eta.subs({abs(cos(eta)): cos(eta), \n", " abs(cos(eta)*sin(alp)+1): cos(eta)*sin(alp)+1})\n", "E2_eta" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_2 = -cos(2*alpha + beta) d/deta - sin(2*alpha + beta)*tan(eta) d/dalpha + sin(2*alpha + beta)/(cos(eta)*sin(eta)) d/dbeta" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[2].add_comp(Hcoord.frame())[1, Hcoord] = -cos(2*alp+bet)\n", "E_U[2].add_comp(Hcoord.frame())[2, Hcoord] = -sin(2*alp+bet) * tan(eta)\n", "E_U[2].add_comp(Hcoord.frame())[3, Hcoord] = sin(2*alp+bet) / (cos(eta)*sin(eta))\n", "E_U[2].display(Hcoord.frame(), Hcoord)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The expression of $\\varepsilon_3$ in terms of the vector frame $\\left(\\frac{\\partial}{\\partial\\eta}, \\frac{\\partial}{\\partial\\alpha}, \\frac{\\partial}{\\partial\\beta}\\right)$ is particularly simple:" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E_3 = -d/dalpha" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_U[3].display(Hcoord.frame(), Hcoord)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is not surprising since $\\varepsilon_3$ has been defined as the vector field induced by the right translation by $\\mathbf{k}$ and the **Hopf fibration** considered the worksheet [3-sphere: charts, quaternions and the Hopf fribration](http://nbviewer.jupyter.org/github/sagemanifolds/SageManifolds/blob/master/Worksheets/v1.0/SM_sphere_S3_Hopf.ipynb) has been defined with respect to $\\mathbf{k}$ as \n", "$$\n", " \\begin{array}{cccc}\n", " h:& \\mathbb{S}^3 & \\to & \\mathbb{S}^2\\\\\n", " & q & \\mapsto & q \\mathbf{k} \\bar{q}\n", " \\end{array}\n", "$$ \n", "More precisely, we have shown in the above worksheet that $\\frac{\\partial}{\\partial\\alpha}$ is tangent to the $\\mathbb{S}^1$ fibers of $h$ and it is easy to see that the field lines of $\\varepsilon_3$ coincide with these fibers: let $q\\in\\mathbb{S}^3$ and $q'\\in\\mathbb{S}^3$ be a point infinitely close to $q$ on a field line of $\\varepsilon_3$: \n", "$$\n", " q' = q + \\lambda \\left. \\varepsilon_3 \\right| _q = q + \\lambda q \\, \\mathbf{k}, \n", "$$\n", "where $\\lambda = o(1)$ is an infinitesimal real number and the second equality stems from the very definition of $\\varepsilon_3 = \\varepsilon_{\\mathbf{k}}$ as the vector field associated with the right translation by $\\mathbf{k}$. We have then\n", "$$\n", " \\overline{q'} = \\overline{q + \\lambda q \\, \\mathbf{k}} \n", " = \\bar{q} + \\lambda \\bar{\\mathbf{k}} \\bar{q}\n", " = \\bar{q} - \\lambda \\mathbf{k} \\bar{q}\n", "$$\n", "so that\n", "$$\n", " h(q') = (q + \\lambda q \\, \\mathbf{k})\\mathbf{k}(\\bar{q} - \\lambda \\mathbf{k} \\bar{q}) . \n", "$$\n", "Expanding and using $\\mathbf{k}^2 = -1$ and $q\\bar{q} = 1$, we find \n", "$h(q') = h(q)$ at first order in $\\lambda$, which shows that $q$ and $q'$ belong to the same fiber of $h$.Â \n", "\n", "Accordingly the field lines of $\\varepsilon_3$ are circles, as we can check on a (projection) plot in the plane $z=0$:" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQkjW8v8B61ndbFSktdkAAAAASUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 80 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graph_z0 = E[3].plot(chart=stereoN, ambient_coords=(x,y),\n", " fixed_coords={z: 0}, max_range=1, scale=0.5)\n", "show(graph_z0, aspect_ratio=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or in the plane $y=0$:" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 121 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graph_y0 = E[3].plot(chart=stereoN, ambient_coords=(x,z),\n", " fixed_coords={y: 0}, number_values=11,\n", " ranges={x: (-2,2), z: (-1,1)}, scale=0.4)\n", "show(graph_y0, aspect_ratio=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A 3D view of $\\varepsilon_3$, in terms of the stereographic coordinates $(x,y,z)$:" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graph = E[3].plot(chart=stereoN, max_range=1, number_values=7, \n", " scale=0.25, label_axes=False)\n", "show(graph, viewer=viewer3D, axes_labels=['x','y','z'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.5.1", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }