Algebra of Differentiable Scalar Fields¶
The class DiffScalarFieldAlgebra implements the commutative algebra
of differentiable scalar fields on a differentiable manifold
of
class
over a topological field
(in
most applications,
or
). By differentiable scalar field,
it is meant a function
that is
-times continuously
differentiable.
is an algebra over
, whose ring product is the
pointwise multiplication of
-valued functions, which is clearly commutative.
AUTHORS:
- Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
REFERENCES:
| [1] | S. Kobayashi & K. Nomizu : Foundations of Differential Geometry, vol. 1, Interscience Publishers (New York) (1963) |
| [2] | J.M. Lee : Introduction to Smooth Manifolds, 2nd ed., Springer (New York) (2013) |
| [3] | B. O’Neill : Semi-Riemannian Geometry, Academic Press (San Diego) (1983) |
-
class
sage.manifolds.differentiable.scalarfield_algebra.DiffScalarFieldAlgebra(domain)¶ Bases:
sage.manifolds.scalarfield_algebra.ScalarFieldAlgebraCommutative algebra of differentiable scalar fields on a differentiable manifold.
If
is a differentiable manifold of class
over a topological
field
, the commutative algebra of scalar fields on
is the set
of all
-times continuously differentiable maps
.
The set
is an algebra over
, whose ring product is the
pointwise multiplication of
-valued functions, which is clearly
commutative.If
or
, the field
over which the
algebra
is constructed is represented by Sage’s Symbolic Ring
SR, since there is no exact representation of
nor
in Sage.Via its base class
ScalarFieldAlgebra, the classDiffScalarFieldAlgebrainherits fromParent, with the category set toCommutativeAlgebras. The corresponding element class isDiffScalarField.INPUT:
domain– the differentiable manifold
on which the scalar fields
are defined (must be an instance of class
DifferentiableManifold)
EXAMPLES:
Algebras of scalar fields on the sphere
and on some open subset of
it:sage: M = Manifold(2, 'M') # the 2-dimensional sphere S^2 sage: U = M.open_subset('U') # complement of the North pole sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: V = M.open_subset('V') # complement of the South pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: M.declare_union(U,V) # S^2 is the union of U and V 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: uv_to_xy = xy_to_uv.inverse() sage: CM = M.scalar_field_algebra() ; CM Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: W = U.intersection(V) # S^2 minus the two poles sage: CW = W.scalar_field_algebra() ; CW Algebra of differentiable scalar fields on the Open subset W of the 2-dimensional differentiable manifold M
and
belong to the category of commutative
algebras over
(represented here by Sage’s Symbolic Ring):sage: CM.category() Category of commutative algebras over Symbolic Ring sage: CM.base_ring() Symbolic Ring sage: CW.category() Category of commutative algebras over Symbolic Ring sage: CW.base_ring() Symbolic Ring
The elements of
are scalar fields on
:sage: CM.an_element() Scalar field on the 2-dimensional differentiable manifold M sage: CM.an_element().display() # this sample element is a constant field M --> R on U: (x, y) |--> 2 on V: (u, v) |--> 2
Those of
are scalar fields on
:sage: CW.an_element() Scalar field on the Open subset W of the 2-dimensional differentiable manifold M sage: CW.an_element().display() # this sample element is a constant field W --> R (x, y) |--> 2 (u, v) |--> 2
The zero element:
sage: CM.zero() Scalar field zero on the 2-dimensional differentiable manifold M sage: CM.zero().display() zero: M --> R on U: (x, y) |--> 0 on V: (u, v) |--> 0
sage: CW.zero() Scalar field zero on the Open subset W of the 2-dimensional differentiable manifold M sage: CW.zero().display() zero: W --> R (x, y) |--> 0 (u, v) |--> 0
The unit element:
sage: CM.one() Scalar field 1 on the 2-dimensional differentiable manifold M sage: CM.one().display() 1: M --> R on U: (x, y) |--> 1 on V: (u, v) |--> 1
sage: CW.one() Scalar field 1 on the Open subset W of the 2-dimensional differentiable manifold M sage: CW.one().display() 1: W --> R (x, y) |--> 1 (u, v) |--> 1
A generic element can be constructed as for any parent in Sage, namely by means of the
__call__operator on the parent (here with the dictionary of the coordinate expressions defining the scalar field):sage: f = CM({c_xy: atan(x^2+y^2), c_uv: pi/2 - atan(u^2+v^2)}); f Scalar field on the 2-dimensional differentiable manifold M sage: f.display() M --> R on U: (x, y) |--> arctan(x^2 + y^2) on V: (u, v) |--> 1/2*pi - arctan(u^2 + v^2) sage: f.parent() Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M
Specific elements can also be constructed in this way:
sage: CM(0) == CM.zero() True sage: CM(1) == CM.one() True
Note that the zero scalar field is cached:
sage: CM(0) is CM.zero() True
Elements can also be constructed by means of the method
scalar_field()acting on the domain (this allows one to set the name of the scalar field at the construction):sage: f1 = M.scalar_field({c_xy: atan(x^2+y^2), c_uv: pi/2 - atan(u^2+v^2)}, ....: name='f') sage: f1.parent() Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: f1 == f True sage: M.scalar_field(0, chart='all') == CM.zero() True
The algebra
coerces to
since
is an open
subset of
:sage: CW.has_coerce_map_from(CM) True
The reverse is of course false:
sage: CM.has_coerce_map_from(CW) False
The coercion map is nothing but the restriction to
of scalar fields
on
:sage: fW = CW(f) ; fW Scalar field on the Open subset W of the 2-dimensional differentiable manifold M sage: fW.display() W --> R (x, y) |--> arctan(x^2 + y^2) (u, v) |--> 1/2*pi - arctan(u^2 + v^2)
sage: CW(CM.one()) == CW.one() True
The coercion map allows for the addition of elements of
with elements of
, the result being an element of
:sage: s = fW + f sage: s.parent() Algebra of differentiable scalar fields on the Open subset W of the 2-dimensional differentiable manifold M sage: s.display() W --> R (x, y) |--> 2*arctan(x^2 + y^2) (u, v) |--> pi - 2*arctan(u^2 + v^2)
Another coercion is that from the Symbolic Ring, the parent of all symbolic expressions (cf.
SymbolicRing). Since the Symbolic Ring is the base ring for the algebraCM, the coercion of a symbolic expressionsis performed by the operations*CM.one(), which invokes the reflected multiplication operatorsage.manifolds.scalarfield.ScalarField._rmul_(). If the symbolic expression does not involve any chart coordinate, the outcome is a constant scalar field:sage: h = CM(pi*sqrt(2)) ; h Scalar field on the 2-dimensional differentiable manifold M sage: h.display() M --> R on U: (x, y) |--> sqrt(2)*pi on V: (u, v) |--> sqrt(2)*pi sage: a = var('a') sage: h = CM(a); h.display() M --> R on U: (x, y) |--> a on V: (u, v) |--> a
If the symbolic expression involves some coordinate of one of the manifold’s charts, the outcome is initialized only on the chart domain:
sage: h = CM(a+x); h.display() M --> R on U: (x, y) |--> a + x sage: h = CM(a+u); h.display() M --> R on V: (u, v) |--> a + u
If the symbolic expression involves coordinates of different charts, the scalar field is created as a Python object, but is not initialized, in order to avoid any ambiguity:
sage: h = CM(x+u); h.display() M --> R
TESTS OF THE ALGEBRA LAWS:
Ring laws:
sage: h = CM(pi*sqrt(2)) sage: s = f + h ; s Scalar field on the 2-dimensional differentiable manifold M sage: s.display() M --> R on U: (x, y) |--> sqrt(2)*pi + arctan(x^2 + y^2) on V: (u, v) |--> 1/2*pi*(2*sqrt(2) + 1) - arctan(u^2 + v^2)
sage: s = f - h ; s Scalar field on the 2-dimensional differentiable manifold M sage: s.display() M --> R on U: (x, y) |--> -sqrt(2)*pi + arctan(x^2 + y^2) on V: (u, v) |--> -1/2*pi*(2*sqrt(2) - 1) - arctan(u^2 + v^2)
sage: s = f*h ; s Scalar field on the 2-dimensional differentiable manifold M sage: s.display() M --> R on U: (x, y) |--> sqrt(2)*pi*arctan(x^2 + y^2) on V: (u, v) |--> 1/2*sqrt(2)*(pi^2 - 2*pi*arctan(u^2 + v^2))
sage: s = f/h ; s Scalar field on the 2-dimensional differentiable manifold M sage: s.display() M --> R on U: (x, y) |--> 1/2*sqrt(2)*arctan(x^2 + y^2)/pi on V: (u, v) |--> 1/4*(sqrt(2)*pi - 2*sqrt(2)*arctan(u^2 + v^2))/pi
sage: f*(h+f) == f*h + f*f True
Ring laws with coercion:
sage: f - fW == CW.zero() True sage: f/fW == CW.one() True sage: s = f*fW ; s Scalar field on the Open subset W of the 2-dimensional differentiable manifold M sage: s.display() W --> R (x, y) |--> arctan(x^2 + y^2)^2 (u, v) |--> 1/4*pi^2 - pi*arctan(u^2 + v^2) + arctan(u^2 + v^2)^2 sage: s/f == fW True
Multiplication by a number:
sage: s = 2*f ; s Scalar field on the 2-dimensional differentiable manifold M sage: s.display() M --> R on U: (x, y) |--> 2*arctan(x^2 + y^2) on V: (u, v) |--> pi - 2*arctan(u^2 + v^2)
sage: 0*f == CM.zero() True sage: 1*f == f True sage: 2*(f/2) == f True sage: (f+2*f)/3 == f True sage: 1/3*(f+2*f) == f True
The Sage test suite for algebras is passed:
sage: TestSuite(CM).run()It is passed also for
:sage: TestSuite(CW).run()-
Element¶ alias of
DiffScalarField
