|
|
|
Implementation
in SYMMETRICA |
Implementation in SYMMETRICA
All the cycle indices for the action of the symmetry group of the
fullerene C60 are implemented in SYMMETRICA. The
6-dimensional cycle indices for R and S are
INT zykelind_full60(a) OP
a; |
INT zykelind_full60_extended(a)
OP a; |
.. |
The cycle indices for the actions on the sets of vertices, faces,
edges and diagonals are
INT zykelind_full60_vertices(a)
OP a; |
INT
zykelind_full60_vertices_extended(a) OP a; |
INT zykelind_full60_edges(a) OP
a; |
INT
zykelind_full60_edges_extended(a) OP a; |
INT zykelind_full60_faces(a) OP
a; |
INT
zykelind_full60_faces_extended(a) OP a; |
INT zykelind_full60_diagonals(a)
OP a; |
.. |
In all these cases the _extended
versions are the
cycle indices of the full symmetry group S.
Let me give a short description how to handle polynomials with
variables in several alphabets. In SYMMETRICA there is a routine
which allows to multiply two polynomials in disjoint sets of
indeterminates. The corresponding routine is called
INT
mult_disjunkt_polynom_polynom(a,b,c) OP a,b,c; |
.. |
where a
and b
are the two polynomials
that should be multiplied. c
is the result. A
POLYNOM
object in SYMMETRICA consists of three parts:
- A coefficient,
- the so called self-part, which is a
VECTOR
of INTEGER
objects that represent
the exponents of the monomial summands,
- and a next-part, which is the lexicographically next
monomial, or zero, if there is no further monomial summand of the
polynomial in question.
The routine for multiplication of two polynomials in disjoint sets
of indeterminates works in the following way: At first the number
of variables of the first polynomial a
is evaluated.
(Let this number be n.) Then for each monomial summand of
a
it is tested, if its self-part is of length less
than n, and if this is so, then this self-part is changed into a
VECTOR
object of length n and all the new entries are
set to zero. Then the self part of each monomial summand of
b
is appended to the self-part of a
(of
length n), forming a new self-part of a monomial summand of
c
. The corresponding coefficients of the monomials of
a
and b
are multiplied to get the new
coefficient of this monomial.
In order to work with these polynomials in two or more alphabets
it is therefore important to know how many variables are in the
first alphabet, in the second alphabet and so on. Or in other
words, we must keep in mind at which index of the self-part of the
monomial summands the different alphabets start. (The index where
the i-th family starts, is the number of variables which have
already occurred in the previous i-1 families.) Using a vector of
INTEGER
objects, where for each polynomial the
position in the self-parts of the monomial summands is indicated,
where the new alphabet starts, gives the whole information. For
example consider two polynomials a
and b
in two different alphabets (a
is a polynomial in
xi and b
is a polynomial in yi)
where a
has n variables. Then applying
mult_disjunkt_polynom_polynom(a,b,c) |
makes c
to be a polynomial in two families of
variables and the corresponding vector of starting points would be
[0,n]. A monomial summand of c
can be interpreted as
s_po_k(c) .. |
n-1
∏ i=0 |
xi+1s_po_ii(c,i) .. |
s_po_li(c)-1
∏ i=n |
yi-n+1s_po_ii(c,i)... |
For that reason a multi dimensional cycle index in SYMMETRICA
consists of a VECTOR
-part and a
POLYNOM
-part, which can be selected by
OP s_mz_v(a) OP a ; |
|
OP s_mz_po(a) OP a; |
.. |
The cycle indices for the actions on the sets of vertices,
edges, etc. were computed from the 6-dimensional cycle indices by
extracting and identifying some families of indeterminates. This
extraction of some families of indeterminates of a multi
dimensional cycle index can be done by
INT mz_extrahieren(a,b,c) OP
a,b,c; |
.. |
where a
is a multi dimensional cycle index and
b
is a VECTOR
object. Its length tells
how many families shall be combined into the new cycle index
c
. The entries of b
are
INTEGER
objects. If for instance a
is a
6-dimensional cycle index and you want to extract the first and
fifth family of indeterminates then b
would be the
VECTOR
[1,5] of length 2. In the case you choose only
one family to be extracted the result will be a
POLYNOM
object, otherwise it is a multi dimensional
cycle index as described above.
For identifying different alphabets there is the routine
INT mz_vereinfachen(a,b) OP
a,b; |
.. |
which computes from a multi dimensional cycle index a
a cycle index b
in only one alphabet. For instance for
computing the cycle index of the action on the set of faces of the
fullerene, we first extract the two families corresponding to
fi and Fi and then identify fi and
Fi.
zykelind_full60(a); /* 6-dimensional cycle index */
M_IL_V(2L,b);
M_I_I(4L,S_V_I(b,0L));
M_I_I(5L,S_V_I(b,1L));
mz_extrahieren(a,b,c); /* extracting the families 4 and 5 from a */
mz_vereinfachen(c,d); /* identifying the two alphabets */
In addition to this it should be mentioned that the cycle
indices of the symmetry groups of the tetrahedron, the cube and the
dodecahedron are implemented in the same way in SYMMETRICA.
harald.fripertinger "at" uni-graz.at, May 10,
2016
|
|
|
|
|
|
Implementation
in SYMMETRICA |
|
|