Tangent Spaces#

The class TangentSpace implements tangent vector spaces to a differentiable manifold.

AUTHORS:

  • Eric Gourgoulhon, Michal Bejger (2014-2015): initial version

  • Travis Scrimshaw (2016): review tweaks

REFERENCES:

class sage.manifolds.differentiable.tangent_space.TangentSpace(point: ManifoldPoint, base_ring=None)#

Bases: FiniteRankFreeModule

Tangent space to a differentiable manifold at a given point.

Let \(M\) be a differentiable manifold of dimension \(n\) over a topological field \(K\) and \(p \in M\). The tangent space \(T_p M\) is an \(n\)-dimensional vector space over \(K\) (without a distinguished basis).

INPUT:

  • pointManifoldPoint; point \(p\) at which the tangent space is defined

EXAMPLES:

Tangent space on a 2-dimensional manifold:

sage: M = Manifold(2, 'M')
sage: c_xy.<x,y> = M.chart()
sage: p = M.point((-1,2), name='p')
sage: Tp = M.tangent_space(p) ; Tp
Tangent space at Point p on the 2-dimensional differentiable manifold M

Tangent spaces are free modules of finite rank over SymbolicRing (actually vector spaces of finite dimension over the manifold base field \(K\), with \(K=\RR\) here):

sage: Tp.base_ring()
Symbolic Ring
sage: Tp.category()
Category of finite dimensional vector spaces over Symbolic Ring
sage: Tp.rank()
2
sage: dim(Tp)
2

The tangent space is automatically endowed with bases deduced from the vector frames around the point:

sage: Tp.bases()
[Basis (∂/∂x,∂/∂y) on the Tangent space at Point p on the 2-dimensional
 differentiable manifold M]
sage: M.frames()
[Coordinate frame (M, (∂/∂x,∂/∂y))]

At this stage, only one basis has been defined in the tangent space, but new bases can be added from vector frames on the manifold by means of the method at(), for instance, from the frame associated with some new coordinates:

sage: c_uv.<u,v> = M.chart()
sage: c_uv.frame().at(p)
Basis (∂/∂u,∂/∂v) on the Tangent space at Point p on the 2-dimensional
 differentiable manifold M
sage: Tp.bases()
[Basis (∂/∂x,∂/∂y) on the Tangent space at Point p on the 2-dimensional
 differentiable manifold M,
 Basis (∂/∂u,∂/∂v) on the Tangent space at Point p on the 2-dimensional
 differentiable manifold M]

All the bases defined on Tp are on the same footing. Accordingly the tangent space is not in the category of modules with a distinguished basis:

sage: Tp in ModulesWithBasis(SR)
False

It is simply in the category of modules:

sage: Tp in Modules(SR)
True

Since the base ring is a field, it is actually in the category of vector spaces:

sage: Tp in VectorSpaces(SR)
True

A typical element:

sage: v = Tp.an_element() ; v
Tangent vector at Point p on the
 2-dimensional differentiable manifold M
sage: v.display()
∂/∂x + 2 ∂/∂y
sage: v.parent()
Tangent space at Point p on the
 2-dimensional differentiable manifold M

The zero vector:

sage: Tp.zero()
Tangent vector zero at Point p on the
 2-dimensional differentiable manifold M
sage: Tp.zero().display()
zero = 0
sage: Tp.zero().parent()
Tangent space at Point p on the
 2-dimensional differentiable manifold M

Tangent spaces are unique:

sage: M.tangent_space(p) is Tp
True
sage: p1 = M.point((-1,2))
sage: M.tangent_space(p1) is Tp
True

even if points are not:

sage: p1 is p
False

Actually p1 and p share the same tangent space because they compare equal:

sage: p1 == p
True

The tangent-space uniqueness holds even if the points are created in different coordinate systems:

sage: xy_to_uv = c_xy.transition_map(c_uv, (x+y, x-y))
sage: uv_to_xv = xy_to_uv.inverse()
sage: p2 = M.point((1, -3), chart=c_uv, name='p_2')
sage: p2 is p
False
sage: M.tangent_space(p2) is Tp
True
sage: p2 == p
True

An isomorphism of the tangent space with an inner product space with distinguished basis:

sage: g = M.metric('g')
sage: g[:] = ((1, 0), (0, 1))
sage: Q_Tp_xy = g[c_xy.frame(),:](*p.coordinates(c_xy)); Q_Tp_xy
[1 0]
[0 1]
sage: W_Tp_xy = VectorSpace(SR, 2, inner_product_matrix=Q_Tp_xy)
sage: Tp.bases()[0]
Basis (∂/∂x,∂/∂y) on the Tangent space at Point p on the 2-dimensional differentiable manifold M
sage: phi_Tp_xy = Tp.isomorphism_with_fixed_basis(Tp.bases()[0], codomain=W_Tp_xy); phi_Tp_xy
Generic morphism:
From: Tangent space at Point p on the 2-dimensional differentiable manifold M
To:   Ambient quadratic space of dimension 2 over Symbolic Ring
Inner product matrix:
[1 0]
[0 1]

sage: Q_Tp_uv = g[c_uv.frame(),:](*p.coordinates(c_uv)); Q_Tp_uv
[1/2   0]
[  0 1/2]
sage: W_Tp_uv = VectorSpace(SR, 2, inner_product_matrix=Q_Tp_uv)
sage: Tp.bases()[1]
Basis (∂/∂u,∂/∂v) on the Tangent space at Point p on the 2-dimensional differentiable manifold M
sage: phi_Tp_uv = Tp.isomorphism_with_fixed_basis(Tp.bases()[1], codomain=W_Tp_uv); phi_Tp_uv
Generic morphism:
From: Tangent space at Point p on the 2-dimensional differentiable manifold M
To:   Ambient quadratic space of dimension 2 over Symbolic Ring
Inner product matrix:
[1/2   0]
[  0 1/2]

sage: t1, t2 = Tp.tensor((1,0)), Tp.tensor((1,0))
sage: t1[:] = (8, 15)
sage: t2[:] = (47, 11)
sage: t1[Tp.bases()[0],:]
[8, 15]
sage: phi_Tp_xy(t1), phi_Tp_xy(t2)
((8, 15), (47, 11))
sage: phi_Tp_xy(t1).inner_product(phi_Tp_xy(t2))
541

sage: Tp_xy_to_uv = M.change_of_frame(c_xy.frame(), c_uv.frame()).at(p); Tp_xy_to_uv
Automorphism of the Tangent space at Point p on the 2-dimensional differentiable manifold M
sage: Tp.set_change_of_basis(Tp.bases()[0], Tp.bases()[1], Tp_xy_to_uv)
sage: t1[Tp.bases()[1],:]
[23, -7]
sage: phi_Tp_uv(t1), phi_Tp_uv(t2)
((23, -7), (58, 36))
sage: phi_Tp_uv(t1).inner_product(phi_Tp_uv(t2))
541

See also

FiniteRankFreeModule for more documentation.

Element#

alias of TangentVector

base_point()#

Return the manifold point at which self is defined.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.base_point()
Point p on the 2-dimensional differentiable manifold M
sage: Tp.base_point() is p
True
construction()#
dim()#

Return the vector space dimension of self.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.dimension()
2

A shortcut is dim():

sage: Tp.dim()
2

One can also use the global function dim:

sage: dim(Tp)
2
dimension()#

Return the vector space dimension of self.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.dimension()
2

A shortcut is dim():

sage: Tp.dim()
2

One can also use the global function dim:

sage: dim(Tp)
2