Opened 3 years ago

Last modified 3 years ago

## #28716 closed enhancement

# Construction of a vector frame from a family of vector fields — at Initial Version

Reported by: | egourgoulhon | Owned by: | |
---|---|---|---|

Priority: | major | Milestone: | sage-9.0 |

Component: | geometry | Keywords: | manifolds, vector_frame |

Cc: | tscrim | Merged in: | |

Authors: | Eric Gourgoulhon | Reviewers: | |

Report Upstream: | N/A | Work issues: | |

Branch: | Commit: | ||

Dependencies: | Stopgaps: |

### Description

This ticket introduces the keyword argument `from_family`

to `DifferentiableManifold.vector_frame()`

to allow for constructing a vector frame from a spanning family of linearly independent vector fields:

sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: e0 = M.vector_field(1+x^2, 1+y^2) sage: e1 = M.vector_field(2, -x*y) sage: e = M.vector_frame('e', from_family=(e0, e1)); e Vector frame (M, (e_0,e_1)) sage: e[0].display() e_0 = (x^2 + 1) d/dx + (y^2 + 1) d/dy sage: e[1].display() e_1 = 2 d/dx - x*y d/dy sage: (e[0], e[1]) == (e0, e1) True

Previously, the only way to introduce the vector frame `e`

was to first introduce an automorphism relating the frame `(d/dx, d/dy)`

to `(e0, e1)`

and to pass this automorphism to `VectorFrame.new_frame()`

:

sage: aut = M.automorphism_field() sage: aut[:] = [[e0[0], e1[0]], [e0[1], e1[1]]] sage: e = X.frame().new_frame(aut, 'e')

The introduction of `from_family`

in `vector_frame()`

simplifies this process.

**Implementation details:** such functionality already existed for bases of finite rank free modules; the relevant code is extracted from the method `FiniteRankFreeModule.basis()`

and put into the new method `FreeModuleBasis._init_from_family()`

, in order to be used in `DifferentiableManifold.vector_frame()`

as well.

**Note:**See TracTickets for help on using tickets.