Trivializations¶
The class Trivialization
implements trivializations on vector bundles.
The corresponding transition maps between two trivializations are represented by
TransitionMap
.
AUTHORS:
Michael Jung (2019) : initial version
- class sage.manifolds.trivialization.TransitionMap(triv1, triv2, transf, compute_inverse=True)[source]¶
Bases:
SageObject
Transition map between two trivializations.
Given a vector bundle \(\pi : E \to M\) of class \(C^k\) and rank \(n\) over the field \(K\), and two trivializations \(\varphi_U : \pi^{-1}(U) \to U \times K^n\) and \(\varphi_V : \pi^{-1}(V) \to V \times K^n\), the transition map from \(\varphi_U\) to \(\varphi_V\) is given by the composition
\[\varphi_V \circ \varphi_U^{-1} : U \cap V \times K^n \to U \cap V \times K^n .\]This composition is of the form
\[(p, v) \mapsto (p, g(p)v),\]where \(p \mapsto g(p)\) is a \(C^k\) family of invertible \(n\times n\) matrices.
INPUT:
triv1
– trivialization 1triv2
– trivialization 2transf
– the transformation between both trivializations in form of a matrix of scalar fields (ScalarField
) or coordinate functions (ChartFunction
), or a bundle automorphism (FreeModuleAutomorphism
)compute_inverse
– boolean (default:True
); determines whether the inverse shall be computed or not
EXAMPLES:
Transition map of two trivializations on a real rank 2 vector bundle of the 2-sphere:
sage: S2 = Manifold(2, 'S^2', structure='top') sage: U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively sage: S2.declare_union(U,V) sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: W = U.intersection(V) sage: uv_to_xy = xy_to_uv.inverse() sage: E = S2.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_V', domain=V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[0,1],[1,0]]) sage: phi_U_to_phi_V Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
>>> from sage.all import * >>> S2 = Manifold(Integer(2), 'S^2', structure='top') >>> U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively >>> S2.declare_union(U,V) >>> c_xy = U.chart(names=('x', 'y',)); (x, y,) = c_xy._first_ngens(2)# stereographic coordinates from the North pole >>> c_uv = V.chart(names=('u', 'v',)); (u, v,) = c_uv._first_ngens(2)# stereographic coordinates from the South pole >>> xy_to_uv = c_xy.transition_map(c_uv, (x/(x**Integer(2)+y**Integer(2)), y/(x**Integer(2)+y**Integer(2))), ... intersection_name='W', restrictions1= x**Integer(2)+y**Integer(2)!=Integer(0), ... restrictions2= u**Integer(2)+v**Integer(2)!=Integer(0)) >>> W = U.intersection(V) >>> uv_to_xy = xy_to_uv.inverse() >>> E = S2.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', domain=U) >>> phi_V = E.trivialization('phi_V', domain=V) >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(0),Integer(1)],[Integer(1),Integer(0)]]) >>> phi_U_to_phi_V Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
- automorphism()[source]¶
Return the automorphism connecting both trivializations.
The family of matrices \(p \mapsto g(p)\) given by the transition map induce a bundle automorphism
\[\varphi_U^{-1} \circ \varphi_V : \pi^{-1}(U \cap V) \to \pi^{-1}(U \cap V)\]correlating the local frames induced by the trivializations in the following way:
\[(\varphi_U^{-1} \circ \varphi_V) (\varphi_V^*e_i) = \varphi_U^*e_i .\]Then, for each point \(p \in M\), the matrix \(g(p)\) is the representation of the induced automorphism on the fiber \(E_p=\pi^{-1}(p)\) in the basis \(\left( (\varphi_V^*e_i)(p)\right)_{i=1,\dots,n}\).
EXAMPLES:
sage: S2 = Manifold(2, 'S^2', structure='top') sage: U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively sage: S2.declare_union(U,V) sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: W = U.intersection(V) sage: uv_to_xy = xy_to_uv.inverse() sage: E = S2.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V); phi_V Trivialization (phi_V, E|_V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[0,1],[1,0]]) sage: aut = phi_U_to_phi_V.automorphism(); aut Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2 sage: aut.display(phi_U.frame().restrict(W)) phi_U^(-1)*phi_V = (phi_U^*e_1)⊗(phi_U^*e^2) + (phi_U^*e_2)⊗(phi_U^*e^1)
>>> from sage.all import * >>> S2 = Manifold(Integer(2), 'S^2', structure='top') >>> U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively >>> S2.declare_union(U,V) >>> c_xy = U.chart(names=('x', 'y',)); (x, y,) = c_xy._first_ngens(2)# stereographic coordinates from the North pole >>> c_uv = V.chart(names=('u', 'v',)); (u, v,) = c_uv._first_ngens(2)# stereographic coordinates from the South pole >>> xy_to_uv = c_xy.transition_map(c_uv, (x/(x**Integer(2)+y**Integer(2)), y/(x**Integer(2)+y**Integer(2))), ... intersection_name='W', restrictions1= x**Integer(2)+y**Integer(2)!=Integer(0), ... restrictions2= u**Integer(2)+v**Integer(2)!=Integer(0)) >>> W = U.intersection(V) >>> uv_to_xy = xy_to_uv.inverse() >>> E = S2.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ... domain=U); phi_U Trivialization (phi_U, E|_U) >>> phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ... domain=V); phi_V Trivialization (phi_V, E|_V) >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(0),Integer(1)],[Integer(1),Integer(0)]]) >>> aut = phi_U_to_phi_V.automorphism(); aut Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2 >>> aut.display(phi_U.frame().restrict(W)) phi_U^(-1)*phi_V = (phi_U^*e_1)⊗(phi_U^*e^2) + (phi_U^*e_2)⊗(phi_U^*e^1)
- det()[source]¶
Return the determinant of
self
.OUTPUT: an instance of
ScalarField
EXAMPLES:
sage: S2 = Manifold(2, 'S^2', structure='top') sage: U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively sage: S2.declare_union(U,V) sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: W = U.intersection(V) sage: uv_to_xy = xy_to_uv.inverse() sage: E = S2.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V); phi_V Trivialization (phi_V, E|_V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[0,1],[1,0]]) sage: det = phi_U_to_phi_V.det(); det Scalar field det(phi_U^(-1)*phi_V) on the Open subset W of the 2-dimensional topological manifold S^2 sage: det.display() det(phi_U^(-1)*phi_V): W → ℝ (x, y) ↦ -1 (u, v) ↦ -1
>>> from sage.all import * >>> S2 = Manifold(Integer(2), 'S^2', structure='top') >>> U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively >>> S2.declare_union(U,V) >>> c_xy = U.chart(names=('x', 'y',)); (x, y,) = c_xy._first_ngens(2)# stereographic coordinates from the North pole >>> c_uv = V.chart(names=('u', 'v',)); (u, v,) = c_uv._first_ngens(2)# stereographic coordinates from the South pole >>> xy_to_uv = c_xy.transition_map(c_uv, (x/(x**Integer(2)+y**Integer(2)), y/(x**Integer(2)+y**Integer(2))), ... intersection_name='W', restrictions1= x**Integer(2)+y**Integer(2)!=Integer(0), ... restrictions2= u**Integer(2)+v**Integer(2)!=Integer(0)) >>> W = U.intersection(V) >>> uv_to_xy = xy_to_uv.inverse() >>> E = S2.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ... domain=U); phi_U Trivialization (phi_U, E|_U) >>> phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ... domain=V); phi_V Trivialization (phi_V, E|_V) >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(0),Integer(1)],[Integer(1),Integer(0)]]) >>> det = phi_U_to_phi_V.det(); det Scalar field det(phi_U^(-1)*phi_V) on the Open subset W of the 2-dimensional topological manifold S^2 >>> det.display() det(phi_U^(-1)*phi_V): W → ℝ (x, y) ↦ -1 (u, v) ↦ -1
- inverse()[source]¶
Return the inverse transition map.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: X.<x,y> = M.chart() sage: U = M.open_subset('U'); V = M.open_subset('V') sage: XU = X.restrict(U); XV = X.restrict(U) sage: W = U.intersection(V) sage: XW = X.restrict(W) sage: E = M.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_V', domain=V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[1,1],[-1,1]], ....: compute_inverse=False) sage: phi_V_to_phi_U = phi_U_to_phi_V.inverse(); phi_V_to_phi_U Transition map from Trivialization (phi_V, E|_V) to Trivialization (phi_U, E|_U) sage: phi_V_to_phi_U.automorphism() == phi_U_to_phi_V.automorphism().inverse() True
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> U = M.open_subset('U'); V = M.open_subset('V') >>> XU = X.restrict(U); XV = X.restrict(U) >>> W = U.intersection(V) >>> XW = X.restrict(W) >>> E = M.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', domain=U) >>> phi_V = E.trivialization('phi_V', domain=V) >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(1),Integer(1)],[-Integer(1),Integer(1)]], ... compute_inverse=False) >>> phi_V_to_phi_U = phi_U_to_phi_V.inverse(); phi_V_to_phi_U Transition map from Trivialization (phi_V, E|_V) to Trivialization (phi_U, E|_U) >>> phi_V_to_phi_U.automorphism() == phi_U_to_phi_V.automorphism().inverse() True
- matrix()[source]¶
Return the matrix representation the transition map.
EXAMPLES:
Local trivializations on a real rank 2 vector bundle over the 2-sphere:
sage: S2 = Manifold(2, 'S^2', structure='top') sage: U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively sage: S2.declare_union(U,V) sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: W = U.intersection(V) sage: uv_to_xy = xy_to_uv.inverse() sage: E = S2.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V); phi_V Trivialization (phi_V, E|_V)
>>> from sage.all import * >>> S2 = Manifold(Integer(2), 'S^2', structure='top') >>> U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively >>> S2.declare_union(U,V) >>> c_xy = U.chart(names=('x', 'y',)); (x, y,) = c_xy._first_ngens(2)# stereographic coordinates from the North pole >>> c_uv = V.chart(names=('u', 'v',)); (u, v,) = c_uv._first_ngens(2)# stereographic coordinates from the South pole >>> xy_to_uv = c_xy.transition_map(c_uv, (x/(x**Integer(2)+y**Integer(2)), y/(x**Integer(2)+y**Integer(2))), ... intersection_name='W', restrictions1= x**Integer(2)+y**Integer(2)!=Integer(0), ... restrictions2= u**Integer(2)+v**Integer(2)!=Integer(0)) >>> W = U.intersection(V) >>> uv_to_xy = xy_to_uv.inverse() >>> E = S2.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ... domain=U); phi_U Trivialization (phi_U, E|_U) >>> phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ... domain=V); phi_V Trivialization (phi_V, E|_V)
The input is coerced into a bundle automorphism. From there, the matrix can be recovered:
sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[0,1],[1,0]]) sage: matrix = phi_U_to_phi_V.matrix(); matrix [Scalar field zero on the Open subset W of the 2-dimensional topological manifold S^2 Scalar field 1 on the Open subset W of the 2-dimensional topological manifold S^2] [ Scalar field 1 on the Open subset W of the 2-dimensional topological manifold S^2 Scalar field zero on the Open subset W of the 2-dimensional topological manifold S^2]
>>> from sage.all import * >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(0),Integer(1)],[Integer(1),Integer(0)]]) >>> matrix = phi_U_to_phi_V.matrix(); matrix [Scalar field zero on the Open subset W of the 2-dimensional topological manifold S^2 Scalar field 1 on the Open subset W of the 2-dimensional topological manifold S^2] [ Scalar field 1 on the Open subset W of the 2-dimensional topological manifold S^2 Scalar field zero on the Open subset W of the 2-dimensional topological manifold S^2]
Let us check the matrix components:
sage: matrix[0,0].display() zero: W → ℝ (x, y) ↦ 0 (u, v) ↦ 0 sage: matrix[0,1].display() 1: W → ℝ (x, y) ↦ 1 (u, v) ↦ 1 sage: matrix[1,0].display() 1: W → ℝ (x, y) ↦ 1 (u, v) ↦ 1 sage: matrix[1,1].display() zero: W → ℝ (x, y) ↦ 0 (u, v) ↦ 0
>>> from sage.all import * >>> matrix[Integer(0),Integer(0)].display() zero: W → ℝ (x, y) ↦ 0 (u, v) ↦ 0 >>> matrix[Integer(0),Integer(1)].display() 1: W → ℝ (x, y) ↦ 1 (u, v) ↦ 1 >>> matrix[Integer(1),Integer(0)].display() 1: W → ℝ (x, y) ↦ 1 (u, v) ↦ 1 >>> matrix[Integer(1),Integer(1)].display() zero: W → ℝ (x, y) ↦ 0 (u, v) ↦ 0
- class sage.manifolds.trivialization.Trivialization(vector_bundle, name, domain, latex_name=None)[source]¶
Bases:
UniqueRepresentation
,SageObject
A local trivialization of a given vector bundle.
Let \(\pi:E \to M\) be a vector bundle of rank \(n\) and class \(C^k\) over the field \(K\) (see
TopologicalVectorBundle
orDifferentiableVectorBundle
). A local trivialization over an open subset \(U \subset M\) is a \(C^k\)-diffeomorphism \(\varphi: \pi^{-1}(U) \to U \times K^n\) such that \(\pi \circ \varphi^{-1}=\mathrm{pr}_1\) and \(v \mapsto \varphi^{-1}(q,v)\) is a linear isomorphism for any \(q \in U\).Note
Notice that frames and trivializations are equivalent concepts (for further details see
LocalFrame
). However, in order to facilitate applications and being consistent with the implementations of charts, trivializations are introduced separately.EXAMPLES:
Local trivializations on a real rank 2 vector bundle over the 2-sphere:
sage: S2 = Manifold(2, 'S^2', structure='top') sage: U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively sage: S2.declare_union(U,V) sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: W = U.intersection(V) sage: uv_to_xy = xy_to_uv.inverse() sage: E = S2.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V); phi_V Trivialization (phi_V, E|_V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, [[0,1],[1,0]]); phi_U_to_phi_V Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
>>> from sage.all import * >>> S2 = Manifold(Integer(2), 'S^2', structure='top') >>> U = S2.open_subset('U') ; V = S2.open_subset('V') # complement of the North and South pole, respectively >>> S2.declare_union(U,V) >>> c_xy = U.chart(names=('x', 'y',)); (x, y,) = c_xy._first_ngens(2)# stereographic coordinates from the North pole >>> c_uv = V.chart(names=('u', 'v',)); (u, v,) = c_uv._first_ngens(2)# stereographic coordinates from the South pole >>> xy_to_uv = c_xy.transition_map(c_uv, (x/(x**Integer(2)+y**Integer(2)), y/(x**Integer(2)+y**Integer(2))), ... intersection_name='W', restrictions1= x**Integer(2)+y**Integer(2)!=Integer(0), ... restrictions2= u**Integer(2)+v**Integer(2)!=Integer(0)) >>> W = U.intersection(V) >>> uv_to_xy = xy_to_uv.inverse() >>> E = S2.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ... domain=U); phi_U Trivialization (phi_U, E|_U) >>> phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ... domain=V); phi_V Trivialization (phi_V, E|_V) >>> phi_U_to_phi_V = phi_U.transition_map(phi_V, [[Integer(0),Integer(1)],[Integer(1),Integer(0)]]); phi_U_to_phi_V Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
The LaTeX output gives the following:
sage: latex(phi_U) \varphi_U : E |_{U} \to U \times \Bold{R}^2 sage: latex(phi_V) \varphi_V : E |_{V} \to V \times \Bold{R}^2
>>> from sage.all import * >>> latex(phi_U) \varphi_U : E |_{U} \to U \times \Bold{R}^2 >>> latex(phi_V) \varphi_V : E |_{V} \to V \times \Bold{R}^2
The trivializations are part of the vector bundle atlas:
sage: E.atlas() [Trivialization (phi_U, E|_U), Trivialization (phi_V, E|_V)]
>>> from sage.all import * >>> E.atlas() [Trivialization (phi_U, E|_U), Trivialization (phi_V, E|_V)]
Each trivialization induces a local trivialization frame:
sage: fU = phi_U.frame(); fU Trivialization frame (E|_U, ((phi_U^*e_1),(phi_U^*e_2))) sage: fV = phi_V.frame(); fV Trivialization frame (E|_V, ((phi_V^*e_1),(phi_V^*e_2)))
>>> from sage.all import * >>> fU = phi_U.frame(); fU Trivialization frame (E|_U, ((phi_U^*e_1),(phi_U^*e_2))) >>> fV = phi_V.frame(); fV Trivialization frame (E|_V, ((phi_V^*e_1),(phi_V^*e_2)))
and the transition map connects these two frames via a bundle automorphism:
sage: aut = phi_U_to_phi_V.automorphism(); aut Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2 sage: aut.display(fU.restrict(W)) phi_U^(-1)*phi_V = (phi_U^*e_1)⊗(phi_U^*e^2) + (phi_U^*e_2)⊗(phi_U^*e^1) sage: aut.display(fV.restrict(W)) phi_U^(-1)*phi_V = (phi_V^*e_1)⊗(phi_V^*e^2) + (phi_V^*e_2)⊗(phi_V^*e^1)
>>> from sage.all import * >>> aut = phi_U_to_phi_V.automorphism(); aut Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2 >>> aut.display(fU.restrict(W)) phi_U^(-1)*phi_V = (phi_U^*e_1)⊗(phi_U^*e^2) + (phi_U^*e_2)⊗(phi_U^*e^1) >>> aut.display(fV.restrict(W)) phi_U^(-1)*phi_V = (phi_V^*e_1)⊗(phi_V^*e^2) + (phi_V^*e_2)⊗(phi_V^*e^1)
The automorphisms are listed in the frame changes of the vector bundle:
sage: E.changes_of_frame() # random {(Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2))), Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2)))): Automorphism phi_U^(-1)*phi_V^(-1) of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2, (Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2))), Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2)))): Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2}
>>> from sage.all import * >>> E.changes_of_frame() # random {(Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2))), Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2)))): Automorphism phi_U^(-1)*phi_V^(-1) of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2, (Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2))), Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2)))): Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold S^2 with values in the real vector bundle E of rank 2}
Let us check the components of
fU
with respect to the framefV
:sage: fU[0].comp(fV.restrict(W))[:] [0, 1] sage: fU[1].comp(fV.restrict(W))[:] [1, 0]
>>> from sage.all import * >>> fU[Integer(0)].comp(fV.restrict(W))[:] [0, 1] >>> fU[Integer(1)].comp(fV.restrict(W))[:] [1, 0]
- base_space()[source]¶
Return the manifold on which the trivialization is defined.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi', domain=U) sage: phi.base_space() 2-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> U = M.open_subset('U') >>> E = M.vector_bundle(Integer(2), 'E') >>> phi = E.trivialization('phi', domain=U) >>> phi.base_space() 2-dimensional topological manifold M
- coframe()[source]¶
Return the standard coframe induced by
self
.See also
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi') sage: phi.coframe() Trivialization coframe (E|_M, ((phi^*e^1),(phi^*e^2)))
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> E = M.vector_bundle(Integer(2), 'E') >>> phi = E.trivialization('phi') >>> phi.coframe() Trivialization coframe (E|_M, ((phi^*e^1),(phi^*e^2)))
- domain()[source]¶
Return the domain on which the trivialization is defined.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi', domain=U) sage: phi.domain() Open subset U of the 2-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> U = M.open_subset('U') >>> E = M.vector_bundle(Integer(2), 'E') >>> phi = E.trivialization('phi', domain=U) >>> phi.domain() Open subset U of the 2-dimensional topological manifold M
- frame()[source]¶
Return the standard frame induced by
self
. If \(\psi\) is a trivialization then the corresponding frame can be obtained by the maps \(p \mapsto \psi^{-1}(p,e_i)\), where \((e_1, \ldots, e_n)\) is the standard basis of \(K^n\). We briefly denote \((\psi^*e_i)\) instead of \(\psi^{-1}(\cdot,e_i)\).See also
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi') sage: phi.frame() Trivialization frame (E|_M, ((phi^*e_1),(phi^*e_2)))
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> E = M.vector_bundle(Integer(2), 'E') >>> phi = E.trivialization('phi') >>> phi.frame() Trivialization frame (E|_M, ((phi^*e_1),(phi^*e_2)))
- transition_map(other, transf, compute_inverse=True)[source]¶
Return the transition map between
self
andother
.INPUT:
other
– the trivialization where the transition map fromself
goes totransf
– transformation of the transition mapintersection_name
– (default:None
) name to be given to the subset \(U \cap V\) if the latter differs from \(U\) or \(V\)
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: X.<x,y> = M.chart() sage: U = M.open_subset('U'); V = M.open_subset('V') sage: XU = X.restrict(U); XV = X.restrict(U) sage: W = U.intersection(V) sage: XW = X.restrict(W) sage: E = M.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_V', domain=V) sage: phi_U.transition_map(phi_V, 1) Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> X = M.chart(names=('x', 'y',)); (x, y,) = X._first_ngens(2) >>> U = M.open_subset('U'); V = M.open_subset('V') >>> XU = X.restrict(U); XV = X.restrict(U) >>> W = U.intersection(V) >>> XW = X.restrict(W) >>> E = M.vector_bundle(Integer(2), 'E') >>> phi_U = E.trivialization('phi_U', domain=U) >>> phi_V = E.trivialization('phi_V', domain=V) >>> phi_U.transition_map(phi_V, Integer(1)) Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_V, E|_V)
- vector_bundle()[source]¶
Return the vector bundle on which the trivialization is defined.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi', domain=U) sage: phi.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 2-dimensional topological manifold M
>>> from sage.all import * >>> M = Manifold(Integer(2), 'M', structure='top') >>> U = M.open_subset('U') >>> E = M.vector_bundle(Integer(2), 'E') >>> phi = E.trivialization('phi', domain=U) >>> phi.vector_bundle() Topological real vector bundle E -> M of rank 2 over the base space 2-dimensional topological manifold M