|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.
cycle indices for R and S are
The cycle indices for the actions on the sets of vertices, faces,
edges and diagonals are
INT zykelind_full60(a) OP a;
INT zykelind_full60_extended(a) OP a;
In all these cases the
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;
_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.
routine is called
INT mult_disjunkt_polynom_polynom(a,b,c) OP a,b,c;
b are the two polynomials that should be multiplied.
c is the result.
POLYNOM object in SYMMETRICA
consists of three parts:
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 coefficient,
- the so called self-part, which is a
INTEGER objects that represent the exponents of the monomial
- and a next-part, which
is the lexicographically next monomial,
or zero, if there is no further monomial summand of the polynomial in
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
of length n and all the new entries are set to zero.
Then the self part of each monomial summand
b is appended to the self-part
a (of length n), forming a new self-part of a monomial
The corresponding coefficients of the monomials of
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
in two different alphabets
a is a polynomial in xi and
b is a polynomial
in yi) where
a has n variables.
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
For that reason a multi dimensional cycle index in SYMMETRICA consists
VECTOR-part and a
POLYNOM-part, which can be selected
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
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;
a is a multi dimensional cycle index and
b is a
Its length tells how many families shall be combined
into the new cycle index
The entries of
If for instance
a is a 6-dimensional
cycle index and you want to extract the first and fifth family of
b would be the
VECTOR [1,5] of
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
which computes from a multi dimensional cycle index
INT mz_vereinfachen(a,b) OP a,b;
a a cycle
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 */
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.
last changed: January 23, 2001
|Implementation in SYMMETRICA|