05 February 2015 04:54:30 PM MONOMIAL_PRB C++ version. Test the MONOMIAL library. MONO_BETWEEN_ENUM_TEST MONO_BETWEEN_ENUM can enumerate the number of monomials in M variables, of total degree between N1 and N2. Using spatial dimension m = 3 N2: 0 1 2 3 4 5 6 7 8 N1 +------------------------------------------------------ 0 | 1 4 10 20 35 56 84 120 165 1 | 0 3 9 19 34 55 83 119 164 2 | 0 0 6 16 31 52 80 116 161 3 | 0 0 0 10 25 46 74 110 155 4 | 0 0 0 0 15 36 64 100 145 5 | 0 0 0 0 0 21 49 85 130 6 | 0 0 0 0 0 0 28 64 109 7 | 0 0 0 0 0 0 0 36 81 8 | 0 0 0 0 0 0 0 0 45 MONO_BETWEEN_NEXT_GREVLEX_TEST MONO_BETWEEN_NEXT_GREVLEX can list the monomials in M variables, of total degree N between N1 and N2, in grevlex order, one at a time. We start the process with (0,0,...,0,N1). The process ends with (N2,0,...,0,0) Let M = 3 N1 = 2 N2 = 3 1 0 0 2 2 0 1 1 3 1 0 1 4 0 2 0 5 1 1 0 6 2 0 0 7 0 0 3 8 0 1 2 9 1 0 2 10 0 2 1 11 1 1 1 12 2 0 1 13 0 3 0 14 1 2 0 15 2 1 0 16 3 0 0 MONO_BETWEEN_NEXT_GRLEX_TEST MONO_BETWEEN_NEXT_GRLEX can list the monomials in M variables, of total degree N between N1 and N2, in grlex order, one at a time. We start the process with (0,0,...,0,N1). The process ends with (N2,0,...,0,0) Let M = 3 N1 = 2 N2 = 3 1 0 0 2 2 0 1 1 3 0 2 0 4 1 0 1 5 1 1 0 6 2 0 0 7 0 0 3 8 0 1 2 9 0 2 1 10 0 3 0 11 1 0 2 12 1 1 1 13 1 2 0 14 2 0 1 15 2 1 0 16 3 0 0 MONO_BETWEEN_RANDOM_TEST MONO_BETWEEN_RANDOM selects at random a monomial in M dimensions of total degree between N1 and N2. Let M = 3 N1 = 2 N2 = 3 8 1 0 1 20 3 0 0 18 2 0 1 13 0 2 1 11 0 0 3 MONO_NEXT_GREVLEX_TEST MONO_NEXT_GREVLEX computes the next monomial in M variables, in grevlex order. Let M = 4 0 0 | 0 0 0 0 1 1 | 0 0 0 1 2 1 | 0 0 1 0 3 1 | 0 1 0 0 4 1 | 1 0 0 0 5 2 | 0 0 0 2 6 2 | 0 0 1 1 7 2 | 0 1 0 1 8 2 | 1 0 0 1 9 2 | 0 0 2 0 10 2 | 0 1 1 0 11 2 | 1 0 1 0 12 2 | 0 2 0 0 13 2 | 1 1 0 0 14 2 | 2 0 0 0 15 3 | 0 0 0 3 16 3 | 0 0 1 2 17 3 | 0 1 0 2 18 3 | 1 0 0 2 19 3 | 0 0 2 1 20 3 | 0 1 1 1 21 3 | 1 0 1 1 22 3 | 0 2 0 1 23 3 | 1 1 0 1 24 3 | 2 0 0 1 25 3 | 0 0 3 0 26 3 | 0 1 2 0 27 3 | 1 0 2 0 28 3 | 0 2 1 0 29 3 | 1 1 1 0 30 3 | 2 0 1 0 31 3 | 0 3 0 0 32 3 | 1 2 0 0 33 3 | 2 1 0 0 34 3 | 3 0 0 0 MONO_NEXT_GRLEX_TEST MONO_NEXT_GRLEX computes the next monomial in M variables, in grlex order. Let M = 4 0 0 | 0 0 0 0 1 1 | 0 0 0 1 2 1 | 0 0 1 0 3 1 | 0 1 0 0 4 1 | 1 0 0 0 5 2 | 0 0 0 2 6 2 | 0 0 1 1 7 2 | 0 0 2 0 8 2 | 0 1 0 1 9 2 | 0 1 1 0 10 2 | 0 2 0 0 11 2 | 1 0 0 1 12 2 | 1 0 1 0 13 2 | 1 1 0 0 14 2 | 2 0 0 0 15 3 | 0 0 0 3 16 3 | 0 0 1 2 17 3 | 0 0 2 1 18 3 | 0 0 3 0 19 3 | 0 1 0 2 20 3 | 0 1 1 1 21 3 | 0 1 2 0 22 3 | 0 2 0 1 23 3 | 0 2 1 0 24 3 | 0 3 0 0 25 3 | 1 0 0 2 26 3 | 1 0 1 1 27 3 | 1 0 2 0 28 3 | 1 1 0 1 29 3 | 1 1 1 0 30 3 | 1 2 0 0 31 3 | 2 0 0 1 32 3 | 2 0 1 0 33 3 | 2 1 0 0 34 3 | 3 0 0 0 MONO_PRINT_TEST MONO_PRINT can print out a monomial. Monomial [5]:x^(5). Monomial [5]:x^(-5). Monomial [2,1,0,3]:x^(2,1,0,3). Monomial [17,-3,199]:x^(17,-3,199). MONO_RANK_GRLEX_TEST MONO_RANK_GRLEX returns the rank of a monomial in the sequence of all monomials in M dimensions, in grlex order. Print a monomial sequence with ranks assigned. Let M = 3 N = 4 1 0 0 0 2 0 0 1 3 0 1 0 4 1 0 0 5 0 0 2 6 0 1 1 7 0 2 0 8 1 0 1 9 1 1 0 10 2 0 0 11 0 0 3 12 0 1 2 13 0 2 1 14 0 3 0 15 1 0 2 16 1 1 1 17 1 2 0 18 2 0 1 19 2 1 0 20 3 0 0 21 0 0 4 22 0 1 3 23 0 2 2 24 0 3 1 25 0 4 0 26 1 0 3 27 1 1 2 28 1 2 1 29 1 3 0 30 2 0 2 31 2 1 1 32 2 2 0 33 3 0 1 34 3 1 0 35 4 0 0 Now, given a monomial, retrieve its rank in the sequence: 1 0 0 0 4 1 0 0 2 0 0 1 7 0 2 0 15 1 0 2 24 0 3 1 77 3 2 1 158 5 2 1 MONO_TOTAL_ENUM_TEST MONO_TOTAL_ENUM can enumerate the number of monomials in M variables, of total degree N. N: 0 1 2 3 4 5 6 7 8 m +------------------------------------------------------ 1 | 1 1 1 1 1 1 1 1 1 2 | 1 2 3 4 5 6 7 8 9 3 | 1 3 6 10 15 21 28 36 45 4 | 1 4 10 20 35 56 84 120 165 5 | 1 5 15 35 70 126 210 330 495 6 | 1 6 21 56 126 252 462 792 1287 7 | 1 7 28 84 210 462 924 1716 3003 8 | 1 8 36 120 330 792 1716 3432 6435 MONO_TOTAL_NEXT_GREVLEX_TEST MONO_TOTAL_NEXT_GREVLEX can list the monomials in M variables, of total degree N, in grevlex order, one at a time. We start the process with (0,0,...,0,N). The process ends with (N,0,...,0,0) Let M = 3 N = 3 1 0 0 3 2 0 1 2 3 1 0 2 4 0 2 1 5 1 1 1 6 2 0 1 7 0 3 0 8 1 2 0 9 2 1 0 10 3 0 0 MONO_TOTAL_NEXT_GRLEX_TEST MONO_TOTAL_NEXT_GRLEX can list the monomials in M variables, of total degree N, in grlex order, one at a time. We start the process with (0,0,...,0,N). The process ends with (N,0,...,0,0) Let M = 3 N = 3 1 0 0 3 2 0 1 2 3 0 2 1 4 0 3 0 5 1 0 2 6 1 1 1 7 1 2 0 8 2 0 1 9 2 1 0 10 3 0 0 MONO_TOTAL_RANDOM_TEST MONO_TOTAL_RANDOM selects at random a monomial in M dimensions of total degree N. Let M = 3 N = 4 24 0 3 1 35 4 0 0 33 3 0 1 29 1 3 0 27 1 1 2 MONO_UNRANK_GRLEX_TEST MONO_UNRANK_GRLEX is given a rank, and returns the corresponding monomial in the sequence of all monomials in M dimensions in grlex order. For reference, print a monomial sequence with ranks. Let M = 3 N = 4 1 0 0 0 2 0 0 1 3 0 1 0 4 1 0 0 5 0 0 2 6 0 1 1 7 0 2 0 8 1 0 1 9 1 1 0 10 2 0 0 11 0 0 3 12 0 1 2 13 0 2 1 14 0 3 0 15 1 0 2 16 1 1 1 17 1 2 0 18 2 0 1 19 2 1 0 20 3 0 0 21 0 0 4 22 0 1 3 23 0 2 2 24 0 3 1 25 0 4 0 26 1 0 3 27 1 1 2 28 1 2 1 29 1 3 0 30 2 0 2 31 2 1 1 32 2 2 0 33 3 0 1 34 3 1 0 35 4 0 0 Now choose random ranks between 1 and 35 8 1 0 1 34 3 1 0 30 2 0 2 20 3 0 0 15 1 0 2 MONO_UPTO_ENUM_TEST MONO_UPTO_ENUM can enumerate the number of monomials in M variables, of total degree 0 up to N. N: 0 1 2 3 4 5 6 7 8 m +------------------------------------------------------ 1 | 1 2 3 4 5 6 7 8 9 2 | 1 3 6 10 15 21 28 36 45 3 | 1 4 10 20 35 56 84 120 165 4 | 1 5 15 35 70 126 210 330 495 5 | 1 6 21 56 126 252 462 792 1287 6 | 1 7 28 84 210 462 924 1716 3003 7 | 1 8 36 120 330 792 1716 3432 6435 8 | 1 9 45 165 495 1287 3003 6435 12870 MONO_UPTO_NEXT_GREVLEX_TEST MONO_UPTO_NEXT_GREVLEX can list the monomials in M variables, of total degree up to N, in grevlex order, one at a time. We start the process with (0,0,...,0,0). The process ends with (N,0,...,0,0) Let M = 3 N = 4 1 0 0 0 2 0 0 1 3 0 1 0 4 1 0 0 5 0 0 2 6 0 1 1 7 1 0 1 8 0 2 0 9 1 1 0 10 2 0 0 11 0 0 3 12 0 1 2 13 1 0 2 14 0 2 1 15 1 1 1 16 2 0 1 17 0 3 0 18 1 2 0 19 2 1 0 20 3 0 0 21 0 0 4 22 0 1 3 23 1 0 3 24 0 2 2 25 1 1 2 26 2 0 2 27 0 3 1 28 1 2 1 29 2 1 1 30 3 0 1 31 0 4 0 32 1 3 0 33 2 2 0 34 3 1 0 35 4 0 0 MONO_UPTO_NEXT_GRLEX_TEST MONO_UPTO_NEXT_GRLEX can list the monomials in M variables, of total degree up to N, in grlex order, one at a time. We start the process with (0,0,...,0,0). The process ends with (N,0,...,0,0) Let M = 3 N = 4 1 0 0 0 2 0 0 1 3 0 1 0 4 1 0 0 5 0 0 2 6 0 1 1 7 0 2 0 8 1 0 1 9 1 1 0 10 2 0 0 11 0 0 3 12 0 1 2 13 0 2 1 14 0 3 0 15 1 0 2 16 1 1 1 17 1 2 0 18 2 0 1 19 2 1 0 20 3 0 0 21 0 0 4 22 0 1 3 23 0 2 2 24 0 3 1 25 0 4 0 26 1 0 3 27 1 1 2 28 1 2 1 29 1 3 0 30 2 0 2 31 2 1 1 32 2 2 0 33 3 0 1 34 3 1 0 35 4 0 0 MONO_UPTO_RANDOM_TEST MONO_UPTO_RANDOM selects at random a monomial in M dimensions of total degree no greater than N. Let M = 3 N = 4 8 1 0 1 34 3 1 0 30 2 0 2 20 3 0 0 15 1 0 2 MONOMIAL_PRB Normal end of execution. 05 February 2015 04:54:30 PM