# Affine Groups¶

AUTHORS:

• Volker Braun: initial version
class sage.groups.affine_gps.affine_group.AffineGroup(degree, ring)

An affine group.

The affine group $$\mathrm{Aff}(A)$$ (or general affine group) of an affine space $$A$$ is the group of all invertible affine transformations from the space into itself.

If we let $$A_V$$ be the affine space of a vector space $$V$$ (essentially, forgetting what is the origin) then the affine group $$\mathrm{Aff}(A_V)$$ is the group generated by the general linear group $$GL(V)$$ together with the translations. Recall that the group of translations acting on $$A_V$$ is just $$V$$ itself. The general linear and translation subgroups do not quite commute, and in fact generate the semidirect product

$\mathrm{Aff}(A_V) = GL(V) \ltimes V.$

As such, the group elements can be represented by pairs $$(A, b)$$ of a matrix and a vector. This pair then represents the transformation

$x \mapsto A x + b.$

We can also represent affine transformations as linear transformations by considering $$\dim(V) + 1$$ dimensional space. We take the affine transformation $$(A, b)$$ to

$\begin{split}\begin{pmatrix} A & b \\ 0 & 1 \end{pmatrix}\end{split}$

and lifting $$x = (x_1, \ldots, x_n)$$ to $$(x_1, \ldots, x_n, 1)$$. Here the $$(n + 1)$$-th component is always 1, so the linear representations acts on the affine hyperplane $$x_{n+1} = 1$$ as affine transformations which can be seen directly from the matrix multiplication.

INPUT:

Something that defines an affine space. For example

• An affine space itself:
• A – affine space
• A vector space:
• V – a vector space
• Degree and base ring:
• degree – An integer. The degree of the affine group, that is, the dimension of the affine space the group is acting on.
• ring – A ring or an integer. The base ring of the affine space. If an integer is given, it must be a prime power and the corresponding finite field is constructed.
• var – (default: 'a') Keyword argument to specify the finite field generator name in the case where ring is a prime power.

EXAMPLES:

sage: F = AffineGroup(3, QQ); F
Affine Group of degree 3 over Rational Field
sage: F(matrix(QQ,[[1,2,3],[4,5,6],[7,8,0]]), vector(QQ,[10,11,12]))
[1 2 3]     [10]
x |-> [4 5 6] x + [11]
[7 8 0]     [12]
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: 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]


Instead of specifying the complete matrix/vector information, you can also create special group elements:

sage: F.linear([1,2,3,4,5,6,7,8,0])
[1 2 3]     [0]
x |-> [4 5 6] x + [0]
[7 8 0]     [0]
sage: F.translation([1,2,3])
[1 0 0]     [1]
x |-> [0 1 0] x + [2]
[0 0 1]     [3]


Some additional ways to create affine groups:

sage: A = AffineSpace(2, GF(4,'a'));  A
Affine Space of dimension 2 over Finite Field in a of size 2^2
sage: G = AffineGroup(A); G
Affine Group of degree 2 over Finite Field in a of size 2^2
sage: G is AffineGroup(2,4) # shorthand
True

sage: V = ZZ^3;  V
Ambient free module of rank 3 over the principal ideal domain Integer Ring
sage: AffineGroup(V)
Affine Group of degree 3 over Integer Ring


REFERENCES:

Element
degree()

Return the dimension of the affine space.

OUTPUT:

An integer.

EXAMPLES:

sage: G = AffineGroup(6, GF(5))
sage: g = G.an_element()
sage: G.degree()
6
sage: G.degree() == g.A().nrows() == g.A().ncols() == g.b().degree()
True

linear(A)

Construct the general linear transformation by A.

INPUT:

• A – anything that determines a matrix

OUTPUT:

The affine group element $$x \mapsto A x$$.

EXAMPLES:

sage: G = AffineGroup(3, GF(5))
sage: G.linear([1,2,3,4,5,6,7,8,0])
[1 2 3]     [0]
x |-> [4 0 1] x + [0]
[2 3 0]     [0]

linear_space()

Return the space of the affine transformations represented as linear transformations.

We can represent affine transformations $$Ax + b$$ as linear transformations by

$\begin{split}\begin{pmatrix} A & b \\ 0 & 1 \end{pmatrix}\end{split}$

and lifting $$x = (x_1, \ldots, x_n)$$ to $$(x_1, \ldots, x_n, 1)$$.

EXAMPLES:

sage: G = AffineGroup(3, GF(5))
sage: G.linear_space()
Full MatrixSpace of 4 by 4 dense matrices over Finite Field of size 5

matrix_space()

Return the space of matrices representing the general linear transformations.

OUTPUT:

The parent of the matrices $$A$$ defining the affine group element $$Ax+b$$.

EXAMPLES:

sage: G = AffineGroup(3, GF(5))
sage: G.matrix_space()
Full MatrixSpace of 3 by 3 dense matrices over Finite Field of size 5

random_element()

Return a random element of this group.

EXAMPLES:

sage: G = AffineGroup(4, GF(3))
sage: G.random_element()  # random
[2 0 1 2]     [1]
[2 1 1 2]     [2]
x |-> [1 0 2 2] x + [2]
[1 1 1 1]     [2]
sage: G.random_element() in G
True

reflection(v)

Construct the Householder reflection.

A Householder reflection (transformation) is the affine transformation corresponding to an elementary reflection at the hyperplane perpendicular to $$v$$.

INPUT:

• v – a vector, or something that determines a vector.

OUTPUT:

The affine group element that is just the Householder transformation (a.k.a. Householder reflection, elementary reflection) at the hyperplane perpendicular to $$v$$.

EXAMPLES:

sage: G = AffineGroup(3, QQ)
sage: G.reflection([1,0,0])
[-1  0  0]     [0]
x |-> [ 0  1  0] x + [0]
[ 0  0  1]     [0]
sage: G.reflection([3,4,-5])
[ 16/25 -12/25    3/5]     [0]
x |-> [-12/25   9/25    4/5] x + [0]
[   3/5    4/5      0]     [0]

translation(b)

Construct the translation by b.

INPUT:

• b – anything that determines a vector

OUTPUT:

The affine group element $$x \mapsto x + b$$.

EXAMPLES:

sage: G = AffineGroup(3, GF(5))
sage: G.translation([1,4,8])
[1 0 0]     [1]
x |-> [0 1 0] x + [4]
[0 0 1]     [3]

vector_space()

Return the vector space of the underlying affine space.

EXAMPLES:

sage: G = AffineGroup(3, GF(5))
sage: G.vector_space()
Vector space of dimension 3 over Finite Field of size 5