Elements of Affine Groups¶
The class in this module is used to represent the elements of
AffineGroup()
and its
subgroups.
EXAMPLES:
sage: F = AffineGroup(3, QQ)
sage: F([1,2,3,4,5,6,7,8,0], [10,11,12])
[1 2 3] [10]
x |-> [4 5 6] x + [11]
[7 8 0] [12]
sage: G = AffineGroup(2, ZZ)
sage: g = G([[1,1],[0,1]], [1,0])
sage: h = G([[1,2],[0,1]], [0,1])
sage: g*h
[1 3] [2]
x |-> [0 1] x + [1]
sage: h*g
[1 3] [1]
x |-> [0 1] x + [1]
sage: g*h != h*g
True
>>> from sage.all import *
>>> F = AffineGroup(Integer(3), QQ)
>>> F([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)], [Integer(10),Integer(11),Integer(12)])
[1 2 3] [10]
x |-> [4 5 6] x + [11]
[7 8 0] [12]
>>> G = AffineGroup(Integer(2), ZZ)
>>> g = G([[Integer(1),Integer(1)],[Integer(0),Integer(1)]], [Integer(1),Integer(0)])
>>> h = G([[Integer(1),Integer(2)],[Integer(0),Integer(1)]], [Integer(0),Integer(1)])
>>> g*h
[1 3] [2]
x |-> [0 1] x + [1]
>>> h*g
[1 3] [1]
x |-> [0 1] x + [1]
>>> g*h != h*g
True
AUTHORS:
Volker Braun
- class sage.groups.affine_gps.group_element.AffineGroupElement(parent, A, b=0, convert=True, check=True)[source]¶
Bases:
MultiplicativeGroupElement
An affine group element.
INPUT:
A
– an invertible matrix, or something defining a matrix ifconvert==True
b
– a vector, or something defining a vector ifconvert==True
(default:0
, defining the zero vector)parent
– the parent affine groupconvert
– boolean (default:True
); whether to convertA
into the correct matrix space andb
into the correct vector spacecheck
– boolean (default:True
); whether to do some checks or just accept the input as valid
As a special case,
A
can be a matrix obtained frommatrix()
, that is, one row and one column larger. In that case, the group element defining that matrix is reconstructed.OUTPUT: the affine group element \(x \mapsto Ax + b\)
EXAMPLES:
sage: G = AffineGroup(2, GF(3)) sage: # needs sage.libs.gap sage: g = G.random_element() sage: type(g) <class 'sage.groups.affine_gps.affine_group.AffineGroup_with_category.element_class'> sage: G(g.matrix()) == g True sage: G(2) [2 0] [0] x |-> [0 2] x + [0]
>>> from sage.all import * >>> G = AffineGroup(Integer(2), GF(Integer(3))) >>> # needs sage.libs.gap >>> g = G.random_element() >>> type(g) <class 'sage.groups.affine_gps.affine_group.AffineGroup_with_category.element_class'> >>> G(g.matrix()) == g True >>> G(Integer(2)) [2 0] [0] x |-> [0 2] x + [0]
Conversion from a matrix and a matrix group element:
sage: M = Matrix(4, 4, [0, 0, -1, 1, 0, -1, 0, 1, -1, 0, 0, 1, 0, 0, 0, 1]) sage: A = AffineGroup(3, ZZ) sage: A(M) [ 0 0 -1] [1] x |-> [ 0 -1 0] x + [1] [-1 0 0] [1] sage: G = MatrixGroup([M]) sage: A(G.0) [ 0 0 -1] [1] x |-> [ 0 -1 0] x + [1] [-1 0 0] [1]
>>> from sage.all import * >>> M = Matrix(Integer(4), Integer(4), [Integer(0), Integer(0), -Integer(1), Integer(1), Integer(0), -Integer(1), Integer(0), Integer(1), -Integer(1), Integer(0), Integer(0), Integer(1), Integer(0), Integer(0), Integer(0), Integer(1)]) >>> A = AffineGroup(Integer(3), ZZ) >>> A(M) [ 0 0 -1] [1] x |-> [ 0 -1 0] x + [1] [-1 0 0] [1] >>> G = MatrixGroup([M]) >>> A(G.gen(0)) [ 0 0 -1] [1] x |-> [ 0 -1 0] x + [1] [-1 0 0] [1]
- A()[source]¶
Return the general linear part of an affine group element.
OUTPUT: the matrix \(A\) of the affine group element \(Ax + b\)
EXAMPLES:
sage: G = AffineGroup(3, QQ) sage: g = G([1,2,3,4,5,6,7,8,0], [10,11,12]) sage: A = g.A(); A [1 2 3] [4 5 6] [7 8 0] sage: A.is_immutable() True
>>> from sage.all import * >>> G = AffineGroup(Integer(3), QQ) >>> g = G([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)], [Integer(10),Integer(11),Integer(12)]) >>> A = g.A(); A [1 2 3] [4 5 6] [7 8 0] >>> A.is_immutable() True
- b()[source]¶
Return the translation part of an affine group element.
OUTPUT: the vector \(b\) of the affine group element \(Ax + b\)
EXAMPLES:
sage: G = AffineGroup(3, QQ) sage: g = G([1,2,3,4,5,6,7,8,0], [10,11,12]) sage: b = g.b(); b (10, 11, 12) sage: b.is_immutable() True
>>> from sage.all import * >>> G = AffineGroup(Integer(3), QQ) >>> g = G([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)], [Integer(10),Integer(11),Integer(12)]) >>> b = g.b(); b (10, 11, 12) >>> b.is_immutable() True
- list()[source]¶
Return list representation of
self
.EXAMPLES:
sage: F = AffineGroup(3, QQ) sage: g = F([1,2,3,4,5,6,7,8,0], [10,11,12]) sage: g [1 2 3] [10] x |-> [4 5 6] x + [11] [7 8 0] [12] sage: g.matrix() [ 1 2 3|10] [ 4 5 6|11] [ 7 8 0|12] [--------+--] [ 0 0 0| 1] sage: g.list() [[1, 2, 3, 10], [4, 5, 6, 11], [7, 8, 0, 12], [0, 0, 0, 1]]
>>> from sage.all import * >>> F = AffineGroup(Integer(3), QQ) >>> g = F([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)], [Integer(10),Integer(11),Integer(12)]) >>> g [1 2 3] [10] x |-> [4 5 6] x + [11] [7 8 0] [12] >>> g.matrix() [ 1 2 3|10] [ 4 5 6|11] [ 7 8 0|12] [--------+--] [ 0 0 0| 1] >>> g.list() [[1, 2, 3, 10], [4, 5, 6, 11], [7, 8, 0, 12], [0, 0, 0, 1]]
- matrix()[source]¶
Return the standard matrix representation of
self
.See also
EXAMPLES:
sage: G = AffineGroup(3, GF(7)) sage: g = G([1,2,3,4,5,6,7,8,0], [10,11,12]) sage: g [1 2 3] [3] x |-> [4 5 6] x + [4] [0 1 0] [5] sage: g.matrix() [1 2 3|3] [4 5 6|4] [0 1 0|5] [-----+-] [0 0 0|1] sage: parent(g.matrix()) Full MatrixSpace of 4 by 4 dense matrices over Finite Field of size 7 sage: g.matrix() == matrix(g) True
>>> from sage.all import * >>> G = AffineGroup(Integer(3), GF(Integer(7))) >>> g = G([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)], [Integer(10),Integer(11),Integer(12)]) >>> g [1 2 3] [3] x |-> [4 5 6] x + [4] [0 1 0] [5] >>> g.matrix() [1 2 3|3] [4 5 6|4] [0 1 0|5] [-----+-] [0 0 0|1] >>> parent(g.matrix()) Full MatrixSpace of 4 by 4 dense matrices over Finite Field of size 7 >>> g.matrix() == matrix(g) True
Composition of affine group elements equals multiplication of the matrices:
sage: # needs sage.libs.gap sage: g1 = G.random_element() sage: g2 = G.random_element() sage: g1.matrix() * g2.matrix() == (g1*g2).matrix() True
>>> from sage.all import * >>> # needs sage.libs.gap >>> g1 = G.random_element() >>> g2 = G.random_element() >>> g1.matrix() * g2.matrix() == (g1*g2).matrix() True