{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 15. Pulback of tensor fields\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": [ "Recall from [notebook 7](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/07Manifold_FunPullb_Curves.ipynb), that every smooth map between two smooth manifolds $\\psi : M → N$ defines a pullback map $\\psi^* : C^∞ (N ) → C^∞ (M )$\n", "by\n", "\n", "$$\n", "\\psi^∗ f = f ◦ \\psi\\quad \\mbox{ for any } f ∈ C^∞ (N ).$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.1**\n", "\n", "If we denote by $\\psi$ the coordinate change defined by\n", "$x=r\\cos(\\phi),\\; y=r\\sin(\\phi)$ on the open set $U=\\{(r,\\phi): r>0, 0<\\phi <2\\pi \\},$ then for a scalar function $f$ of variables $x,y,$ the pullback\n", "$\\psi^*f$ is the function $(r,\\phi)\\to f(r\\cos(\\phi),r\\sin(\\phi))$, defined on $U$.\n", "\n", "In the special case $f(x,y)=\\sqrt{x^2+y^2}$, the pullback \n", "$\\psi^*f$ is the function on $U$: $(r,\\phi)\\to r.$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} {\\psi}^*f:& U & \\longrightarrow & \\mathbb{R} \\\\ & \\left(r, {\\phi}\\right) & \\longmapsto & r \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} {\\psi}^*f:& U & \\longrightarrow & \\mathbb{R} \\\\ & \\left(r, {\\phi}\\right) & \\longmapsto & r \\end{array}$" ], "text/plain": [ "\\psi^*(f): U → ℝ\n", " (r, phi) ↦ r" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(2, 'R^2p') # manifold R^2\n", "U = M.open_subset('U') # open subset of R2, \n", " # polar coord. on U: \n", "c_rphi.=U.chart(r'r:(0,oo) phi:(0,2*pi):\\phi')\n", "N = Manifold(2, 'R^2c') # second copy of R^2 \n", "c_xy. = N.chart() # Cartesian coordinates:\n", " # psi: M --> N : polar to Cart.:\n", "psi = U.diff_map(N, (r*cos(phi), r*sin(phi)),name=r'\\psi')\n", " # f -scalar function on N \n", "f=N.scalar_field(sqrt(x^2+y^2),name='f') \n", "\n", "fplb=psi.pullback(f) # psi^*f -scalar func. on M\n", "fplb.disp() # show pullback psi^*f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Pullback of covariant tensor fields\n", "\n", "
\n", "\n", "If $\\psi: M\\to N$ is a smooth map between smooth manifolds, one can extend the pullback operation to a map $\\psi^∗ : T^{(0,k)}N → T^{(0,k)}M $ by\n", "\n", "\\begin{equation}\n", "(ψ^∗ t)_p (u_{1p} , . . . , u_{kp} ) = t_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} ),\n", "\\label{}\\tag{15.1}\n", "\\end{equation}\n", "\n", "for $u_{1p} , . . . , u_{kp} ∈ T_p M,\\ \\ p ∈ M.$\n", "From the linearity of $d\\psi_p$ it follows the multilinearity of $(\\psi^*t)_p$.\n", "\n", "If $f ∈ C^∞ (N )$, then the differential $d f$ of $f$ is a tensor field of type $(0,1)$,\n", "consequently from (15.1) it follows\n", "\n", "$$(ψ^∗ d f )_p (v_p ) = d f_{ψ( p)} (dψ_p v_p ),$$\n", "\n", "for $v_p ∈ T_p M.$
From the definitions of $df$ and $d\\psi$ we have\n", "\n", "$$d f_{ ψ( p)} (dψ_p v_p ) = dψ_p v_p ( f ) = v_p (ψ^∗ f ) = d(ψ^*f )_p (v_p ).$$\n", "\n", "We have checked that for a smooth map $\\ \\psi : M → N\\ $ and $\\ f\\in C^∞ (N )$\n", "\n", "\\begin{equation}\n", "ψ^∗ d f = d(ψ^∗ f ).\n", "\\label{}\\tag{15.2}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.2**\n", "\n", "Compute the pullback of differential of the scalar function from Example 15.1.\n", "\n", "First we compute the left hand side of (15.2):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^*\\mathrm{d}f = \\mathrm{d} r\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^*\\mathrm{d}f = \\mathrm{d} r$" ], "text/plain": [ "\\psi^*(df) = dr" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "df=f.differential() # differential of f\n", "dfplb=psi.pullback(df) # pullback psi^*df\n", "dfplb.disp(basis=c_rphi) # display in polar coordinates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the right hand side of (15.2):" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\mathrm{d}{\\psi}^*f = \\mathrm{d} r\\)" ], "text/latex": [ "$\\displaystyle \\mathrm{d}{\\psi}^*f = \\mathrm{d} r$" ], "text/plain": [ "d\\psi^*(f) = dr" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fplb.differential().disp() # d(psi^*f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.3**\n", "\n", "Compute pullback of a scalar function and its differential for general mapping between two-dimensional manifolds $M$ and $N$\n", "\n", "$$\\psi: M \\to N,\\quad \\psi(u,v)=\n", "(\\psi_1(u,v),\\psi_2(u,v)).\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{llcl} {\\psi}^*f:& R^2_{uv} & \\longrightarrow & \\mathbb{R} \\\\ & \\left(u, v\\right) & \\longmapsto & f\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{llcl} {\\psi}^*f:& R^2_{uv} & \\longrightarrow & \\mathbb{R} \\\\ & \\left(u, v\\right) & \\longmapsto & f\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\end{array}$" ], "text/plain": [ "\\psi^*(f): R^2_{uv} → ℝ\n", " (u, v) ↦ f(psi1(u, v), psi2(u, v))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(2, r'R^2_{uv}') # manifold M\n", "c_uv.=M.chart() # coordinates u,v\n", "N = Manifold(2, r'R^2_{xy}') # manifold N\n", "c_xy. = N.chart() # coordinates x,y\n", " # first component of psi\n", "psi1=M.scalar_field(function('psi1')(u,v),name=r'\\psi1')\n", " # second component of psi\n", "psi2=M.scalar_field(function('psi2')(u,v),name=r'\\psi2') \n", " # define psi\n", "psi = M.diff_map(N,(psi1.expr(),psi2.expr()) ,name=r'\\psi')\n", " # scalar function f\n", "f=N.scalar_field(function('f')(x,y),name='f') \n", "fplb=psi.pullback(f) # pullback psi^*f\n", "fplb.disp() # show pullback psi^*f" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\mathrm{d}{\\psi}^*f = \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial u} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v\\)" ], "text/latex": [ "$\\displaystyle \\mathrm{d}{\\psi}^*f = \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial u} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v$" ], "text/plain": [ "d\\psi^*(f) = (d(f)/d(psi1(u, v))*d(psi1)/du + d(f)/d(psi2(u, v))*d(psi2)/du) du + (d(f)/d(psi1(u, v))*d(psi1)/dv + d(f)/d(psi2(u, v))*d(psi2)/dv) dv" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fplb.differential().disp() # d(psi^*f)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^*\\mathrm{d}f = \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial u} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^*\\mathrm{d}f = \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial u} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( \\frac{\\partial\\,f}{\\partial \\left( \\psi_{1}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + \\frac{\\partial\\,f}{\\partial \\left( \\psi_{2}\\left(u, v\\right) \\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v$" ], "text/plain": [ "\\psi^*(df) = (d(f)/d(psi1(u, v))*d(psi1)/du + d(f)/d(psi2(u, v))*d(psi2)/du) du + (d(f)/d(psi1(u, v))*d(psi1)/dv + d(f)/d(psi2(u, v))*d(psi2)/dv) dv" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=f.differential() # df\n", "dfplb=psi.pullback(df) # psi^*(df)\n", "dfplb.disp() # show pullback of df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.4**\n", "\n", "Compute the pullback of 1-form $\\ \\ 𝛼=𝑎_0(𝑥,𝑦)d𝑥+𝑎_1(𝑥,𝑦)d𝑦\\ $ under the map $\\psi$ from the previous example." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\alpha = a_{0}\\left(x, y\\right) \\mathrm{d} x + a_{1}\\left(x, y\\right) \\mathrm{d} y\\)" ], "text/latex": [ "$\\displaystyle \\alpha = a_{0}\\left(x, y\\right) \\mathrm{d} x + a_{1}\\left(x, y\\right) \\mathrm{d} y$" ], "text/plain": [ "\\alpha = a0(x, y) dx + a1(x, y) dy" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(2, r'R^2_{uv}') # manifold M\n", "c_uv.=M.chart() # coordinates u,v\n", "N = Manifold(2, r'R^2_{xy}') # manifold N\n", "c_xy. = N.chart() # coordinates x,y\n", " # first component of psi\n", "psi1=M.scalar_field(function('psi1')(u,v),name=r'\\psi1')\n", " # second component of psi\n", "psi2=M.scalar_field(function('psi2')(u,v),name=r'\\psi2') \n", " # define psi\n", "psi = M.diff_map(N,(psi1.expr(),psi2.expr()) ,name=r'\\psi')\n", " # scalar function f\n", "f=N.scalar_field(function('f')(x,y),name='f') \n", "\n", "al=N.diff_form(1,name=r'\\alpha') # 1-form al\n", "astr=['a'+str(i) for i in range(2)] # list of comp. names\n", "af=[N.scalar_field(function(astr[i])(x,y),name=astr[i]) \n", " for i in range(2)] # list of components\n", "al[:]=af # define all components\n", "al.disp() # show al" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^*\\alpha = \\left( a_{0}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + a_{1}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( a_{0}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} + a_{1}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^*\\alpha = \\left( a_{0}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + a_{1}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( a_{0}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} + a_{1}\\left(\\psi_{1}\\left(u, v\\right), \\psi_{2}\\left(u, v\\right)\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v$" ], "text/plain": [ "\\psi^*(\\alpha) = (a0(psi1(u, v), psi2(u, v))*d(psi1)/du + a1(psi1(u, v), psi2(u, v))*d(psi2)/du) du + (a0(psi1(u, v), psi2(u, v))*d(psi1)/dv + a1(psi1(u, v), psi2(u, v))*d(psi2)/dv) dv" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Manifold.options.omit_function_arguments=False\n", "alplb=psi.pullback(al) # pullback psi^*al\n", "alplb.disp() # show pullback of al" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shorter result can be obtained omitting functions arguments." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^*\\alpha = \\left( a_{0}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + a_{1}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( a_{0}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} + a_{1}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^*\\alpha = \\left( a_{0}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + a_{1}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\right) \\mathrm{d} u + \\left( a_{0}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} + a_{1}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\right) \\mathrm{d} v$" ], "text/plain": [ "\\psi^*(\\alpha) = (a0(psi1, psi2)*d(psi1)/du + a1(psi1, psi2)*d(psi2)/du) du + (a0(psi1, psi2)*d(psi1)/dv + a1(psi1, psi2)*d(psi2)/dv) dv" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Manifold.options.omit_function_arguments=True\n", "alplb.disp()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.5**\n", "\n", "Compute the pullback of a tensor field of (0,2)-type \n", "$f_{00}(𝑥,𝑦)d𝑥⊗d𝑥+𝑓_{01}(𝑥,𝑦)d𝑥⊗d𝑦+𝑓_{10}(𝑥,𝑦)d𝑦⊗d𝑥+𝑓_{11}(𝑥,𝑦)d𝑦⊗d𝑦\\ \\ $\n", "on a two dimensional manifold under $\\psi$ from Example 15.3." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle t = f_{00} \\mathrm{d} x\\otimes \\mathrm{d} x + f_{01} \\mathrm{d} x\\otimes \\mathrm{d} y + f_{10} \\mathrm{d} y\\otimes \\mathrm{d} x + f_{11} \\mathrm{d} y\\otimes \\mathrm{d} y\\)" ], "text/latex": [ "$\\displaystyle t = f_{00} \\mathrm{d} x\\otimes \\mathrm{d} x + f_{01} \\mathrm{d} x\\otimes \\mathrm{d} y + f_{10} \\mathrm{d} y\\otimes \\mathrm{d} x + f_{11} \\mathrm{d} y\\otimes \\mathrm{d} y$" ], "text/plain": [ "t = f00 dx⊗dx + f01 dx⊗dy + f10 dy⊗dx + f11 dy⊗dy" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# continuation\n", "t = N.tensor_field(0,2, name='t') # tensor field t of type (0,2)\n", " # list of component names:\n", "def fn(i,j): return 'f'+str(i)+str(j) \n", " # list of component functions:\n", "f=[[N.scalar_field(function(fn(j,k))(x,y),name=fn(j,k)) \n", " for k in range(2)] for j in range(2)]\n", "t[:]=f # define all components of t\n", "t.disp() # show t" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} {\\psi}^*t_{ \\, u \\, u }^{ \\phantom{\\, u}\\phantom{\\, u} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{1}}{\\partial u}\\right)^{2} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)^{2} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\\\ {\\psi}^*t_{ \\, u \\, v }^{ \\phantom{\\, u}\\phantom{\\, v} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial u} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\\\ {\\psi}^*t_{ \\, v \\, u }^{ \\phantom{\\, v}\\phantom{\\, u} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial u} + {\\left(f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\\\ {\\psi}^*t_{ \\, v \\, v }^{ \\phantom{\\, v}\\phantom{\\, v} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{1}}{\\partial v}\\right)^{2} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right)\\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial v} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v}^{2} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} {\\psi}^*t_{ \\, u \\, u }^{ \\phantom{\\, u}\\phantom{\\, u} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{1}}{\\partial u}\\right)^{2} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)^{2} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial u} \\\\ {\\psi}^*t_{ \\, u \\, v }^{ \\phantom{\\, u}\\phantom{\\, v} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial u} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\\\ {\\psi}^*t_{ \\, v \\, u }^{ \\phantom{\\, v}\\phantom{\\, u} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} \\frac{\\partial\\,\\psi_{1}}{\\partial v} + f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial u} + {\\left(f_{10}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{1}}{\\partial u} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial u}\\right)} \\frac{\\partial\\,\\psi_{2}}{\\partial v} \\\\ {\\psi}^*t_{ \\, v \\, v }^{ \\phantom{\\, v}\\phantom{\\, v} } & = & f_{00}\\left(\\psi_{1}, \\psi_{2}\\right) \\left(\\frac{\\partial\\,\\psi_{1}}{\\partial v}\\right)^{2} + {\\left(f_{01}\\left(\\psi_{1}, \\psi_{2}\\right) + f_{10}\\left(\\psi_{1}, \\psi_{2}\\right)\\right)} \\frac{\\partial\\,\\psi_{1}}{\\partial v} \\frac{\\partial\\,\\psi_{2}}{\\partial v} + f_{11}\\left(\\psi_{1}, \\psi_{2}\\right) \\frac{\\partial\\,\\psi_{2}}{\\partial v}^{2} \\end{array}$" ], "text/plain": [ "\\psi^*(t)_uu = f00(psi1, psi2)*(d(psi1)/du)^2 + f11(psi1, psi2)*(d(psi2)/du)^2 + (f01(psi1, psi2)*d(psi1)/du + f10(psi1, psi2)*d(psi1)/du)*d(psi2)/du \n", "\\psi^*(t)_uv = f00(psi1, psi2)*d(psi1)/du*d(psi1)/dv + f10(psi1, psi2)*d(psi1)/dv*d(psi2)/du + (f01(psi1, psi2)*d(psi1)/du + f11(psi1, psi2)*d(psi2)/du)*d(psi2)/dv \n", "\\psi^*(t)_vu = f00(psi1, psi2)*d(psi1)/du*d(psi1)/dv + f01(psi1, psi2)*d(psi1)/dv*d(psi2)/du + (f10(psi1, psi2)*d(psi1)/du + f11(psi1, psi2)*d(psi2)/du)*d(psi2)/dv \n", "\\psi^*(t)_vv = f00(psi1, psi2)*(d(psi1)/dv)^2 + (f01(psi1, psi2) + f10(psi1, psi2))*d(psi1)/dv*d(psi2)/dv + f11(psi1, psi2)*d(psi2)/dv^2 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Manifold.options.omit_function_arguments=True\n", "tplb=psi.pullback(t) # pullback psi^*t\n", "tplb.display_comp() # show pullback components" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Basic properties of pullback\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a smooth map $\\psi: M \\to N,\\ $ tensor fields $t$ and $s$ on $N$ of type\n", "$( 0,k)$ and constants $a,b\\in R\\ $ we have\n", "\n", "$$\n", "(ψ^*(at + bs))_p (u_{1p} , . . . , u_{kp} ) = (at + bs)_{ψ( p)}\n", "(dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\\\\n", "= (at_{ψ( p)} + bs_{ψ( p)} )(dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\\\\n", "= at_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\n", "+ bs_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\\\\n", "= a(ψ^∗ t)_p (u_{1p} , . . . , u_{kp} ) + b(ψ^∗ s)_p (u_{1p} , . . . , u_{kp} )\\\\\n", "= (aψ^∗ t + bψ^∗ s)_p (u_p , . . . , w_p ),$$\n", "\n", "for $u_{1p} , . . . , u_{kp} ∈ T_p M$. Therefore we have the following linearity result.\n", "\n", "Let $ψ : M → N$ be a smooth\n", "map.\n", "If $t$ and $s$ are tensor fields of type\n", "$( 0,k)$ on $N$ and $a, b ∈ R$, then\n", "\n", "\\begin{equation}\n", "ψ^∗ (at + bs) = aψ^∗ t + bψ^∗ s.\n", "\\label{}\\tag{15.3}\n", "\\end{equation}
\n", "\n", "For $\\psi\\ $ as before, $f\\in C^\\infty(N)\\ $ and $t\\in T^{(0.k)}N$, we have\n", "\n", "$$\n", "(ψ^∗ ( f t)_p (u_{1p} , . . . , u_{kp} ) = \n", "( f t)_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\\\\\n", "= f( ψ( p)) t_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{kp} )\n", "= (ψ^∗ f )( p) (ψ^∗ t)_p (u_{1p} , . . . , u_{kp} )\n", "=((ψ^∗ f )(ψ^∗ t))_p (u_{1p} , . . . , u_{kp} ).\n", "$$\n", "Thus\n", "\\begin{equation}\n", "ψ^∗ ( f t) = (ψ^∗ f )(ψ^∗ t).\n", "\\label{}\\tag{15.4}\n", "\\end{equation}\n", "
\n", "\n", "If $\\psi:M\\to N\\ $ is smooth, $t$ and $s$ are tensor fields on $N$ of types\n", "$(0,k)$\n", "and $(0,l)$ respectively,\n", " we have\n", "\n", "$$\n", "ψ^*(t ⊗ s)_p(u_{1p},...,u_{(k+l)p}) = (t ⊗ s)_{ψ( p)} (dψ_p u_{1p} , . . . , dψ_p u_{(k+l)p} )\\\\\n", "= t_{ψ( p)} (dψ_p u_{1p} , . . .,dψ_p u_{kp}) s_{ψ( p)} (dψ_p u_{(k+1)p},. . . , dψ_p u_{(k+l)p} )\\\\\n", "= (ψ^∗ t)_p (u_{1p} , . . .,u_{kp})(ψ^∗ s)_p (u_{(k+1)p},. . . , u_{(k+l)p} )\n", "= ((ψ^∗ t) ⊗ (ψ^∗ s))_p (u_{1p} , . . . , u_{(k+l)p} ),\n", "$$\n", "\n", "so\n", "\n", "\\begin{equation}\n", "ψ^∗ (t ⊗ s) = (ψ^∗ t) ⊗ (ψ^∗ s).\n", "\\label{}\\tag{15.5}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If $M_1, M_2, M_3$ are smooth manifolds, $ψ_1 : M_1 → M_2$ and $ψ_2 : M_2 → M_3$ are smooth maps, then\n", "\n", "$$ (ψ_2 ◦ ψ_1 )^∗ t = (ψ_1^∗ ◦ ψ_2^∗ )\\;t,\\quad \\mbox{for } t ∈ T^{(0,k)} M_3.$$\n", "\n", "To prove this relation let us note that\n", "$$((ψ_2 ◦ ψ_1 )^∗ t)_p (u_{1p} , . . . , u_{kp} )\\\\\n", "= t_{(ψ_2 ◦ψ_1 )( p)} (d(ψ_2 ◦ ψ_1 )_p u_{1p} , . . . , \n", "d(ψ_2 ◦ ψ_1 )_p u_{kp})\\\\\n", "= t_{ψ_2(ψ_1(p))} (dψ_{2ψ_1( p)} (dψ_{1p} u_{1p} ), . . . , \n", " dψ_{2ψ_1( p)} (dψ_{1p} u_{kp} ))\\\\\n", "= (ψ_2^∗ t)_{ψ 1 ( p)} (dψ_{1 p} u_{1p} , . . . , dψ_{1p} u_{kp} )\n", "= (ψ_1^∗ (ψ_2^∗ t))_p (u_{1p} , . . . , u_{kp} ).\n", "$$\n", "\n", "
\n", "\n", "### Pullback of covariant tensor fields in components\n", "\n", "
\n", "\n", "If $t$ is a tensor field of type $(0,k)$ on $N$, given locally by $t = t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k}$, then the pullback of $t$ under $ψ$ is given by\n", "\n", "$$ψ^∗ t = ψ^∗ (t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗ dy^{i_k} )\\\\\n", "= (ψ^∗ t_{i_1... i_k} )(ψ^∗ dy^{i_1} ) ⊗ · · · ⊗ (ψ^∗ dy^{i_k} )\\\\\n", "= (ψ^∗ t_{i_1... i_k} ) d(ψ^∗ y^{i_1} ) ⊗ · · · ⊗ d(ψ^∗ y^{i_k} ).$$\n", "\n", "Since $d(ψ^∗ y^i ) = (∂(ψ^∗ y^i )/∂ x^m) dx^m$,\n", "where $(x^1 , . . . , x^n )$ are coordinates on $M$, we have\n", "\n", "\\begin{equation}\n", "ψ^∗ t = (ψ^∗ t_{i_1... i_k} )\\frac{\\partial(\\psi^*y^{i_1})}{\n", "\\partial x^{m_1}}\\ldots\n", "\\frac{\\partial(\\psi^*y^{i_k})}{\\partial x^{m_k}}dx^{m_1}⊗ · · · ⊗ dx^{m_k}.\n", "\\tag{15.6}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "The same formula can be written:\n", "$$ψ^∗ (t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k} )= (t_{i_1... i_k}\\circ\\psi )\\frac{\\partial(y^{i_1}\\circ\\psi)}{\n", "\\partial x^{m_1}}\\ldots\n", "\\frac{\\partial(y^{i_k}\\circ\\psi)}{\\partial x^{m_k}}dx^{m_1}⊗ · · · ⊗ dx^{m_k}.$$
\n", "So to obtain $\\psi^*t$, just replace in $t=t_{i_1... i_k} dy^{i_1} ⊗ · · · ⊗dy^{i_k}$
\n", "$t_{i_1... i_k}\\to t_{i_1... i_k}\\circ \\psi\\quad$\n", "and $dy^i\\to \\frac{\\partial(y^{i}\\circ\\psi)}{\\partial x^{m}}dx^{m}.$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.6**\n", "\n", "Consider the covariant tensor field $ \\ g=dx\\otimes dx+ dy\\otimes dy+ dz\\otimes dz$ in $R^3$ and its pullback under the embedding $\\psi: S^2\\to R^3$ defined by \n", "\n", "$$ \\psi(\\theta,\\phi)=(\\sin \\theta \\cos \\phi, \\sin \\theta\\sin \\phi,\\cos\\theta).$$" ] }, { "cell_type": "code", "execution_count": 13, "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": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S2=manifolds.Sphere(2) # manifolds.Sphere module contains the def.\n", "Phi=S2.embedding() # of the embedding S^2 -> E^3 \n", "sph.=S2.spherical_coordinates() # spherical coordinates\n", "E=S2.ambient() # 3-dim Euclidean space\n", "c_cart. = E.cartesian_coordinates() # Cartesian coord. in E^3\n", "Phi.disp() # show Phi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`metric` is a predefined covariant tensor field of type (0,2) in $E^3$ " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle g = \\mathrm{d} x\\otimes \\mathrm{d} x+\\mathrm{d} y\\otimes \\mathrm{d} y+\\mathrm{d} z\\otimes \\mathrm{d} z\\)" ], "text/latex": [ "$\\displaystyle g = \\mathrm{d} x\\otimes \\mathrm{d} x+\\mathrm{d} y\\otimes \\mathrm{d} y+\\mathrm{d} z\\otimes \\mathrm{d} z$" ], "text/plain": [ "g = dx⊗dx + dy⊗dy + dz⊗dz" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g=E.metric() # g is predefined tensor field of type (0,2)\n", "g.disp() # show g" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pullback of g:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\iota}^*g = \\mathrm{d} \\theta\\otimes \\mathrm{d} \\theta + \\sin\\left(\\theta\\right)^{2} \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}\\)" ], "text/latex": [ "$\\displaystyle {\\iota}^*g = \\mathrm{d} \\theta\\otimes \\mathrm{d} \\theta + \\sin\\left(\\theta\\right)^{2} \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}$" ], "text/plain": [ "iota^*(g) = dtheta⊗dtheta + sin(theta)^2 dphi⊗dphi" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.pullback(g).disp() # pullback of g" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 15.7**\n", "\n", "We can repeat the previous example in higher dimensions. For example we can compute the pullback of $ \\ g=dx_1\\otimes dx_1+ dx_2\\otimes dx_2+ dx_3\\otimes dx_3+dx_4\\otimes dx_4$\n", "under the embedding $S^3\\to E^4.$" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\cos\\left({\\phi}\\right) \\sin\\left(\\chi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\chi\\right) \\sin\\left({\\phi}\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right) \\sin\\left(\\chi\\right), \\cos\\left(\\chi\\right)\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\cos\\left({\\phi}\\right) \\sin\\left(\\chi\\right) \\sin\\left(\\theta\\right), \\sin\\left(\\chi\\right) \\sin\\left({\\phi}\\right) \\sin\\left(\\theta\\right), \\cos\\left(\\theta\\right) \\sin\\left(\\chi\\right), \\cos\\left(\\chi\\right)\\right)$" ], "text/plain": [ "(cos(phi)*sin(chi)*sin(theta),\n", " sin(chi)*sin(phi)*sin(theta),\n", " cos(theta)*sin(chi),\n", " cos(chi))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "S3=manifolds.Sphere(3) # manifolds.Sphere module contains the def.\n", "Phi=S3.embedding() # of the embedding S^3 -> E^4\n", "sph.=S3.spherical_coordinates() # and spherical coordinates\n", "E=S3.ambient() # Euclidean space E^4\n", "c_cart. = E.cartesian_coordinates() # Cartesian coord. in E^4\n", "fun=Phi.coord_functions()[:];fun # functions defining the emb. S^3 -> E^4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`metric` is a predefined covariant tensor field of type (0,2) in $E^4.$ " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle g = \\mathrm{d} {x_{1}}\\otimes \\mathrm{d} {x_{1}}+\\mathrm{d} {x_{2}}\\otimes \\mathrm{d} {x_{2}}+\\mathrm{d} {x_{3}}\\otimes \\mathrm{d} {x_{3}}+\\mathrm{d} {x_{4}}\\otimes \\mathrm{d} {x_{4}}\\)" ], "text/latex": [ "$\\displaystyle g = \\mathrm{d} {x_{1}}\\otimes \\mathrm{d} {x_{1}}+\\mathrm{d} {x_{2}}\\otimes \\mathrm{d} {x_{2}}+\\mathrm{d} {x_{3}}\\otimes \\mathrm{d} {x_{3}}+\\mathrm{d} {x_{4}}\\otimes \\mathrm{d} {x_{4}}$" ], "text/plain": [ "g = dx1⊗dx1 + dx2⊗dx2 + dx3⊗dx3 + dx4⊗dx4" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g=E.metric() # g is a predefined (0,2) type tensor field\n", "g.disp() # show g" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pullback of g:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\iota}^*g = \\mathrm{d} \\chi\\otimes \\mathrm{d} \\chi + \\sin\\left(\\chi\\right)^{2} \\mathrm{d} \\theta\\otimes \\mathrm{d} \\theta + \\sin\\left(\\chi\\right)^{2} \\sin\\left(\\theta\\right)^{2} \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}\\)" ], "text/latex": [ "$\\displaystyle {\\iota}^*g = \\mathrm{d} \\chi\\otimes \\mathrm{d} \\chi + \\sin\\left(\\chi\\right)^{2} \\mathrm{d} \\theta\\otimes \\mathrm{d} \\theta + \\sin\\left(\\chi\\right)^{2} \\sin\\left(\\theta\\right)^{2} \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}$" ], "text/plain": [ "iota^*(g) = dchi⊗dchi + sin(chi)^2 dtheta⊗dtheta + sin(chi)^2*sin(theta)^2 dphi⊗dphi" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Phi.pullback(g).disp() # pullback Psi^*g" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "\n", "Since the differential k-forms are special cases of covariant tensor fields, the pullback operation can be applied to such forms.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example 15.8**\n", "\n", "Consider the same embedding $\\psi: S^2\\to R^3$ as in Example 15.6, defined by $$ \\psi(\\theta,\\phi)=(\\sin \\theta \\cos \\phi, \\sin \\theta\\sin \\phi,\\cos\\theta),$$ and compute the pullbacks\n", "$\\psi^*(dx\\wedge dy),\\ \\psi^*(dy\\wedge dz),\\ \\psi^*(dx\\wedge dz).$" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^* \\mathrm{d} x \\wedge \\mathrm{d} y = \\cos\\left(\\theta\\right) \\sin\\left(\\theta\\right) \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^* \\mathrm{d} x \\wedge \\mathrm{d} y = \\cos\\left(\\theta\\right) \\sin\\left(\\theta\\right) \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}$" ], "text/plain": [ "psi^*(dx∧dy) = cos(theta)*sin(theta) dtheta∧dphi" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(3, 'R^3') # manifold M=R^3\n", "c_xyz. = M.chart() # Cartesian coordinates\n", "N = Manifold(2, 'N') # manifold N=S^2\n", "c_sph.=N.chart() # spherical coordinates\n", " # embedding S^2->R^3\n", "psi = N.diff_map(M, (sin(theta)*cos(phi), sin(theta)*sin(phi),cos(theta)),\n", " name='psi',latex_name=r'\\psi')\n", "E=c_xyz.coframe() # coframe (dx,dy,dz)\n", "dx,dy,dz=E[:] # define dx,dy,dz\n", "omega1=dx.wedge(dy) # wedge prod. dx/\\dy\n", "omega2=dy.wedge(dz) # wedge prod. dy/\\dz\n", "omega3=dx.wedge(dz) # wedge prod. dx/\\dz\n", "plb=psi.pullback(omega1) # pullback psi^*omega1\n", "plb.disp()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^* \\mathrm{d} y \\wedge \\mathrm{d} z = \\cos\\left({\\phi}\\right) \\sin\\left(\\theta\\right)^{2} \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^* \\mathrm{d} y \\wedge \\mathrm{d} z = \\cos\\left({\\phi}\\right) \\sin\\left(\\theta\\right)^{2} \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}$" ], "text/plain": [ "psi^*(dy∧dz) = cos(phi)*sin(theta)^2 dtheta∧dphi" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plb=psi.pullback(omega2) # pullback psi^*omega2\n", "plb.disp()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle {\\psi}^* \\mathrm{d} x \\wedge \\mathrm{d} z = -\\sin\\left({\\phi}\\right) \\sin\\left(\\theta\\right)^{2} \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}\\)" ], "text/latex": [ "$\\displaystyle {\\psi}^* \\mathrm{d} x \\wedge \\mathrm{d} z = -\\sin\\left({\\phi}\\right) \\sin\\left(\\theta\\right)^{2} \\mathrm{d} \\theta\\wedge \\mathrm{d} {\\phi}$" ], "text/plain": [ "psi^*(dx∧dz) = -sin(phi)*sin(theta)^2 dtheta∧dphi" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plb=psi.pullback(omega3) # pullback psi^*omega3\n", "plb.disp()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "More examples of pullbacks of k-forms can be found in the [next notebook](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/16Manifold_Ext_Der.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What's next?\n", "\n", "Take a look at the notebook [Exterior derivative](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/16Manifold_Ext_Der.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 }