{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Spheres as manifolds\n", "\n", "This notebook is part of the [Introduction to manifolds in SageMath](https://sagemanifolds.obspm.fr/intro_to_manifolds.html) by Andrzej Chrzeszczyk (Jan Kochanowski University of Kielce, Poland)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'SageMath version 9.6, Release Date: 2022-05-15'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "version()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## One dimensional sphere $\\mathbf{S}^1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.1**\n", "\n", "In `manifolds.Sphere` in the one-dimensional case \n", "$\\ \\ S^1=\\{(x,y)\\in R^2: x^2+y^2=1\\}\\ \\ $ the default coordinates are the spherical (polar) ones." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ A : & \\phi & \\longmapsto & \\left(x, y\\right) = \\left(\\cos\\left(\\phi\\right), \\sin\\left(\\phi\\right)\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ A : & \\phi & \\longmapsto & \\left(x, y\\right) = \\left(\\cos\\left(\\phi\\right), \\sin\\left(\\phi\\right)\\right) \\end{array}$" ], "text/plain": [ "iota: S^1 → E^2\n", "on A: phi ↦ (x, y) = (cos(phi), sin(phi))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S1=manifolds.Sphere(1) # 1-dimensional sphere\n", "Phi=S1.embedding() # embedding S^1 -> E^2\n", "Phi.disp() # show embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The spherical coordinates are predefined in `manifolds.Sphere` but we want to have a shorter name." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\phi :\\ \\left[ -\\pi , \\pi \\right] \\mbox{(periodic)}\\)" ], "text/latex": [ "$\\displaystyle \\phi :\\ \\left[ -\\pi , \\pi \\right] \\mbox{(periodic)}$" ], "text/plain": [ "phi: [-pi, pi] (periodic)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sph.=S1.spherical_coordinates() # spherical coordinates\n", "sph.coord_range() # coordinate range" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On $\\ [-\\pi,\\pi]\\ $ the map $\\varphi \\to (\\cos\\varphi, \\sin\\varphi) $ is not one-to one, so not homeomorphic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To represent graphically the sphere $S^1$ we need the ambient space $R^2$ and the mapping\n", "$S^1 \\to R^2$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMkAAADKCAYAAAAPUmSrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAk4UlEQVR4nO2deVRV5733P5vpyHjAIDMoMQoqEBViPN6IiSjVJEaNbc1NrjF9b23NatetTXvb+OZdK6Q3aYY3TfJmxTT1XpdJkzRx1qTgGEFMRTECCqI4QUAZlRlkOjzvHwgFGQ7j3vvA81lrr8PZ0/M9m/3dz7Cf3/MoQggkEknv2GgtQCLRO9IkEokFpEkkEgtIk0gkFpAmkUgsIE0ikVhAmkQisYA0iURiAWkSicQC0iQSiQWkSSQSC0iTSCQWkCaRSCwgTSKRWECaRCKxgDSJRGIBO60FjCUURRkPvAXcA7QATwshmjttfxO4TwixSiOJkh5QZGSieiiK8gHwKm0myQKeEEJ8fWebAtwCvhNCxGqnUnI3srilEoqiTAOKhBDFwLw7q0s77RIOeABH1dYm6RtpEvWYAHx65+9ngStAaqft0Xc+pUl0hqyTqIQQIhlAUZQg4CHg/4iuZd1ooBo4o4E8SR/InER9nrzzufOu9dFAshDCrLIeiQWkSdTnAdrqJjntKxRFCQG8kUUtXSJNoj73AN/ftW7Rnc9ElbVI+oE0ifp8BwQpimILoChKBPBfQDlwVkthkp6RFXf1+SMQACQoinIFqAXsgf1CvrTSJfJloorceWE4Tghxu9O6FcAeYJkQ4u9aaZP0jjSJiiiKchAwAb5CiLo7pvkHUC2EWKKtOklvyDqJujxA2wvE23fqJO/S9j9YrakqSZ/InERFFEVZDCwGnAAv2gzz/zp3cpToD2kSicQCsrglkVhAmkQisYA0iURiAWkSicQC0iQSiQWkSSQSC0iTSCQWkCaRSCwgTSKRWECaRCKxgDQJoChKtKIoXyuKUqgoirjTfd3SMQsURTmjKEqDoijXFEVZr4JUiQZIk7ThTFtU4C/7s7OiKMFAAnAcmEVbINX7iqL0e+RFpQ23O93lJTpGjchE3feg7NzJU1EU9uzZs6ev/X/3u9/x1VdfceHChV8BvwJYv349Z8+evXsElF6pqqrCaDRSVVU1WNljAV08QGROMghSUlKIje06EukPfvADvvvuO5qbe+/1LoSgoaGB27dvc/t2W3Bi+99NTU3IHtn6RMa4D4Li4mK8vb27rPP29sbW1pbz58/T2tpKWVkZtbW11NXVdSz19fUdRmhoaADgvffeY9y4cQDY2dnh7OyMk5MTzs7OODs7YzQa8fLywsvLi/Hjx2Nra6vuj5VIkwyFvLw8cnNzKSoqoqCggI0bN7Jv3z4URcHDwwM3NzecnZ3x9PQkNTWV+Ph4bt++TWtrK2Zz2xh0K1euxMXFBbPZTH19fRdD3bp1i6tXr1JbWwuAjY0Nnp6eeHl5ERAQQHBwMBMmTEBWa0YWNYKurKoMcadOwooVK7qsF0JQWFhIbm4u27dvZ/z48SiKgqOjIwEBAVRWVvI///M/7Nu3Dx8fH+zt7bsc39jYSGNjY8f36upqAgMDqaqqws3NrU9N9fX1lJaWUlpaSllZGSUlJRQWFmI2m3FxcSE4OJhJkyZx77334u7uPlyXQg/owv0yJ+kDIQQlJSVkZmaSlZVFdXU1Dg4OuLu7k5GRwUcffYS3tzeKovD8889jMBgIDAzs8VwGgwGDwTAoHU5OTkyaNIlJkyZ1rGtubiY/P5/c3Fxyc3PJyspCCEFAQABhYWGEhYXh7Ow8qPQkXZEmAWpra7ly5UrH96tXr7J9+3aKioqorKxECEF1dTW/+tWvCAgIID8/n7CwMN566y3WrVtHSkoKW7Zs4YsvvlBNs729PZMnT2by5MlAWwPA1atXyczM5NChQxw8eJB7772X8PBwpk2bhoODg2raRhuyuAUkJSXxyCOP4O/vz7x585g2bRotLS00NTXxs5/9jNdee428vDySkpI6jjl27Bi//vWvOX/+PH5+fvz+979n/fr+v0+srq7uaAK2VNwaKPX19WRnZ5OZmUl+fj7jxo0jKiqKOXPm4OrqOqxpjTC6KG6NeZO0trZy6dIlTpw4QUFBAePHj8dkMhERETGiT9+RNElnKisrOXXqFGlpabS0tBAREYHJZMLLy2vE0hxGpEm0RAhBdnY2iYmJ3Lp1i6CgIEwmE1OnTsXGZuReH23atIlNmzZhNpu5dOnSiJuknYaGBs6cOcOpU6eoqalhypQpLFq0SO9mkSbRioKCAg4dOsT169eZMmUK0dHRBAQEqKpBrZzkbsxmM1lZWRw7dozKykpmzZrFI488gouLi2oaBoA0idpUVFTwzTffcP78eby9vYmNjeXee+/VRItWJmnHbDaTmppKcnIyra2t/Mu//Asmk6lb07XGSJOoRWtrK//4xz84duwYjo6OLFy4kPvvv39Ei1WW0Nok7dy+fZtjx45x+vRpXF1deeKJJzR7cPSANIka3Lx5k71791JYWIjJZGLBggW6aA7Vi0naKS8v5+uvvyYvL4+oqCgWL16sh+skTTKStLa2curUKY4ePYrRaGTFihWq1zv6Qm8mgbbGjNOnT3PkyBFcXFxYvnw5EydO1FKSNMlIUVNTw86dO8nPz2fu3LksXLhQb2VtXZqknfLycvbu3UtBQQHz5s0jJiZGq6KpNMlIUFBQwPbt21EUhVWrVmn9JOyGVk3AA6W1tZWUlBS++eYbgoODWbVqFU5OTmrLkCYZbtLS0khISMDPz48f//jHem3WBPSdk3QmNzeXHTt2YDAYeOqpp7qFCIww0iTDhdls5sCBA3z33XfMnj2bRx99VPdxF9ZiEmhrOt+2bRvl5eWsWLGC6dOnq5W0NMlw0NzczLZt28jNzWXp0qVERUWNZHLDhjWZBKCpqYmvvvqK8+fPExsbi8lkUiNZXZjEqnsBNzY28sUXX1BYWMgzzzyjp/b9UYeDgwOrVq3C3d2dQ4cO0dzcTHR0tNayVMFqTXL79m0+//xzbt68yZo1a3qN45AMH4qiEBMTg4ODA4mJiTQ3N7Nw4cJRHxlplSapq6vjs88+o6qqimeffRY/Pz+tJY0ZFEUhOjoae3t7Dh06RFNTE0uWLBnVRrE6kzQ0NPDXv/6Vuro61q5dq3Zry5Dp3ARszZhMJuzs7EhISEBRFJYsGb0zbFtVxd1sNvP5559TVFTET37yE7138+4Ta6u490Zqair79+/nBz/4AXPnzh3u0+sie7KanEQIwVdffUV+fj7/9m//ZtUGGU3MmTOHqqoqDh48iJubm5rNw6phNSZJTEzk3LlzrFq1qsuACBLtWbRoEdXV1ezevRsXFxeCgoK0ljSsWMUIjmlpaRw/fpxFixYRFhamtRzJXSiKwvLlywkICODLL7+kvLxca0nDiu5NUlxcTEJCArNnz2bevHlay5H0gp2dHatXr8bR0ZGdO3fS0tKitaRhQ9cmaWpqYufOnXh6erJ06dJR3cw4GnB0dOSHP/whpaWlHD58WGs5w4auTZKQkEB1dTU/+tGPsLOzmupTn2zatInp06fzwAMPaC1lRPD19SU2NpbU1FQuXryotZxhQbdNwBkZGezbt4+VK1cSEREx3Jo0Z7Q0AfeEEILt27eTl5fHz3/+86EMvaqLooMuc5LKykoSEhKYOXPmqDTIaEdRFJ544gkMBgN79uyx+ikldGcSIQQJCQk4Ojqq+hb3ww8/JDg4mHHjxhEZGcnx48d73TcpKQlFUboto6V4MRw4OjqyfPly8vPzycjI0FrOkNCdSS5evMjly5dZsmTJoAeYHijbtm1jw4YNvPTSS6SnpzN//nyWLl1Kfn5+n8fl5ORQVFTUsUyZMkUVvdZCcHAwERERHD58mPr6eq3lDBpdmaSpqYkDBw4wZcoUQkNDVUv3nXfe4d///d/56U9/yrRp03jvvfcIDAzkz3/+c5/HeXl54ePj07HoPdBLCxYvXowQgiNHjmgtZdDoyiRJSUnU19er2tzb1NTEmTNnuk3vFhsby4kTJ/o8dtasWfj6+hITE0NiYmKf+zY2NlJdXd1lGQu4uLgQExNDenq6xZxZr+jGJDdv3uTkyZNER0fj4eGharpms7nH6d2Ki4t7PMbX15fNmzeza9cudu/eTUhICDExMSQnJ/eazuuvv47RaOxYxlL8S2RkJP7+/iQkJFhlJV43Lx+Sk5NxdXVVKyy0G3fnXEKIXnOzkJAQQkJCOr6bTCYKCgp4++23e43W27hxIy+88ELH9/aZrsYCiqIQGxvL1q1buXDhgtV1gtRFTlJWVkZmZiYPPfSQ6i8NPT09sbW17ZZrlJaWDihWZe7cuVy+fLnX7QaDATc3ty7LWCIoKIh7772XY8eOWV1uoguTJCcn4+bmxqxZs1RP28HBgcjIyG7dKA4fPjygvmLp6en4+voOt7xRxcMPP0xpaSnZ2dlaSxkQmhe3SktLycrK4rHHHtOs68kLL7zAmjVriIqKwmQysXnzZvLz8ztmrtq4cSM3btzgr3/9K9A2rfSkSZOYMWMGTU1NfPbZZ+zatYtdu3Zpot9aCAwMZPLkyRw7dozp06dbTV88zU1y/PhxjEajJrlIO6tXr+bWrVv84Q9/oKioiLCwMBISEjpGfywqKurSMtPU1MRvf/tbbty4gaOjIzNmzCA+Pp5HH31Uq59gNTz88MNs2bKF7OxsZsyYobWcfqFp363a2lreffddFi9ePBKhn7pmNPfdssTHH3+MoiisXbvW0q66yGo0rZNkZGRgY2PD/fffr6UMVRntvYD7Q2RkJHl5edy8eVNrKf1CM5MIIUhLS2PGjBk4OjpqJUN1fvGLX5Cdnc3p06e1lqIZ06ZNw9HRkTNnzmgtpV9oZpJr165RUVFBZGSkVhIkGmFnZ8fMmTM5e/asVUQwamaSM2fO4OXlpauJdSTqERkZye3bt62iOVgTkzQ2NpKTk8OsWbOsphlQMrzcc889BAUFkZWVpbUUi2hikitXrtDa2qpqT1+J/ggNDeXatWs0NTVpLaVPNDFJTk4O3t7eQwnrtFpk69Y/CQkJwWw2c/XqVa2l9InqJjGbzVy+fLlLB8GxhGzd+ifjx49nwoQJ5OTkaC2lT1Q3SX5+Pg0NDWPWJJKuhISEcOnSJVpbW7WW0iuqm+TSpUu4urrKzoASoM0kt2/f5vr161pL6RXVTVJQUMCkSZNkq5YEAD8/PxwcHHQdtaiqSVpaWiguLpbvRiQd2NjY4Ofnx40bN7SW0iuqmqS4uBiz2Yy/v7+ayUp0jr+/vzRJOzdu3MDW1hYfHx81k9UVsgm4OwEBAdTU1Oh2cAxVTXL9+nV8fX3H9NA7sgm4O+0lC71W3lU1SVFRkZwEVNINV1dX3NzcKCoq0lpKj6hmEiEElZWVjB8/Xq0kJVbE+PHjqaio0FpGj6gWvltTU4PZbFZ1TC2J9eDu7k5ZWdmwnEtRFA/gZdru7/uA7cDfgP9LW7SjB/CaEKJfXZBVM0llZSXAmOyvJbGMu7t7n0My9RdFURyAD4HfCCEKFUWZCOQCy4ENwBQgHqgAftmfc6pW3JImkfSFh4cHdXV1w9EjeD2wVQhReOd7A225R54QIhewBS4DX/T3hKqZpKKiAicnJxwcHNRKUpfIJuCeaX94tj9Mh0CFEOJQp+9Rdz4PAAgh9gshpgsh/tHfE6pmktra2jE3KkhPyCbgnmm/N2pqaoZ0HiHEp3etegQwA98O9pyqmaS5uXnM5yKS3rG3twfa7pNhZiFwRggxaPepZpKmpqaOCyGR3E37A3Q4TXKnlet+IOmu9T8dyHlkTiLRBe1D3A6l4q4oygRFUVIVRXn5zqoltN3jqZ33Afo/yDMyJ5HoBEVRsLe3H2pOsgB4oO10iiOwGigEXO6k4Qy8D8QN5KQj+p5EURSlqqoKaAu2srW1JSYmZiST1C2NjY00NjZ2fG+voOq1U58WmM1mKioqOq6J0Wh0A2pE/8fiPQhsAbyAvwAbATfgj4qiLAAcgNeFEAMKXhnRsYAVRXEDqkYsAclYwCiE0PRJMtImUaqqqlqhbZDkw4cP8+c//7nHpuAHHnig12bR3rYN5pj2GaYKCgqGTUd/NN6dkxQVFTFnzhyys7N7jK8Zbh19bevrmqip4+2332b//v3s2bMHNzc3jEajkYHlJCPCiBa3Ov84Nzc3nJycep3lydbWttf3KL1tG8wxnfUM5zkHoxH+2QN2pHX0R0tP10QtHUIIbG1tEUJ06NA6B2lHtYq7vb19nxX3X/ziFwPeNphjLDHYcw5Go5o6BqtFLR3tYwLrcqA6IcRIL0IIIbZt2yZ+8pOfiKqqKqElVVVVAtBcR0FBgQBEQUGBpjqE0Mc1qaurE3FxcSI0NLSzDjXuT4uLajnJuHHjCAoKwmAwqJVkjxgMBl5++WVd6Oj8qSV6uCbtOcjq1at1cU06o1pXeTc3N1xdXTW/AAaDgbi4OE01tOvo/Kklergm7U3izz//vC6uSWdUy0k8PDyora0dib45VoXsBdwzeg6lUM0kw9gV2qqRvYB7pqKiAkdHR93lIiBNItEJlZWVug3tVs0krq6u2NjY6DbYX6ItlZWVuixqwQiaRFGUlxRFOeHk5IS7uzs2Nja4u7tTXl7e6zFCCOLi4vDz88PR0ZGHH36Y8+fPD1lLRUUFa9aswWg0YjQaWbNmjcUc7bnnnkNRlC6LtU6j/eGHHxIcHMy4ceOIjIzk+PHjve6blJTU7XcrisLFixeHpCE5OZlly5bh5+eHoijs3bu3y/by8vJuJlEUZYGiKGcURWlQFOWaoijrhyRikIxkTuIA7Hj++ec7Vvj6+vY5ttJbb73FO++8wwcffMDp06fx8fFh8eLFQ45We/rpp8nIyODAgQMcOHCAjIwM1qxZY/G4JUuWUFRU1LEkJCQMSYcWbNu2jQ0bNvDSSy+Rnp7O/PnzWbp0qcUBqnNycrr89ilTpgxJR11dHffffz8ffPBBj9uqqqq6zDSQm5sLkAAcB2YBfwTeVxRl1ZCEDIaRfhGzdetWYTQahRBCnDhxQrz66quipaWl28uk1tZW4ePjI954442OdQ0NDcJoNIqPPvqov++kupGdnS0AcfLkyY51KSkpAhAXL17s9bi1a9eK5cuXDzpdS6j1Am/OnDli/fr1XdaFhoaKF198scf9ExMTBSAqKipGTBMg9uzZ0/E9JydHxMXFdUnzd7/7nQAuiE73EvARkCJG+J69e1F1BEd/f39aWlooLS3tti03N5fi4mJiY2M71hkMBhYsWMCJEycGnWZKSgpGo5EHH3ywY93cuXMxGo0Wz5uUlISXlxdTp05l3bp1PeoeKGo2ATc1NXHmzJku1xQgNjbW4m+fNWsWvr6+xMTEkJiYOJIyuX79Os7OzrT1Z2wjJSUF4NBdux4EohRFUTUwSVWT+Pr6YmNj0+OYr8XFxQB4e3t3We/t7d2xbTAUFxfj5eXVbb2Xl1ef5126dCmff/45R48e5U9/+hOnT59m4cKFXXryDgY1m4Bv3ryJ2Wwe0DX19fVl8+bN7Nq1i927dxMSEkJMTAzJyckjpvPGjRv4+/t3mbPmjr6Su3Ytoe0FuOeIiemBAb1xVxQljraR8friASHEdz1tsLe3x9vbmxs3bvT6JL17ch8hRI8T/sTFxfHKK6/0KaT9Ruzp+N7O287q1as7/g4LCyMqKoqJEycSHx/Pk08+2We6eqO/1xTaZp7qPFWfyWSioKCAt99+m+jo6GHXJoTgxo0bzJvXY0Tt3V3klV7WjygD7ZbyAfClhX3y+toYGBhITk5Ot39U+3QMxcXFXSpwpaWl3Z6EAL/85S956qmn+hQyadIkzp07R0nJ3Q8kKCsr6/G8veHr68vEiROHZZRBtfD09MTW1rZbrtHbNe2NuXPn8tlnnw23PKDt/93Y2EhgYGCX9T4+Ply+fPnuOTq8gBbg1oiI6YUBmUQIcRO4OZQEp06dSmpqKiUlJV3mKQkODsbHx4fDhw8za9YsoK1MfezYMd58881u5/H09MTT03KuazKZqKqqIjU1lTlz5gBw6tQpqqqqent69citW7coKCiwqrkeHRwciIyM5PDhw6xcubJj/eHDh1m+fHm/z5Oenj5iv/vixYsYDAaCgoK6rDeZTBw/fnzxXbvHAt8JIdTt2zRSLQJAEDDzlVdeES4uLiI9PV2kp6eLiooK8cc//lEkJSWJkJAQsXv37o4WjTfeeEMYjUaxe/dukZmZKf71X/9V+Pr6iurq6oE1n9zFkiVLREREhEhJSREpKSkiPDxcPP7441326aylpqZG/OY3vxEnTpwQubm5IjExUZhMJuHv7z9kLe2o1br15ZdfCnt7e7FlyxaRnZ0tNmzYIJydnUVeXp4QQogXX3xRrFmzpmP/d999V+zZs0dcunRJZGVliRdffFEAYteuXUPSUVNT03EPAOKdd94R6enp4v333xc7d+7spuPatWsCqAPeAaYB/wtoAlYJlVu3RtIkH9NWduyyJCYmih07dojNmzcLQGzdurXjwrS2toqXX35Z+Pj4CIPBIKKjo0VmZuaQ/jlCCHHr1i3xzDPPCFdXV+Hq6iqeeeaZbk2cnbXU19eL2NhYMWHCBGFvby+CgoLE2rVrRX5+/pC1tKNmDMemTZvExIkThYODg5g9e7Y4duxYx7a1a9eKBQsWdHx/8803xeTJk8W4ceOEh4eHeOihh0R8fPyQNbQ3LXdejEajiIuLE5mZmd10CCEEbaOfpAGNtA16vV6obBAhxMjGuLdnVnevOHfuHHv27OHXv/71mBv6dNOmTWzatAmz2cylS5eoqqoac9egndTUVA4ePMh//ud/Mm7cuJ520cUUzapPUQ0wZcqUYenqYI3IXsD/5OLFi0yaNKk3g+gGTUzi6OjIfffdR0ZGhhbJS3RARUUFubm5hIWFaS3FIpqYBCAyMpKioiIKCwst7ywZdaSlpWEwGJgxY4bWUiyimUmmTJmCm5sbZ86c0UqCRCPMZjMZGRlERERYxfjQmpnExsaGWbNmkZmZOeSuHhLrIicnh9raWiIjI7WW0i80MwnA7NmzaWlpITMzU0sZqiJj3OHMmTMEBAQM6K2/lmhqEjc3N0JCQkhJSaG1tVVLKaox1lu3iouLuXbtmlU9JDQ1CUB0dDTl5eVjKjcZyyQlJTF+/HiraNVqR3OT+Pr6EhISQnJysia5yVgP7VWToqIicnJyiI6OxsZG81uv3+hC6cMPP0x5eTnnzp1TPe2xHNqrNu25SHh4uNZSBoRqIzj2hY+PD6GhoSQnJxMeHo6tra0q6V64cIEDBw5w8uTJjsjF//7v/8ZkMpGTk9MlruJuDAZDl17Mkr4pLCzk0qVLrFy50qpyEdBJTgJtuUlFRYWqFVo1Q3sbGxuprq7usowVhBAcOnQIT09Pq6qLtKMbk3h7exMVFUViYuKQR0fpL2qG9r7++usd9R6j0dgtyGg0c+7cOb7//nuWLFlidbkI6MgkADExMdjb23Pw4MEhnScuLq7HsaM6L9991xZhPNjQ3scee4ywsDCWLVvG/v37uXTpEvHx8b0es3HjRqqqqjqWgoKCIf1Ga+H27dscOnSIsLAwJk+erLWcQaGLOkk748aNIzY2lj179jBz5kzuu+++QZ1Hj6G9BoNBl+PcjjRHjhzBbDZ3G7HFmtCVSQDCw8PJyMggISGB559/flDTWsvQXn1w/fp10tLSWLp0Ka6urlrLGTS6Km5BW/Hn0Ucfpbq6miNHjoxoWtOmTWPJkiWsW7eOkydPcvLkSdatW8fjjz/epWUrNDSUPXv2AFBbW8tvf/tbUlJSyMvLIykpiWXLluHp6dkljnys09TUxN69e/Hz8yMqKkprOUNCdyaBtpwgNjaW1NRULly4MKJpff7554SHhxMbG0tsbCwRERF8+umnXfbJycmhfT56W1tbMjMzWb58OVOnTmXt2rVMnTqVlJQUq35aDjfx8fFUV1fz5JNPWmVlvTOahO/26yAh2LFjB7m5ufz85z/X7Yjjg6W6uhqj0Tgqw3czMjLYt28fK1euJCIiYiinGrvhu/1BURSeeOIJDAYDu3btwmw2ay1pWBjtvYDLyspISEhg5syZQzWIbtBtTtLO9evX2bp1Kw8++KBVt5DczWjMSZqamtiyZQutra2sW7duOAKqZE7SHwICAli8eDEpKSkyilHHtLa2snPnTiorK/nRj35kFRGH/UV3TcA98eCDD1JeXk58fDyurq5MnTpVa0mSTgghiI+P5+rVqzz99NM99mKwZnSfk0Bb/WTJkiWEhISwc+dOOXiEzvj2229JS0tj2bJlVvtWvS+swiTQFhP/5JNP4u3tzd/+9jc596JOOHv2LEePHmXBggXMnDlTazkjgtWYBNqmbnjqqacwGAx88sknfc6/KBl5MjMz2bdvHzNnzmTBggVayxkxrMokAM7OzqxduxY7Ozu2bt1KWVmZ1pIGxGhpAk5LS2P37t1ERESwbNmyPjuEWju6bwLujdraWj799FNqa2tZs2aN1QVAWXMT8KlTpzhw4ABRUVE8+uijI2kQXTjP6nKSdlxcXFi7di1Go5FPPvmkxynmJMPPt99+y4EDBzCZTCNtEN1gtSYBcHJy4tlnn2XChAl88sknZGVlaS1p1GI2m/n666/55ptviI6OZvHixWPCIGDFxa3ONDc38/e//51z584xb948YmJidN+pzpqKWzU1NezYsYPCwkIee+yxjpnIVEAXLrSKl4mWsLe3Z8WKFXh7e3PkyBFKSkpYtWoVjo6OWkuzem7cuMG2bdsQQvDcc88REBCgtSTVGRU5SWeuXr3Kzp07cXJy4oc//KFuA6H0npMIIUhLS2P//v34+vry4x//WItQAF3kJKPOJADl5eXs2LGD0tJS5s+fz/z581UbpsgS1jDTVXV1NV9//TVXrlxh9uzZLF26FDs7TQod0iQjidlsJjk5mePHj+Pj48OKFSt01adIjzmJEIJz585x4MAB7OzsWLZsmdb95KRJ1KCwsJC9e/dSXl7OggULmDdvni5yFb2ZpKamhoSEBC5evEh4eDhLly7VQ51OmkQtWlpaSExMJCUlBQ8PDxYtWkRoaKimTZh6MUlTUxMnTpzgxIkT2Nvb8/jjjzNt2jTN9NyFNInalJSUcPjwYa5evcrEiROJjY3Fz89PEy1am6S1tZWzZ8+SmJhIfX09c+bMITo6Wm+TfEqTaMWVK1c4dOgQZWVlhIeHM3/+fCZMmKCqBq1MIoTg8uXLHD16lJKSEmbMmEFMTAweHh6qaRgA0iRa0traSnp6OklJSdTW1jJ16lRMJhMTJ05UpRimtklaWlo4e/YsJ0+e5ObNmwQGBrJ48WK9D7cqTaIHWlpayMrKIiUlhdLSUnx9fZk3bx7Tpk0bkQq+2k3A9fX1nD59mtOnT1NXV0doaCgmk4nAwEBr6FaiC4Fj3iTtCCG4evUqKSkpXLt2DScnJ6ZPn05ERAQBAQHDfkONZE7S3NxMTk4OmZmZXLlyBRsbG2bOnMncuXO55557hjWtEUaaRA+89tprxMfHk5GRgYODA5WVlZSUlHDu3DmysrKorq7G3d2dsLAwwsLCOt61vPLKK2zevJmKigoefPBBNm3aNKA5yYfbJC0tLeTl5ZGZmcnFixdpamrC39+f8PBwwsPDcXJyGnIaGiBNogdefvll3N3duX79Olu2bOkyFZwQgu+//57MzEyys7NpaGjAxcWF+vp69u/fz3/8x38QFhbGq6++SnJyMjk5Of3uujFUk7S2tlJUVERubi65ubnk5+fT0tLCPffc02GM8ePHD/i8OkOaRE98/PHHbNiwodf5EltaWvj++++5du0ae/fu7chRPDw88PPz4y9/+QuPP/44zz77LO7u7haLZwMxSUtLCzdv3qS0tJSysjJKSkrIz8+nsbERe3t7Jk6cSHBwMJMnT8bLy8sa6hr9RRc/ZFT0AlYDOzs7Jk+ejKIofPjhh5w8eRKj0ci1a9coLi7GZDJRWVnJ+++/j729PRMmTMDNzQ1nZ2ecnJxwdnbG2dkZR0dHbGxsOiYqysvLw9XVlZaWFurr66mrq6Ourq7j74qKCm7dukX7w8zNzY0JEyZgMpkIDg7G399fFz0IRjPSJAOkfQaswMBA/Pz8CA0NBeBnP/sZRUVFvPvuux1P/NraWgoLCztu/M5DtTY0NADwxRdfdHmBZzAYupgqODiYuXPn4uXlxYQJE/T2sm9MMCpNEhcXxyuvvNLnPqdPnx7SlAB3F2mEEDQ3N3Pffff1OPlQXFwcb7zxBo6OjiiK0pEzrF+/Hjc3N2xsbHB2dtaqt62kD0blf6S/M10NhvYBJ4qLi7vEqpSWlvY5O9bGjRt54YUXOr5XV1cTGBiIh4eHLjo4SnpHjYq7VaAoynPAe0IIdwv7KUAh8K4Q4q076xyAUuD3Qoi/9DM9N6AKMAohxs5UvFaIvgPBVUBRlCBFUWYCQYCtoigz7ywunfa5qCjKSgDR9lR5D/jfiqKsVBQlDPgYqAf+NoCkawDjnU+JjhmVxa0B8gdgbafv6Xc+HwGS7vwdQtsN3c5bgCPwIeABnAJihRD9vuHvmE3mIFaALG5JJBYY88UticQS0iQSiQWkSSQSC0iTSCQWkCaRSCwgTSKRWECaRCKxgDSJRGIBaRKJxALSJBKJBaRJJBILSJNIJBb4/xIigzO5nW2vAAAAAElFTkSuQmCC\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "E=S1.ambient() # ambient space E^2\n", "c_cart. = E.cartesian_coordinates() # Cartesian coord in R^2\n", "p=sph.plot(c_cart,mapping=Phi,number_values=15,\n", " thickness=1,color='grey') # plot S^1\n", "p.show(figsize=[3,2]) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Restricting the coordinate to an open interval contained in $[-\\pi,\\pi]$ we obtain a homeomorphic map (but the image is a proper subset of the sphere)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p=sph.plot(c_cart,mapping=Phi,ranges={phi:(-pi,pi/4)},\n", " number_values={phi:50},color={phi:'grey'}) # plot subset of S^1\n", "p.show(figsize=[3,2]) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.2**\n", "\n", "$S^1$ can be defined as a manifold with **two-element atlas**. Note that in this new example we do not use the `manifolds.Sphere` command!" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left(U,(u)\\right), \\left(V,(v)\\right)\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left(U,(u)\\right), \\left(V,(v)\\right)\\right]$" ], "text/plain": [ "[Chart (U, (u,)), Chart (V, (v,))]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# example from the Manifolds manual, sect 2.7.1 (p.546 in 9.5 version)\n", "M = Manifold(1, 'S^1') # manifold S^1\n", "U = M.open_subset('U') # the complement of one point (1,0)\n", "c_u. = U.chart('u:(0,2*pi)') # the standard angle coordinate\n", "V = M.open_subset('V') # the complement of the point (-1,0)\n", "c_v. = V.chart('v:(0,2*pi)') # the angle u-pi\n", "M.declare_union(U,V) # S^1 is the union of U and V\n", "M.atlas() # atlas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On the intersection of $W=U\\cap V$ two \"new\" charts are defined, they are just restrictions of the \"old\" maps to $W$." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left(U,(u)\\right), \\left(V,(v)\\right), \\left(W,(u)\\right), \\left(W,(v)\\right)\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left(U,(u)\\right), \\left(V,(v)\\right), \\left(W,(u)\\right), \\left(W,(v)\\right)\\right]$" ], "text/plain": [ "[Chart (U, (u,)), Chart (V, (v,)), Chart (W, (u,)), Chart (W, (v,))]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u_to_v = c_u.transition_map(c_v, (u-pi,), # transition map u->v\n", " intersection_name='W',\n", " restrictions1 = u!=0, \n", " restrictions2 = v!=pi)\n", "v_to_u = u_to_v.inverse() # inverse transition\n", "M.atlas() # atlas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we need to use $W=U\\cap V$ in calculations we can define it:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset W of the 1-dimensional differentiable manifold S^1\n" ] } ], "source": [ "W = U.intersection(V) # intersection of\n", "print(W) # chart domains" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make the plot in $R^2$ we need to define an ambient space and the embedding." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "R2 = Manifold(2, 'R^2') # manifold R^2\n", "X. = R2.chart() # Cartesian coordinates\n", "# the embedding is not predefined this time, so it must be\n", " # defined:\n", "F = M.continuous_map(R2, {(c_u, X): [cos(u),sin(u)]}, name='F')\n", "p=c_u.plot(X,mapping=F,color='grey') # plot image of S^1\n", "p.show(figsize=(3,2)) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Stereographic coordinates on $\\mathbf{S}^1$\n", "\n", "
\n", "\n", "**Example 4.3**\n", "\n", "In `manifold.Sphere` not only the Cartesian and polar but also the stereographic coordinates are predefined." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\},(u)\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\},(u)\\right)$" ], "text/plain": [ "Chart (S^1-{NP}, (u,))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S1=manifolds.Sphere(1) # stereographic projection from the\n", "S1.stereographic_coordinates(pole='north',names='u') # North pole" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\},({u'})\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\},({u'})\\right)$" ], "text/plain": [ "Chart (S^1-{SP}, (up,))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ " # stereographic projection from the\n", "S1.stereographic_coordinates(pole='south',names='u') # South pole" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Stereographic projection of $S^1$ from the North pole $N = (0, 1)$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 4 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "var('t') # symb. variable\n", "p1=parametric_plot((cos(t),sin(t)),(t,0,2*pi),color='grey') \n", " # plot the circle\n", "p2=plot(1-x/2,(x,0,2)) # half line through (0,1) and (x,y)\n", "p3= text(\"(x,y)\",(0.88,0.72)) # point (x,y)\n", "p4= text(\"(u,0)\",(2.0,0.15)) # point (u,0)\n", "(p1+p2+p3+p4).show(figsize=[3,2]) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the line which passes through the North pole $(0, 1)$, the point $(x, y)$ on the circle and intersects\n", "the axis Ox at the point $(u, 0)$. The function $u = u(x, y)$ defines the\n", "stereographic projection. Three points: North pole, the\n", "point $(x, y)$ on the circle and the point $(u, 0)$ are on the same line.\n", "Since the right triangle with the hypotenuse joining (0,1), (x,y) and the right triangle with the hypotenuse joining (0,1),(u,0) are similar, we have $\\frac{u}{x}=\\frac{1}{1-y}$ and consequently $u=\\frac{x}{1-y}$.\n", "Solving the system of equations\n", "$$ x^2+y^2=1,\\quad u=\\frac{x}{1-y},$$ with respect to $(x,y)$: " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left[x = \\frac{2 \\, u}{u^{2} + 1}, y = \\frac{u^{2} - 1}{u^{2} + 1}\\right], \\left[x = 0, y = 1\\right]\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left[x = \\frac{2 \\, u}{u^{2} + 1}, y = \\frac{u^{2} - 1}{u^{2} + 1}\\right], \\left[x = 0, y = 1\\right]\\right]$" ], "text/plain": [ "[[x == 2*u/(u^2 + 1), y == (u^2 - 1)/(u^2 + 1)], [x == 0, y == 1]]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "forget() # forget previous assumptions\n", "var('x, y, u') # symbolic variables\n", "assume(y>0) # assume y>0\n", "s=solve([x^2+y^2==1,u==x/(1-y)],[x,y]);s # solve eq. above" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we obtain the relations\n", "$$ x=\\frac{2u}{u^2+1},\\quad y=\\frac{u^2-1}{u^2+1}, \\quad u=\\frac{x}{1-y}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Now consider the South pole case.\n", "\n", "### Stereographic projection of $S^1$ from the South pole $S = (0, -1)$" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 4 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "var('t') # symbolic variable\n", "p1=parametric_plot((cos(t),sin(t)),(t,0,2*pi),color='grey') \n", " # plot the circle\n", "p2=plot(x/2-1,(x,0,2)) # halfline through (0,-1) and (x,y)\n", "p3= text(\"(x,y)\",(0.88,-0.72)) # point (x,y)\n", "p4= text(\"(u',0)\",(2.0,0.15)) # point (u',0)\n", "(p1+p2+p3+p4).show(figsize=[3,2]) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Since the right triangle with the hypotenuse joining (0,-1), (x,y) and the right triangle with the hypotenuse joining (0,-1),(u',0) are similar we have $\\frac{u'}{x}=\\frac{1}{1-(-y)}$ ($y$ is negative now) and consequently $u'=\\frac{x}{1+y}$.\n", "Solving the system of equations\n", "$$ x^2+y^2=1,\\quad u'=\\frac{x}{1+y},$$ with respect to $(x,y)$: " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left[x = \\frac{2 \\, {u'}}{{u'}^{2} + 1}, y = -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right], \\left[x = 0, y = \\left(-1\\right)\\right]\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left[x = \\frac{2 \\, {u'}}{{u'}^{2} + 1}, y = -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right], \\left[x = 0, y = \\left(-1\\right)\\right]\\right]$" ], "text/plain": [ "[[x == 2*up/(up^2 + 1), y == -(up^2 - 1)/(up^2 + 1)], [x == 0, y == -1]]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "forget() # forget previous assumptions\n", "var('x, y, up') # symbolic variables\n", "assume(y<0) # assume y<0\n", "s=solve([x^2+y^2==1,up==x/(1+y)],[x,y]);s # solve eq. above" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we obtain the relations\n", "$$ x=\\frac{2u'}{u'^2+1},\\quad y=\\frac{1-u'^2}{u'^2+1}, \\quad u'=\\frac{x}{1+y}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.4**\n", "\n", "As we mentioned, both the stereographic projections from North and South poles are predefined in `manifolds.Sphere`." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ A : & \\phi & \\longmapsto & \\left(x, y\\right) = \\left(\\cos\\left(\\phi\\right), \\sin\\left(\\phi\\right)\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\} : & u & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, u}{u^{2} + 1}, \\frac{u^{2} - 1}{u^{2} + 1}\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\} : & {u'} & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + 1}, -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ A : & \\phi & \\longmapsto & \\left(x, y\\right) = \\left(\\cos\\left(\\phi\\right), \\sin\\left(\\phi\\right)\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\} : & u & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, u}{u^{2} + 1}, \\frac{u^{2} - 1}{u^{2} + 1}\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\} : & {u'} & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + 1}, -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "iota: S^1 → E^2\n", "on A: phi ↦ (x, y) = (cos(phi), sin(phi))\n", "on S^1-{NP}: u ↦ (x, y) = (2*u/(u^2 + 1), (u^2 - 1)/(u^2 + 1))\n", "on S^1-{SP}: up ↦ (x, y) = (2*up/(up^2 + 1), -(up^2 - 1)/(up^2 + 1))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reset()\n", "S1=manifolds.Sphere(1) # S^1 from manifolds.Sphere\n", " # stereographic projection from the North pole:\n", "stereoN. = S1.stereographic_coordinates(pole='north')\n", " # stereographic projection from the South pole:\n", "stereoS. = S1.stereographic_coordinates(pole='south')\n", "\n", "Phi=S1.embedding() # embedding S^1 -> E^2\n", "Phi.disp() # show embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.5**\n", "\n", "To show graphically how the projection from the North pole acts, let us extract \n", "an appropriate part of the definition from the previous cell." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\Phi_N:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\} : & u & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, u}{u^{2} + 1}, \\frac{u^{2} - 1}{u^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\Phi_N:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{NP}\\} : & u & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, u}{u^{2} + 1}, \\frac{u^{2} - 1}{u^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "PhiN: S^1 → E^2\n", "on S^1-{NP}: u ↦ (x, y) = (2*u/(u^2 + 1), (u^2 - 1)/(u^2 + 1))" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "E=S1.ambient() # ambient space E^2\n", "c_cart. = E.cartesian_coordinates() # Cartesian coord.\n", "fun=list(Phi.coord_functions(stereoN).expr()) # embedd. functions\n", "PhiN = S1.continuous_map(E,{(stereoN, c_cart): fun},\n", " name='PhiN',latex_name=r'\\Phi_N') # define embedding\n", "PhiN.display() # show embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us plot the set of points $(x,y)$ corresponding to $u\\in (-10,10)$." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p=stereoN.plot(c_cart,mapping=PhiN,ranges={u:(-10,10)},\n", " number_values={u:50},color={u:'grey'},\n", " plot_points=500) # image of (-10,10) under PhiN\n", "p.show(figsize=[3,2]) # show the image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thus the points of the grey arc in the figure are projected onto the interval (-10,10)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.6**\n", "\n", "Now let us extract the definition of the projection from the South pole," ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\Phi_S:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\} : & {u'} & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + 1}, -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\Phi_S:& \\mathbb{S}^{1} & \\longrightarrow & \\mathbb{E}^{2} \\\\ \\mbox{on}\\ \\mathbb{S}^{1}\\setminus\\{\\mathrm{SP}\\} : & {u'} & \\longmapsto & \\left(x, y\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + 1}, -\\frac{{u'}^{2} - 1}{{u'}^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "PhiS: S^1 → E^2\n", "on S^1-{SP}: up ↦ (x, y) = (2*up/(up^2 + 1), -(up^2 - 1)/(up^2 + 1))" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "fun=list(Phi.coord_functions(stereoS).expr()) # embedd. functions\n", "PhiS = S1.continuous_map(E,{(stereoS, c_cart): fun},\n", " name='PhiS',latex_name=r'\\Phi_S') # define embedding\n", "PhiS.display() # show embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and check which points of the circle are projected onto (-10,10):" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMkAAADKCAYAAAAPUmSrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAkNklEQVR4nO2de1RU5733P5u7gIyoKKCAqIgI4oUYIcegEUWNQaNpYy41ZvXElWS1Z9We5rRJ864V0zdtkl6SnKyY9s1ZnsSTarRVabzgBS8Eq6hIQCUIiCgMiApEh/tteN4/EA73QWD23gPPZ629YPbsvZ/v7Nnfee6/RxFCIJFIesZOawESid6RJpFILCBNIpFYQJpEIrGANIlEYgFpEonEAtIkEokFpEkkEgtIk0gkFpAmkUgsIE0ikVhAmkQisYA0iURiAWkSicQC0iQSiQWkSSQSCzhoLWA4oSjKaOD3wBigCXhOCNHY7v33galCiKc0kijpBkXOTFQPRVE+Ad6hxSSZwCohxP777ylAOXBBCBGrnUpJZ2RxSyUURQkBSoQQt4BH7u++0+6QmYAncEJtbZLekSZRDy/gy/v/vwDkAefbvR99/680ic6QdRKVEEIkAyiK4g8sAP6P6FjWjQYqgDQN5El6QeYk6rP2/t/dnfZHA8lCCLPKeiQWkCZRn3m01E1yWncoihIMjEcWtXSJNIn6jAEKOu1bcv/vSZW1SPqANIn6XAD8FUWxB1AUJRz4v8D3wEUthUm6R1bc1ed3wEQgQVGUPKAKcAQOCdlppUtkZ6KK3O8wdBFC1Lbb9yQQD8QJIQ5opU3SM9IkKqIoyhEgCvARQlTfN81poEIIsVxbdZKekHUSdZlHSwdi7f06yYe0fAfrNFUl6RWZk6iIoihLgaWAKzCOFsP8Z/tBjhL9IU0ikVhAFrckEgtIk0gkFpAmkUgsIE0ikVhAmkQisYA0iURiAWkSicQC0iQSiQWkSSQSC0iTSCQWkCYBFEWJVhRlv6IoNxVFEfeHr1s6Z6GiKGmKotQpipKvKMorKkiVaIA0SQtutMwK/GlfDlYUJRBIAE4Bc2iZSPWxoih9jryotOBxf7i8RMeoMTNR9yMo2w/yVBSF+Pj4+N6O/+Uvf8m+ffu4cuXKz4CfAbzyyitcvHixcwSUHjGZTBgMBkwmU39lD3V08+Mhc5J+kJKSQmxsx0iky5Yt48KFCzQ29j7q3Ww209TURFNTE0Db/3I0tn6Rc9z7wa1btxg/fnyHfa2vc3JaIgWVlpZiMpmoqamhpqaGqqoqamtraWhoAKCurg6AP/zhD7i4uKAoCiNGjMDV1RVXV1fc3NxwdXVlzJgxeHl5MXbsWAwGA7J0pj7SJAPg5s2bFBQUUFhYSEFBAb/+9a/Zs2cPAG5ubnh6euLm5oaXlxdFRUUcPXqU2tpampubMZtbYtA98cQTuLu709jY2Gao1u3777/n4sWLbbmOo6MjY8eOxcfHh0mTJhEQEICHh4dmn3+4oMakK5sqR9yvk/Dkk092ea+srIycnBx27tzJ6NGjsbOzw8HBgQkTJlBdXc22bdvYuXMnPj4+jBgxosO59fX11NfXt72uqKjAz88Pk8nU64MuhODevXuUlpZSVlZGaWkpRUVFlJWVAeDp6UlAQACBgYFMmzYNFxeXwbkR2qObLFPmJL0ghKC0tJSsrCyysrIoLS3F0dERT09PMjMz+fDDD/H19cXBwYFXX30Ve3t7Jk+e3O21nJ2dcXZ2fmANiqLg6emJp6cn06ZNa9tfXV1NYWEhN27coKCggIyMDOzs7JgyZQohISFMnz69i1El/UOaBKiqqiIvL6/tdX5+Prt376aoqAiTyYQQgqqqKl566SWmTp2K0WgkLCyMgIAANm7cSEpKClu3buWrr75STbObmxshISGEhIQALTnTlStXyMrKYt++fRw4cIApU6YQERFBUFAQdnayjaa/yOIWkJSUxGOPPYavry/z5s0jLCwMRVGoq6tj48aN/O53v+PGjRskJSW1nfPNN9/w85//nO+++w5fX19+9atf8corfe9PrKioaGsCHux6RWVlJVeuXOHixYvcvHmTUaNGERERwZw5c3BzcxvUtKyIbopbw94kQgiuXr1KcnIyxcXFGAwGIiIimDt3rlUfKGuapD3FxcWkpqaSmZkJwMyZM4mOjsbT09NqaQ4S0iRaI4QgPz+fkydPUlxcjL+/P1FRUUybNs2qRZMtW7awZcsWzGYzubm5VjdJKzU1NaSnp5OSkkJtbS2zZ88mOjoag8Fg9bT7iTSJlhQUFHDixAkKCwuZOHEijz32GIGBgar2QaiVk3SmsbGR1NRUTp8+TX19PXPnziU6Ohp3d3fVNPQRaRItqKqqIjExkUuXLuHj48Njjz3G1KlTNemg08okrdTX13P+/HnOnDkDwOLFi4mIiNBTBV+aRE2am5u5cOECJ06cwM7OjqVLlzJ79mxNe6+1NkkrNTU1HDt2jPT0dHx9fXn88ceZMGGCZnraIU2iFqWlpcTHx1NSUsLcuXOJiYnB1dVVS0mAfkzSitFoJCEhgVu3bvHwww+zZMkSHB0dtZQkTWL1RIXgwoULHD16FE9PT1atWsXEiRO1kNItejMJtOS458+f5/jx43h6erJ27Vq8vb21kiNNYk2qq6vZt28fubm5PPTQQ8TGxmr9q9gFPZqkldLSUvbs2UNZWRkxMTFERkZqUTSVJrEWhYWF/P3vf6e5uZnVq1d3GMqhB7RqAn5QmpqaOH78OGfPniUoKIi1a9eqPS5MmsQaZGRksH//fiZOnMgPfvADRo4cqVbSD4yec5L2XL16lb179+Lu7s6zzz7L6NGj1UpammQwaW5u5tixY6SkpDBnzhxWrlyJvb29tZMdELZiEoDy8nK++uorqqurefrppwkMDFQjWWmSwaKxsZHdu3dz9epVYmNjmT9/vk1MTLIlkwDU1tayZ88e8vPziYuLY86cOdZOUjdfok2bpL6+np07d1JcXMzTTz/N1KlTrZXUoGNrJoGWHDshIYG0tDSWLVtGZGSkNZPTjUlsdqh8bW0tO3bsoLS0lB/96Ef4+/trLWnIY2dnx8qVK3F2dubIkSM0Njby6KOPai3L6tikSWpqavjyyy8xmUy88MIL+Pr6ai1p2KAoCkuWLMHJyYkTJ07Q0NDA4sWLbaKI219sziQNDQ3s2LGDiooKNmzY0CUgg95p3wRsqyiKwsKFC3F0dCQxMRFnZ2cWLFigtSyrYVN1ErPZzI4dOygqKuLFF1/Ex8dnsC6tOrZYJ+mOkydPkpycTFxcHHPnzh3MS+sma7KZnEQIQXx8PAUFBTz//PM2bZChxKJFi6iurubAgQO4uroyffp0rSUNOroZF22J48ePk5WVxVNPPaVWO72kDyiKwuOPP05ISAi7d+/m5s2bWksadGzCJJmZmZw+fZolS5a0BT6Q6Ac7OzvWrFmDt7c3u3btorq6WmtJg4ruTXL79m327dtHWFgYUVFRWsuR9ICDgwNPP/00ZrOZv//97zbdMNEZXZuktraWXbt2MXr0aFatWjWkmxmHAh4eHvzwhz/EaDSSmJiotZxBQ9cmSUhIoKamhnXr1uluqHt/2bJlCzNmzGDevHlaS7EKAQEBxMbGcu7cOa5evaq1nEFBt03Aly9fZu/evaxdu5aZM2cOtibNGSpNwN0hhGDHjh3cunWLV199tb8zQXVTbNBlTmIymTh48CBhYWGqGeTTTz8lMDAQFxcXIiIiOHXqVI/HJiUloShKly07O1sVrXpHURRWrVqF2Wxm//79Nr+shO5MIoRg//79ODs78/jjj6uS5q5du9i0aRNvvvkm6enpPProo6xYsYLCwsJez8vJyaGkpKRtCwoKUkWvLTBy5Eji4uLIzs5uC4xnq+jOJFlZWVy7do2VK1eqFvD5gw8+4F//9V956aWXCAkJ4aOPPsLPz48///nPvZ43btw4vL292za9z2FRm5CQEEJDQzly5Ejbeiy2iK5MUl9fz5EjR5g+fbpq024bGhpIS0vrsnJVbGxsW0yqnpgzZw4+Pj7ExMRw8uRJa8q0WWJjY2lsbOTEiRNaS+k3ujJJUlISdXV1LFu2TLU0y8rKMJvN3a5cdevWrW7P8fHx4bPPPmPPnj3s3buX4OBgYmJiSE5O7jGd+vp6KioqOmzDAQ8PDxYtWkRqaqrN9sbrZuzW999/z/nz51m0aBGjRo1SPf3OfTBCiB77ZYKDgwkODm57HRUVhdFo5I9//CPR0dHdnvPuu+/y9ttvD55gG2L+/PlkZGRw9OhRNmzYYHP9XbrJSZKSknBzc7P2bLcujB07Fnt7+y65xp07dx5oGH5kZGSv/QJvvPEGJpOpbTMajf3WbGvY2dkRExNDQUEB165d01rOA6MLk9y6dYvLly+3zVFQEycnJyIiIrr0ECcmJvLII4/0+Trp6em9jkx2dnbGw8OjwzacCAoKws/Pj+PHj9tck7AuilsnT55k9OjRzJ49W5P0//3f/53169fz0EMPERUVxWeffUZhYWHbojxvvPEGxcXF/M///A8AH330EZMmTSI0NJSGhgb++te/smfPnrZFRSVdaZ3R+Pnnn5OVlUVoaKjWkvqM5ia5c+cOubm5rF69WrMm1HXr1lFeXs5vfvMbSkpKCAsLIyEhgYCAAABKSko69Jk0NDTw2muvUVxczIgRIwgNDeXgwYOq9evYKv7+/gQGBnL69GlmzJhhM3UTzYelfP3111y7do2f/exnw6qfYSgPS+mNvLw8tm/fzgsvvGBpXpBuHKRpnaSiooJLly4RGRk5rAwynJkyZQrjx4+32AelJzQ1SVpaGg4ODkRERGgpQ1WG+ihgSyiKQlRUFHl5eXz//fday+kTmpmkubmZjIwMwsLC+rW+ua3yk5/8hKysLFJTU7WWohkzZszAxcWFb7/9VmspfUIzk+Tl5VFRUTGschFJC46OjoSHh5ORkWETMxg1M0l6ejre3t4y6skwZe7cuVRXV9vExCxNTFJfX8/Vq1cJDw+3mWZAyeAyfvx4xo8fz3fffae1FItoYpLc3FzMZjMzZszQInmJTpgxYwY5OTk0NjZqLaVXNDFJVlYWEyZMwGAwaJG8RCeEhobS2NhIXl6e1lJ6RXWTNDU1kZeXN2zjZw33JuD2jBkzBi8vL3Jzc7WW0iuqm6SwsJCmpiabWktkMJFNwB2ZOnUq165d0/WgR9VNkpeXh7u7O+PGjVM7aYkOmTJlCpWVldy5c0drKT2iukmuX7/O5MmTZauWBGiJ0+Xg4EB+fr7WUnpEVZPU19dz+/ZtuSqVpA0HBwd8fX0pKirSWkqPqGqSmzdvIoTAz89PzWQlOmfixIm6nqmpqkmKiopwdnbGy8tLzWR1hWzd6srEiROprKzUbXAMVU1y+/ZtvL29h3V9RLZudaV1aFJP0Wm0RlWT3LlzR7ZqSbpgMBhwcnLSbQuXaiYxm82Ul5dLk0i6oCgK48aN061JVJvjfu/ePZqbmxkzZoxaSUpsiLFjx1JaWjoo11IUxRN4i5bneyrwN2AH8AdapgV7Ar8VQmT15XqqmgTQJPCcRP8YDIZBGTavKIoT8CnwCyHETUVRAoDrwGpgExAEHATuAj/tyzVVK27dvXsXRVHkoEZJt3h6elJdXT0YI4JfAT4XQrTGVK2jJfe4IYS4DtgDV4Gv+npB1UxSWVmJu7s7dna6iIenGbIJuHtGjhwJtDwnA+SuEOJou9cP3f97GEAIcUgIMUMIcbqvF1Ttia2pqenvikdDCtkE3D1ubm5Ay3MyEIQQX3ba9RhgBv7Z32uqapLWGyGRdKb1B3SgJumGxUCaEKLfWZRqJqmvrx9WUVEkD4aLiwvQ8pwMFvdbuWYBSZ32v/Qg11HNJI2NjUNmBV3J4OPg0NLQOpCKu6IoXoqinFcU5a37u5bT8oyfb38M0PdI6KhsktYbIZF0RlEUHBwcaGhoGMhlFgLzWi6njADWATcB9/tpuAEfA5sf5KJWfWoVRVFMJhMAtbW11NbW6nYQm7Wpr6/vUJRobcUZrvejO+rq6qipqWmNk+wBVIoHm7J4BNgKjAP+H/AG4AH8TlGUhYAT8K4QovcVYzth1YDZiqJ4ACarJSAZ6hiEEJr/iljbJIrJZGoG2LZtG0ePHuXPf/5zt1HU582b12OzaE/v9eeciooK/Pz8MBqNg6ajLxo75yQlJSU8/PDDbZFjrK2jt/d6uydq6RBC8N5775GQkMDBgwfx8/Mz8OA5iVWwanGr/Qd0c3PDxcWlx1We7O3te1yCoKf3+nNOK4Opo78aoaUTTQ0dfdHS3T1RS4fZbMbFxQVFUfDw8EAPOUgrqlXc7e3te11e4Sc/+ckDv9efcyzR32v2R6OaOvqrRS0drTGBdRkbWAhh7U0IIcT27dvF+vXrhclkElpiMpkEoLkOo9EoAGE0GjXVIYQ+7kllZaXYvHmzCA4ObtWhxrPZp021nGTkyJFMnjxZ8w5FZ2dn3nrrLV3oaP9XS/RwT1pb+5555hld3JP2qNZxMWrUKFxdXTW/Ac7OzmzevFlTDa062v/VEj3ck6qqKgB+/vOf6+KetEe1nMTd3Z3a2lp9ljlVRI4C7p5Wk7i7u2uspCuqFrfgf2/GcEWOAu6eyspKXF1ddbl2pmomaZ1sdffuXbWSlNgQd+/e1e2EPNVMMnr0aOzs7AZtHrNkaFFaWqrbeGxWNYmiKG8+8sgjuLq6MmbMGMaMGWMxIoYQgs2bN+Pr68uIESNYtGjRgFdDunv3LuvXr8dgMGAwGFi/fn3bnPueePHFF1EUpcMWGRk5IB1a8emnnxIYGIiLiwsRERGcOnWqx2OTkpK6fG5FUcjOzh6QhuTkZOLi4vD19UVRFP7xj3+0vSeE6NYkiqIsVBQlTVGUOkVR8hVFeWVAIvqJtXMSpx/+8Ie8+uqrAHh5eVnMSX7/+9/zwQcf8Mknn5Camoq3tzdLly4d0LTO5557joyMDA4fPszhw4fJyMhg/fr1Fs9bvnw5JSUlbVtCQkK/NWjFrl272LRpE2+++Sbp6ek8+uijrFixgsLC3sf45eTkdPjsQUFBA9JRXV3NrFmz+OSTT7q8V1FRQUNDQ4dwU4qiBAIJwClgDvA74GNFUZ4akJD+oEJnjPj888+FwWAQSUlJ4v333xfNzc3ddig1NzcLb29v8d5777Xtq6urEwaDQfzlL3/pa79UB7KysgQgzp4927YvJSVFACI7O7vH8zZs2CBWr17drzT7glodeA8//LB45ZVXOuybPn26eP3117s9/uTJkwIQd+/etZomQMTHx7e9zsnJEZs3bxbff/99+2PeB66Ids8S8BcgRVj/mdWmMxFgwoQJ1NbWUl5e3u37169f59atW8TGxrbtc3Z2ZuHChZw5c6ZfaaakpGAwGJg/f37bvsjISAwGg8VrJiUlMW7cOKZNm8bGjRsHJXiamk3ADQ0NpKWldbifALGxsRY/+5w5c/Dx8SEmJoaTJ09aUyZGoxE3N7fO4aaigKOdDj0CPKQoiqqz91Q1iZ+fH4qi9JjVt8aCHT9+fIf948eP73ec2Fu3bnUbNXLcuHG9XnPFihVs376dEydO8Kc//YnU1FQWL1484OmlajYBl5WVYTabH+h++vj48Nlnn7Fnzx727t1LcHAwMTExJCcnW02n0WjE39+/c4xob+B2p0Nv09IBPtZqYrrhgXvcFUXZTEt0vN6YJ4S40Hmns7Mz48ePx2g0Mnfu3N7S6PBaCNFl3+bNm3n77bd7FdH6IHYXoLu7a7Zn3bp1bf+HhYXx0EMPERAQwMGDB1m7dm2v6eqNvtzPVoKDgwkODm57HRUVhdFo5I9//CPR0dGDrq2pqYni4mIWL17c3dudh8krPey3Kv0ZlvIJsNPCMTd6esPPz6/H1Va9vb2Bll//1kjj0BJou/Ov4U9/+lOeeeaZXkVMmjSJS5cucft25x+klibHztfsDR8fHwICAgYlyqBajB07Fnt7+y65Rnf3szciIyP561//OtjygJY1a5qamrpb2OkWLblJe8YBTUD35XUr8cAmEUKUAWX9TXDKlCmkpqZSXl7eJS5wYGAg3t7eJCYmMmfOHKClXP3NN9/w/vvvdzh27NixjB1rOdeNiorCZDJx/vx5Hn74YQDOnTuHyWTikUf6Hg+gvLwco9HYwbx6x8nJiYiICBITE1mzZk3b/sTERFavXt3n66Snp1vtc+fl5TFixIjurp8CxHXaFwtcEEKou/C7NVsFAP/09HTx9ttvC3d3d5Geni5SU1PFO++8I86cOSOEECI4OFjs3bu3rVXjvffeEwaDQezdu1dcvnxZPPvss8LHx0dUVFQ8UAtKe5YvXy7Cw8NFSkqKSElJETNnzhRPPPFEh2Pa66isrBS/+MUvxJkzZ8T169fFyZMnRVRUlJgwYcKAdLRHrdatnTt3CkdHR7F161aRlZUlNm3aJNzc3MSNGzeEEEK8/vrrYv369W3Hf/jhhyI+Pl7k5uaKzMxM8frrrwtA7NmzZ0A6KisrRXp6ukhPTxeA+OCDD0R6err4+OOPxd69e7voAAKBauADIAT4MdAAPCVUbt2ytkm+oKX82GH7+OOPxRdffNF6M8Tnn3/ednOam5vFW2+9Jby9vYWzs7OIjo4Wly9fHtAXVF5eLp5//nkxcuRIMXLkSPH88893aeJsr6OmpkbExsYKLy8v4ejoKPz9/cWGDRtEYWHhgHS0R805HFu2bBEBAQHCyclJzJ07V3zzzTdt723YsEEsXLiw7fX7778vpkyZIlxcXISnp6dYsGCBOHjw4IA1tDYtt988PDzE5s2bRWZmZhcdouX5WQh8C9TTEvT6FaGyQYQQ1p3j3ppZdd5x4cIFEhISeO2114Zd6NMtW7awZcsWzGYzubm5mEymXqfUDmXOnTvH0aNH+Y//+I+24HTt0M1yaJpErw4JCUFRFDIzM7VIXlPkKOD/5fLlywQFBXVnEF2hiUnc3NyYOnUqly9f1iJ5iQ4oLy+nuLiYmTNnai3FIpqtgzBz5kyKiop67H2XDG0uXbqEs7Mz06ZN01qKRTQzSXBwMC4uLqSlpWklQaIRZrOZ9PR0QkNDbSI+tGYmcXR0ZM6cOaSnpw/G6kYSGyInJ4fKysq2fiu9o+myU/PmzaOurm5Y1U3kHHc4f/48/v7+D9TrryWamsTT05Pg4GBSUlJQoSlaFwz31i2j0UhBQUGHUdl6R/MFDBcsWEBZWdmAZ75JbIPk5GS8vLwICQnRWkqf0dwkEydOZNKkSZw6dUqT3GS4T+1Vk5s3b5KXl8ejjz7a6whsvaG5SQAWLlxISUkJWVl9Wnt+UBnOU3vVJjk5mdGjRxMaGqq1lAdCF0tPTZo0iaCgII4fP8706dNVi7105coVDh8+zNmzZ9vKyP/1X/9FVFQUOTk5HeZVdMbZ2bltaL/EMoWFheTk5PDkk0/a3DLlulG7ZMkS7t27p2q/iZpTe+vr66moqOiwDReEEBw+fBgfHx/Cw8O1lvPA6MYk48aNY9asWXzzzTfWWKa4W9Sc2vvuu++21XsMBgN+fn6D8hlsgYsXL1JSUsLy5cttqi7Sim5MAhATE4PZbObYsWMDus7mzZu7jR3VfrtwoWV2cX+n9q5cuZKwsDDi4uI4dOgQubm5HDx4sMdz3njjDUwmU9tmNBoH9Blthbq6Oo4fP05oaGh3sw9tAl3USVpxd3dnyZIlHDx4kFmzZhEQENCv6+hxaq+zs7PuoqWrQWJiIg0NDSxdulRrKf1GVyYBiIiI4OLFixw4cICXX365X8tay6m9+uD69et8++23rFy5UrdxfvuCropb0FL8iYuL4+7duxw/ftyqaYWEhLB8+XI2btzI2bNnOXv2LBs3buSJJ57o0LI1ffp04uPjgZao+K+99hopKSncuHGDpKQk4uLiGDt2bId55MOd+vp69u/fT0BAABEREVrLGRC6Mwm0VJxjYmI4e/Ys+fn5Vk1r+/btzJw5k9jYWGJjYwkPD+fLL7/scExOTg6t69Hb29tz+fJlVq9ezbRp09iwYQPTpk0jJSWlbXmJ4Y4QgoSEBKqrq1m1apVNVtbbo8n03T6dJARffvklZWVlvPzyy7i5uQ22Lk2pqKjAYDAMyem7GRkZfP3116xZs2YgTb66cZYucxJoKXatWbOG5uZmdu/eTXNzs9aSBoWhPgq4tLSUhIQEZs+ebZN9It2h25yklYKCArZt20ZkZGSXmLa2zFDMSerq6ti6dSsAGzduxMnJaSCXkzlJXwkICCA2NpaUlJRhNe/E1mjN8auqqnjmmWcGahBdobsm4O6YP38+JSUlfP3114wcOZJJkyZpLUnSiSNHjpCfn8+PfvSjLpE5bR3d5yTQUj9ZtWoV/v7+7Nq1a1CWQJAMHqdPn+b8+fOsWLGCyZMnay1n0LEJk0BL0+vTTz+NwWBg+/btFud8SNQhNTWVY8eOER0dPWQbI2zGJAAuLi4899xz2Nvb88UXX0ijaMylS5dISEhg/vz5LFq0SGs5VsOmTALg4eHBhg0bsLOzY9u2bTZnlKHSBHzp0iX+8Y9/MHv2bJYtW2bzHYa9ofsm4J4wmUxs27aN5uZm1q9fb3OVRVtuAk5NTW3rC4mLi7PWJCrduM7mcpJWDAYDGzZswNHRkf/+7/+muLhYa0lDHiEEp06dIiEhgcjISFatWmVzswz7g01/QoPBwI9//GNGjx7Ntm3byM3N1VrSkMVsNrNv3z5OnDjBwoULiY2NHdJFrPbYbHGrPY2Njezdu5fs7GwWL17MggULdP8F2lJxq6amhr/97W8UFRURFxfHrFmz1EhWN1/gkDAJtBQFkpKSSE5OJjQ0lFWrVum619dWTFJcXMzu3btpaGhg3bp1as4ulCaxFleuXCE+Ph4PDw+eeuop3U6E0rtJhBCcO3eOxMREfHx8+MEPftB5nXVrI01iTcrLy9mzZw+3b98mJiaGqKgo3RS/bGGlq6qqKg4cOEBOTg6RkZEsWbJEtTBP7dDHF8YQNQm0VDSPHz9OSkoKkyZNIi4ujtGjR2shpVv0mJMIIcjMzOTQoUNtM0SnT5+ulRxpErXIz89n//79VFVVsXDhQqKiorT4VeyC3kxSUVHBoUOHyM7OJiwsjOXLl2s90U2aRE0aGhpISkri7NmzeHl5sWzZMs0H4unFJI2NjZw5c4bTp0/j5OTEypUr9RLMWppEC0pKSjh06BBGo5GgoCCWLl2Kl5eXJlq0NokQgu+++45jx45RWVlJZGQk0dHRegp7JE2iFUIIrly5wrFjx7h37x7h4eEsWLCgTyGIBhOtTCKEIDs7m6SkJO7cuUNQUBDLli3T47AeaRKtaWpqIi0tjdOnT1NZWUlYWBj/8i//oloQbLVNYjab+e677zhz5gy3b98mMDCQRYsW6TmqojSJXmhqaiIjI4N//vOfmEwm/P39mTdvHiEhIVap4KvdBFxdXU1aWhqpqalUVVUxefJkoqOj+x0dU0WkSfSG2WwmOzub1NRUCgoKcHd3Z+bMmYSHhzN+/PhB72exZk7SasCLFy9y9epV7OzsCA8PZ/78+d0GCNcp0iR64be//S0HDx4kIyMDJycn7t27x+3bt0lLSyMzM5Pa2lq8vLwICwtj2rRpbTGC3377bT777DPu3r3L/Pnz2bJlywMtTjPYJmlsbCQ/P5+cnByys7Opra3Fx8eHWbNmMXPmTFxdXQechspIk+iFt956i1GjRlFUVMTWrVs7TOIym81cu3aNzMxMsrOzaWxsxMPDg+rqauLj4/nlL39JaGgo77zzDsnJyeTk5PQ5iuNATdLc3MydO3e4ceMGN27c4Nq1azQ1NTFmzBimT59OeHi4LeUa3SFNoje++OILNm3a1ONMx6amJgoLC8nNzeXIkSNt45g8PT3x9fVl8+bN/Nu//Rsvv/xyn9Lrr0lOnz5NQUEBRqORuro67O3tmThxIkFBQQQHB6veSmdFdGMSmwgppAccHBzaOiBXrFjBmTNn8PDwwGg0YjQamTdvHmfOnOmzSfpLYWEhzc3NREZGEhAQwMSJE/sVeV/Sd+TdfUBaV8AKCAjA19e3rR7SWuHvifr6+g4rYfV3Obhnn322X+dJ+o9Nz0zsiQdZ6aq/dG7tsrQ61nBeDs7WUaNOojqKoowFLBXObwgh6tqd8yLwkRBilIVrTwauAXOFEOnt9n8N3BNCbOjhPGeg/ZiPkUARYBBCDJ9VRm2QIVncEkKUAWVWuvx14BawFEgHUBTFCVgI/KoXTfVAW3lLUZRKwABUWkmnZJAYksWtB0FRFH9FUWYD/oC9oiiz72/u7Y7JVhRlDYBoyXo/An6tKMoaRVHCgC+AGmBHX9MVLVSIoZiVDzGGZE7ygPwGaF9Eai1CPQYk3f8/mJZf/VZ+D4wAPgU8gXNArBBC5gpDkCFZJ5FIBpNhX9ySSCwhTSKRWECaRCKxgDSJRGIBaRKJxALSJBKJBaRJJBILSJNIJBaQJpFILCBNIpFYQJpEIrGANIlEYoH/Dy39WuV7Qc89AAAAAElFTkSuQmCC\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# continuation\n", "p=stereoS.plot(c_cart,mapping=PhiS,ranges={up:(-10,10)},\n", " number_values={up:50},color={up:'grey'}, # plot image of (-10,10)\n", " plot_points=500)\n", "p.show(figsize=[3,2]) # show image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "\n", "### Transition map from u coordinate to u' coordinate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the relations $\\ u=\\frac{x}{1-y},\\ \\ u'=\\frac{x}{1+y}$ and $y=\\frac{u^2-1}{u^2+1},\\ $ we obtain\n", "$u'=\\frac{x}{1+y}=\\frac{u(1-y)}{1+y}=\\frac{1-y}{1+y}u.\\ \\ $ Replacing $y$ by $\\frac{u^2-1}{u^2+1}\\ \\ $ we get $\\ \\frac{1-y}{1+y}=\\frac{1-\\frac{u^2-1}{u^2+1}}{1+\\frac{u^2-1}{u^2+1}}=\n", "\\frac{u^2+1-u^2+1}{u^2+1+u^2-1}=\\frac{2}{2u^2}=\\frac{1}{u^2}.\\ $ Accordingly $u'=\\frac{1-y}{1+y}u=\\frac{1}{u},\\ $ so the transition map from $u$ coordinate to $u'$ coordinate has the form $\\ u'=\\frac{1}{u}.\\ $ It is smooth if $\\ u\\not=0, u'\\not=0.$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is SageMath solution (eliminate x,y variables from equations of the first line in the previous computations):" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[2 \\, {\\left(u {u'} - 1\\right)} u\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[2 \\, {\\left(u {u'} - 1\\right)} u\\right]$" ], "text/plain": [ "[2*(u*up - 1)*u]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "var('x,y,u,up')\n", "maxima.eliminate([u==x/(1-y),up==x/(1+y), # eliminate var. x,y\n", " y==(u^2-1)/(u^2+1)],[x,y]).sage() # from eqs of projections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The answer means that the bracket vanishes.\n", "Since $u\\not=0$, the expression in the bracket vanishes if $\\ \\ u'=\\frac{1}{u}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.7**\n", "\n", "In `SageMath Manifolds` the transition from one coordinate system to the other can be defined as follows:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}$" ], "text/plain": [ "up = 1/u" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S1=manifolds.Sphere(1) # S^1 from manifolds.Sphere\n", " # stereographic projection from the North pole:\n", "stereoN. = S1.stereographic_coordinates(pole='north')\n", " # stereographic projection from the South pole:\n", "stereoS. = S1.stereographic_coordinates(pole='south')\n", "\n", "\n", "trans = stereoN.transition_map(stereoS, 1/u, # define transition\n", " intersection_name='W', # stereoN -> StereoS\n", " restrictions1= u!=0, # specify\n", " restrictions2 = up!=0) # restrictions\n", "trans.display() # show transition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some cases, the definition of the inverse transition can be left to the `SageMath Manifolds`." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} u & = & \\frac{1}{{u'}} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} u & = & \\frac{1}{{u'}} \\end{array}$" ], "text/plain": [ "u = 1/up" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trans.inverse().display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see the transition map and its inverse are smooth." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some transition maps are predefined in `manifolds.Sphere`.
\n", "\n", "
\n", "\n", "**Example 4.8**\n", "\n", "Let us check that the transitions from the previous example are predefined in `manifolds.Sphere`." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}, \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}, \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}\\right)$" ], "text/plain": [ "(up = 1/u, up = 1/u)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dim=1 # dim of the sphere\n", "Sph=manifolds.Sphere(dim) # sphere S^1 \n", "spher = Sph.spherical_coordinates() # spherical coord.\n", "stereoN, stereoS = Sph.coordinate_charts('stereographic',\n", " names=['u']) # sterogr. projections\n", "A=stereoN.domain() # domain of stereoN\n", " # intersection of domains of stereoN and stereo S:\n", "W = Sph._stereoN_dom.intersection(Sph._stereoS_dom)\n", " # transition from stereoN to stereoS:\n", "FNS=Sph.coord_change(stereoN.restrict(W),stereoS.restrict(W))\n", " # transition from stereoS to stereoN:\n", "FSN=Sph.coord_change(stereoS.restrict(W),stereoN.restrict(W))\n", "FNS.disp(),FSN.disp() # show transitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check that both transitions can be obtained as compositions of other transitions." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{lcl} u & = & \\frac{1}{{u'}} \\end{array}, \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{lcl} u & = & \\frac{1}{{u'}} \\end{array}, \\begin{array}{lcl} {u'} & = & \\frac{1}{u} \\end{array}\\right)$" ], "text/plain": [ "(u = 1/up, up = 1/u)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "A = spher.domain() # domain of spher.coord\n", " # intersection of domains of stereoN and stereo S:\n", "W = Sph._stereoN_dom.intersection(Sph._stereoS_dom)\n", "V=W.intersection(A) # intersection of domains of \n", " # stereoN, stereoS and spher \n", "F1=Sph.coord_change(spher.restrict(V), \n", " stereoN.restrict(V)) # transition spher -> stereoN\n", "\n", "F2=Sph.coord_change( stereoN.restrict(V),\n", " spher.restrict(V)) # transition stereoN -> spher\n", "\n", "F3=Sph.coord_change(spher.restrict(V), stereoS.restrict(V))\n", " # transition spher -> stereoS\n", "F4=Sph.coord_change( stereoS.restrict(V),spher.restrict(V))\n", " # transition stereoS -> spher\n", "(F1*F4).disp(),(F3*F2).disp() # show compositions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.9**\n", "\n", "Knowing the transition maps we are ready to define $S^1$ as a manifold with two maps. \n", "\n", "Note that this time, our calculations are independent of `manifolds.Sphere`. " ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{lcl} v & = & \\frac{1}{u} \\end{array}, \\begin{array}{lcl} u & = & \\frac{1}{v} \\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{lcl} v & = & \\frac{1}{u} \\end{array}, \\begin{array}{lcl} u & = & \\frac{1}{v} \\end{array}\\right)$" ], "text/plain": [ "(v = 1/u, u = 1/v)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = Manifold(1, 'S^1') # sphere S^1 \n", "U = M.open_subset('U') # complement of the North pole\n", "cU. = U.chart() # sterogr. proj. from North pole\n", "V = M.open_subset('V') # complement of the South pole\n", "cV. = V.chart() # sterogr. proj. from South pole\n", "M.declare_union(U,V) # M is the sum of U and V\n", "trans = cU.transition_map(cV, 1/u, intersection_name='W',\n", " restrictions1= u!=0, # transition cU -> cV\n", " restrictions2 = v!=0)\n", "trans_inv=trans.inverse() # inverse transition\n", "trans.disp(),trans_inv.disp() # show transitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "## Two dimensional sphere $S^2$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Spherical coordinates in $\\mathbf{S}^2$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In `manifolds.Sphere` in two-dimensional case \n", "$\\ \\ S^2=\\{(x,y,z)\\in R^3: x^2+y^2+z^2=1\\}\\ \\ $ the default coordinates are the spherical ones." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "var('u v t') # symb.var.\n", "\n", "po1={'thickness':5,'color':'darkblue'} # parameters\n", "po2={'fontsize':20,'color':'black'}\n", "po3={'size':7,'color':'black'}\n", "\n", "ax =line3d([(0,0,0), (1+0.15,0,0)], **po1) # axes\n", "ax+=line3d([(0,0,0), (0,1+0.15,0)], **po1)\n", "ax+=line3d([(0,0,0), (0,0,1+0.15)], **po1)\n", "ax+=text3d(\"x\",(1.25,0,0),**po2)\n", "ax+=text3d(\"y\",(0,1.25,0),**po2)\n", "ax+=text3d(\"z\",(0.,0.,1.25),**po2)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " # semisphere:\n", "s=parametric_plot3d((cos(u)*cos(v), sin(u)*cos(v), sin(v)),\n", "(u,0,2*pi), (v,0,pi/2),opacity=0.9,color='lightgrey')\n", "\n", "a=0.59 # triangle\n", "tr=line3d([(0,0,0),(a,a,0),(a,a,a),(0,0,0)],**po1)\n", "\n", "dots=point3d([(0.5*cos(t),0.5*sin(t),0) # dots\n", " for t in srange(0,pi/4,0.1)], **po3)\n", "dots+=point3d([(0.5*cos(t),0.5*cos(t),0.5*sin(t))\n", " for t in srange(pi/4,pi/2,0.1)],**po3)\n", " \n", "t=text3d(\"(x,y,z)\",(0.6,0.8,0.7),**po2) # variables\n", "t+=text3d(\"φ\",(0.7,0.3,0.0),**po2) # names\n", "t+=text3d(\"θ\",(0.,0.2,0.5),**po2)\n", " # combine plots:\n", "(ax+s+tr+dots+t).rotateZ(-pi/8).show(frame=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example 4.10**\n", "\n", "Let us show how to use the spherical coordinates in $\\ S^2$." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ A : & \\left(\\theta, \\phi\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right)\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ A : & \\left(\\theta, \\phi\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right)\\right) \\end{array}$" ], "text/plain": [ "iota: S^2 → E^3\n", "on A: (theta, phi) ↦ (x, y, z) = (cos(phi)*sin(theta), sin(phi)*sin(theta), cos(theta))" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S2=manifolds.Sphere(2) # two-dimensional sphere\n", "Phi=S2.embedding() # embedding into E^3\n", "Phi.disp() # show embedding" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(A,(\\theta, \\phi)\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(A,(\\theta, \\phi)\\right)$" ], "text/plain": [ "Chart (A, (theta, phi))" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S2.default_chart() # default chart" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check the ranges of variables $\\theta, \\phi$." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Cartesian product of ((0, pi), [-pi, pi))\n" ] } ], "source": [ "sph.=S2.spherical_coordinates() # spherical coordinates\n", "print(sph.codomain())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us note that that the spherical coordinates in `manifolds.Sphere` are defined on an open subset of the sphere, they do not cover the whole sphere. To cover the entire sphere with charts, we will use the stereographic coordinates instead." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Open subset A of the 2-sphere S^2 of radius 1 smoothly embedded in the Euclidean space E^3\n" ] } ], "source": [ "A=sph.domain() # domain of definition of spher. coordinates\n", "print(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the Jacobian of the embedding into $E^3$," ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{rr}\n", "\\cos\\left(\\phi\\right) \\cos\\left(\\theta\\right) & -\\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right) \\\\\n", "\\cos\\left(\\theta\\right) \\sin\\left(\\phi\\right) & \\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right) \\\\\n", "-\\sin\\left(\\theta\\right) & 0\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{rr}\n", "\\cos\\left(\\phi\\right) \\cos\\left(\\theta\\right) & -\\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right) \\\\\n", "\\cos\\left(\\theta\\right) \\sin\\left(\\phi\\right) & \\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right) \\\\\n", "-\\sin\\left(\\theta\\right) & 0\n", "\\end{array}\\right)$" ], "text/plain": [ "[ cos(phi)*cos(theta) -sin(phi)*sin(theta)]\n", "[ cos(theta)*sin(phi) cos(phi)*sin(theta)]\n", "[ -sin(theta) 0]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.jacobian_matrix() # Jacobian matrix of embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the 2x2 minors of this matrix." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\cos\\left(\\phi\\right)^{2} \\cos\\left(\\theta\\right) \\sin\\left(\\theta\\right) + \\cos\\left(\\theta\\right) \\sin\\left(\\phi\\right)^{2} \\sin\\left(\\theta\\right), -\\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right)^{2}, \\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right)^{2}\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\cos\\left(\\phi\\right)^{2} \\cos\\left(\\theta\\right) \\sin\\left(\\theta\\right) + \\cos\\left(\\theta\\right) \\sin\\left(\\phi\\right)^{2} \\sin\\left(\\theta\\right), -\\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right)^{2}, \\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right)^{2}\\right]$" ], "text/plain": [ "[cos(phi)^2*cos(theta)*sin(theta) + cos(theta)*sin(phi)^2*sin(theta),\n", " -sin(phi)*sin(theta)^2,\n", " cos(phi)*sin(theta)^2]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.jacobian_matrix().minors(2) # minors of Jacobian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The sum of squares of 2x2 minors allows us to check the rank of the Jacobian matrix." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\sin\\left(\\theta\\right)^{2}\\)" ], "text/latex": [ "$\\displaystyle \\sin\\left(\\theta\\right)^{2}$" ], "text/plain": [ "sin(theta)^2" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ll=[Phi.jacobian_matrix().minors(2)[k].full_simplify() \n", " for k in range(3)] # list of minors of Jacobian\n", "sum([ll[k]^2 for k in range(3)]).full_simplify()\n", " # sum of squares of minors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "so the rank is 2 if $\\theta\\in (0,\\pi)$.\n", "\n", "
\n", "\n", "If we are not interested in all details, we can check the rank of Jacobian using the command:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle 2\\)" ], "text/latex": [ "$\\displaystyle 2$" ], "text/plain": [ "2" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.jacobian_matrix().rank()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see spherical coordinates define transformation with Jacobian of rank 2 on the subset A of the sphere defined by $(\\theta,\\varphi)\\in (0,\\pi)\\times [-\\pi,\\pi)$.\n", "\n", "
\n", "\n", "**Example 4.11**\n", "\n", "Let us plot the coordinate lines of the spherical coordinates." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%display latex\n", "S2=manifolds.Sphere(2) # two-dimensional sphere\n", "sph.=S2.spherical_coordinates() # spherical coordinates\n", "Phi=S2.embedding() # embedding into E^3\n", "E=S2.ambient() # ambient space E^3\n", "c_cart. = E.cartesian_coordinates() # Cartesian coordinates\n", "p=sph.plot(c_cart,mapping=Phi,number_values=15,\n", " thickness=2,color='grey', # plot coordinate lines\n", " label_axes=False,frame=False)\n", "p.show(frame=False) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.12**\n", "\n", "We can restrict the ranges of parameters (for example to $\\ \\theta\\in (0,\\pi/2),\\ \\ \\phi \\in (0,\\pi/4)$ ):" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "po1={'thickness':5,'color':'darkblue'} # param.\n", "po2={'fontsize':20,'color':'black'}\n", "ax =line3d([(0,0,0), (1+0.15,0,0)], **po1) # axes\n", "ax+=line3d([(0,0,0), (0,1+0.15,0)], **po1)\n", "ax+=line3d([(0,0,0), (0,0,1+0.15)], **po1)\n", "ax+=text3d(\"x\",(1.25,0,0),**po2)\n", "ax+=text3d(\"y\",(0,1.25,0),**po2)\n", "ax+=text3d(\"z\",(0.,0.,1.25),**po2)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "S2=manifolds.Sphere(2) # sphere S^2\n", "Phi=S2.embedding() # embedding S^2->E^3\n", "sph.=S2.spherical_coordinates() # spherical coord.\n", "A=sph.domain() # domain of sph\n", "U=A.open_subset('U',coord_def={sph:[th>0,th0,ph = E.cartesian_coordinates() # Cartesian coord.\n", "p=sphU.plot(c_cart,mapping=Phi,number_values=10,thickness=2,\n", " color='grey',label_axes=False) # plot sphU coord lines \n", "(p+ax).show(frame=False,label_axes=False) # plot coord lines and ax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example 4.13**\n", "\n", "We can investigate $S^2$ and its parts without `manifolds.Sphere`,\n", "but the transition maps and the corresponding restrictions must be defined by the user in that case.\n", "\n", "We have to define the manifolds, charts and the embedding $S^2\\to R^3$." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "# spherical coordinates in S^2 without manifolds.Sphere setup\n", "M = Manifold(2, 'S^2') # sphere S^2\n", "U = M.open_subset('U') # the complement of a meridian, \n", " # domain of spherical coordinates\n", "c_spher. = U.chart(r'th:(0,pi):\\theta ph:(0,2*pi):\\phi') \n", " # spherical coordinates on U\n", "N = Manifold(3, 'R^3', r'\\RR^3') # manifold R^3\n", "c_cart. = N.chart() # Cartesian coord. on R^3\n", "Phi=U.continuous_map(N,(sin(th)*cos(ph),sin(th)*sin(ph), cos(th)),\n", " name='Phi',latex_name=r'\\Phi') # define embedding S^2 -> R^3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can make previous plots without `manifolds.Sphere` setup." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Previous graph without manifolds.Sphere setup\n", "forget()\n", "M = Manifold(2, 'S2') # sphere S^2\n", "c_pol. = M.chart() # spherical coordinates\n", "D = M.open_subset('D', coord_def={c_pol: [0 = N.chart() # Cartesian coordinates on R^3\n", "Phi = M.continuous_map(N,{(c_pol,c_cart): \n", " (cos(ph)*sin(th),sin(ph)*sin(th), cos(th))},\n", " name='Phi',latex_name=r'\\Phi') # define embedding S^2->R^3 \n", "Phi1 = Phi.restrict(D) # restrict embedding to D\n", "p=c_pol_D.plot(c_cart,mapping=Phi1, # plot the coordinate lines\n", " ranges={ph:(0,pi/4),th:(0,pi/2)}, # contained in D\n", " number_values={ph:11,th:10},thickness=2,\n", " color='grey',label_axes=False)\n", "(p+ax).show(frame=False) # use ax defined in the previous plot!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stereographic coordinates in $\\mathbf{S^2}$\n", "\n", "### Stereographic projection of $S^2$ from the North pole" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "var('t u v')\n", "\n", "po1={'thickness':5,'color':'darkblue'} # parameters\n", "po2={'fontsize':20,'color':'black'}\n", "po3={'fontsize':20,'color':'white'}\n", " # half line from North pole:\n", "p=parametric_plot3d((t,t,1-t/0.85),(t,0,0.85),**po1)\n", "p+=point3d([(1.2*cos(t),1.2*sin(t),0) # dotted arc\n", " for t in srange(0,pi/2,0.087)], size=7,frame=False)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "ax =line3d([(0,0,0), (1+0.15,0,0)], **po1) # axes\n", "ax+=line3d([(0,0,0), (0,1.1+0.15,0)], **po1)\n", "ax+=line3d([(0,0,0), (0,0,1+0.15)], **po1)\n", "ax+=text3d(\"x\",(1.25,0,0),**po2)\n", "ax+=text3d(\"y\",(0,1.3,0),**po2)\n", "ax+=text3d(\"z\",(0.,0.,1.25),**po2) " ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " # hemisphere:\n", "s=parametric_plot3d((cos(u)*cos(v), sin(u)*cos(v), sin(v)),\n", "(u,0,2*pi), (v,0,pi/2),opacity=0.9,color='lightgrey')\n", "\n", "t=text3d(\"(x,y,z)\",(0.8,0.67,0.3),**po3) # distinguished\n", "t+=text3d(\"(u,v,0)\",(1.,1.,0.0),fontsize=20) # points\n", "t+=text3d(\"(0,0,1)\",(0.6,0.2,0.98),**po3)\n", "\n", "(p+ax+s+t).rotateZ(-pi/6).show(frame=False) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the line which passes through the North pole $(0,0,1)$, the point $(x,y,z)$ on the sphere and intersects\n", "the plane Oxy at the point $(u,v,0)$. The functions $\\ u = u(x,y,z),\\ v=v(x,y,z)\\ $ define the stereographic projection from the North pole. Using the rotations around z-axis and appropriate similar triangles in $Oxz$ and $Oyz$ planes we can see that (as in the case of $S^1$) $\\quad\\frac{u}{x}=\\frac{1}{1-z},\\quad \\frac{v}{y}=\\frac{1}{1-z},\\quad$ so the stereographic projection can be described by $$u=\\frac{x}{1-z},\\quad v=\\frac{y}{1-z}.$$\n", "Solving this system combined with the equation of the unit sphere: $x^2+y^2+z^2=1$ with respect to $x,y,z$:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left[x = 0, y = 0, z = 1\\right], \\left[x = \\frac{2 \\, u}{u^{2} + v^{2} + 1}, y = \\frac{2 \\, v}{u^{2} + v^{2} + 1}, z = \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right]\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left[x = 0, y = 0, z = 1\\right], \\left[x = \\frac{2 \\, u}{u^{2} + v^{2} + 1}, y = \\frac{2 \\, v}{u^{2} + v^{2} + 1}, z = \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right]\\right]$" ], "text/plain": [ "[[x == 0, y == 0, z == 1], [x == 2*u/(u^2 + v^2 + 1), y == 2*v/(u^2 + v^2 + 1), z == (u^2 + v^2 - 1)/(u^2 + v^2 + 1)]]" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "var('u v x y z') # symbolic variables\n", "assume(z>0) # assume z>0\n", " # solve the system above, \n", " # with respect to x,y,z\n", "solve([u==x/(1-z),v==y/(1-z),x^2+y^2+z^2==1],[x,y,z])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we obtain the transformation\n", "$$x=\\frac{2u}{u^2+v^2+1},\\quad y=\\frac{2v}{u^2+v^2+1},\\quad z=\\frac{u^2+v^2-1}{u^2+v^2+1}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Stereographic projection of $S^2$ from the South pole" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "var('t u v')\n", "po1={'thickness':4,'color':'darkblue'} # parameters\n", "po2={'fontsize':20,'color':'black'}\n", "po3={'fontsize':20,'color':'black'}\n", "\n", "p=parametric_plot3d((t,t,-1+t/0.85),(t,0,0.85), # half line\n", " thickness=3,color='green') # from South pole\n", "p+=point3d([(1.2*cos(t),1.2*sin(t),0) # dotted arc\n", " for t in srange(0,pi/2,0.075)],\n", " color='darkblue',size=7,frame=False)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "ax =line3d([(0,0,0), (1.3,0,0)], **po1) # axes\n", "ax+=line3d([(0,0,0), (0,1.3,0)], **po1)\n", "ax+=line3d([(0,0,-1.), (0,0,0.55)], **po1)\n", "ax+=text3d(\"x\",(1.4,0,0),**po2)\n", "ax+=text3d(\"y\",(0,1.5,0),**po2)\n", "ax+=text3d(\"z\",(0.,0.,0.7),**po2)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " # hemi-sphere:\n", "s=parametric_plot3d((cos(u)*cos(v), sin(u)*cos(v), sin(v)), \n", " (u,0,2*pi), (v,-pi/2,0),opacity=0.4,color='lightgrey')\n", "\n", "t=text3d(\"(x,y,z)\",(0.4,0.67,-0.2),**po3) # distinguished \n", "t+=text3d(\"(u,v,0)\",(1.,1.2,0.0),**po3) # points\n", "t+=text3d(\"(0,0,-1)\",(-0.5,0.4,-2.2),**po3)\n", " # intersection\n", "P=point3d([(0.6,0.67,-0.29)],size=20) # point\n", "P+=point3d([(0,0,-1)],size=25,color='red') # South pole\n", "\n", "(p+ax+s+t+P).rotateZ(-pi/1.9).show(frame=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the line which passes through the South pole $(0,0,-1)$, the point $(x,y,z)$ on the sphere and intersects\n", "the plane Oxy at the point $(u,v,0)$. The functions $u = u(x,y,z), v=v(x,y,z)$ define a stereographic projection from the South pole. Using the rotations around z-axis and appropriate similar triangles in $Oxz$ and $Oyz$ planes we can see that (as in the case of $S^1$) $\\quad\\frac{u}{x}=\\frac{1}{1+z},\\quad \\frac{v}{y}=\\frac{1}{1+z},\\quad$ so the stereographic projection from the South pole can be described by $$u=\\frac{x}{1+z},\\quad v=\\frac{y}{1+z}.$$\n", "Solving this system combined with the equation of the unit sphere: $x^2+y^2+z^2=1$ with respect to $x,y,z$:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left[x = 0, y = 0, z = \\left(-1\\right)\\right], \\left[x = \\frac{2 \\, u}{u^{2} + v^{2} + 1}, y = \\frac{2 \\, v}{u^{2} + v^{2} + 1}, z = -\\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right]\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left[x = 0, y = 0, z = \\left(-1\\right)\\right], \\left[x = \\frac{2 \\, u}{u^{2} + v^{2} + 1}, y = \\frac{2 \\, v}{u^{2} + v^{2} + 1}, z = -\\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right]\\right]$" ], "text/plain": [ "[[x == 0, y == 0, z == -1], [x == 2*u/(u^2 + v^2 + 1), y == 2*v/(u^2 + v^2 + 1), z == -(u^2 + v^2 - 1)/(u^2 + v^2 + 1)]]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "forget()\n", "%display latex\n", "var('u v x y z') # symbolic variables\n", "assume(z<0) # assume z<0\n", " # solve the system above\n", " # with respect to x,y,z\n", "solve([u==x/(1+z),v==y/(1+z),x^2+y^2+z^2==1],[x,y,z])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we obtain the inverse transformation\n", "$$x=\\frac{2u}{u^2+v^2+1},\\quad y=\\frac{2v}{u^2+v^2+1},\\quad z=-\\frac{u^2+v^2-1}{u^2+v^2+1}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.14**\n", "\n", "As we mentioned in the case of $S^1$ both the stereographic projections from North and South poles are predefined in `manifolds.Sphere`." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ A : & \\left(\\theta, \\phi\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right)\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{NP}\\} : & \\left(u, v\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, u}{u^{2} + v^{2} + 1}, \\frac{2 \\, v}{u^{2} + v^{2} + 1}, \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{SP}\\} : & \\left({u'}, {v'}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + {v'}^{2} + 1}, \\frac{2 \\, {v'}}{{u'}^{2} + {v'}^{2} + 1}, -\\frac{{u'}^{2} + {v'}^{2} - 1}{{u'}^{2} + {v'}^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\iota:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ A : & \\left(\\theta, \\phi\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\cos\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\phi\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right)\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{NP}\\} : & \\left(u, v\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, u}{u^{2} + v^{2} + 1}, \\frac{2 \\, v}{u^{2} + v^{2} + 1}, \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right) \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{SP}\\} : & \\left({u'}, {v'}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + {v'}^{2} + 1}, \\frac{2 \\, {v'}}{{u'}^{2} + {v'}^{2} + 1}, -\\frac{{u'}^{2} + {v'}^{2} - 1}{{u'}^{2} + {v'}^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "iota: S^2 → E^3\n", "on A: (theta, phi) ↦ (x, y, z) = (cos(phi)*sin(theta), sin(phi)*sin(theta), cos(theta))\n", "on S^2-{NP}: (u, v) ↦ (x, y, z) = (2*u/(u^2 + v^2 + 1), 2*v/(u^2 + v^2 + 1), (u^2 + v^2 - 1)/(u^2 + v^2 + 1))\n", "on S^2-{SP}: (up, vp) ↦ (x, y, z) = (2*up/(up^2 + vp^2 + 1), 2*vp/(up^2 + vp^2 + 1), -(up^2 + vp^2 - 1)/(up^2 + vp^2 + 1))" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S2=manifolds.Sphere(2) # sphere S^2\n", " # stereographic proj. from North pole:\n", "stereoN.=S2.stereographic_coordinates(pole='north')\n", " # stereographic proj. from South pole:\n", "stereoS.=S2.stereographic_coordinates(pole='south')\n", "Phi=S2.embedding() # embeddings\n", "Phi.disp() # show embeddings " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.15**\n", "\n", "To show graphically how the projection from the North pole acts, let us extract \n", "an appropriate part of definition from the previous cell." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\Phi_N:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{NP}\\} : & \\left(u, v\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, u}{u^{2} + v^{2} + 1}, \\frac{2 \\, v}{u^{2} + v^{2} + 1}, \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\Phi_N:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{NP}\\} : & \\left(u, v\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, u}{u^{2} + v^{2} + 1}, \\frac{2 \\, v}{u^{2} + v^{2} + 1}, \\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "PhiN: S^2 → E^3\n", "on S^2-{NP}: (u, v) ↦ (x, y, z) = (2*u/(u^2 + v^2 + 1), 2*v/(u^2 + v^2 + 1), (u^2 + v^2 - 1)/(u^2 + v^2 + 1))" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "E=S2.ambient() # ambient space E^3\n", "c_cart. = E.cartesian_coordinates() # Cartesian coordinates\n", "fun=list(Phi.coord_functions(stereoN).expr()) # embedd. functions\n", "PhiN = S2.continuous_map(E,{(stereoN, c_cart): fun},\n", " name='PhiN',latex_name=r'\\Phi_N') # define embedding PhiN\n", "PhiN.display() # show PhiN" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the figure below we show the arcs on the sphere, which correspond to the lines $v=\\text{const}$ on the $(u,v)$ plane (for the stereographic projection from the North pole)." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# continuation\n", "p=stereoN.plot(c_cart,mapping=PhiN,ranges={u:(-4,4),v:(-4,4)},\n", " number_values={u:0,v:14},color='black',thickness=3,\n", " plot_points=200,label_axes=False) # plot coordinate lines\n", "s=sphere(color='lightgrey',opacity=0.6) # plot sphere\n", "(p+s).show(frame=False,label_axes=False) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.16**\n", "\n", "Now let us do the same for the South pole." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} \\Phi_S:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{SP}\\} : & \\left({u'}, {v'}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + {v'}^{2} + 1}, \\frac{2 \\, {v'}}{{u'}^{2} + {v'}^{2} + 1}, -\\frac{{u'}^{2} + {v'}^{2} - 1}{{u'}^{2} + {v'}^{2} + 1}\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} \\Phi_S:& \\mathbb{S}^{2} & \\longrightarrow & \\mathbb{E}^{3} \\\\ \\mbox{on}\\ \\mathbb{S}^{2}\\setminus\\{\\mathrm{SP}\\} : & \\left({u'}, {v'}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(\\frac{2 \\, {u'}}{{u'}^{2} + {v'}^{2} + 1}, \\frac{2 \\, {v'}}{{u'}^{2} + {v'}^{2} + 1}, -\\frac{{u'}^{2} + {v'}^{2} - 1}{{u'}^{2} + {v'}^{2} + 1}\\right) \\end{array}$" ], "text/plain": [ "PhiS: S^2 → E^3\n", "on S^2-{SP}: (up, vp) ↦ (x, y, z) = (2*up/(up^2 + vp^2 + 1), 2*vp/(up^2 + vp^2 + 1), -(up^2 + vp^2 - 1)/(up^2 + vp^2 + 1))" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "fun=list(Phi.coord_functions(stereoS).expr()) # embedd. functions\n", "PhiS = S2.continuous_map(E,{(stereoS, c_cart): fun},\n", " name='PhiS',latex_name=r'\\Phi_S') # define embedd PhiS\n", "PhiS.display() # show PhiS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the figure below we show the arcs on the sphere, which correspond to the lines $v'=\\text{const}$ on the $(u',v')$ plane (for the stereographic projection from the South pole)." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p=stereoS.plot(c_cart,mapping=PhiS,ranges={up:(-4,4),vp:(-4,4)},\n", " number_values={up:0,vp:25},color='black',thickness=3,\n", " plot_points=200,label_axes=False) # plot coordinate lines\n", "s=sphere(color='lightgrey',opacity=0.6) # plot sphere\n", "(p+s).show(frame=False,label_axes=False) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transition map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the relations $\\ (u,v)=(\\frac{x}{1-z},\\frac{y}{1-z})\\ $ and $\\ (u',v')=(\\frac{x}{1+z},\\frac{y}{1+z})\\ $ it follows\n", "$\\ (1+z)(u',v')=(1-z)(u,v)=(x,y)\\ $, so the transition map is of the form \n", "$$(u',v')=\\frac{1-z}{1+z}(u,v).$$\n", "\n", "To calculate the fraction $\\ \\frac{1-z}{1+z}\\ $ let us note that $\\ z=\\frac{u^2+v^2-1}{u^2+v^2+1}=\\frac{r^2-1}{r^2+1},\\ $ where $\\ r^2=u^2+v^2.\\ $ Accordingly $\\ \\frac{1-z}{1+z}=\\frac{1-\\frac{r^2-1}{r^2+1}}{1+\\frac{r^2-1}{r^2+1}}=\\frac{r^2+1-r^2+1}{r^2+1+r^2-1}=\\frac{2}{2r^2}=\\frac{1}{r^2}.\\ $ Consequently the transition map has the form\n", "$$u'=\\frac{u}{u^2+v^2},\\quad v'=\\frac{v}{u^2+v^2}.$$\n", "\n", "
\n", "\n", "**Example 4.17**\n", "\n", "Transition maps from one stereographic projection to the second one in `SageMath Manifolds`:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.\\)" ], "text/latex": [ "$\\displaystyle \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.$" ], "text/plain": [ "up = u/(u^2 + v^2)\n", "vp = v/(u^2 + v^2)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S2=manifolds.Sphere(2) # sphere S^2\n", " # stereographic proj. from North pole:\n", "stereoN.=S2.stereographic_coordinates(pole='north')\n", " # stereographic proj. from South pole:\n", "stereoS.=S2.stereographic_coordinates(pole='south')\n", "\n", "stereoN_to_stereoS = stereoN.transition_map(stereoS, \n", " (u/(u^2+v^2), v/(u^2+v^2)),\n", " intersection_name='W', restrictions1= u^2+v^2!=0,\n", " restrictions2= up^2+vp^2!=0) # define transition map\n", "stereoN_to_stereoS.display() # show transition map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "`SageMath` can perform the corresponding calculation (with the help of Maxima)." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[2 \\, {\\left(u^{2} + v^{2}\\right)} {v'} - 2 \\, v, -2 \\, {u'} v + 2 \\, u {v'}\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[2 \\, {\\left(u^{2} + v^{2}\\right)} {v'} - 2 \\, v, -2 \\, {u'} v + 2 \\, u {v'}\\right]$" ], "text/plain": [ "[2*(u^2 + v^2)*vp - 2*v, -2*up*v + 2*u*vp]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var('u,v,up,vp,x,y,z') # symbolic variables\n", "\n", "# Eliminate variables x,y,z from the system defining stereogr. proj\n", "maxima.eliminate([u==x/(1-z),v==y/(1-z),up==x/(1+z),vp==y/(1+z),\n", " z==(u^2+v^2-1)/(u^2+v^2+1)],[x,y,z]).sage()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left[\\left[{u'} = \\frac{u}{u^{2} + v^{2}}, {v'} = \\frac{v}{u^{2} + v^{2}}\\right]\\right]\\)" ], "text/latex": [ "$\\displaystyle \\left[\\left[{u'} = \\frac{u}{u^{2} + v^{2}}, {v'} = \\frac{v}{u^{2} + v^{2}}\\right]\\right]$" ], "text/plain": [ "[[up == u/(u^2 + v^2), vp == v/(u^2 + v^2)]]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Solve the obtained system with respect to up,vp\n", "solve([2*(u^2 + v^2)*vp - 2*v, -2*up*v + 2*u*vp],[up,vp])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "The inverse transition map has the form\n", "$$u=\\frac{u'}{u'^2+v'^2},\\quad v=\\frac{v'}{u'^2+v'^2}.$$" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right.\\)" ], "text/latex": [ "$\\displaystyle \\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right.$" ], "text/plain": [ "u = up/(up^2 + vp^2)\n", "v = vp/(up^2 + vp^2)" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stereoN_to_stereoS.inverse().display() # inverse transition map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Both transformations are smooth provided $u^2+v^2$ and $u'^2+v'^2$ are nonzero." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.18**\n", "\n", "In fact, both transition maps are predefined in `manifolds.Sphere`." ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.\\right)$" ], "text/plain": [ "(up = u/(u^2 + v^2)\n", " vp = v/(u^2 + v^2),\n", " up = u/(u^2 + v^2)\n", " vp = v/(u^2 + v^2))" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "dim=2 # dim of the sphere\n", "Sph=manifolds.Sphere(dim) # sphere S^2 \n", "spher = Sph.spherical_coordinates() # spherical coord.\n", "stereoN, stereoS = Sph.coordinate_charts('stereographic',\n", " names=['u','v']) # sterogr. projections\n", "A=stereoN.domain() # domain of stereoN\n", " # intersection of domains of stereoN and stereoS:\n", "W = Sph._stereoN_dom.intersection(Sph._stereoS_dom)\n", " # transition from stereoN to stereoS:\n", "FNS=Sph.coord_change(stereoN.restrict(W),stereoS.restrict(W))\n", " # transition from stereoS to stereoN:\n", "FSN=Sph.coord_change(stereoS.restrict(W),stereoN.restrict(W))\n", "FNS.disp(),FSN.disp() # show transitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.19**\n", "\n", "The transitions from stereoN \n", "to stereoS and the inverse can be also obtained as compositions." ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right.\\right)$" ], "text/plain": [ "(u = up/(up^2 + vp^2)\n", " v = vp/(up^2 + vp^2),\n", " up = u/(u^2 + v^2)\n", " vp = v/(u^2 + v^2))" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dim=2 # dimension of sphere\n", "Sph=manifolds.Sphere(dim) # manifold S^2\n", "spher = Sph.spherical_coordinates() # spherical coordinates\n", "stereoN,stereoS=Sph.coordinate_charts('stereographic',\n", " names=['u','v']) # stereographic coordinates\n", "A = spher.domain() # domain of stereogr. coord.\n", " # intersection of stereoN and stereoS coordinates domains:\n", "W = Sph._stereoN_dom.intersection(Sph._stereoS_dom)\n", "V=W.intersection(A) # intersection with spher. coord. domain \n", " # transition spher->stereoN:\n", "F1=Sph.coord_change(spher.restrict(V), stereoN.restrict(V))\n", " # transition stereoN->spher:\n", "F2=Sph.coord_change( stereoN.restrict(V),spher.restrict(V))\n", " # transition spher->stereoS:\n", "F3=Sph.coord_change(spher.restrict(V), stereoS.restrict(V))\n", " # transition stereoS->spher\n", "F4=Sph.coord_change( stereoS.restrict(V),spher.restrict(V))\n", "(F1*F4).disp(),(F3*F2).disp() # show compositions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 4.20**\n", "\n", "Knowing the transition maps we are ready to an independent of `manifolds.Sphere` definition of $S^2$ as a manifold with two maps. " ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right.\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\left\\{\\begin{array}{lcl} {u'} & = & \\frac{u}{u^{2} + v^{2}} \\\\ {v'} & = & \\frac{v}{u^{2} + v^{2}} \\end{array}\\right., \\left\\{\\begin{array}{lcl} u & = & \\frac{{u'}}{{u'}^{2} + {v'}^{2}} \\\\ v & = & \\frac{{v'}}{{u'}^{2} + {v'}^{2}} \\end{array}\\right.\\right)$" ], "text/plain": [ "(up = u/(u^2 + v^2)\n", " vp = v/(u^2 + v^2),\n", " u = up/(up^2 + vp^2)\n", " v = vp/(up^2 + vp^2))" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S2 = Manifold(2, 'S^2') # S^2-sphere\n", "U = S2.open_subset('U') # complement of the North pole\n", "V = S2.open_subset('V') # complement of the South pole\n", "S2.declare_union(U,V)\n", "c_uv. = U.chart() # stereogr. coordinates from the North pole\n", "c_upvp. = V.chart() # stereogr. coord. from the South pole\n", "\n", "uv_to_upvp = c_uv.transition_map(c_upvp, (u/(u^2+v^2), v/(u^2+v^2)),\n", " intersection_name='W', # transition map\n", " restrictions1= u^2+v^2!=0, \n", " restrictions2= up^2+vp^2!=0)\n", "upvp_to_uv = uv_to_upvp.inverse() # inverse transition\n", "uv_to_upvp.disp(),upvp_to_uv.disp() # show transitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What's next?\n", "\n", "Take a look at the notebook [Spheres and spherical coordinates in higher dimensions](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/05Manifold_Spher_Higher_Dim.ipynb)." ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.6", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }