# Poisson tensors#

AUTHORS:

• Tobias Diez (2021): initial version

class sage.manifolds.differentiable.poisson_tensor.PoissonTensorField(manifold: , name: str | None = 'varpi', latex_name: str | None = '\\varpi')[source]#

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: 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

>>> 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: varpi[1, 2] = 1

>>> 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: 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

>>> from sage.all import *
...                  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: varpi.bracket(varpi).display()
[varpi,varpi] = 0

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

hamiltonian_vector_field(function)[source]#

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: 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

>>> 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)[source]#

Return the Poisson bracket

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

of the given functions.

INPUT:

• f – first function

• g – second function

EXAMPLES:

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

>>> 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)[source]#

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: 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

>>> 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: , name: str | None = None, latex_name: str | None = None)[source]#

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: 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

>>> 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