Poisson tensors - Manifolds

Skip to content
Back to top
View this page
Edit this page

# Poisson tensors

AUTHORS:

- Tobias Diez (2021): initial version

class sage.manifolds.differentiable.poisson_tensor.PoissonTensorField(manifold: DifferentiableManifold | VectorFieldModule, name: str | None = 'varpi', latex_name: str | None = '\\varpi')

  Bases: `MultivectorField`

  A Poisson bivector field \(\varpi\) on a differentiable manifold.

  That is, at each point \(m \in M\), \(\varpi_m\) is a bilinear map of the type:

  \[\varpi_m:\ T^*_m M \times T^*_m M \to \RR\]

  where \(T^*_m M\) stands for the cotangent space to the manifold \(M\) at the point \(m\), such that \(\varpi_m\) is skew-symmetric and the Schouten-Nijenhuis bracket (cf. `bracket()`) of \(\varpi\) with itself vanishes.

  INPUT:

  - `manifold` – module \(\mathfrak{X}(M)\) of vector fields on the manifold \(M\), or the manifold \(M\) itself

  - `name` – (default: `varpi`) name given to the Poisson tensor

  - `latex_name` – (default: `\\varpi`) LaTeX symbol to denote the Poisson tensor; if `None`, it is formed from `name`

  EXAMPLES:

  A Poisson tensor on the 2-sphere:

  Sage

      sage: M.<x,y> = manifolds.Sphere(2, coordinates='stereographic')
      sage: stereoN = M.stereographic_coordinates(pole='north')
      sage: stereoS = M.stereographic_coordinates(pole='south')
      sage: varpi = M.poisson_tensor(name='varpi', latex_name=r'\varpi')
      sage: varpi
      2-vector field varpi on the 2-sphere S^2 of radius 1 smoothly embedded
       in the Euclidean space E^3

  Python

      >>> from sage.all import *
      >>> M = manifolds.Sphere(Integer(2), coordinates='stereographic', names=('x', 'y',)); (x, y,) = M._first_ngens(2)
      >>> stereoN = M.stereographic_coordinates(pole='north')
      >>> stereoS = M.stereographic_coordinates(pole='south')
      >>> varpi = M.poisson_tensor(name='varpi', latex_name=r'\varpi')
      >>> varpi
      2-vector field varpi on the 2-sphere S^2 of radius 1 smoothly embedded
       in the Euclidean space E^3

  `varpi` is initialized by providing its single nonvanishing component w.r.t. the vector frame associated to `stereoN`, which is the default frame on `M`:

  Sage

      sage: varpi[1, 2] = 1

  [Python]

      >>> from sage.all import *
      >>> varpi[Integer(1), Integer(2)] = Integer(1)

  The components w.r.t. the vector frame associated to `stereoS` are obtained thanks to the method `add_comp_by_continuation()`:

  Sage

      sage: varpi.add_comp_by_continuation(stereoS.frame(),
      ....:                  stereoS.domain().intersection(stereoN.domain()))
      sage: varpi.display()
      varpi = ∂/∂x∧∂/∂y
      sage: varpi.display(stereoS)
      varpi = (-xp^4 - 2*xp^2*yp^2 - yp^4) ∂/∂xp∧∂/∂yp

  Python

      >>> from sage.all import *
      >>> varpi.add_comp_by_continuation(stereoS.frame(),
      ...                  stereoS.domain().intersection(stereoN.domain()))
      >>> varpi.display()
      varpi = ∂/∂x∧∂/∂y
      >>> varpi.display(stereoS)
      varpi = (-xp^4 - 2*xp^2*yp^2 - yp^4) ∂/∂xp∧∂/∂yp

  The Schouten-Nijenhuis bracket of a Poisson tensor with itself vanishes (this is trivial here, since `M` is 2-dimensional):

  Sage

      sage: varpi.bracket(varpi).display()
      [varpi,varpi] = 0

  [Python]

      >>> from sage.all import *
      >>> varpi.bracket(varpi).display()
      [varpi,varpi] = 0

  hamiltonian_vector_field(function)

    Return the Hamiltonian vector field \(X_f\) generated by the given function \(f: M \to \RR\).

    The Hamiltonian vector field is defined by

    \[X_f = - \varpi^\sharp (d f),\]

    where \(\varpi^\sharp: T^* M \to TM\) is given by \(\beta(\varpi^\sharp(\alpha)) = \varpi(\alpha, \beta)\).

    INPUT:

    - `function` – the function generating the Hamiltonian vector field

    EXAMPLES:

    Sage

        sage: M.<q, p> = EuclideanSpace(2)
        sage: poisson = M.poisson_tensor('varpi')
        sage: poisson.set_comp()[1,2] = -1
        sage: f = M.scalar_field(function('f')(q, p), name='f')
        sage: Xf = poisson.hamiltonian_vector_field(f)
        sage: Xf.display()
        Xf = d(f)/dp e_q - d(f)/dq e_p

    Python

        >>> from sage.all import *
        >>> M = EuclideanSpace(Integer(2), names=('q', 'p',)); (q, p,) = M._first_ngens(2)
        >>> poisson = M.poisson_tensor('varpi')
        >>> poisson.set_comp()[Integer(1),Integer(2)] = -Integer(1)
        >>> f = M.scalar_field(function('f')(q, p), name='f')
        >>> Xf = poisson.hamiltonian_vector_field(f)
        >>> Xf.display()
        Xf = d(f)/dp e_q - d(f)/dq e_p

  poisson_bracket(f, g)

    Return the Poisson bracket

    \[\{f, g\} = \varpi(df, dg)\]

    of the given functions.

    INPUT:

    - `f` – first function

    - `g` – second function

    EXAMPLES:

    Sage

        sage: M.<q, p> = EuclideanSpace(2)
        sage: poisson = M.poisson_tensor('varpi')
        sage: poisson.set_comp()[1,2] = -1
        sage: f = M.scalar_field(function('f')(q, p), name='f')
        sage: g = M.scalar_field(function('g')(q, p), name='g')
        sage: poisson.poisson_bracket(f, g).display()
        poisson(f, g): E^2 → ℝ
           (q, p) ↦ d(f)/dp*d(g)/dq - d(f)/dq*d(g)/dp

    Python

        >>> from sage.all import *
        >>> M = EuclideanSpace(Integer(2), names=('q', 'p',)); (q, p,) = M._first_ngens(2)
        >>> poisson = M.poisson_tensor('varpi')
        >>> poisson.set_comp()[Integer(1),Integer(2)] = -Integer(1)
        >>> f = M.scalar_field(function('f')(q, p), name='f')
        >>> g = M.scalar_field(function('g')(q, p), name='g')
        >>> poisson.poisson_bracket(f, g).display()
        poisson(f, g): E^2 → ℝ
           (q, p) ↦ d(f)/dp*d(g)/dq - d(f)/dq*d(g)/dp

  sharp(form)

    Return the image of the given differential form under the map \(\varpi^\sharp: T^* M \to TM\) defined by

    \[\beta(\varpi^\sharp(\alpha)) = \varpi(\alpha, \beta).\]

    for all \(\alpha, \beta \in T^*_m M\).

    In indices, \(\alpha^i = \varpi^{ij} \alpha_j\).

    INPUT:

    - `form` – the differential form to calculate its sharp of

    EXAMPLES:

    Sage

        sage: M.<q, p> = EuclideanSpace(2)
        sage: poisson = M.poisson_tensor('varpi')
        sage: poisson.set_comp()[1,2] = -1
        sage: a = M.one_form(1, 0, name='a')
        sage: poisson.sharp(a).display()
        a_sharp = e_p

    Python

        >>> from sage.all import *
        >>> M = EuclideanSpace(Integer(2), names=('q', 'p',)); (q, p,) = M._first_ngens(2)
        >>> poisson = M.poisson_tensor('varpi')
        >>> poisson.set_comp()[Integer(1),Integer(2)] = -Integer(1)
        >>> a = M.one_form(Integer(1), Integer(0), name='a')
        >>> poisson.sharp(a).display()
        a_sharp = e_p

class sage.manifolds.differentiable.poisson_tensor.PoissonTensorFieldParal(manifold: DifferentiableManifold | VectorFieldModule, name: str | None = None, latex_name: str | None = None)

  Bases: `PoissonTensorField`, `MultivectorFieldParal`

  A Poisson bivector field \(\varpi\) on a parallelizable manifold.

  INPUT:

  - `manifold` – module \(\mathfrak{X}(M)\) of vector fields on the manifold \(M\), or the manifold \(M\) itself

  - `name` – (default: `varpi`) name given to the Poisson tensor

  - `latex_name` – (default: `\\varpi`) LaTeX symbol to denote the Poisson tensor; if `None`, it is formed from `name`

  EXAMPLES:

  Standard Poisson tensor on \(\RR^2\):

  Sage

      sage: M.<q, p> = EuclideanSpace(2)
      sage: varpi = M.poisson_tensor(name='varpi', latex_name=r'\varpi')
      sage: varpi[1,2] = -1
      sage: varpi
      2-vector field varpi on the Euclidean plane E^2
      sage: varpi.display()
      varpi = -e_q∧e_p

  Python

      >>> from sage.all import *
      >>> M = EuclideanSpace(Integer(2), names=('q', 'p',)); (q, p,) = M._first_ngens(2)
      >>> varpi = M.poisson_tensor(name='varpi', latex_name=r'\varpi')
      >>> varpi[Integer(1),Integer(2)] = -Integer(1)
      >>> varpi
      2-vector field varpi on the Euclidean plane E^2
      >>> varpi.display()
      varpi = -e_q∧e_p