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:Enter the integerobject 6, and you will get (maybe after a longer while than you expected) the following reply#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(); }
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 ℕ 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.outin 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).
Characters |