Matrix Group Elements¶
EXAMPLES:
sage: F = GF(3); MS = MatrixSpace(F,2,2)
sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])]
sage: G = MatrixGroup(gens); G
Matrix group over Finite Field of size 3 with 2 generators (
[1 0] [1 1]
[0 1], [0 1]
)
sage: g = G([[1,1],[0,1]])
sage: h = G([[1,2],[0,1]])
sage: g*h
[1 0]
[0 1]
You cannot add two matrices, since this is not a group operation. You can coerce matrices back to the matrix space and add them there:
sage: g + h
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for +:
'FinitelyGeneratedMatrixGroup_gap_with_category.element_class' and
'FinitelyGeneratedMatrixGroup_gap_with_category.element_class'
sage: g.matrix() + h.matrix()
[2 0]
[0 2]
Similarly, you cannot multiply group elements by scalars but you can do it with the underlying matrices:
sage: 2*g
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for '*': 'Integer Ring' and 'Matrix group over Finite Field of size 3 with 2 generators (
[1 0] [1 1]
[0 1], [0 1]
)'
AUTHORS:
- David Joyner (2006-05): initial version David Joyner
- David Joyner (2006-05): various modifications to address William Stein’s TODO’s.
- William Stein (2006-12-09): many revisions.
- Volker Braun (2013-1) port to new Parent, libGAP.
-
class
sage.groups.matrix_gps.group_element.
MatrixGroupElement_base
¶ Bases:
sage.structure.element.MultiplicativeGroupElement
Base class for elements of matrix groups.
You should use one of the two subclasses:
MatrixGroupElement_sage
implements the group multiplication using Sage matrices.MatrixGroupElement_gap
implements the group multiplication using libGAP matrices.
The base class only assumes that derived classes implement
matrix()
.EXAMPLES:
sage: F = GF(3); MS = MatrixSpace(F,2,2) sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])] sage: G = MatrixGroup(gens) sage: g = G.random_element() sage: type(g) <class 'sage.groups.matrix_gps.group_element.FinitelyGeneratedMatrixGroup_gap_with_category.element_class'>
-
list
()¶ Return list representation of this matrix.
EXAMPLES:
sage: F = GF(3); MS = MatrixSpace(F,2,2) sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])] sage: G = MatrixGroup(gens) sage: g = G.0 sage: g [1 0] [0 1] sage: g.list() [[1, 0], [0, 1]]
-
class
sage.groups.matrix_gps.group_element.
MatrixGroupElement_gap
(parent, M, check=True, convert=True)¶ Bases:
sage.groups.libgap_mixin.GroupElementMixinLibGAP
,sage.groups.matrix_gps.group_element.MatrixGroupElement_base
,sage.groups.libgap_wrapper.ElementLibGAP
Element of a matrix group over a generic ring.
The group elements are implemented as Sage matrices.
INPUT:
M
– a matrix.parent
– the parent.check
– bool (default:True
). If true does some type checking.convert
– bool (default:True
). If true convertM
to the right matrix space.
TESTS:
sage: MS = MatrixSpace(GF(3),2,2) sage: G = MatrixGroup(MS([[1,0],[0,1]]), MS([[1,1],[0,1]])) sage: G.gen(0) [1 0] [0 1] sage: g = G.random_element() sage: TestSuite(g).run()
-
matrix
()¶ Obtain the usual matrix (as an element of a matrix space) associated to this matrix group element.
EXAMPLES:
sage: F = GF(3); MS = MatrixSpace(F,2,2) sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])] sage: G = MatrixGroup(gens) sage: G.gen(0).matrix() [1 0] [0 1] sage: _.parent() Full MatrixSpace of 2 by 2 dense matrices over Finite Field of size 3
-
class
sage.groups.matrix_gps.group_element.
MatrixGroupElement_generic
(parent, M, check=True, convert=True)¶ Bases:
sage.groups.matrix_gps.group_element.MatrixGroupElement_base
Element of a matrix group over a generic ring.
The group elements are implemented as Sage matrices.
INPUT:
M
– a matrix.parent
– the parent.check
– bool (default:True
). If true does sometype checking.
convert
– bool (default:True
). If true convertM
to the right matrix space.
TESTS:
sage: F = GF(3); MS = MatrixSpace(F,2,2) sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])] sage: G = MatrixGroup(gens) sage: g = G.random_element() sage: TestSuite(g).run()
-
inverse
()¶ Return the inverse group element
OUTPUT:
A matrix group element.
EXAMPLES:
sage: G = GL(2,3) sage: g = G([1,2,1,0]); g [1 2] [1 0] sage: g.__invert__() [0 1] [2 1] sage: g * (~g) [1 0] [0 1]
-
matrix
()¶ Obtain the usual matrix (as an element of a matrix space) associated to this matrix group element.
One reason to compute the associated matrix is that matrices support a huge range of functionality.
EXAMPLES:
sage: k = GF(7); G = MatrixGroup([matrix(k,2,[1,1,0,1]), matrix(k,2,[1,0,0,2])]) sage: g = G.0 sage: g.matrix() [1 1] [0 1] sage: parent(g.matrix()) Full MatrixSpace of 2 by 2 dense matrices over Finite Field of size 7
Matrices have extra functionality that matrix group elements do not have:
sage: g.matrix().charpoly('t') t^2 + 5*t + 1
-
sage.groups.matrix_gps.group_element.
is_MatrixGroupElement
(x)¶ Test whether
x
is a matrix group elementINPUT:
x
– anything.
OUTPUT:
Boolean.
EXAMPLES:
sage: from sage.groups.matrix_gps.group_element import is_MatrixGroupElement sage: is_MatrixGroupElement('helloooo') False sage: G = GL(2,3) sage: is_MatrixGroupElement(G.an_element()) True