{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 21. Connection\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": [ "Roughly speaking, connection $∇$ on a smooth manifold $M$, is a rule to calculate the directional derivatives of the\n", "vector fields on $M$. If $X$ and $Y$ are two vector fields, $∇_X Y$ denotes the vector field\n", "whose value at each point $p ∈ M$ is equal to the directional derivative of $Y$ in the direction of $X_p$ .\n", "\n", "\n", "
\n", "\n", "### Euclidean connection in $U\\subset R^n$\n", "\n", "
\n", "\n", "Let $U\\subset R^n$ be an open subset and $\\ \\ (x^1,\\ldots,x^n)\\ \\ $ define Cartesian coordinates on $U$. For $X,Y\\in \\mathfrak{X}(U),$ $ \\ X=X^i\\frac{\\partial}{\\partial x^i},\\ Y=Y^i\\frac{\\partial}{\\partial x^i}\\ $ define $\\ D_XY\\in \\mathfrak{X}(U)\\ $ by\n", "\n", "$$D_XY=X(Y^j)\\frac{\\partial}{\\partial x^j}=X^i\\frac{\\partial Y^j}{\\partial x^i}\\frac{\\partial}{\\partial x^j}.$$\n", "\n", "Thus, each component of the vector field $D_XY$ is the usual directional derivative in $R^n$ of $Y^j$ in the direction of $X$.\n", "\n", "The map $$(X,Y)\\to D_XY$$\n", "\n", "is $R$-linear with respect to $Y$ since \n", "\n", "$$X(\\alpha Y_1^j+\\beta Y_2^j)=\\alpha X(Y_1^j)+\\beta X(Y_2^j),\\quad \\text{for } \\alpha,\\beta\\in R.$$\n", "\n", "It is $C^\\infty(U)$ -linear in $X$ since \n", "\n", "$$(f_1X_1+f_2X_2)(Y^j)=\n", "f_1X_1(Y^j)+f_2X_2(Y^j), \\ \\text{for } \\ f_1,f_2\\in C^\\infty(U).$$\n", "\n", "It satisfies the Leibniz rule since\n", "\n", "$D_XY(fY)=X(fY^j)\\frac{\\partial}{\\partial x^j}=\n", "(Xf)Y^j\\frac{\\partial}{\\partial x^j}+fX(Y^j)\\frac{\\partial}{\\partial x^j}\n", "=(Xf)Y+fD_XY.$\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Affine connection in a manifold\n", "\n", "
\n", "\n", "\n", "The above observations motivate the following definition.\n", "\n", "\n", "Let $M$ be a smooth manifold. A **connection on $M$** assigns to\n", "each $X ∈ \\mathfrak{X}(M)$ an operator $∇_X$ from $\\mathfrak{X}(M)$ into itself, such that for all $X, Y, Z ∈\n", "\\mathfrak{X}(M), a, b ∈ R$ and $f ∈ C^∞ (M)$,\n", "\n", "\\begin{eqnarray}\n", "\\tag{21.1} &∇_X (aY + bZ) = a∇_X Y + b∇_X Z,\\\\\n", "\\tag{21.2} &∇_X ( f Y) = f ∇_X Y + (X f )Y,\\\\\n", "\\tag{21.3} &∇_{aX+bY} Z = a∇_X Z + b∇_Y Z,\\\\\n", "\\tag{21.4} &∇_{f X} Y = f ∇_X Y.\n", "\\end{eqnarray}\n", "\n", "$∇_X Y$ is called the **covariant derivative** of $Y$ with respect to $X$.\n", "\n", "If $\\ (x^1 , x^2 , . . . , x^n )\\ $ is a coordinate system in some neighborhood $U$ of $M$, and $\\ X = X^i \\frac{∂}{∂ x^i},\\ \\ Y = Y^j \\frac{∂}{∂ x^j},\\ $ then from (21.3),(21.4) it follows\n", "\n", "$$\\displaystyle \\nabla_{X^i\\frac{∂}{∂ x^i}}Y=\\displaystyle\n", "\\nabla_{(X^1\\frac{∂}{∂ x^1}+\\ldots+X^n\\frac{∂}{∂ x^n})}Y\n", "\\stackrel{\\text{(3)}}{=}\\displaystyle\n", "\\nabla_{X^1\\frac{∂}{∂ x^1}}Y+\\ldots+\\nabla_{X^n\\frac{∂}{∂ x^n}}Y\\\\\n", "\\stackrel{\\text{(4)}}{=}\\displaystyle\n", "X^1\\nabla_{\\frac{∂}{∂ x^1}}Y+\\ldots+X^n\\nabla_{\\frac{∂}{∂ x^n}}Y\n", "=X^i\\nabla_{\\frac{∂}{∂ x^i}}Y.\n", "$$\n", "From (21.1),(21.2) we have\n", "$$\n", "\\nabla_{\\frac{∂}{∂ x^i}}Y=\n", "\\nabla_{\\frac{∂}{∂ x^i}}\\big(Y^j\\frac{∂}{∂ x^j}\\big)\n", "=\\nabla_{\\frac{∂}{∂ x^i}}\\big(Y^1\\frac{∂}{∂ x^1}+\\ldots Y^n\\frac{∂}{∂ x^n}\\big)\\\\\n", "\\stackrel{\\text{(1)}}{=}\\displaystyle\n", "\\nabla_{\\frac{∂}{∂ x^i}}\\big(Y^1\\frac{∂}{∂ x^1}\\big)+\\ldots+\n", "\\nabla_{\\frac{∂}{∂ x^i}}\\big(Y^n\\frac{∂}{∂ x^n}\\big)$$\n", "$$\n", "\\stackrel{\\text{(2)}}{=}\n", "Y^1\\nabla_{\\frac{∂}{∂ x^i}}\\big(\\frac{∂}{∂ x^1}\\big)+\n", "\\big(\\frac{∂}{∂ x^i}Y^1\\big)\\frac{∂}{∂ x^1}+\n", "\\ldots+\n", "Y^n\\nabla_{\\frac{∂}{∂ x^i}}\\big(\\frac{∂}{∂ x^n}\\big)+\n", "\\big(\\frac{∂}{∂ x^i}Y^n\\big)\\frac{∂}{∂ x^n}\\\\\n", "=Y^j\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}+\n", "\\big(\\frac{∂}{∂ x^i}Y^j\\big)\\frac{∂}{∂ x^j}\n", "=\\big(\\frac{∂}{∂ x^i}Y^j\\big)\\frac{∂}{∂ x^j}\n", "+Y^j\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}.\n", "$$\n", "\n", "Thus (21.1)-(21.4) give us\n", "\n", "$$\n", "∇_X Y=X^i\\big[\\big(\\frac{∂}{∂ x^i}Y^j\\big)\\frac{∂}{∂ x^j}\n", "+Y^j\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}\\big].\n", "$$\n", "\n", "Since $\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}$ is a smooth vector field, it is a linear combination of the vector fields $\\{\\frac{∂}{∂ x^k}\\}_{k=1}^n$, so there is a set of $n^3$ smooth functions $\\displaystyle\\Gamma^k_{ji}$ on $U$, such that\n", "\n", "\\begin{equation}\n", "\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}=\\Gamma^k_{ji}\\frac{∂}{∂ x^k}.\n", "\\tag{21.5}\n", "\\end{equation}\n", "\n", "Functions $\\displaystyle\\Gamma^k_{ji}$ which are called **Christoffel symbols** define the connection in the coordinate system $(x^1,\\ldots,x^n)$ since\n", "\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\displaystyle\n", "∇_X Y=X^i\\big[\\big(\\frac{∂}{∂ x^i}Y^j\\big)\\frac{∂}{∂ x^j}\n", "+Y^j\\Gamma^k_{ji}\\frac{∂}{∂ x^k}\\big]\\\\\n", "\\displaystyle\n", "=X^i\\big(\\frac{∂}{∂ x^i}Y^k+\n", "\\Gamma^k_{ji}Y^j\\big)\\frac{∂}{∂ x^k}.\n", "\\end{matrix}\n", "\\tag{21.6}\n", "\\end{equation}\n", "\n", "Comparing (21.6) with the definition of the **Euclidean** connection we see that all **Christoffel symbols for the Euclidean connection vanish.**\n", "\n", "Observe that if in the definition of the **Euclidean** connection, we put\n", "$X=\\frac{∂}{∂ x^i}$ and $Y=\\frac{∂}{∂ x^j}$, then the components of $Y$ in Cartesian coordinates are $(0,\\ldots,1,\\ldots,0),\\ $ ($1$ on $j$-th position) and \n", "$\\displaystyle D_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}=\n", "\\frac{∂}{∂ x^i}(0)\\frac{∂}{∂ x^1}+\\ldots+\n", "\\frac{∂}{∂ x^i}(1)\\frac{∂}{∂ x^j}+\\ldots+\n", "\\frac{∂}{∂ x^i}(0)\\frac{∂}{∂ x^n}=0.\n", "$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.1**\n", "\n", "Consider the two-dimensional half-plane $y>0$ with connection coefficients defined by\n", "$\\ \\ \\Gamma^1_{12}=\\Gamma^1_{21}=\\Gamma^2_{22}=-\\frac{1}{y}\\ \\ $\n", "and $\\ \\ \\Gamma^2_{11}=\\frac{1}{y}.$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Affine connection nabla on the 2-dimensional differentiable manifold M\n" ] } ], "source": [ "%display latex\n", "M = Manifold(2, 'M', start_index=1) # manifold M, y>0\n", "c_xy. = M.chart() # chart on M\n", " # affine connection on M\n", "nab = M.affine_connection('nabla', r'\\nabla') ; print(nab)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}$" ], "text/plain": [ "Gam^1_12 = -1/y \n", "Gam^1_21 = -1/y \n", "Gam^2_11 = 1/y \n", "Gam^2_22 = -1/y " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ " # Christoffel symbols \n", "nab[1,1,2], nab[1,2,1],nab[2,2,2],nab[2,1,1] = -1/y, -1/y,-1/y,1/y\n", "nab.display(coordinate_labels=False) # only nonzero coefficients " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, only nonzero Christoffel symbols are displayed.\n", "\n", "We can force displaying all symbols using `only_nonzero=False` switch.\n", "\n", "The `coordinate_labels=False` switch prevents using coordinate labels instead of indices." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,1}^{\\,2\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & -\\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{1}{y} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,1}^{\\,2\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & -\\frac{1}{y} \\end{array}$" ], "text/plain": [ "Gam^1_11 = 0 \n", "Gam^1_12 = -1/y \n", "Gam^1_21 = -1/y \n", "Gam^1_22 = 0 \n", "Gam^2_11 = 1/y \n", "Gam^2_12 = 0 \n", "Gam^2_21 = 0 \n", "Gam^2_22 = -1/y " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nab.display(coordinate_labels=False,only_nonzero=False)\n", "# display all 2^3=8 Christoffel symbols" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Covariant derivative along a curve\n", "\n", "
\n", "\n", "If $\\gamma:I\\to M$ is a smooth curve in a smooth manifold $M$ and $Y$ is a smooth vector field defined on the image of $\\gamma$, then the **covariant derivative of $Y$ along $\\ \\gamma$** is the vector field $∇_{\\gamma'} Y$ on $\\gamma$ defined by\n", "\n", "\\begin{equation}\n", "\\displaystyle (∇_{\\gamma'} Y)_{\\gamma_t\n", "} = ∇_{\\gamma'_t} Y\\quad \\text{for } t ∈ I.\n", "\\tag{21.7}\n", "\\end{equation}\n", "\n", "($\\gamma'_t$ denotes the tangent vector to $\\gamma$ at $t$, defined in (7.6))\n", "\n", "Recall that in local coordinates the tangent vector $\\gamma'$ can be represented by (cf. (8.10))\n", "\n", "$$\n", "\\gamma'_{t_0}=\\frac{d(x^i\\circ \\gamma)}{dt}\\Big|_{t_0}\\frac{\\partial}{\\partial x^i}\\Big|_{\\gamma(t_0)},\n", "$$\n", "\n", "furthermore\n", "$$\\frac{d(x^i\\circ\\gamma)}{dt}\\Big|_{t}\\frac{\\partial Y^k}{\\partial x^i}\\Big|_{\\gamma(t)}=\n", "\\frac{\\partial Y^k}{\\partial x^i}\\Big|_{\\gamma(t)}\n", "\\frac{d(x^i\\circ\\gamma)}{dt}\\Big|_{t}\n", "=\\frac{d(Y^k\\circ\\gamma)}{dt}\\Big|_t,$$\n", "and consequently\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\displaystyle\n", "∇_{\\gamma'(t)} Y =\\frac{d(x^i\\circ\\gamma)}{dt}\\Big|_{t}\n", "\\Big(\\frac{\\partial Y^k}{\\partial x^i}+\\Gamma^k_{ji}Y^j\\Big)\\Big|_{\\gamma(t)}\\frac{\\partial}{\\partial x^k}\\Big|_{\\gamma(t)}\\\\\n", "\\displaystyle\n", "=\\Big(\\frac{d(Y^k\\circ\\gamma)}{dt}+\\frac{d(x^i\\circ\\gamma)}{dt}(\\Gamma^k_{ji}Y^j)\\circ\\gamma\\Big)\\Big|_{t}\\frac{\\partial}{\\partial x^k}\\Big|_{\\gamma(t)}.\n", "\\end{matrix}\n", "\\tag{21.8}\n", "\\end{equation}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Vector field parallel along a curve\n", "\n", "
\n", "\n", "A vector field $Y$ is **parallel along the curve** $\\gamma$ if $∇_{\\gamma'}Y = 0.$\n", "\n", "$Y$ is parallel along $\\gamma$ if and only if its components with respect to the basis $\\{\\frac{∂}{∂ x^i} \\}_{i=1}^n$ satisfy the system of linear (with respect to $Y^k$) differential equations\n", "\n", "\\begin{equation}\n", "\\frac{d(Y^k\\circ\\gamma)}{dt}+\\frac{d(x^i\\circ\\gamma)}{dt}(\\Gamma^k_{ji}\\circ\\gamma)(Y^j\\circ\\gamma)=0.\n", "\\tag{21.9}\n", "\\end{equation}\n", "Often we use a simplified form\n", "\\begin{equation}\n", "\\frac{dY^k}{dt}+\\frac{dx^i}{dt}\\Gamma^k_{ji}Y^j=0,\n", "\\tag{21.9a}\n", "\\end{equation}\n", "\n", "where all functions are restricted to the image of $\\gamma$.\n", "\n", "For example if $n=2$ we obtain\n", "\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\frac{dY^1}{dt}+\\frac{dx^1}{dt}\\Gamma_{1,1}^1Y^1\n", "+\\frac{dx^2}{dt}\\Gamma_{1,2}^1Y^1\n", "+\\frac{dx^1}{dt}\\Gamma_{2,1}^1Y^2\n", "+\\frac{dx^2}{dt}\\Gamma_{2,2}^1Y^2=0,\\\\\n", "\\frac{dY^2}{dt}+\\frac{dx^1}{dt}\\Gamma_{1,1}^2Y^1\n", "+\\frac{dx^2}{dt}\\Gamma_{1,2}^2Y^1\n", "+\\frac{dx^1}{dt}\\Gamma_{2,1}^2Y^2\n", "+\\frac{dx^2}{dt}\\Gamma_{2,2}^2Y^2=0.\n", "\\end{matrix}\n", "\\tag{21.9b}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The map $P_{t,t_0} :T_{\\gamma(t_0)}M\\to T_{\\gamma(t)}M$, defined\n", "by\n", "\n", "$$P_{t,t_0}(Y_0)=Y(\\gamma(t)),$$\n", "\n", "where $Y$ is parallel along $\\gamma$\n", "and $Y(\\gamma(t_0)) = Y_0$ , is called\n", "**parallel transport along of $\\gamma$ from $\\gamma(t_0)$ to $\\gamma(t)$**.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If $R^2$ is endowed with the connection $Γ_{ij}^k = 0$ for $i, j, k = 1, 2$, then the\n", "system (21.9b) takes the form\n", "$$\n", "\\frac{dY^1}{dt}=0,\\\\\n", "\\frac{dY^2}{dt}=0,\n", "$$\n", "i.e., the vector field $Y$ is parallel along $\\gamma$ iff $Y$ is\n", "constant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.2**\n", "\n", "Consider (again) the connection $\\nabla$ on the upper halfplane $U = \\{(x, y)\\ | \\ y > 0\\}$\n", "with Christoffel symbols\n", "\n", "$$\n", "\\begin{matrix}\n", "Γ^1_{11}=0,\\quad Γ^2_{11}=1/y,\\\\\n", "Γ^1_{12}= Γ^1_{21}= −1/y,\\\\\n", "Γ^2_{12}= Γ^2_{21}= 0,\\\\\n", "Γ^1_{22}= 0,\\quad Γ^2_{22}= −1/y.\n", "\\end{matrix}\n", "$$\n", "\n", "Let us check that along the curve $x=t,\\ y=1$, the vector field $\\ Y=-\\cos t \\frac{\\partial}{\\partial x}+\\sin t\\frac{\\partial}{\\partial y}\\ $ is parallel.\n", "\n", "
\n", "\n", "The system (21.9b) reduces to\n", "\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\frac{dY^1}{dt}+\\frac{dx}{dt}\\cdot 0\\cdot Y^1\n", "+\\frac{dy}{dt}(-\\frac{1}{y})Y^1\n", "+\\frac{dx}{dt}(-\\frac{1}{y})Y^2\n", "+\\frac{dy}{dt}\\cdot 0\\cdot Y^2=0,\\\\\n", "\\frac{dY^2}{dt}+\\frac{dx}{dt}(\\frac{1}{y})Y^1\n", "+\\frac{dy}{dt}\\cdot 0\\cdot Y^1\n", "+\\frac{dx}{dt}\\cdot 0\\cdot Y^2\n", "+\\frac{dy}{dt}(-\\frac{1}{y})Y^2=0.\n", "\\end{matrix}\n", "\\tag{21.9c}\n", "\\end{equation}\n", "\n", "Since $\\frac{dx}{dt}=1,\\ y=1, \\ \\frac{dy}{dt}=0$ we obtain\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\frac{dY^1}{dt}-\\frac{1}{y}Y^2=\\frac{dY^1}{dt}-Y^2=0,\\\\\n", "\\frac{dY^2}{dt}+\\frac{1}{y}Y^1=\\frac{dY^2}{dt}+Y^1=0.\n", "\\end{matrix}\n", "\\tag{21.9d}\n", "\\end{equation}\n", "\n", "If we put $Y^1=-\\cos t, \\ Y^2=\\sin t,$ then both equations are fulfilled.\n", "\n", "
\n", "\n", "**Example 21.3**\n", "\n", "Use Sympy to prove that the vector field $Y$ from the previous example is parallel along the curve from that example." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAwUlEQVQoFW2Siw3CMAxEUyaIygZlAz4bMAKswCqoszAC3QDBBnSDQjdI74IPuVUiXWxfnhKrbpVSCm61lg+IG4h1nz2CpifiydUR+Rtq6Am6mKlasYV/J7jK14ZwRnxZ7sMDxRGKAll8PGH5rz/ABGMBWFo1wdrccXnq6v/Tziuma95Y6k20XhsI6slSr/J6glwd1ORsvunGTuAN5/s5k6sddn7fURNg5LiWI/zC23IyFTdb7Ic/AXvmT3GArlCe2ASTMnwC6x59iQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import * # import SymPy\n", "init_printing() # SymPy's latex output\n", "%display plain # for Sage's latex display not to interfere with Sympy's one\n", "t=symbols('t') # symbolic variable t\n", "c1=lambda t:t # first component of curve c1(t)\n", "c2=lambda t:1 # second component of curve c2(t)\n", "Y1=lambda t:-cos(t) # first component of Y Y1(t)\n", "Y2=lambda t:sin(t) # second component of Y Y2(t)\n", " # LHS for the first equation (21.9d)\n", "# note that the compositions x^i(gamma(t)), from (21.9) imply\n", "# that x is replaced by c1 and y is replaced by c2 \n", "\n", " # check the first equation in (21.9d)\n", "Y1(t).diff(t)-1/c2(t)*Y1(t)*c2(t).diff(t)-1/c2(t)*Y2(t)*c1(t).diff(t)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAwUlEQVQoFW2Siw3CMAxEUyaIygZlAz4bMAKswCqoszAC3QDBBnSDQjdI74IPuVUiXWxfnhKrbpVSCm61lg+IG4h1nz2CpifiydUR+Rtq6Am6mKlasYV/J7jK14ZwRnxZ7sMDxRGKAll8PGH5rz/ABGMBWFo1wdrccXnq6v/Tziuma95Y6k20XhsI6slSr/J6glwd1ORsvunGTuAN5/s5k6sddn7fURNg5LiWI/zC23IyFTdb7Ic/AXvmT3GArlCe2ASTMnwC6x59iQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ " # check the second equation in (21.9d)\n", "Y2(t).diff(t)+1/c2(t)*Y1(t)*c1(t).diff(t)-1/c2(t)*Y2(t)*c2(t).diff(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.4**\n", "\n", "Solve the system (21.9d) with respect to $Y^1,Y^2\\ $ with initial conditions $\\ Y^1(0)=-1,\\ Y^2(0)=0.$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\operatorname{Y_{1}}{\\left(t \\right)} = - \\cos{\\left(t \\right)}, \\ \\operatorname{Y_{2}}{\\left(t \\right)} = \\sin{\\left(t \\right)}\\right]$" ], "text/plain": [ "[Eq(Y1(t), -cos(t)), Eq(Y2(t), sin(t))]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = symbols('t') # symbolic variable t\n", "Y1 = Function('Y1') # first component of Y\n", "Y2 = Function('Y2') # second component of Y\n", "ics = {Y1(0): -1,Y2(0):0} # initial conditions\n", " # solve ODE system in Sympy\n", "sol = dsolve([Y1(t).diff(t)-Y2(t),Y2(t).diff(t)+Y1(t)],ics=ics)\n", "sol # show solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.5**\n", "\n", "Let us show graphically that the vector field $Y$ from the previous example realizes the parallel transport of the vector $Y_0$ with components $(-1,0)$ at $(0,1)$ \n", "to the vector $Y_1$ with the same components at $(2\\pi,1)$ along the curve $x=t,\\ y=1,\\ t\\in [0,2\\pi].$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAGRCAYAAACuS130AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABpUElEQVR4nO3dd3RTd5oH/O9173LvNjbggqkGDDamhhY6gTC0JGRCSAAnMxk2J3kz857dmd2ZMLM7s+9kTgzpkAQIKYTQWwi2aabaNIONwcbGuICxJVe56L5/CN2V3LBlNdvfzzk6sa6ke39ShPTo+T33+QmiKIKIiIiIus7K3AMgIiIi6qkYSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpycbcA+gLBEHwBPDfALwANAFYIYpio9btfwMwUBTFxWYaIhEREelBEEXR3GPo9QRB+BDAn6EOpK4DmC+K4r4ntwkAygFcFEVxhvlGSURERF3FqT0jEwRhEIBiURRLAIx7srlM6y5DAXgA+MXUYyMiIqLuYSBlfD4Avn7y90sAcgGc17p94pP/MpAiIiLqYVgjZWSiKKYBgCAIoQDGA/h/Rd351IkAFAAumWF4RERE1A3MSJnOoif//aHF9okA0kRRbDbxeIiIiKibGEiZThzUtVLZmg2CIEQB8AOn9YiIiHokBlKm4wXgXott057894SJx0JEREQGwEDKdC4CCBUEwRoABEEYBuC/ADwGcMWcAyMiIiL9sNjcdN4HEAzgoCAIuQCqAdgCOCSymRcREVGPxIacJvCk6aaDKIp1WtsWAtgNYJ4oivvNNTYiIiLSHwMpExAE4QiABAABoijWPAmsTgNQiKL4rHlHR0RERPpijZRpxEHdhLPuSY3U/wf1a7/UrKMiIiKibmFGygQEQZgOYDoAJwC+UAdVH2gvXExEREQ9DwMpIiIiIj1xao+IiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykTExQcxMEQTD3WIiIiKh7bLpwX65ubAByuRwymQxyudzcQyEiIurJLCIhwYwUERERkZ76bCC1efNmDBs2DG5ubnBzc0NCQgIOHTrU4WNSU1MxatQoODg4oH///vjoo49MNFoiIiKyRH02kAoODsZf//pXXLx4ERcvXsQzzzyDBQsW4MaNG23ePy8vD7Nnz8aECROQkZGB3//+9/jNb36DXbt2mXjkREREZCkEUex06VOvr5Hy9PTE//zP/2D16tWtbnv33Xexd+9e3Lx5U9q2du1aXLlyBWfPnu30MRQKhVQj5ebmZpBxExER9UGskbIUzc3N2LlzJ2pqapCQkNDmfc6ePYsZM2bobJs5cyYuXryIxsZGUwyTiIiILExXztrrda5du4aEhATU19fDxcUFu3fvRkxMTJv3LSkpgZ+fn842Pz8/NDU14dGjRwgICGjzcUqlEkqlUrquUCgM9wSIiIjIrPp0RioqKgqZmZlIT0/HunXrsGrVKmRlZbV7/5atnzTToh21hNq4cSNkMpl0CQkJMczgiYiIyOz6dCBlZ2eHgQMHYvTo0di4cSOGDx+ODz74oM37+vv7o6SkRGdbWVkZbGxs4OXl1e4x3nvvPcjlculSWFho0OdARERE5tOnp/ZaEkVRZxpOW0JCAvbt26ez7ejRoxg9ejRsbW3b3ae9vT3s7e0NOk4iIiKyDH02I/X73/8eJ0+eRH5+Pq5du4Y//OEPSElJwcqVKwGoM0kvvfSSdP+1a9fi3r172LBhA27evIkvvvgCn3/+Od5++21zPQUiIiIysz6bkSotLcWLL76I4uJiyGQyDBs2DIcPH8b06dMBAMXFxSgoKJDuHx4ejoMHD+J3v/sdkpOTERgYiH/9619YvHixuZ4CERERmRn7SJkY+0gREREZBPtIEREREfVkDKSIiIiI9MRAykSSk5MRExODuLg4cw+FiIiIDIQ1UibGGikiIiKDYI0UERERUU/GQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykTIR9pIiIiHof9pEyMfaRIiIiMgj2kSIiIiLqyRhIEREREemJgRQRERGRnhhIEREREemJgRQRERGRnhhIEREREemJgZSJsI8UERFR78M+UibGPlJEREQGwT5SRERERD0ZAykiIiIiPTGQIiIiItITAykiIiIiPTGQIiIiItITAykiIiIiPTGQIiIi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trbGtWvXsGDBAkRGRmLVqlWIjIzE2bNn4erqao6nQERERGbGRYtNjIsWExERGQQXLSYiIiLqyRhImUhycjJiYmIQFxdn7qEQERGRgXBqz8Q4tUdERGQQnNojIiIi6skYSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSBERERHpiYEUERERkZ4YSJkIG3ISERH1PmzIaWJsyElERGQQbMhJRERE1JMxkCIiIiLSEwMpIiIiIj0xkCIiIiLSEwMpIiIiIj0xkCIiIiLSEwMpE2EfKSIiot6HfaRMjH2kiIiIDIJ9pIiIiIh6MgZSRERERHpiIEVERESkJwZSRERERHpiIEVERESkJwZSRERERHpiIGUi7CNFRETU+7CPlImxjxQREZFBsI8UERERUU/GQIqIiIhIT302kPrLX/6CcePGwcnJCe7u7p16jCiK+OMf/4jAwEA4Ojpi8uTJuHHjhnEHSkRERBarzwZSDQ0NWLJkCdatW9fpx/z3f/83/vd//xcffvghLly4AH9/f0yfPh1VVVVGHCkRERFZqj5fbL5161a89dZbqKys7PB+oigiMDAQb731Ft59910AgFKphJ+fH/72t7/h9ddf79TxWGxORERkECw270ny8vJQUlKCGTNmSNvs7e0xadIknDlzxowjIyIiInOxMfcAeoqSkhIAgJ+fn852Pz8/3Lt3r93HKZVKKJVK6bpCoTDOAImIiMjkelVG6o9//CMEQejwcvHixW4dQxB0M4miKLbapm3jxo2QyWTSJSQkpFvHJyIiIsvRqzJSb7zxBpYtW9bhfcLCwvTat7+/PwB1ZiogIEDaXlZW1ipLpe29997Dhg0bpOsKhYLBFBERUS/RqwIpb29veHt7G2Xf4eHh8Pf3x7FjxxAbGwtAfeZfamoq/va3v7X7OHt7e9jb2xtlTERERGRevWpqrysKCgqQmZmJgoICNDc3IzMzE5mZmaiurpbuEx0djd27dwNQT+m99dZbeP/997F7925cv34dL7/8MpycnLBixQpzPQ0iIiIyo16VkeqKf//3f8eXX34pXddkmU6cOIHJkycDALKzsyGXy6X7vPPOO6irq8P69etRUVGBsWPH4ujRo3B1dTXp2ImIiMgy9Pk+UqbGPlJEREQGYRF9pLoSSJEBCILgBkAOQCaKInshEBER9WAMpExMUPdKcAVQJfLFJyIi6tEYSBERERHpqc+etUdERETUXQykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhITwykiIiIiPTEQIqIiIhIT/8/CeWh3y/KE08AAAAASUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 26 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reset()\n", "\n", "M = Manifold(2, 'M', start_index=1) # manifold M, y>0\n", "c_xy. = M.chart() # chart on M\n", "t = var('t') # symbolic variable t\n", "S = M.curve([t, 1], t) # curve S: x=t, y=1\n", "Y = M.vector_field([-cos(t),sin(t)]) # vector field Y\n", "YS = Y.along(S) # vector field along curve S\n", "graph = S.plot(prange=(0, 2*pi),thickness=3) # plot curve S\n", "graph += YS.plot(c_xy, ranges={t: (0,2*pi)},thickness=3,\n", " arrowsize=1.5,number_values=25,color='grey') # plot vector field\n", "show(graph, ymax=3,ymin=-1) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "**Example 21.6**\n", "\n", "\n", "Now take the same $\\nabla$ on the upper halfplane but consider the vertical curve $\\gamma:\\ x=0,\\ y=t+1, \\ t\\in [0,1]$ and the vector field $Y=(t+1)\\frac{\\partial}{\\partial x}.$\n", "\n", "
\n", "\n", "First let us check that $Y$ is parallel along $\\gamma$. \n", "\n", "System (21.9c) takes the form \n", "\n", "\\begin{equation}\n", "\\begin{matrix}\n", "\\frac{dY^1}{dt}-\\frac{1}{y}Y^1=0,\\\\\n", "\\frac{dY^2}{dt}-\\frac{1}{y}Y^2=0.\n", "\\end{matrix}\n", "\\tag{21.9e}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAwUlEQVQoFW2Siw3CMAxEUyaIygZlAz4bMAKswCqoszAC3QDBBnSDQjdI74IPuVUiXWxfnhKrbpVSCm61lg+IG4h1nz2CpifiydUR+Rtq6Am6mKlasYV/J7jK14ZwRnxZ7sMDxRGKAll8PGH5rz/ABGMBWFo1wdrccXnq6v/Tziuma95Y6k20XhsI6slSr/J6glwd1ORsvunGTuAN5/s5k6sddn7fURNg5LiWI/zC23IyFTdb7Ic/AXvmT3GArlCe2ASTMnwC6x59iQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import * # import SymPy\n", "init_printing() # SymPy's latex output\n", "t=var('t') # symbolic variable t\n", "c1=lambda t:0 # first component of the curve\n", "c2=lambda t:1+t # second component of the curve\n", "Y1=lambda t:1+t # first component of Y\n", "Y2=lambda t:0 # second component of Y\n", "Y1(t).diff(t)-1/c2(t)*Y1(t) # LHS of the first equation (21.9e):" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAwUlEQVQoFW2Siw3CMAxEUyaIygZlAz4bMAKswCqoszAC3QDBBnSDQjdI74IPuVUiXWxfnhKrbpVSCm61lg+IG4h1nz2CpifiydUR+Rtq6Am6mKlasYV/J7jK14ZwRnxZ7sMDxRGKAll8PGH5rz/ABGMBWFo1wdrccXnq6v/Tziuma95Y6k20XhsI6slSr/J6glwd1ORsvunGTuAN5/s5k6sddn7fURNg5LiWI/zC23IyFTdb7Ic/AXvmT3GArlCe2ASTMnwC6x59iQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y2(t).diff(t)-1/c2(t)*Y2(t) # LHS of the second equation (21.9e):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now solve the system (21.9e) (we have restarted the Kernel)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAAAVCAYAAABFTgLFAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFi0lEQVR4Ae2ajXXTMBDHQx4DlHaDskEpE1A2KGwAbFAeI5QNygZ97QZlg1I2KBvQZoNwP9dXFFkf58SOHdv/9y6WrZN00n3Jcl4sl8uz2Wz2RQh8EPpdlLr/ORQR/hjEsPIZuppYdnQFrDZg5evTMqz451wkOxDCYV8L9cVZEfJIyAKUAP+Eca7A0G3lu6gV37wW2sdhfZzLgxuhZUmPcr0S8rEnD+6E4IOHstXJhDWKU6khiCCgBT9Lps8W5hHyoJN7IfTVNCZbaWZFWUeI4HMhRBIKQ7bE50InQjOPzuQe3Aj5de79o9QfZnhc/lR5T/q5S/RF/b1QaDzaUZ/qf5t1KVnbloOxr4QuhFgX0ObaTLayvt2hn1MhtYmY3RR+Gsqw6tmkYrbIJyXpc/dKVvskZHnXdNvFykQZIkwMyEL0eQgw0I72fUFKVquM9LHOzmEh7TiP4FXnUqhtTLay3gqjW3Y+7m4S3XEf9IOUw0qbwhm5hhoz0HshdzB4N8FHafwj0QHjERyYlA/a0R65+oCUrFb5mEtf5pOTmcANJlt5WgfLb+yQ91YaE6wrus85LBkWRyCr+dmLe1WSFDcG7665TM0kUgGC9jhtH5CTtQ8yNinDZCv1VxMbCe0W1Q+oX0HOYWFmW7UQ4oUYxwV0xEEGz5sCGUkPkNw+GYtDLw7CGJ9DFO6Rxwft6acr1JG1KxnbHHeyFfvqVrJnoOm+/+yl/yByTybFSaA3QiiGdN4kjqWz0HYKJ4TIwDhEyiEJIvBYwXh1+OmXTBKbex1Z6WuImGzlv1ZTtqLOmEp6Fae2OizbUIwR4+bzDUrJgcHYnuLcOHkO8Ie2B9oOR2UBUqC97gJSfFqHbG3AImsb4/ahz7q2gt6/lYKr7rCvRWIyQ7KVxDSLz5sr9VaHpdFXIZwVp8g5DttWzVwsrgVEnJSS6C/1/soY7P2t48HfFiyyumPHMr1G4VBgQQexTO/23UW5jq1wFuLOj7XAzvizQAxDsBX8KAbV+1+foY7DqjPp1e/LvceYILaxTQAnJPryHptCTpGptk3VWWV1x3MN1n3O+jFvPpvsEtRG9JqSnU8bvGqxgwM4MM+OhLChurCuf9e2omuDvD70mR4+PdfXcdjnRi0ViDgqqD8EGQuoUinDu6DggGf0Y0Uss6XaY0SpzGaVNTXGmOoIVr9qTngotoI962uAuwSaYV17L+r75LBEk5DwCOq/E5J54Md5XDDRSlRyGbxyLLN5bLVurbLW6rRF5lDga3G4Stf+d3d0EtKt23AotsLOwv9cyjw588G2/YQ0m1NrBIoFen26a+4XAd9GunMdkfFxbN9ZaaoTpdwVrLJuS76DciCN2u64rKX+D9x9vmlZbUSv1v6OhJFgnDukHIqtEKweyjnLpQBrxmEtB28VWDIszkEU0Ox3LGUiw61Qk+9Wl2W/cqmAQwy2r/o3vdi4bEfbyJoVgRIPrLImumikCh0B3aJzT2biHECz2qJ8hpFA3G+CTWxF2+KsOTmGYiusNfPFv0hWHDJxfScUSkgzi8Oi5NQ7m1Q3AhWQKKtl7RgZ2GqmoAGlsu9PNWqhziJrC8NWurTqjNNYsloTWNdW0B2BTnWsuqS/ENQ+dt1WmBvByZxk5qHV6PAZkcYsvCcnCqf9kIAyc9mmifkS1bcxTkhWnJPdE4QDQujyQSiFUdqKJcOmFi1WhxJwPLZjlFlc0n1sKytVBdiq6V8QY9G1ZF25MIaOuVKx4zfb2C3syRpVvvdtcd3uZCxk4OoiF7hHaSttOSzORpRcB2zleN/S7ZGlD6JzTsGWfsbIw7lALpC2uS6vNuh8dLYyLxcLg+d/uGxHugZbM5wv9Of+kGzwwV8nI4f6GeuzLp110zUfg61g3/hmceD6Dz/wHnCFC/1wAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\left[ \\operatorname{Y_{1}}{\\left(t \\right)} = t + 1, \\ \\operatorname{Y_{2}}{\\left(t \\right)} = 0\\right]$" ], "text/plain": [ "[Eq(Y1(t), t + 1), Eq(Y2(t), 0)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = symbols('t') # symbolic variable t\n", "Y1 = Function('Y1') # first component of Y \n", "Y2 = Function('Y2') # second component of Y\n", "ics = {Y1(0): 1,Y2(0):0} # initial conditions\n", " # solve system (21.9e)\n", " # y is replaced by c2(t)=t+1\n", "sol = dsolve([Y1(t).diff(t)-1/(t+1)*Y1(t),Y2(t).diff(t)-1/(t+1)*Y2(t)],\n", " ics=ics)\n", "sol # show solution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.7**\n", "\n", "Show graphically the vector field $Y$ from the previous example along the curve $x=0,\\ y=t+1.$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 17 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reset()\n", "%display latex\n", "M = Manifold(2, 'M', start_index=1) # manifold M, y>0\n", "c_xy. = M.chart() # chart on M\n", "t = var('t') # symbolic variable t\n", "S = M.curve([ 0,t+1], t) # curve S\n", "Y = M.vector_field([t+1,0]) # vector field Y\n", "YS = Y.along(S) # vector field Y along S\n", "graph = S.plot(prange=(0, 1),thickness=3) # plot S\n", "graph += YS.plot(c_xy, ranges={t: (0,1)}, # plot YS\n", " arrowsize=1.5,number_values=16,color='grey') \n", "show(graph, ymax=2.,ymin=1,xmax=4) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.8** \n", "\n", "Consider the plane $R^2$ with Christoffel symbols\n", "$$Γ^1_{11}= Γ^1_{22}=\\frac{4u}{1+u^2+4v^2},\\\\\n", "Γ^2_{11}= Γ^2_{22}=\\frac{4v}{1+u^2+4v^2},\n", "$$\n", "and the remaining symbols equal to 0." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}} & = & \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,1}^{\\,2\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,2}^{\\,1\\phantom{\\, 2}\\phantom{\\, 2}} & = & \\frac{4 \\, u}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,2}^{\\,2\\phantom{\\, 1}\\phantom{\\, 2}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,1}^{\\,2\\phantom{\\, 2}\\phantom{\\, 1}} & = & 0 \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & \\frac{4 \\, v}{4 \\, u^{2} + 4 \\, v^{2} + 1} \\end{array}$" ], "text/plain": [ "Gam^1_11 = 4*u/(4*u^2 + 4*v^2 + 1) \n", "Gam^1_12 = 0 \n", "Gam^1_21 = 0 \n", "Gam^1_22 = 4*u/(4*u^2 + 4*v^2 + 1) \n", "Gam^2_11 = 4*v/(4*u^2 + 4*v^2 + 1) \n", "Gam^2_12 = 0 \n", "Gam^2_21 = 0 \n", "Gam^2_22 = 4*v/(4*u^2 + 4*v^2 + 1) " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reset()\n", "%display latex\n", "N=Manifold(2,name='R2',start_index=1) # manifold M, dim=2\n", "c_uv.=N.chart() # coordinates u,v\n", "nab=N.affine_connection('nab') # connection on M\n", "nab[:]=[[[4*u/(4*u^2 + 4*v^2 + 1), 0], # Christoffel symbols\n", " [0, 4*u/(4*u^2 + 4*v^2 + 1)]], \n", " [[4*v/(4*u^2 + 4*v^2 + 1), 0], \n", " [0, 4*v/(4*u^2 + 4*v^2 + 1)]]]\n", "nab.display(coordinate_labels=False,only_nonzero=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assume that the curve $\\gamma$ is defined by $\\ x=t,\\ y=t,\\ t\\in (0,1)$.\n", "\n", "System (21.9b) takes the form" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\frac{dY^1}{dt}+\\frac{4t}{1+8t^2}(Y^1+Y^2)=0,\\\\\n", "\\frac{dY^2}{dt}+\\frac{4t}{1+8t^2}(Y^1+Y^2)=0.\n", "$$\n", "\n", "and can be solved with Sympy (with initial conditions $Y^1(0)=1,\\ Y^2(0)=0$)." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\operatorname{Y_{1}}{\\left(t \\right)} = \\frac{1}{2} + \\frac{1}{2 \\sqrt{8 t^{2} + 1}}, \\ \\operatorname{Y_{2}}{\\left(t \\right)} = - \\frac{1}{2} + \\frac{1}{2 \\sqrt{8 t^{2} + 1}}\\right]$" ], "text/plain": [ "[Eq(Y1(t), 1/2 + 1/(2*sqrt(8*t**2 + 1))),\n", " Eq(Y2(t), -1/2 + 1/(2*sqrt(8*t**2 + 1)))]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import *\n", "init_printing()\n", "%display plain\n", "t = symbols('t') # symbolic variable t\n", "w=4*t/(1+8*t**2) # ODE system coefficient\n", "Y1 = Function('Y1') # first component of Y\n", "Y2 = Function('Y2') # second component of Y\n", "ics = {Y1(0):1,Y2(0):0} # initial conditions\n", "sol = dsolve([Y1(t).diff(t) + w*(Y1(t)+Y2(t)), # solve ODE system\n", " Y2(t).diff(t) + w*(Y1(t)+Y2(t))],ics=ics)\n", "list(map(simplify,sol)) # simplify components" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.9**\n", "\n", "Using the data from the previous example \n", "show the parallel transport of the tangent vector at $(0,0)$ with components $(1,0)$ along the curve $x=t, \\ y=t, \\ t\\in [0,1].$" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 12 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reset()\n", "%display latex\n", "M = Manifold(2, 'M', start_index=1) # manifold M\n", "c_xy. = M.chart() # chart on M\n", "t = var('t') # symbolic variable t\n", "S = M.curve([ t,t], t) # curve S\n", " # vector field Y:\n", "Y = M.vector_field([0.5*(1+1/sqrt(1+8*t**2)),0.5*(-1+1/sqrt(1+8*t**2))])\n", "\n", "YS = Y.along(S) # vector field Y along S\n", "graph = S.plot(prange=(0, 1),thickness=2) # plot S\n", "graph += YS.plot(c_xy, ranges={t: (0,1)}, # plot YS\n", " arrowsize=1.5,number_values=11,color='grey') \n", "show(graph, ymax=1.1,ymin=0,xmax=2,figsize=[4,3]) # show plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Remark.** In many examples, the exact solutions to ODE systems are not accessible.\n", "\n", "Fortunately, the same figure as in previous example can be obtained, solving the system numerically.\n", "\n", "
\n", "\n", "**Example 21.10**\n", "\n", "Use numerical tools to obtain the figure from the previous example.\n", "\n", "First we check that the connection coefficients from the previous example \n", "correspond to an elliptic paraboloid." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1, 1): 4*u/(4*u^2 + 4*v^2 + 1),\n", " (1, 1, 2): 4*v/(4*u^2 + 4*v^2 + 1),\n", " (1, 2, 1): 0,\n", " (1, 2, 2): 0,\n", " (2, 1, 1): 0,\n", " (2, 1, 2): 0,\n", " (2, 2, 1): 4*u/(4*u^2 + 4*v^2 + 1),\n", " (2, 2, 2): 4*v/(4*u^2 + 4*v^2 + 1)}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display plain\n", "u, v = var('u, v', domain='real')\n", "eparaboloid = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid')\n", "eparaboloid.connection_coefficients()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use the method \n", "\n", "`eparaboloid.parallel_translation_numerical(curve, t, v0, tinterval)`.\n", "\n", "In the above command \n", "\n", "`curve` =[x(t),y(t)] can be replaced for example by [s,s],\n", "\n", "`t` by s,\n", "\n", "`v0` by [1.0,1.0],\n", "\n", "and `tinterval` =[t_0,t_1,number_of_subintervals] by [0.0, 1.0, 9].\n", "\n", "Use the command `eparaboloid.parallel_translation_numerical?` to obtain more information." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 11 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "s = var('s') # symbolic variable\n", "vector_field = eparaboloid.parallel_translation_numerical([s,s],s,\n", " [1.0,0.0],[0.0, 1.0, 9]) # numerical parallel translations\n", "times, components = zip(*vector_field) # list of t_i and Y_i\n", "vec=[vector(v) for v in components] # vectors corresponding to Y_i\n", "strt=[vector([t,t]) for t in times] # vector of points on the curve\n", "p=plot(s,(s,0,1),thickness=2,color='red') # plot the curve in red\n", "pl=sum([plot(vec[k],start=strt[k],arrowsize=1.5, color='grey') \n", " for k in range(10)]) # plot all vectors Y_i\n", "(p+pl).show(xmax=2,ymin =-0.2,figsize=[4,3]) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us note that the values of the compositions $\\Gamma_{ij}^k\\circ\\gamma$ in the above calculations are cached, and can be used for example in symbolic computations:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1, 1): 4*s/(8*s^2 + 1),\n", " (1, 1, 2): 4*s/(8*s^2 + 1),\n", " (1, 2, 1): 0,\n", " (1, 2, 2): 0,\n", " (2, 1, 1): 0,\n", " (2, 1, 2): 0,\n", " (2, 2, 1): 4*s/(8*s^2 + 1),\n", " (2, 2, 2): 4*s/(8*s^2 + 1)}" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# after above calculations the same command gives different result\n", "eparaboloid.connection_coefficients() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "**Remark.** \n", "In previous examples we have used linear functions to define $\\gamma$.\n", "If the numerical approach is used we can try more complicated curves.\n", "\n", "
\n", "\n", "**Example 21.11**\n", "\n", "Let us investigate the parallel transport from the previous example\n", "but along the curve $x=t,\\ y=t^2, \\ t\\in [0,1]$." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 11 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u, v = var('u, v', domain='real') # symbolic variables for surf. param.\n", "eparaboloid = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid') # elliptic paraboloid - parametric def.\n", "s = var('s') # parameter of curve\n", "vector_field = eparaboloid.parallel_translation_numerical([s,s^2],s,\n", " [1.0,0.0],[0.0, 1.0, 9]) # compute parallel translations Y_i of Y_0\n", " # for i=1,...,9\n", "times, components = zip(*vector_field) # list of t_i and Y_i, i=0,...,9\n", "\n", "vec=[vector(v) for v in components] # vectors corresponding to lists Y_i\n", "strt=[vector([t,t^2]) for t in times] # vector of points on the curve\n", "p=plot(s^2,(s,0,1),thickness=2,color='red') # plot curve\n", "pl=sum([plot(vec[k],start=strt[k],arrowsize=1.5,color='grey') \n", " for k in range(10)]) # plot all vectors Y_i\n", "(p+pl).show(xmax=2,ymin =-0.2,figsize=[4,3]) # combine plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Remark.** This time the symbols $\\Gamma_{ij}^k\\circ\\gamma$ are more complicated:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1, 1): 4*s/(4*s^4 + 4*s^2 + 1),\n", " (1, 1, 2): 4*s^2/(4*s^4 + 4*s^2 + 1),\n", " (1, 2, 1): 0,\n", " (1, 2, 2): 0,\n", " (2, 1, 1): 0,\n", " (2, 1, 2): 0,\n", " (2, 2, 1): 4*s/(4*s^4 + 4*s^2 + 1),\n", " (2, 2, 2): 4*s^2/(4*s^4 + 4*s^2 + 1)}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display plain\n", "eparaboloid.connection_coefficients()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.12**\n", "\n", "Show how the equations (21.9b) of the parallel vector field along a curve can be obtained in SageMath Manifolds for a concrete parametric surface in and concrete curve.\n", "\n", "
\n", "If the equations (21.9b) of the parallel transport system are written in the form\n", "\n", "$$ \\frac{dY^1}{dt}=F^1(Y^1,Y^2),\\ \\ \\frac{dY^1}{dt}=F^1(Y^1,Y^2),$$\n", "\n", "then the right hand sides can be obtained as follows (we use the symmetry of connection coefficients for parametrized surfaces in $R^3$)." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "u, v = var('u, v', domain='real') # parameters of surface\n", "epar = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid') # definition of surface\n", "\n", "t=var('t') # parameter of curve\n", "curve=[t,t^2] # definition of curve\n", "surf=epar # renaming of surface\n", "u1 = surf.variables[1] # extract the parameters\n", "u2 = surf.variables[2] # from the surf object\n", "\n", "du1 = diff(curve[0], t) # derivatives of \n", "du2 = diff(curve[1], t) # curve components\n", "\n", "C = surf.connection_coefficients() # connection coefficients\n", "\n", "for coef in C: # compositions of connection coeff\n", " C[coef] = C[coef].subs({u1: curve[0], u2: curve[1]})\n", " # with curve components\n", "\n", "Y1,Y2=var('Y1 Y2') # symbolic variables for Y components\n", " # RHS for the first equation:\n", "F1 = - C[(1,1,1)]*Y1*du1 - C[(1,2,1)]*(du1*Y2 + du2*Y1) - \\\n", " C[(2,2,1)]*du2*Y2\n", " # RHS for the second equation\n", "F2 = - C[(1,1,2)]*Y1*du1 - C[(1,2,2)]*(du1*Y2 + du2*Y1) - \\\n", " C[(2,2,2)]*du2*Y2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thus the right hand sides of equations for parallel transport on the surface $\\ \\ z=u^2+v^2\\ \\ $ along the curve $\\ u=t,\\ v=t^2,\\ $ are:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle -\\frac{8 \\, Y_{2} t^{2}}{4 \\, t^{4} + 4 \\, t^{2} + 1} - \\frac{4 \\, Y_{1} t}{4 \\, t^{4} + 4 \\, t^{2} + 1}\\)" ], "text/latex": [ "$\\displaystyle -\\frac{8 \\, Y_{2} t^{2}}{4 \\, t^{4} + 4 \\, t^{2} + 1} - \\frac{4 \\, Y_{1} t}{4 \\, t^{4} + 4 \\, t^{2} + 1}$" ], "text/plain": [ "-8*Y2*t^2/(4*t^4 + 4*t^2 + 1) - 4*Y1*t/(4*t^4 + 4*t^2 + 1)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "F1" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle -\\frac{8 \\, Y_{2} t^{3}}{4 \\, t^{4} + 4 \\, t^{2} + 1} - \\frac{4 \\, Y_{1} t^{2}}{4 \\, t^{4} + 4 \\, t^{2} + 1}\\)" ], "text/latex": [ "$\\displaystyle -\\frac{8 \\, Y_{2} t^{3}}{4 \\, t^{4} + 4 \\, t^{2} + 1} - \\frac{4 \\, Y_{1} t^{2}}{4 \\, t^{4} + 4 \\, t^{2} + 1}$" ], "text/plain": [ "-8*Y2*t^3/(4*t^4 + 4*t^2 + 1) - 4*Y1*t^2/(4*t^4 + 4*t^2 + 1)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.13**\n", "\n", "Make a three-dimensional illustration for parallel transport on the surface $\\ \\ z=u^2+v^2\\ \\ $ along the curves $\\ u=t,\\ v=t,\\ $ and $\\ u=t,\\ v=t^2.\\ $\n", "\n", "
\n", "\n", "Since the connection from the last example corresponds to the parametrized surface $z=u^2+v^2$ we are able to make a 3d illustration of the parallel transport.\n", "\n", "First the case of the curve $x=t, y=t$:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u, v = var('u, v', domain='real') # parameters of surface\n", "epar = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid') # definition of surface\n", "s = var('s') # parameter of curve\n", " # numerical parallel transport:\n", "vector_field = epar.parallel_translation_numerical([s,s],s,\n", " [1.0, 0.0], [0.0, 1.0, 9]) # compute parallel transport Y_i \n", " # of Y_0 for i=1,..,9\n", "times, comp = zip(*vector_field) # list of s_i and Y_i, i=0,...,9\n", "\n", " # plot obtained vectors:\n", "pl=sum([plot(vector(epar.tangent_vector((times[k],times[k]),\n", " (comp[k][0], comp[k][1]))), \n", " start=vector((times[k],times[k],times[k]^2+times[k]^2)),color='black',thickness=2) \n", " for k in range(8)])\n", " # plot the curve:\n", "p=parametric_plot3d((s,s,s^2+s^2),(s,0,0.88),thickness=4,color='red')\n", "var('r phi') # polar surface parameters\n", " # plot surface:\n", "p1=parametric_plot3d((r*cos(phi),r*sin(phi),r^2),(r,0,1.45),(phi,0,2*pi),\n", " opacity=0.8, color='lightgrey')\n", " # combine plots:\n", "(pl+p+p1).rotateZ(-1.85*pi).rotateY(0.5).rotateX(-0.65).show(frame=False)\n", "# enlarge to obtain a better view" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and next the case of the curve $x=t, \\ y=t^2:$" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u, v = var('u, v', domain='real') # parameters of surface\n", "epar = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid') # definition of surface\n", "s = var('s') # parameter of curve\n", " # numerical parallel transport:\n", "vector_field = epar.parallel_translation_numerical([s,s^2],s,\n", " [1.0, 0.0], [0.0, 1.0, 9]) # compute parallel translations Y_i \n", " # of Y_0 for i=1,..,9\n", "times, comp = zip(*vector_field) # list of s_i and Y_i, i=0,...,9\n", "\n", " # plot obtained vectors:\n", "pl=sum([plot(vector(epar.tangent_vector((times[k],times[k]),\n", " (comp[k][0], comp[k][1]))), \n", " start=vector((times[k],times[k]^2,times[k]^2+times[k]^4)),color='black',thickness=2)\n", " for k in range(8)])\n", " # plot the curve:\n", "p=parametric_plot3d((s,s^2,s^2+s^4),(s,0,0.88),thickness=4,color='red')\n", "var('r phi') # polar surface parameters\n", " # plot surface:\n", "p1=parametric_plot3d((r*cos(phi),r*sin(phi),r^2),(r,0,1.45),(phi,0,2*pi),\n", " opacity=0.8,color='lightgrey')\n", " # combine plots\n", "(pl+p+p1).rotateZ(-1.95*pi).rotateY(0.5).rotateX(-0.65).show(frame=False)\n", "# enlarge to obtain a better view" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Geodesics\n", "\n", "
\n", "\n", "Recall that in (7.6) we have defined the tangent vector to a curve $\\gamma$ as\n", "\n", "$$\n", "\\gamma'_{t_0}(f) =\\frac{d}{dt}(\\gamma^*f)\\Big|_{t_0}=\n", "\\frac{d}{dt}(f\\circ\\gamma)\\Big|_{t_0},\\quad f \\in C^\\infty(M).\n", "$$\n", "\n", "In a manifold $M$ with a connection $\\nabla,\\ $ geodesics can be defined as follows.\n", "\n", "The smooth curve $\\gamma: I\\to M$ is **geodesic** if\n", "\\begin{equation}\n", "\\nabla_{\\gamma'}\\gamma'=0.\n", "\\tag{21.10}\n", "\\end{equation}\n", "\n", " To obtain the equation in local coordinates we have to replace in (21.9) the components of the vector field $\\ Y^k\\circ\\gamma\\ \\ $ by $\\ \\frac{d (x^k\\circ\\gamma)}{dt}$ :\n", " \n", " \\begin{equation}\n", "\\frac{d^2(x^k\\circ\\gamma)}{dt^2}+(\\Gamma^k_{ji}\\circ\\gamma)\\frac{d(x^i\\circ\\gamma)}{dt}\\frac{d(x^j\\circ\\gamma)}{dt}=0.\n", "\\tag{21.11}\n", "\\end{equation}\n", "\n", "Usually we shall use the shorthand\n", "\n", " \\begin{equation}\n", "\\frac{d^2x^k}{dt^2}+\\Gamma^k_{ji}\\frac{dx^i}{dt}\\frac{dx^j}{dt}=0.\n", "\\tag{21.12}\n", "\\end{equation}\n", "\n", "In the case $n=2$, the system takes the form\n", "\n", "$$\n", "\\frac{d^2x^1}{dt^2}+\\Gamma^1_{11}\\frac{dx^1}{dt}\\frac{dx^1}{dt}\n", "+\\Gamma^1_{12}\\frac{dx^1}{dt}\\frac{dx^2}{dt}\n", "+\\Gamma^1_{21}\\frac{dx^2}{dt}\\frac{dx^1}{dt}\n", "+\\Gamma^1_{22}\\frac{dx^2}{dt}\\frac{dx^2}{dt}\n", "=0,\\\\\n", "\\frac{d^2x^2}{dt^2}+\\Gamma^2_{11}\\frac{dx^1}{dt}\\frac{dx^1}{dt}\n", "+\\Gamma^2_{12}\\frac{dx^1}{dt}\\frac{dx^2}{dt}\n", "+\\Gamma^2_{21}\\frac{dx^2}{dt}\\frac{dx^1}{dt}\n", "+\\Gamma^2_{22}\\frac{dx^2}{dt}\\frac{dx^2}{dt}\n", "=0.\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the standard connection of $R^n$, defined by $\\Gamma_{ij}^k =$ 0 in the basis induced by the natural coordinates of $R^n$, the geodesic equations (21.11) are of the form\n", "$\\frac{d^2 x^k }{dt^2} = 0$, which means that the geodesics are straight lines." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.14**\n", "\n", "Consider again the plane $R^2$ with Christoffel symbols\n", "$$Γ^1_{11}= Γ^1_{22}=\\frac{4u}{1+u^2+4v^2},\\\\\n", "Γ^2_{11}= Γ^2_{22}=\\frac{4v}{1+u^2+4v^2},\n", "$$\n", "and the remaining symbols equal to 0.\n", "\n", "The system (21.12) has the form\n", "$$\n", "\\frac{d^2x^1}{dt^2}+\\frac{4x^1}{1+4(x^1)^2+4(x^2)^2}\n", "\\Big(\\big(\\frac{dx^1}{dt}\\big)^2+\n", "\\big(\\frac{dx^2}{dt}\\big)^2\\Big)=0,\\\\\n", "\\frac{d^2x^2}{dt^2}+\\frac{4x^2}{1+4(x^1)^2+4(x^2)^2}\n", "\\Big(\\big(\\frac{dx^1}{dt}\\big)^2+\n", "\\big(\\frac{dx^2}{dt}\\big)^2\\Big)=0.\n", "$$\n", "\n", "The exact solutions for such systems are not easy to obtain, but fortunately we can use SageMath \n", "\n", "`geodesics_numerical(p0, v0, tinterval)` method, \n", "\n", "where `p0` is the list of coordinates of the initial point, `v0` is the list of components of the initial tangent vector and `tinterval` is of the form $[t_0,t_{end},numb]$, with $numb$ denoting the number of subintervals in the interval $[t_0,t_{end}]$.\n", "\n", "The output is a list of expressions of the form:\n", "\n", "`[t, [u1(t), u2(t)], [v1(t), v2(t)], [x1(t), x2(t), x3(t)]]`,\n", "\n", "where t denote the ends of subintervals of $[t_0,t_{end}],$\n", "\n", "`[u1(t), u2(t)]` are the intrinsic coordinates of the geodesic points,\n", "\n", "`[v1(t), v2(t)]` are the intrinsic coordinates of the tangent\n", " vectors to the geodesic,\n", "\n", "`[x1(t), x2(t), x3(t)]` are the coordinates of the geodesic\n", " points in the three-dimensional space.\n", " \n", "Use" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# epar.geodesics_numerical?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "to obtain more information.\n", "\n", "In the following code we compute numerically the geodesic with initial tangent vector at $(u1,u2)=(-1,0)$, with components $(v1,v2)=(0,-1).\\ $ In the computations, the time interval $[0,120]$ is divided into 200 subintervals:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u, v = var('u, v', domain='real') # parameters of surface\n", "epar = ParametrizedSurface3D([u, v, u^2+v^2], [u, v],\n", " 'elliptic paraboloid') # definition of surface\n", "s = var('s') # parameter of curve\n", " # numerically solve the \n", " # equations of geodesics:\n", "geodesic = epar.geodesics_numerical([-1,0.],[0.0,-1],\n", " [0.0, 120, 200])\n", "# 'geodesic' contains times t_i, points p_i, tang.vects v_i\n", "# and coordinates (x_i,y_i,z_i) of points on geodesic\n", "times,points,tang,ext = zip(*geodesic)\n", "p0=line3d(ext,thickness=4,color='red') # plot the geodesic\n", "r,phi=var('r phi') # polar parameters of surface\n", "p1=parametric_plot3d((r*cos(phi),r*sin(phi),r^2),(r,0,11),\n", " (phi,0,2*pi),opacity=0.5,color='lightgrey') # plot surface\n", "(p0+p1).rotateZ(0.4*pi).show(frame=False,aspect_ratio=[1,1,0.2])\n", " # enlarge and rotate for better view" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example 21.15**\n", "\n", "Show three examples of geodesics on the sphere in $R^3$.\n", "\n", "
\n", "\n", "Define the sphere as the parametric surface\n", "\n", "$$(x,y,z)=(\\cos(u)\\cos(v), \\cos(v)\\sin(u), \\sin(v)),\\\\\n", "u\\in (0, 2\\pi),\\ \\ v\\in (-\\pi/2, \\pi/2).\n", "$$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\cos\\left(u\\right) \\cos\\left(v\\right), \\cos\\left(v\\right) \\sin\\left(u\\right), \\sin\\left(v\\right)\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\cos\\left(u\\right) \\cos\\left(v\\right), \\cos\\left(v\\right) \\sin\\left(u\\right), \\sin\\left(v\\right)\\right)$" ], "text/plain": [ "(cos(u)*cos(v), cos(v)*sin(u), sin(v))" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S = surfaces.Sphere() # use surfaces.Sphere module\n", "S.equation # show equations of unit sphere" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\left(0, 2 \\, \\pi\\right), \\left(-\\frac{1}{2} \\, \\pi, \\frac{1}{2} \\, \\pi\\right)\\right)\\)" ], "text/latex": [ "$\\displaystyle \\left(\\left(0, 2 \\, \\pi\\right), \\left(-\\frac{1}{2} \\, \\pi, \\frac{1}{2} \\, \\pi\\right)\\right)$" ], "text/plain": [ "((0, 2*pi), (-1/2*pi, 1/2*pi))" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S.variables_range # show ranges of variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and compute numerically sets of 101 points on three geodesics, each starting at point $(u,v)=(0,0)$ and having initial tangent vectors with components\n", "$\\ (1,0),\\ (\\cos(\\pi/3),\\sin(\\pi/3),\\ (\\cos(-\\pi/3),\\sin(-\\pi/3),\\ $ respectively:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 101 points of the geodesic with initial tangent vector \n", "# at point (u,v)=(0,0) with components (1,0) \n", "g1 = [c[-1] for c in S.geodesics_numerical(\n", " (0,0),(1,0),(0,2*pi,100))]\n", "\n", "# 101 points of the geodesic with initial tangent vector \n", "# at point (u,v)=(0,0) with components (cos(pi/3),sin(pi/3)) \n", "g2 = [c[-1] for c in S.geodesics_numerical(\n", " (0,0),(cos(pi/3),sin(pi/3)),(0,2*pi,100))]\n", "\n", "# 101 points of the geodesic with initial tangent vector \n", "# at point (u,v)=(0,0) with components (cos(2pi/3),sin(2pi/3))\n", "g3 = [c[-1] for c in S.geodesics_numerical(\n", " (0,0),(cos(-pi/3),sin(-pi/3)),(0,2*pi,100))]\n", "\n", "p0=S.plot(opacity=0.5,color='lightgrey') # plot sphere\n", "p1=line3d(g1,thickness=4,color='red') # first geodesic\n", "p2=line3d(g2,thickness=4,color='red') # second geodesic\n", "p3=line3d(g3,thickness=4,color='red') # third geodesic\n", "\n", "(p0+p1+p2+p3).rotateZ(-pi/4).show(frame=False) # combine plots\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, one can suspect, that the geodesics are the great circles (but the graphics is not the proof!).\n", "

\n", "In the [next notebook](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/22Manifold_Riemann.ipynb) we will show how to compute numerically geodesics on Riemannian manifolds." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Torsion\n", "\n", "
\n", "\n", "The **torsion**, $T$ of the connection $\\nabla$ is the map from $\\mathfrak{X}(M) × \\mathfrak{X}(M)$ into $\\mathfrak{X}(M)$ given by\n", "\n", "\\begin{equation}\n", "T (X, Y) = ∇_X Y − ∇_Y X − [X, Y],\\quad \\text{for}\\quad X,Y\\in \\mathfrak{X}(M).\n", "\\tag{21.13}\n", "\\end{equation}\n", "\n", "From (21.13) we see that $T$ is antisymmetric, $T (X, Y) = −T (Y, X)$.\n", "\n", "From the properties of the connection and the Lie bracket ([notebook 12](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/12Manifold_VectorFields_cont.ipynb)) it follows that for $f\\in C^\\infty(M)$\n", "\n", "$$T ( f X, Y) = ∇_{f X} Y − ∇_Y ( f X) − [ f X, Y]\\\\\n", "= f ∇_X Y − f ∇_Y X − (Y f )X − f [X, Y] + (Y f )X=f T (X, Y).\n", "$$\n", "\n", "Note that $T$ takes values in $\\mathfrak{X}(M),\\ $ so it does not satisfy the definition of a tensor field but it is equivalent to tensor field $\\ \\tilde{T}\\in T^{(1,2)}M$ defined by \n", "\n", "$$\\tilde{T} (\\alpha,X, Y) = α(T (X, Y)),\\quad X,Y\\in \n", "\\mathfrak{X}(M), \\ \\alpha\\in T^*(M).$$\n", "\n", "**Remark.** In SageMath Manifolds by the `torsion` we mean the tensor field $\\tilde{T}$.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Symmetric or torsion free connections\n", "\n", "
\n", "\n", "A connection $∇$ is **symmetric, or torsion-free** if its torsion tensor is zero.\n", "\n", "if $X = X^i \\frac{∂}{∂ x^i}$ and $Y = Y^j \\frac{∂}{∂ x^j}$ are smooth vector fields, then \n", "$$\\textstyle T (X, Y) = X^i Y^j T (\\frac{∂}{∂ x^i} , \\frac{∂}{∂ x^j} ).$$ Using (2.13)\n", "we obtain \n", "\n", "$$T \\textstyle (\\frac{∂}{∂ x^i} , \\frac{∂}{∂ x^j} )\n", "=\\nabla_{\\frac{∂}{∂ x^i}}\\frac{∂}{∂ x^j}-\n", "\\nabla_{\\frac{∂}{∂ x^j}}\\frac{∂}{∂ x^i}-\n", "[\\frac{∂}{∂ x^i},\\frac{∂}{∂ x^j}]\\\\ \\textstyle\n", "=\\Gamma^k_{ji}\\frac{∂}{∂ x^k}-\n", "\\Gamma^k_{ij}\\frac{∂}{∂ x^k}-0=(\\Gamma^k_{ji}-\\Gamma^k_{ij})\\frac{∂}{∂ x^k}.\n", "$$\n", "\n", "If the components of $T$ are defined by \n", "$$\\textstyle T(\\frac{∂}{∂ x^i},\\frac{∂}{∂ x^j})=T^k_{ij}\\frac{∂}{∂ x^k},$$\n", "we have\n", "$$\\textstyle T^k_{ij}=\\Gamma^k_{ji}-\\Gamma^k_{ij},$$\n", "consequently\n", "$$\\textstyle T (X, Y) = X^i Y^j T^k_{ ij}\\frac{∂}{∂ x^k}.$$ \n", "$∇$ is symmetric if and only if $\\Gamma^k_{i j} = \\Gamma^k_{ji}.$\n", "\n", "**Remark.** In all previous examples of connections, the torsion tensor is zero. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.16**\n", "\n", "Consider again the two-dimensional half-plane $y>0$ with connection coefficients defined by\n", "$\\ \\ \\Gamma^1_{12}=\\Gamma^1_{21}=\\Gamma^2_{22}=-\\frac{1}{y}\\ \\ $\n", "and $\\ \\ \\Gamma^2_{11}=\\frac{1}{y}.$" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle 0\\)" ], "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(2, 'M', start_index=1) # manifold M, y>0\n", "c_xy. = M.chart() # chart on M\n", " # affine connection on M:\n", "nab = M.affine_connection('nabla', r'\\nabla') \n", " # Christoffel symbols \n", "nab[1,1,2], nab[1,2,1],nab[2,2,2],nab[2,1,1] = -1/y, -1/y,-1/y,1/y\n", "nab.torsion().disp() # show torsion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.17**\n", "\n", "Compute the torsion in coordinates $(x,y)$ for two-dimensional manifold with nonzero Christoffel symbols\n", "\n", "$$Γ^1_{12}=x,\\ \\ Γ^1_{21}=y,\\ \\ Γ^2_{11}=y,\\ \\ Γ^2_{22}=x.$$" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Affine connection nabla on the 2-dimensional differentiable manifold M\n" ] }, { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & x \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & y \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & x \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & y \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 1}\\,1\\,2}^{\\,1\\phantom{\\, 1}\\phantom{\\, 2}} & = & x \\\\ \\Gamma_{\\phantom{\\, 1}\\,2\\,1}^{\\,1\\phantom{\\, 2}\\phantom{\\, 1}} & = & y \\\\ \\Gamma_{\\phantom{\\, 2}\\,1\\,1}^{\\,2\\phantom{\\, 1}\\phantom{\\, 1}} & = & x \\\\ \\Gamma_{\\phantom{\\, 2}\\,2\\,2}^{\\,2\\phantom{\\, 2}\\phantom{\\, 2}} & = & y \\end{array}$" ], "text/plain": [ "Gam^1_12 = x \n", "Gam^1_21 = y \n", "Gam^2_11 = x \n", "Gam^2_22 = y " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "M = Manifold(2, 'M', start_index=1) # manifold M, y>0\n", "c_xy. =M.chart() # chart on M\n", " # affine connection on M \n", "nab = M.affine_connection('nabla', r'\\nabla') ; print(nab)\n", "nab[1,1,2], nab[1,2,1],nab[2,2,2],nab[2,1,1] = x,y,y,x\n", "%display latex\n", "nab.display(coordinate_labels=False) # show nonzero Christoffel symbols" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left( -x + y \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x - y \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x\\)" ], "text/latex": [ "$\\displaystyle \\left( -x + y \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} x\\otimes \\mathrm{d} y + \\left( x - y \\right) \\frac{\\partial}{\\partial x }\\otimes \\mathrm{d} y\\otimes \\mathrm{d} x$" ], "text/plain": [ "(-x + y) ∂/∂x⊗dx⊗dy + (x - y) ∂/∂x⊗dy⊗dx" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nab.torsion().disp() # show torsion tensor of type (1,2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Covariant derivative of covariant tensor fields\n", "\n", "
\n", "\n", "The covariant derivative of a tensor field $t\\in T^{(0,k)}M$ with respect to a vector field $X$, denoted by $∇_X t$, is defined by\n", "\n", "\\begin{equation}\n", "\\begin{matrix}\n", "(∇_X t)(Y_1 , . . . , Y_k )=X (t (Y_1 , . . . , Y_k ))\\\\\n", "-\\sum_{i=1}^k t (Y_1 , . . . , Y_{i−1} , ∇_X Y_i , Y_{i+1} , . . . , Y_k ),\n", "\\end{matrix}\n", "\\tag{21.14}\n", "\\end{equation}\n", "\n", "for $X,Y_1,\\ldots,Y_k\\in \\mathfrak{X}(M).$\n", "\n", "To check that $\\nabla_Xt\\in T^{(0,k)}M$ let us note that for \n", "$f ∈ C^∞ (M)$\n", "\n", "$$\n", "(∇_X t)(Y_1 ,\\ldots,fY_i,\\ldots , Y_k )\n", "=X (t (Y_1 , . . . , f Y_i , . . . , Y_k ))\\\\\n", "-\\sum_{j=1,\\,j\\not=i}^k t (Y_1 , . . . , fY_{i},\\ldots , ∇_X Y_j , . . . , Y_k )\n", "− t (Y_1 , . . . , ∇_X ( f Y_i ), . . . , Y_k)\\\\\n", "=X (ft (Y_1 , . . . , Y_i , . . . , Y_k ))\n", "-\\sum_{j=1,\\,j\\not=i}^k ft (Y_1 , . . . , Y_{i},\\ldots , ∇_X Y_j , . . . , Y_k )\\\\\n", "-t (Y_1 , . . . , f∇_X Y_i +(Xf)Y_i, . . . , Y_k)\\\\\n", "=X (ft (Y_1 , . . . , Y_i , . . . , Y_k ))\n", "-\\sum_{j=1}^k ft (Y_1 , . . . , Y_{i},\\ldots , ∇_X Y_j , . . . , Y_k )-(Xf)t(Y_1 ,\\ldots,Y_i,\\ldots , Y_k )\\\\\n", "=f\\cdot (∇_X t)(Y_1 ,\\ldots,Y_i,\\ldots , Y_k ),\n", "$$\n", "\n", "(we have used the equality $X(fg)-(Xf)g=f(Xg),\\ $ for $\\ g=t(X_1,\\ldots,X_k) )$.\n", "\n", "
\n", "\n", "### Covariant derivative of functions\n", "\n", "
\n", "\n", "The definition of covariant derivative can be extended to functions $t\\in C^\\infty(M)$ by the formula \n", "\n", "\\begin{equation}\n", "\\nabla_Xt=Xt.\n", "\\tag{21.15}\n", "\\end{equation}\n", "\n", "
\n", "\n", "### Properties of covariant derivatives for covariant tensor fields\n", "\n", "
\n", "\n", "Let us check that a version of (21.2) holds for covariant tensor fields $t$: \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "(∇_X(f t))(Y_1 ,\\ldots, Y_k )\n", "=X ((ft) (Y_1 , . . . , Y_k ))\\\\\n", "-\\sum_{i=1}^k (ft) (Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )\\\\\n", "=X (ft (Y_1 , . . . , Y_k ))\n", "-\\sum_{i=1}^k ft (Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )\\\\\n", "=fX (t (Y_1 , . . . , Y_k ))+ (X f ) t (Y_1 , . . . , Y_k )\\\\\n", "-f\\sum_{i=1}^k t (Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )\\\\\n", "=f(∇_X t)(Y_1 ,\\ldots,Y_i,\\ldots , Y_k )+(X f ) t (Y_1 , . . . , Y_k ),\n", "$$\n", "i.e.,\n", "$$\n", "∇_X ( f t) = f ∇_X t + (X f ) t.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let us check a counterpart of (21.1)\n", "\n", "$$\n", "∇_X (a t + b s) (Y_1 , . . . , Y_k ) = X (a t + b s)(Y_1 , . . . , Y_k )\\\\\n", "-\\sum_{i=1}^k (a t + b s)(Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )\\\\\n", "= X (a t (Y_1 , . . . , Y_k ) + b s(Y_1 , . . . , Y_k ))\\\\\n", "-\\sum_{i=1}^k [a t(Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )\n", "+b s(Y_1 , . . . , Y_{i-1},∇_X Y_i,Y_{i+1} , . . . , Y_k )]\\\\\n", "= (a∇_X t + b∇_X s )(Y_1 , . . . , Y_k ),\n", "$$\n", "i.e.,\n", "$$∇_X (a t + b s) = a∇_X t + b∇_X s.$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Covariant derivative of tensor product\n", "\n", "
\n", "\n", "If $t\\in T^{(0,k)}M$ and $s\\in T^{(0,m)}M$, then\n", "\n", "$$(∇_X (t ⊗ s))\n", "(Y_1 , . . . , Y_{k+m} )\n", "=X (t ⊗ s)(Y_1 , . . . , Y_{k+m} )\\\\\n", "-\\sum_{i=1}^{k+m}(t ⊗ s)\n", "(Y_1 , . . . , Y_{i−1} , ∇_X Y_i , Y_{i+1} , . . . , Y_{k+m})\\\\\n", "= X (t (Y_1 , . . . , Y_k ) s(Y{k+1} , . . . , Y_{k+m} ))\\\\\n", "-\\sum_{i=1}^{k}\n", "t (Y_1 , . . . , Y_{i−1} , ∇_X Y_i , Y_{i+1} , . . . , Y_k ) \n", "\\,s(Y_{k+1} , . . . , Y_{k+m} )\\\\\n", "−t (Y_1 , . . . , Y_k )\n", "\\sum_{i=k+1}^{k+m}\n", "s (Y_{k+1} , . . . , Y_{i−1} , ∇_X Y_i , Y_{i+1} , . . . , Y_{k+m} )\\\\ \n", "= (t ⊗ (∇_X s) + (∇_X t) ⊗ s )(Y_1 , . . . , Y_{k+m} ),\n", "$$\n", "i.e.,\n", "\\begin{equation}\n", "∇_X (t ⊗ s) = t ⊗ (∇_X s) + (∇_X t) ⊗ s.\n", "\\tag{21.16}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Components of tensor field $ ∇_X t$ in local coordinates\n", "\n", "
\n", "\n", "We have \n", "\n", "$$(∇_X t)_{ i... j}=\n", "(∇_X t)\\big(\\frac{\\partial}{\\partial x^i},\\ldots,\\frac{\\partial}{\\partial x^j}\\big)\\\\\n", "=X\\big(t\\big(\\frac{\\partial}{\\partial x^i},\\ldots,\\frac{\\partial}{\\partial x^j}\\big)\\big)\n", "-t\\big(\\nabla_X\\frac{\\partial}{\\partial x^i},\\ldots,\\frac{\\partial}{\\partial x^j}\\big)-\\ldots\n", "-t\\big(\\frac{\\partial}{\\partial x^i},\\ldots,\\nabla_X\\frac{\\partial}{\\partial x^j}\\big)\\\\\n", "=Xt_{i... j}\n", "-t\\big(X^m\\Gamma^k_{im}\\frac{\\partial}{\\partial x^k},\\ldots,\\frac{\\partial}{\\partial x^j}\\big)-\\ldots\n", "-t\\big(\\frac{\\partial}{\\partial x^i},\\ldots,X^m\\Gamma^k_{jm}\\frac{\\partial}{\\partial x^k}\\big)\\\\\n", "=X^m\\frac{\\partial}{\\partial x^m}t_{i... j}\n", "-X^m\\Gamma^k_{im}t_{k... j}-\\ldots -X^m\\Gamma^k_{jm}t_{i... k}\\\\\n", "=X^m\\big(\\frac{\\partial t_{i... j}}{\\partial x^m}\n", "-\\Gamma^k_{im}t_{k... j}-\\ldots -\\Gamma^k_{jm}t_{i... k}\\big).\n", "$$\n", "Consequently\n", "\\begin{equation}\n", "\\nabla_Xt=X^m\\big(\\frac{\\partial t_{i... j}}{\\partial x^m}\n", "-\\Gamma^k_{im}t_{k... j}-\\ldots -\\Gamma^k_{jm}t_{i... k}\\big)\n", "dx^i\\otimes\\ldots\\otimes dx^j.\n", "\\tag{21.17}\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Example 21.18**\n", "\n", "Use (21.17) to explicitly express $\\ \\nabla_Xt\\ $ in a general two-dimensional manifold\n", "with connection $\\ \\nabla,\\ $ vector field $X$ and tensor field \n", "$\\ \\ 𝑡=𝑡_{00}d𝑥^0\\otimes d𝑥^0+𝑡_{01}d𝑥^0\\otimes d𝑥^1+𝑡_{10}d𝑥^1\\otimes d𝑥^0+𝑡_{11}d𝑥^1\\otimes d𝑥^1$.\n", "\n", "
\n", "\n", "First define the tensor field:\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle t = t_{00}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)" ], "text/latex": [ "$\\displaystyle t = t_{00}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + t_{01}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + t_{10}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + t_{11}\\left({x^{0}}, {x^{1}}\\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$" ], "text/plain": [ "t = t00(x0, x1) dx0⊗dx0 + t01(x0, x1) dx0⊗dx1 + t10(x0, x1) dx1⊗dx0 + t11(x0, x1) dx1⊗dx1" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%display latex\n", "N = 2 # dimension of manifold M\n", "M = Manifold(N, 'M') # manifold M\n", "c_x = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M\n", "t = M.tensor_field(0,2, name='t') # tensor field of type (0,2)\n", "def fn(i,j): return 't'+str(i)+str(j) # names of components\n", "def fl(i,j): return 't'+'_'+'{'+str(i)+str(j)+'}' # latex names\n", "ff = [[M.scalar_field(function(fn(i,j), latex_name=fl(i,j))(*c_x)) \n", " for j in range(N)] for i in range(N)] # list of components\n", "t[:] = ff # define all components\n", "t.disp() # show t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and next the vector field:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle X = X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}} } + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}} }\\)" ], "text/latex": [ "$\\displaystyle X = X^0\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{0}} } + X^1\\left({x^{0}}, {x^{1}}\\right) \\frac{\\partial}{\\partial {x^{1}} }$" ], "text/plain": [ "X = X0(x0, x1) ∂/∂x0 + X1(x0, x1) ∂/∂x1" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = M.vector_field('X') # vector field X and its components\n", "X0 = M.scalar_field(function('X0', latex_name=r'X^0')(*c_x), name='X0')\n", "X1 = M.scalar_field(function('X1', latex_name=r'X^1')(*c_x), name='X1')\n", "X[:] = X0, X1 # define both components\n", "X.disp() # show X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to use symbolic Christoffel symbols," ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def var_con(n): # symbolic Christoffel symbols\n", " return [[[var('Gamma'+str(i0)+str(i1)+str(i2),\n", " latex_name=r'\\Gamma'+'^'+str(i0)+'_'+'{'+str(i1)+str(i2)+'}') \n", " for i2 in range(n)] for i1 in range(n)] for i0 in range(n)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and connection with these symbols." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 0}\\,0\\,0}^{\\,0\\phantom{\\, 0}\\phantom{\\, 0}} & = & {\\Gamma^0_{00}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,0\\,1}^{\\,0\\phantom{\\, 0}\\phantom{\\, 1}} & = & {\\Gamma^0_{01}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,1\\,0}^{\\,0\\phantom{\\, 1}\\phantom{\\, 0}} & = & {\\Gamma^0_{10}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,1\\,1}^{\\,0\\phantom{\\, 1}\\phantom{\\, 1}} & = & {\\Gamma^0_{11}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,0\\,0}^{\\,1\\phantom{\\, 0}\\phantom{\\, 0}} & = & {\\Gamma^1_{00}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,0\\,1}^{\\,1\\phantom{\\, 0}\\phantom{\\, 1}} & = & {\\Gamma^1_{01}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,0}^{\\,1\\phantom{\\, 1}\\phantom{\\, 0}} & = & {\\Gamma^1_{10}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & {\\Gamma^1_{11}} \\end{array}\\)" ], "text/latex": [ "$\\displaystyle \\begin{array}{lcl} \\Gamma_{\\phantom{\\, 0}\\,0\\,0}^{\\,0\\phantom{\\, 0}\\phantom{\\, 0}} & = & {\\Gamma^0_{00}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,0\\,1}^{\\,0\\phantom{\\, 0}\\phantom{\\, 1}} & = & {\\Gamma^0_{01}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,1\\,0}^{\\,0\\phantom{\\, 1}\\phantom{\\, 0}} & = & {\\Gamma^0_{10}} \\\\ \\Gamma_{\\phantom{\\, 0}\\,1\\,1}^{\\,0\\phantom{\\, 1}\\phantom{\\, 1}} & = & {\\Gamma^0_{11}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,0\\,0}^{\\,1\\phantom{\\, 0}\\phantom{\\, 0}} & = & {\\Gamma^1_{00}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,0\\,1}^{\\,1\\phantom{\\, 0}\\phantom{\\, 1}} & = & {\\Gamma^1_{01}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,0}^{\\,1\\phantom{\\, 1}\\phantom{\\, 0}} & = & {\\Gamma^1_{10}} \\\\ \\Gamma_{\\phantom{\\, 1}\\,1\\,1}^{\\,1\\phantom{\\, 1}\\phantom{\\, 1}} & = & {\\Gamma^1_{11}} \\end{array}$" ], "text/plain": [ "Gam^0_00 = Gamma000 \n", "Gam^0_01 = Gamma001 \n", "Gam^0_10 = Gamma010 \n", "Gam^0_11 = Gamma011 \n", "Gam^1_00 = Gamma100 \n", "Gam^1_01 = Gamma101 \n", "Gam^1_10 = Gamma110 \n", "Gam^1_11 = Gamma111 " ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nab = M.affine_connection('nabla', r'\\nabla') # connection on M with\n", "nab[:] = var_con(2) # symbolic coefficients\n", "nab.display(coordinate_labels=False) # show Christoffel symb." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\nabla_X t\\ $ can be computed as `nab(t).contract(X)` (contraction was defined in [notebook 19](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/19Manifold_Lie_Derivative.ipynb)):" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left( -2 \\, {\\Gamma^0_{00}} X^0 t_{00} - 2 \\, {\\Gamma^0_{01}} X^1 t_{00} - {\\Gamma^1_{00}} X^0 t_{01} - {\\Gamma^1_{01}} X^1 t_{01} - {\\Gamma^1_{00}} X^0 t_{10} - {\\Gamma^1_{01}} X^1 t_{10} + X^0 \\frac{\\partial\\,t_{00}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{00}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + \\left( -{\\Gamma^0_{10}} X^0 t_{00} - {\\Gamma^0_{11}} X^1 t_{00} - {\\Gamma^0_{00}} X^0 t_{01} - {\\Gamma^1_{10}} X^0 t_{01} - {\\Gamma^0_{01}} X^1 t_{01} - {\\Gamma^1_{11}} X^1 t_{01} - {\\Gamma^1_{00}} X^0 t_{11} - {\\Gamma^1_{01}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{01}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{01}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + \\left( -{\\Gamma^0_{10}} X^0 t_{00} - {\\Gamma^0_{11}} X^1 t_{00} - {\\Gamma^0_{00}} X^0 t_{10} - {\\Gamma^1_{10}} X^0 t_{10} - {\\Gamma^0_{01}} X^1 t_{10} - {\\Gamma^1_{11}} X^1 t_{10} - {\\Gamma^1_{00}} X^0 t_{11} - {\\Gamma^1_{01}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{10}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{10}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + \\left( -{\\Gamma^0_{10}} X^0 t_{01} - {\\Gamma^0_{11}} X^1 t_{01} - {\\Gamma^0_{10}} X^0 t_{10} - {\\Gamma^0_{11}} X^1 t_{10} - 2 \\, {\\Gamma^1_{10}} X^0 t_{11} - 2 \\, {\\Gamma^1_{11}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{11}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{11}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}\\)" ], "text/latex": [ "$\\displaystyle \\left( -2 \\, {\\Gamma^0_{00}} X^0 t_{00} - 2 \\, {\\Gamma^0_{01}} X^1 t_{00} - {\\Gamma^1_{00}} X^0 t_{01} - {\\Gamma^1_{01}} X^1 t_{01} - {\\Gamma^1_{00}} X^0 t_{10} - {\\Gamma^1_{01}} X^1 t_{10} + X^0 \\frac{\\partial\\,t_{00}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{00}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{0}} + \\left( -{\\Gamma^0_{10}} X^0 t_{00} - {\\Gamma^0_{11}} X^1 t_{00} - {\\Gamma^0_{00}} X^0 t_{01} - {\\Gamma^1_{10}} X^0 t_{01} - {\\Gamma^0_{01}} X^1 t_{01} - {\\Gamma^1_{11}} X^1 t_{01} - {\\Gamma^1_{00}} X^0 t_{11} - {\\Gamma^1_{01}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{01}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{01}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{0}}\\otimes \\mathrm{d} {x^{1}} + \\left( -{\\Gamma^0_{10}} X^0 t_{00} - {\\Gamma^0_{11}} X^1 t_{00} - {\\Gamma^0_{00}} X^0 t_{10} - {\\Gamma^1_{10}} X^0 t_{10} - {\\Gamma^0_{01}} X^1 t_{10} - {\\Gamma^1_{11}} X^1 t_{10} - {\\Gamma^1_{00}} X^0 t_{11} - {\\Gamma^1_{01}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{10}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{10}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{0}} + \\left( -{\\Gamma^0_{10}} X^0 t_{01} - {\\Gamma^0_{11}} X^1 t_{01} - {\\Gamma^0_{10}} X^0 t_{10} - {\\Gamma^0_{11}} X^1 t_{10} - 2 \\, {\\Gamma^1_{10}} X^0 t_{11} - 2 \\, {\\Gamma^1_{11}} X^1 t_{11} + X^0 \\frac{\\partial\\,t_{11}}{\\partial {x^{0}}} + X^1 \\frac{\\partial\\,t_{11}}{\\partial {x^{1}}} \\right) \\mathrm{d} {x^{1}}\\otimes \\mathrm{d} {x^{1}}$" ], "text/plain": [ "(-2*Gamma000*X0*t00 - 2*Gamma001*X1*t00 - Gamma100*X0*t01 - Gamma101*X1*t01 - Gamma100*X0*t10 - Gamma101*X1*t10 + X0*d(t00)/dx0 + X1*d(t00)/dx1) dx0⊗dx0 + (-Gamma010*X0*t00 - Gamma011*X1*t00 - Gamma000*X0*t01 - Gamma110*X0*t01 - Gamma001*X1*t01 - Gamma111*X1*t01 - Gamma100*X0*t11 - Gamma101*X1*t11 + X0*d(t01)/dx0 + X1*d(t01)/dx1) dx0⊗dx1 + (-Gamma010*X0*t00 - Gamma011*X1*t00 - Gamma000*X0*t10 - Gamma110*X0*t10 - Gamma001*X1*t10 - Gamma111*X1*t10 - Gamma100*X0*t11 - Gamma101*X1*t11 + X0*d(t10)/dx0 + X1*d(t10)/dx1) dx1⊗dx0 + (-Gamma010*X0*t01 - Gamma011*X1*t01 - Gamma010*X0*t10 - Gamma011*X1*t10 - 2*Gamma110*X0*t11 - 2*Gamma111*X1*t11 + X0*d(t11)/dx0 + X1*d(t11)/dx1) dx1⊗dx1" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Manifold.options.omit_function_arguments=True\n", "nt = nab(t).contract(X) # covariant derivative nabla_X t\n", "nt.apply_map(expand) # simplify components\n", "nt.disp() # show covariant derivative" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "$\\text{Note, that if}\\ n=2\\ $ then in the formula (2.17) takes the form\n", "\n", "$$\n", "\\nabla_Xt=X^m\\big(\\frac{\\partial t_{i j}}{\\partial x^m}\n", "-\\Gamma^k_{im}t_{k j} -\\Gamma^k_{jm}t_{i k}\\big)\n", "dx^i\\otimes dx^j,\n", "$$\n", "\n", "and for example if $\\ (i,j)=(0,0)\\ $ we have\n", "\n", "\n", "$$X^m\\Gamma^k_{0m}t_{k0}=X^0\\Gamma^0_{00}t_{00}+X^0\\Gamma^1_{00}t_{10}+X^1\\Gamma^0_{01}t_{00}+X^1\\Gamma^1_{01}t_{10},\n", "$$\n", "$$X^m\\Gamma^k_{0m}t_{0k}=X^0\\Gamma^0_{00}t_{00}+X^0\\Gamma^1_{00}t_{01}+X^1\\Gamma^0_{01}t_{00}+X^1\\Gamma^1_{01}t_{01},\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "so the repeated terms on the right give coefficients 2 in the final result." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What's next?\n", "\n", "Take a look at the notebook [Riemannian and pseudo-Riemannian manifolds](https://nbviewer.org/github/sagemanifolds/IntroToManifolds/blob/main/22Manifold_Riemann.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 }