-
-
Notifications
You must be signed in to change notification settings - Fork 405
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Trac #30318: Dot and cross products along a differentiable map
This ticket makes the methods `dot_product()`, `cross_product()` and `norm()` of class `VectorField` work for vector fields defined along a differentiable map, the codomain of which is a Riemannian manifold. Previously, these methods worked only for vector fields ''on'' a Riemannian manifold, i.e. along the identity map. An important subcase is of course that of a curve in a Riemannian manifold. For instance, considering a helix parametrized by its arc length: {{{ sage: E.<x,y,z> = EuclideanSpace() sage: R.<s> = RealLine() sage: C = E.curve((2*cos(s/3), 2*sin(s/3), sqrt(5)*s/3), (s, 0, 6*pi), ....: name='C') }}} we have now {{{ sage: T = C.tangent_vector_field() sage: T.display() C' = -2/3*sin(1/3*s) e_x + 2/3*cos(1/3*s) e_y + 1/3*sqrt(5) e_z sage: norm(T) Scalar field |C'| on the Real interval (0, 6*pi) sage: norm(T).expr() 1 }}} Introducing the unit normal vector N via the derivative of T: {{{ sage: I = C.domain() sage: Tp = I.vector_field([diff(T[i], s) for i in E.irange()], dest_map=C, ....: name="T'") sage: N = Tp / norm(Tp) }}} we get the binormal vector as the cross product of T and N: {{{ sage: B = T.cross_product(N) sage: B Vector field along the Real interval (0, 6*pi) with values on the Euclidean space E^3 sage: B.display() 1/3*sqrt(5)*sin(1/3*s) e_x - 1/3*sqrt(5)*cos(1/3*s) e_y + 2/3 e_z }}} We can then form the Frenet-Serret frame: {{{ sage: FS = I.vector_frame(('T', 'N', 'B'), (T, N, B), ....: symbol_dual=('t', 'n', 'b')) sage: FS Vector frame ((0, 6*pi), (T,N,B)) with values on the Euclidean space E^3 }}} and check that it is orthonormal: {{{ sage: [[u.dot(v).expr() for v in FS] for u in FS] [[1, 0, 0], [0, 1, 0], [0, 0, 1]] }}} The Frenet-Serret formulas are obtained as: {{{ sage: Np = I.vector_field([diff(N[i], s) for i in E.irange()], ....: dest_map=C, name="N'") sage: Bp = I.vector_field([diff(B[i], s) for i in E.irange()], ....: dest_map=C, name="B'") sage: for v in (Tp, Np, Bp): ....: v.display(FS) ....: T' = 2/9 N N' = -2/9 T + 1/9*sqrt(5) B B' = -1/9*sqrt(5) N }}} URL: https://trac.sagemath.org/30318 Reported by: egourgoulhon Ticket author(s): Eric Gourgoulhon Reviewer(s): Travis Scrimshaw
- Loading branch information
Showing
3 changed files
with
194 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters