) |
To create an ambient space over a field with given dimension
using the calling syntax
VectorSpace(field, dimension, sparse=True)
and to create a subspace use
VectorSpace(list_of_vectors),
where list_of_vectors
is a list of vectors in a
VectorSpace
.
First we create some ambient spaces.
sage: from sage.rings.rings import RationalField, CyclotomicField sage: V = VectorSpace(RationalField(), 389); V Full Vector space of degree 389 over Rational Field sage: V.dimension() 389 sage: K = CyclotomicField(7) sage: VK = VectorSpace(K, 3); VK Full Vector space of degree 3 over Cyclotomic Field of order 7 and degree 6 sage: K.gen(0)*VK.gen(1) (0 zeta_7 0)
Next we create some subspaces.
sage: W = VectorSpace([VK.gen(1) + K.gen(0)*VK.gen(2)]); W Vector space of degree 3, dimension 1 over Cyclotomic Field of order 7 and degree 6 Basis matrix: [ 0 1 zeta_7]
sage: V = VectorSpace(RationalField(), 3) sage: W = VectorSpace([V.gen(0)]); W Vector space of degree 3, dimension 1 over Rational Field Basis matrix: [1 0 0] sage: v0 = V([1,2,3]) sage: v1 = V([4,5,6]) sage: v2 = V([7,8,9]) sage: W = VectorSpace([v0,v1,v2]); W Vector space of degree 3, dimension 2 over Rational Field Basis matrix: [ 1 0 -1] [ 0 1 2]
We illustrate most of the functions on an ambient space:
sage: V = VectorSpace(RationalField(), 3) sage: V.ambient_space() Full Vector space of degree 3 over Rational Field sage: V == V.ambient_space() True sage: V == VectorSpace(CyclotomicField(3), 3) False sage: V.base_field() Rational Field sage: V.basis() [(1 0 0), (0 1 0), (0 0 1)] sage: V.coordinates(V._0 + 2*V._1 - 3*V._2) [1, 2, -3] sage: V.degree() 3 sage: V.dimension() 3 sage: V.gen(0) (1 0 0) sage: V.is_dense() True sage: V.is_sparse() False sage: V.matrix() [1 0 0] [0 1 0] [0 0 1] sage: V.ngens() 3 sage: V.random_element() in V True sage: V.vector([1,2,3]) (1 2 3) sage: V.vector_space(100) Full Vector space of degree 100 over Rational Field sage: V.zero_vector() (0 0 0)
We create a sparse ambient vector space, and demonstrate each of the above functions on it.
sage: V = VectorSpace(RationalField(), 3, sparse=True) sage: V.ambient_space() Full Vector space of degree 3 over Rational Field sage: V == V.ambient_space() True sage: V == VectorSpace(CyclotomicField(3), 3) False sage: V.base_field() Rational Field sage: V.basis() [(1 0 0), (0 1 0), (0 0 1)] sage: V.coordinates(V._0 + 2*V._1 - 3*V._2) [1, 2, -3] sage: V.degree() 3 sage: V.dimension() 3 sage: V.gen(0) (1 0 0) sage: V.is_dense() False sage: V.is_sparse() True sage: V.matrix() [1 0 0] [0 1 0] [0 0 1] sage: V.matrix().is_sparse() True sage: V.ngens() 3 sage: V.random_element() in V True sage: v = V.vector([1,2,3]); v (1 2 3) sage: v.is_sparse() True sage: W = V.vector_space(100); W Full Vector space of degree 100 over Rational Field sage: W.is_sparse() True
We create a subspace of a dense vector space, and illustrate each function on it:
sage: V0 = VectorSpace(RationalField(), 3) sage: V = VectorSpace([V0([1,2,3]), V0([4,5,6]), V0([7,8,9])]); V Vector space of degree 3, dimension 2 over Rational Field Basis matrix: [ 1 0 -1] [ 0 1 2] sage: V.ambient_space() Full Vector space of degree 3 over Rational Field sage: V == V.ambient_space() False sage: V.base_field() Rational Field sage: V.generators() [(1 2 3), (4 5 6), (7 8 9)] sage: V.coordinates(V([1, 0, -1])) [1, 0] sage: V.coordinates(V([1, 0, 0])) Traceback (most recent call last): ... ArithmeticError: v is not in self sage: V.degree() 3 sage: V.dimension() 2
Note that the ith generator of a subspace is not the ith element of the list of vectors that generators, but is the free generator, i.e., the ith basis vector.
sage: w = V.gen(0); w (1 0 -1) sage: w.is_sparse() False sage: V.is_dense() True sage: V.matrix() [ 1 0 -1] [ 0 1 2] sage: V.matrix().is_sparse() False sage: V.ngens() 2 sage: V.random_element() in V True sage: V.vector([1,2,3]) (1 2 3) sage: V([1,2,3]) (1 2 3) sage: V.vector([1,0,0]) Traceback (most recent call last): ... ArithmeticError: v is not in self sage: V.zero_vector() (0 0 0)
We create a subspace of a sparse vector space, and illustrate each function on it:
sage: V0 = VectorSpace(RationalField(), 3, sparse =True) sage: V0.is_sparse() True sage: V = VectorSpace([V0([1,2,3]), V0([4,5,6]), V0([7,8,9])]); V Vector space of degree 3, dimension 2 over Rational Field Basis matrix: [ 1 0 -1] [ 0 1 2] sage: V.is_sparse() True sage: V.ambient_space() Full Vector space of degree 3 over Rational Field sage: V == V.ambient_space() False sage: V.base_field() Rational Field sage: V.generators() [(1 2 3), (4 5 6), (7 8 9)] sage: V.coordinates(V([1, 0, -1])) [1, 0] sage: V.coordinates(V([1, 0, 0])) Traceback (most recent call last): ... ArithmeticError: v is not in self sage: V.degree() 3 sage: w = V.gen(0); w (1 0 -1) sage: w.is_sparse() True sage: V.is_dense() False sage: V.matrix() [ 1 0 -1] [ 0 1 2] sage: V.matrix().is_sparse() True sage: V.ngens() 2 sage: V.random_element() in V True sage: V.vector([1,2,3]) (1 2 3) sage: V.vector([1,0,0]) Traceback (most recent call last): ... ArithmeticError: v is not in self sage: V.zero_vector() (0 0 0)
See About this document... for information on suggesting changes.