More detailsHow SYMMETRICA does itCharacters

Characters

So far we have just used a few simple routines, but the standard problems you are interested in may be a bit more complicated, hence let us continue this section with a slightly more delicate problem. We would like to evaluate a matrix the entries of which are the scalar products of the Young characters.

In order to do this, we have first of all to generate a vector, the elements of which are the partitions of n. This can be done by

makevectorofpart()
Then we establish a matrix, the number of rows and columns is equal to the length of the vector consisting of all the partitions of n, which we do by
m_lh_m(s_v_l(),s_v_l(), )
(s_v_l() means select vector length, the length of the vector is selected). After this we evaluate, for i less than or equal to the height of this matrix, and for j less than or equal to the length of this matrix the scalar product. The corresponding program (stored in ex6.c) therefore reads as follows (and if you want to do more trial and error, then we recommend to read it very carefully and to consult the files ending with .doc where you can find a short description, for example, of s_v_l()):
Example:  
#include"def.h"
#include"macro.h"
main() 
{
INT i,j;
OP n,a,b,c,d;
anfang();
n = callocobject(); a = callocobject(); b = callocobject();
c = callocobject(); d = callocobject();
scan(INTEGER,n); println(n);
makevectorofpart(n,a);println(a);
m_lh_m(s_v_l(a),s_v_l(a),b);println(b);
for(i=0L;i<s_m_hi(b);i++)
    for(j=0L;j<s_m_li(b);j++)
         { young_character(s_v_i(a,i),c,NULL);
           young_character(s_v_i(a,j),d,NULL);
           scalarproduct(c,d,s_m_ij(b,i,j));
         }
println(b);
freeall(n); freeall(a); freeall(b);
freeall(c); freeall(d);
ende();
}
Enter the integerobject 6, and you will get (maybe after a longer while than you expected) the following reply

6

[6,15,24,114,33,123,1113,222,1122,11112,111111]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[#:#:#:#:#:#:#:#:#:#:#:]

[1:1:1:1:1:1:1:1:1:1:1:]

[1:2:2:3:2:3:4:3:4:5:6:]

[1:2:3:4:3:5:7:6:8:11:15:]

[1:3:4:7:4:8:13:9:14:21:30:]

[1:2:3:4:4:6:8:7:10:14:20:]

[1:3:5:8:6:12:19:15:24:38:60:]

[1:4:7:13:8:19:34:24:42:72:120:]

[1:3:6:9:7:15:24:21:33:54:90:]

[1:4:8:14:10:24:42:33:58:102:180:]

[1:5:11:21:14:38:72:54:102:192:360:]

[1:6:15:30:20:60:120:90:180:360:720:]

Again, the rows and columns correspond to the partitions in inverse lexicographic order, hence, for example, 58 is the scalar product of the Young character corresponding to 1 1 2 2 with itself, and you may know that this has also a combinatorial interpretation: There are exactly 58 matrices over N that have row sums 1,1,2,2 as well as column sums 1,1,2,2.

If you want to try further examples, then you can replace your test.c now by one of the examples ex7.c,ex8.c.... Moreover, we should like to mention, that for bigger examples you can use both input and output files, for example, if you put into a file ex6.in just the number 6, then you can also enter (after make and the return of the prompt, of course) the following line:

a.out < ex6.in > ex6.out
in which case you will find in ex6.out the corresponding output, if SYMMETRICA run properly. For example, you can exchange println(b); by tex(b); in which case you then have in ex6.out a file on which you can run TeX, say, after a few and obvious changes (prompts have to be erased).
harald.fripertinger@kfunigraz.ac.at,
last changed: November 19, 2001

More detailsHow SYMMETRICA does itCharacters