001/* 002 * $Id: GroebnerBaseFGLMExamples.java 5861 2018-07-20 10:09:03Z kredel $ 003 */ 004 005package edu.jas.gbufd; 006 007 008import java.io.IOException; 009import java.io.Reader; 010import java.io.StringReader; 011import java.math.BigInteger; 012import java.util.Arrays; 013import java.util.Collections; 014import java.util.List; 015 016import edu.jas.arith.BigRational; 017import edu.jas.arith.ModInteger; 018import edu.jas.arith.ModIntegerRing; 019import edu.jas.gb.GroebnerBase; 020import edu.jas.poly.ExpVector; 021import edu.jas.poly.GenPolynomial; 022import edu.jas.poly.GenPolynomialTokenizer; 023import edu.jas.poly.Monomial; 024import edu.jas.poly.OrderedPolynomialList; 025import edu.jas.poly.PolyUtil; 026import edu.jas.poly.PolynomialList; 027 028 029/** 030 * Groebner base FGLM examples. 031 * @author Jan Suess 032 */ 033 034public class GroebnerBaseFGLMExamples { 035 036 037 /** 038 * main 039 */ 040 public static void main(String[] args) { 041 //junit.textui.TestRunner.run(suite()); 042 GroebnerBaseFGLMExamples ex = new GroebnerBaseFGLMExamples(); 043 ex.testC5(); 044 /* 045 ex.xtestFiveVarsOrder(); 046 ex.xtestCAP(); 047 ex.xtestAUX(); 048 ex.xtestModC5(); 049 ex.xtestC6(); 050 ex.xtestIsaac(); 051 ex.xtestNiermann(); 052 ex.ytestWalkS7(); 053 ex.ytestCassouMod1(); 054 ex.ytestOmdi1(); 055 ex.ytestLamm1(); 056 ex.xtestEquilibrium(); 057 ex.xtestTrinks2(); 058 ex.xtestHairerRungeKutta_1(); 059 */ 060 } 061 062 063 /* 064 * Constructs a <CODE>GroebnerBaseFGLMExamples</CODE> object. 065 * @param name String. 066 public GroebnerBaseFGLMExamples(String name) { 067 super(name); 068 } 069 */ 070 071 072 /* 073 * suite. 074 public static Test suite() { 075 TestSuite suite = new TestSuite(GroebnerBaseFGLMExamples.class); 076 return suite; 077 } 078 */ 079 080 081 //field Q 082 String all = "Zahlbereich | Ordnung | Elements G | Elements L | bitHeight G | bitHeight L | Deg G | Deg L | Time G | Time FGLM | Time L"; 083 084 085 String grad = "Zahlbereich | Ordnung | Elements G | bitHeight G | Deg G | Time G | vDim"; 086 087 088 String lex = "Zahlbereich | Ordnung | Elements L | bitHeight L | Deg L | Time L"; 089 090 091 String fglm = "Zahlbereich | Ordnung | Elements G | Elements L | bitHeight G | bitHeight L | Deg G | Deg L | Time G | Time FGLM"; 092 093 094 //MOD 1831 095 String modAll = "Zahlbereich | Ordnung | Elements G | Elements L | Deg G | Deg L | Time G | Time FGLM | Time L"; 096 097 098 //String modGrad = "Zahlbereich | Ordnung | Elements G | Deg G | Time G"; 099 100 101 String modfglm = "Zahlbereich | Ordnung | Elements G | Elements L | Deg G | Deg L | Time G | Time FGLM"; 102 103 104 /* 105 @Override 106 protected void setUp() { 107 System.out.println("Setup"); 108 } 109 110 111 @Override 112 protected void tearDown() { 113 System.out.println("Tear Down"); 114 } 115 */ 116 117 //Test with five variables and different variable orders 118 public void xtestFiveVarsOrder() { 119 String polynomials = "( " 120 + " (v^8*x*y*z), ( w^3*x - 2*v), ( 4*x*y - 2 + y), ( 3*y^5 - 3 + z ), ( 8*y^2*z^2 + x * y^6 )" 121 + ") "; 122 String[] order = new String[] { "v", "w", "x", "y", "z" }; 123 124 //String order1 = shuffle(order); 125 String order2 = shuffle(order); 126 //String order3 = shuffle(order); 127 //String order4 = shuffle(order); 128 //String order5 = shuffle(order); 129 //String order6 = "(z,w,v,y,x)"; //langsam 130 //String order7 = "(v,z,w,y,x)"; //langsam 131 //String order8 = "(w,z,v,x,y)"; //langsam 132 133 /* 134 String erg1 = testGeneral(order1, polynomials); 135 String erg2 = testGeneral(order2, polynomials); 136 String erg3 = testGeneral(order3, polynomials); 137 String erg4 = testGeneral(order4, polynomials); 138 String erg5 = testGeneral(order5, polynomials); 139 */ 140 String ergM13 = modAll(order2, polynomials, 13); 141 String ergM7 = modAll(order2, polynomials, 7); 142 143 /* 144 String ergOnlyL_1 = testOnlyLex(order1, polynomials); 145 String ergOnlyL_2 = testOnlyLex(order2, polynomials); 146 String ergOnlyL_3 = testOnlyLex(order3, polynomials); 147 String ergOnlyL_4 = testOnlyLex(order4, polynomials); 148 String ergOnlyL_5 = testOnlyLex(order5, polynomials); 149 String erg6 = testGeneral(order6, polynomials); 150 String erg7 = testGeneral(order7, polynomials); 151 String erg8 = testGeneral(order8, polynomials); 152 */ 153 //langsam: (z,w,v,y,x), (v,z,w,y,x) 154 /* 155 System.out.println(categoryLex); 156 System.out.println(ergOnlyL_1); 157 System.out.println(ergOnlyL_2); 158 System.out.println(ergOnlyL_3); 159 System.out.println(ergOnlyL_4); 160 System.out.println(ergOnlyL_5); 161 162 System.out.println(category); 163 System.out.println(erg6); 164 System.out.println(erg7); 165 System.out.println(erg8); 166 167 168 System.out.println(erg1); 169 System.out.println(erg2); 170 System.out.println(erg3); 171 System.out.println(erg4); 172 System.out.println(erg5); 173 */ 174 System.out.println(all); 175 System.out.println("Mod 13"); 176 System.out.println(ergM13); 177 System.out.println("Mod 7"); 178 System.out.println(ergM7); 179 } 180 181 182 //=================================================================== 183 //Examples taken from "Efficient Computation of Zero-Dimensional Gröbner Bases by Change of Ordering", 184 // 1994, Faugere, Gianni, Lazard, Mora (FGLM) 185 //=================================================================== 186 public void xtestCAP() { 187 String polynomials = "( " + " (y^2*z + 2*x*y*t - 2*x - z)," 188 + "(-x^3*z + 4*x*y^2*z + 4*x^2*y*t + 2*y^3*t + 4*x^2 - 10*y^2 + 4*x*z - 10*y*t + 2)," 189 + "(2*y*z*t + x*t^2 - x - 2*z)," 190 + "(-x*z^3 + 4*y*z^2*t + 4*x*z*t^2 + 2*y*t^3 + 4*x*z + 4*z^2 - 10*y*t -10*t^2 + 2)" 191 + ") "; 192 193 String orderINV = "(x,y,z,t)"; 194 String orderL = "(t,z,y,x)"; 195 196 //Tests 197 String erg_deg = grad(orderINV, polynomials); 198 System.out.println(grad); 199 System.out.println(erg_deg); 200 201 String erg1 = all(orderINV, polynomials); 202 String erg2 = all(orderL, polynomials); 203 String ergMod1 = modAll(orderINV, polynomials, 1831); 204 String ergMod2 = modAll(orderL, polynomials, 1831); 205 System.out.println(all); 206 System.out.println(erg1); 207 System.out.println(erg2); 208 System.out.println("\n"); 209 System.out.println(modAll); 210 System.out.println(ergMod1); 211 System.out.println(ergMod2); 212 } 213 214 215 public void xtestAUX() { 216 String polynomials = "( " + " (a^2*b*c + a*b^2*c + a*b*c^2 + a*b*c + a*b + a*c + b*c)," 217 + "(a^2*b^2*c + a*b^2*c^2 + a^2*b*c + a*b*c + b*c + a + c )," 218 + "(a^2*b^2*c^2 + a^2*b^2*c + a*b^2*c + a*b*c + a*c + c + 1)" + ") "; 219 220 String orderINV = "(a,b,c)"; 221 String orderL = "(c,b,a)"; 222 223 //Tests 224 String erg_deg = grad(orderINV, polynomials); 225 System.out.println(grad); 226 System.out.println(erg_deg); 227 228 String erg1 = all(orderINV, polynomials); 229 String erg2 = all(orderL, polynomials); 230 String ergMod1 = modAll(orderINV, polynomials, 1831); 231 String ergMod2 = modAll(orderL, polynomials, 1831); 232 System.out.println(all); 233 System.out.println(erg1); 234 System.out.println(erg2); 235 System.out.println("\n"); 236 System.out.println(modAll); 237 System.out.println(ergMod1); 238 System.out.println(ergMod2); 239 } 240 241 242 public void testC5() { 243 String polynomials = "( " + " (a + b + c + d + e)," + "(a*b + b*c + c*d + a*e + d*e)," 244 + "(a*b*c + b*c*d + a*b*e + a*d*e + c*d*e)," 245 + "(a*b*c*d + a*b*c*e + a*b*d*e + a*c*d*e + b*c*d*e)," + "(a*b*c*d*e -1)" + ") "; 246 247 String orderINV = "(a,b,c,d,e)"; 248 String orderL = "(e,d,c,b,a)"; 249 250 //Tests 251 String erg_deg = grad(orderINV, polynomials); 252 //System.out.println(grad); 253 //System.out.println(erg_deg); 254 255 String erg1 = all(orderINV, polynomials); 256 String erg2 = all(orderL, polynomials); 257 String ergMod1 = modAll(orderINV, polynomials, 1831); 258 String ergMod2 = modAll(orderL, polynomials, 1831); 259 260 System.out.println(grad); 261 System.out.println(erg_deg); 262 System.out.println(""); 263 System.out.println(all); 264 System.out.println(erg1); 265 System.out.println(erg2); 266 System.out.println("\n"); 267 System.out.println(modAll); 268 System.out.println(ergMod1); 269 System.out.println(ergMod2); 270 } 271 272 273 public void xtestModC5() { 274 String polynomials = "( " + " (a + b + c + d + e)," + "(a*b + b*c + c*d + a*e + d*e)," 275 + "(a*b*c + b*c*d + a*b*e + a*d*e + c*d*e)," 276 + "(b*c*d + a*b*c*e + a*b*d*e + a*c*d*e + b*c*d*e)," + "(a*b*c*d*e -1)" + ") "; 277 278 //String orderINV = "(a,b,c,d,e)"; 279 String orderL = "(e,d,c,b,a)"; 280 281 //Tests 282 String erg_deg = grad(orderL, polynomials); 283 System.out.println(grad); 284 System.out.println(erg_deg); 285 286 /* 287 String ergOnlyFGLM_1 = fglm(orderINV, polynomials); 288 System.out.println(fglm); 289 System.out.println(ergOnlyFGLM_1); 290 291 //Tests MODULO 292 293 String ergOnlyG_1 = modGrad(orderINV, polynomials, 1831); 294 System.out.println(modGrad); 295 System.out.println(ergOnlyG_1); 296 297 String erg1 = modfglm(orderINV, polynomials, 1831); 298 System.out.println(modfglm); 299 System.out.println(erg1); 300 */ 301 } 302 303 304 public void xtestC6() { 305 String polynomials = "( " + " (a + b + c + d + e + f)," + "(a*b + b*c + c*d + d*e + e*f + a*f)," 306 + "(a*b*c + b*c*d + c*d*e + d*e*f + a*e*f + a*b*f)," 307 + "(a*b*c*d + b*c*d*e + c*d*e*f + a*d*e*f + a*b*e*f + a*b*c*f)," 308 + "(a*b*c*d*e + b*c*d*e*f + a*c*d*e*f + a*b*d*e*f + a*b*c*e*f + a*b*c*d*f)," 309 + "(a*b*c*d*e*f - 1)" + ") "; 310 311 String orderINV = "(a,b,c,d,e,f)"; 312 //String orderL = "(f,e,d,c,b,a)"; 313 314 //Tests 315 String erg2 = modAll(orderINV, polynomials, 1831); 316 System.out.println(modAll); 317 System.out.println(erg2); 318 /* 319 String ergOnlyG_1 = modGrad(orderINV, polynomials, 1831); 320 System.out.println(modGrad); 321 System.out.println(ergOnlyG_1); 322 323 String erg1 = modfglm(orderINV, polynomials, 1831); 324 System.out.println(modfglm); 325 System.out.println(erg1); 326 */ 327 } 328 329 330 //=================================================================== 331 //Examples taken from "Der FGLM-Algorithmus: verallgemeinert und implementiert in SINGULAR", 1997, Wichmann 332 //=================================================================== 333 public void xtestIsaac() { 334 String polynomials = "( " 335 + " (8*w^2 + 5*w*x - 4*w*y + 2*w*z + 3*w + 5*x^2 + 2*x*y - 7*x*z - 7*x + 7*y^2 -8*y*z - 7*y + 7*z^2 - 8*z + 8)," 336 + "(3*w^2 - 5*w*x - 3*w*y - 6*w*z + 9*w + 4*x^2 + 2*x*y - 2*x*z + 7*x + 9*y^2 + 6*y*z + 5*y + 7*z^2 + 7*z + 5)," 337 + "(-2*w^2 + 9*w*x + 9*w*y - 7*w*z - 4*w + 8*x^2 + 9*x*y - 3*x*z + 8*x + 6*y^2 - 7*y*z + 4*y - 6*z^2 + 8*z + 2)," 338 + "(7*w^2 + 5*w*x + 3*w*y - 5*w*z - 5*w + 2*x^2 + 9*x*y - 7*x*z + 4*x -4*y^2 - 5*y*z + 6*y - 4*z^2 - 9*z + 2)" 339 + ") "; 340 341 //String orderINV = "(w,x,y,z)"; 342 String orderL = "(z,y,x,w)"; 343 344 //Tests 345 String erg_deg = grad(orderL, polynomials); 346 System.out.println(grad); 347 System.out.println(erg_deg); 348 /* 349 String erg3 = all(orderINV, polynomials); 350 System.out.println(all); 351 System.out.println(erg3); 352 353 String ergOnlyLex_1 = lex(orderINV, polynomials); 354 String ergOnlyLex_2 = lex(orderL, polynomials); 355 System.out.println(lex); 356 System.out.println(ergOnlyLex_1); 357 System.out.println(ergOnlyLex_2); 358 359 String ergOnlyFGLM_1 = fglm(orderINV, polynomials); 360 String ergOnlyFGLM_2 = fglm(orderL, polynomials); 361 System.out.println(fglm); 362 System.out.println(ergOnlyFGLM_1); 363 System.out.println(ergOnlyFGLM_2); 364 365 String ergm1 = modAll(orderINV, polynomials, 2147464751); 366 String ergm2 = modAll(orderL, polynomials, 2147464751); 367 System.out.println(modAll); 368 System.out.println(ergm1); 369 System.out.println(ergm2); 370 */ 371 } 372 373 374 public void xtestNiermann() { 375 String polynomials = "( " + " (x^2 + x*y^2*z - 2*x*y + y^4 + y^2 + z^2)," 376 + "(-x^3*y^2 + x*y^2*z + x*y*z^3 - 2*x*y + y^4)," + "(-2*x^2*y + x*y^4 + y*z^4 - 3)" 377 + ") "; 378 379 String orderINV = "(x,y,z)"; 380 String orderL = "(z,y,x)"; 381 382 //Tests 383 String erg_deg = grad(orderINV, polynomials); 384 System.out.println(grad); 385 System.out.println(erg_deg); 386 /* 387 String erg1 = fglm(orderINV, polynomials); 388 String erg2 = fglm(orderL, polynomials); 389 System.out.println(fglm); 390 System.out.println(erg1); 391 System.out.println(erg2); 392 */ 393 String ergm1 = modfglm(orderINV, polynomials, 1831); 394 String ergm2 = modfglm(orderL, polynomials, 2147464751); 395 System.out.println(modfglm); 396 System.out.println(ergm1); 397 System.out.println(ergm2); 398 } 399 400 401 public void ytestWalkS7() { 402 String polynomials = "( " + " (2*g*b + 2*f*c + 2*e*d + a^2 + a)," 403 + "(2*g*c + 2*f*d + e^2 + 2*b*a + b)," + "(2*g*d + 2*f*e + 2*c*a + c + b^2)," 404 + "(2*g*e + f^2 + 2*d*a + d + 2*c*b)," + "(2*g*f + 2*e*a + e + 2*d*b + c^2)," 405 + "(g^2 + 2*f*a + f + 2*e*b + 2*d*c)," + "(2*g*a + g + 2*f*b + 2*e*c + d^2)" + ") "; 406 407 //String orderINV = "(a,b,c,d,e,f,g)"; 408 String orderL = "(g,f,e,d,c,b,a)"; 409 410 //Tests 411 //String ergm1 = modAll(orderINV, polynomials, 2147464751); 412 //String ergm2 = modfglm(orderL, polynomials, 1831); 413 //System.out.println(modfglm); 414 //System.out.println(ergm1); 415 //System.out.println(ergm2); 416 417 String erg2 = fglm(orderL, polynomials); 418 System.out.println(fglm); 419 System.out.println(erg2); 420 } 421 422 423 public void ytestCassouMod1() { 424 String polynomials = "( " 425 + " (15*a^4*b*c^2 + 6*a^4*b^3 + 21*a^4*b^2*c - 144*a^2*b - 8*a^2*b^2*d - 28*a^2*b*c*d - 648*a^2*c + 36*c^2*d + 9*a^4*c^3 - 120)," 426 + "(30*b^3*a^4*c - 32*c*d^2*b - 720*c*a^2*b - 24*b^3*a^2*d - 432*b^2*a^2 + 576*d*b - 576*c*d + 16*b*a^2*c^2*d + 16*c^2*d^2 + 16*d^2*b^2 + 9*b^4*a^4 + 5184 + 39*c^2*a^4*b^2 + 18*c^3*a^4*b - 432*c^2*a^2 + 24*c^3*a^2*d - 16*b^2*a^2*c*d - 240*b)," 427 + "(216*c*a^2*b - 162*c^2*a^2 - 81*b^2*a^2 + 5184 + 1008*d*b - 1008*c*d + 15*b^2*a^2*c*d - 15*b^3*a^2*d - 80*c*d^2*b + 40*c^2*d^2 + 40*d^2*b^2)," 428 + "(261 + 4*c*a^2*b - 3*c^2*a^2 - 4*b^2*a^2 + 22*d*b - 22*c*d)" + ") "; 429 430 String orderINV = "(a,b,c,d)"; 431 String orderL = "(d,c,b,a)"; 432 433 //Tests 434 String ergm1 = modfglm(orderL, polynomials, 1831); 435 String ergm2 = modfglm(orderINV, polynomials, 1831); 436 System.out.println(modfglm); 437 System.out.println(ergm1); 438 System.out.println(ergm2); 439 } 440 441 442 public void ytestOmdi1() { 443 String polynomials = "( " + " (a + c + v + 2*x - 1)," + "(a*b + c*u + 2*v*w + 2*x*y + 2*x*z -2/3)," 444 + "(a*b^2 + c*u^2 + 2*v*w^2 + 2*x*y^2 + 2*x*z^2 - 2/5)," 445 + "(a*b^3 + c*u^3 + 2*v*w^3 + 2*x*y^3 + 2*x*z^3 - 2/7)," 446 + "(a*b^4 + c*u^4 + 2*v*w^4 + 2*x*y^4 + 2*x*z^4 - 2/9)," + "(v*w^2 + 2*x*y*z - 1/9)," 447 + "(v*w^4 + 2*x*y^2*z^2 - 1/25)," + "(v*w^3 + 2*x*y*z^2 + x*y^2*z - 1/15)," 448 + "(v*w^4 + x*y*z^3 + x*y^3*z -1/21)" + ") "; 449 450 //String orderINV = "(a,b,c,u,v,w,x,y,z)"; 451 String orderL = "(z,y,x,w,v,u,c,b,a)"; 452 453 //Tests 454 String erg_deg = grad(orderL, polynomials); 455 System.out.println(grad); 456 System.out.println(erg_deg); 457 /* 458 String ergm1 = modfglm(orderL, polynomials, 1831); 459 String ergm2 = modfglm(orderINV, polynomials, 1831); 460 System.out.println(modfglm); 461 System.out.println(ergm1); 462 System.out.println(ergm2); 463 */ 464 } 465 466 467 public void ytestLamm1() { 468 String polynomials = "( " 469 + " (45*x^8 + 3*x^7 + 39*x^6 + 30*x^5 + 13*x^4 + 41*x^3 + 5*x^2 + 46*x + 7)," 470 + "(49*x^7*y + 35*x*y^7 + 37*x*y^6 + 9*y^7 + 4*x^6 + 6*y^6 + 27*x^3*y^2 + 20*x*y^4 + 31*x^4 + 33*x^2*y + 24*x^2 + 49*y + 43)" 471 + ") "; 472 473 String orderINV = "(x,y)"; 474 String orderL = "(y,x)"; 475 476 //Tests 477 String erg_deg = grad(orderINV, polynomials); 478 System.out.println(grad); 479 System.out.println(erg_deg); 480 481 String erg1 = all(orderINV, polynomials); 482 String erg2 = all(orderL, polynomials); 483 String ergMod1 = modAll(orderINV, polynomials, 1831); 484 String ergMod2 = modAll(orderL, polynomials, 1831); 485 System.out.println(all); 486 System.out.println(erg1); 487 System.out.println(erg2); 488 System.out.println("\n"); 489 System.out.println(modAll); 490 System.out.println(ergMod1); 491 System.out.println(ergMod2); 492 } 493 494 495 //=================================================================== 496 //Examples taken from "Some Examples for Solving Systems of Algebraic Equations by Calculating Gröbner Bases", 1984, Boege, Gebauer, Kredel 497 //=================================================================== 498 public void xtestEquilibrium() { 499 String polynomials = "( " 500 + " (y^4 - 20/7*z^2)," 501 + "(z^2*x^4 + 7/10*z*x^4 + 7/48*x^4 - 50/27*z^2 - 35/27*z - 49/216)," 502 + "(x^5*y^3 + 7/5*z^4*y^3 + 609/1000 *z^3*y^3 + 49/1250*z^2*y^3 - 27391/800000*z*y^3 - 1029/160000*y^3 + 3/7*z^5*x*y^2 +" 503 + "3/5*z^6*x*y^2 + 63/200*z^3*x*y^2 + 147/2000*z^2*x*y^2 + 4137/800000*z*x*y^2 - 7/20*z^4*x^2*y - 77/125*z^3*x^2*y" 504 + "- 23863/60000*z^2*x^2*y - 1078/9375*z*x^2*y - 24353/1920000*x^2*y - 3/20*z^4*x^3 - 21/100*z^3*x^3" 505 + "- 91/800*z^2*x^3 - 5887/200000*z*x^3 - 343/128000*x^3)" + ") "; 506 507 String order = "(x,y,z)"; 508 509 //Tests 510 String ergOnlyG_1 = grad(order, polynomials); 511 System.out.println(grad); 512 System.out.println(ergOnlyG_1); 513 } 514 515 516 public void xtestTrinks2() { 517 String polynomials = "( " + " (45*p + 35*s - 165*b - 36)," + "(35*p + 40*z + 25*t - 27*s)," 518 + "(15*w + 25*p*s + 30*z - 18*t - 165*b^2)," + "(-9*w + 15*p*t + 20*z*s)," 519 + "(w*p + 2*z*t - 11*b^3)," + "(99*w - 11*s*b + 3*b^2)," 520 + "(b^2 + 33/50*b + 2673/10000)" + ") "; 521 522 String order1 = "(b,s,t,z,p,w)"; 523 String order2 = "(s,b,t,z,p,w)"; 524 String order3 = "(s,t,b,z,p,w)"; 525 String order4 = "(s,t,z,p,b,w)"; 526 String order5 = "(s,t,z,p,w,b)"; 527 String order6 = "(s,z,p,w,b,t)"; 528 String order7 = "(p,w,b,t,s,z)"; 529 String order8 = "(z,w,b,s,t,p)"; 530 String order9 = "(t,z,p,w,b,s)"; 531 String order10 = "(z,p,w,b,s,t)"; 532 String order11 = "(p,w,b,s,t,z)"; 533 String order12 = "(w,b,s,t,z,p)"; 534 535 //Tests 536 String erg_1 = all(order1, polynomials); 537 String erg_2 = all(order2, polynomials); 538 String erg_3 = all(order3, polynomials); 539 String erg_4 = all(order4, polynomials); 540 String erg_5 = all(order5, polynomials); 541 String erg_6 = all(order6, polynomials); 542 String erg_7 = all(order7, polynomials); 543 String erg_8 = all(order8, polynomials); 544 String erg_9 = all(order9, polynomials); 545 String erg_10 = all(order10, polynomials); 546 String erg_11 = all(order11, polynomials); 547 String erg_12 = all(order12, polynomials); 548 System.out.println(all); 549 System.out.println(erg_1); 550 System.out.println(erg_2); 551 System.out.println(erg_3); 552 System.out.println(erg_4); 553 System.out.println(erg_5); 554 System.out.println(erg_6); 555 System.out.println(erg_7); 556 System.out.println(erg_8); 557 System.out.println(erg_9); 558 System.out.println(erg_10); 559 System.out.println(erg_11); 560 System.out.println(erg_12); 561 } 562 563 564 public void xtestHairerRungeKutta_1() { 565 String polynomials = "( " + " (a-f),(b-h-g),(e+d+c-1),(d*a+c*b-1/2),(d*a^2+c*b^2-1/3),(c*g*a-1/6)" 566 + ") "; 567 568 String[] order = new String[] { "a", "b", "c", "d", "e", "f", "g", "h" }; 569 570 String order1 = shuffle(order); 571 String order2 = shuffle(order); 572 String order3 = shuffle(order); 573 String order4 = shuffle(order); 574 String order5 = shuffle(order); 575 576 // langsam (e,d,h,c,g,a,f,b), (h,d,b,e,c,g,a,f) um die 120 577 578 // sehr langsam (e,h,d,c,g,b,a,f) um die 1000 579 580 // sehr schnell (g,b,f,h,c,d,a,e), (h,c,a,g,d,f,e,b) 1 millisec 581 582 String ergOnlyG_1 = grad(order1, polynomials); 583 System.out.println(grad); 584 System.out.println(ergOnlyG_1); 585 586 String ergOnlyL_1 = lex(order1, polynomials); 587 String ergOnlyL_2 = lex(order2, polynomials); 588 String ergOnlyL_3 = lex(order3, polynomials); 589 String ergOnlyL_4 = lex(order4, polynomials); 590 String ergOnlyL_5 = lex(order5, polynomials); 591 592 System.out.println(lex); 593 System.out.println(ergOnlyL_1); 594 System.out.println(ergOnlyL_2); 595 System.out.println(ergOnlyL_3); 596 System.out.println(ergOnlyL_4); 597 System.out.println(ergOnlyL_5); 598 599 //String ergGeneral = all(order, polynomials); 600 //System.out.println(all); 601 //System.out.println(ergGeneral); 602 } 603 604 605 //================================================================================================= 606 //Internal methods 607 //================================================================================================= 608 @SuppressWarnings({ "unchecked", "cast" }) 609 public String all(String order, String polynomials) { 610 GroebnerBaseFGLM<BigRational> IdealObjectFGLM; 611 BigRational coeff = new BigRational(); 612 GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff); 613 614 String polynomials_Grad = order + " G " + polynomials; 615 String polynomials_Lex = order + " L " + polynomials; 616 617 Reader sourceG = new StringReader(polynomials_Grad); 618 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 619 PolynomialList<BigRational> G = null; 620 Reader sourceL = new StringReader(polynomials_Lex); 621 GenPolynomialTokenizer parserL = new GenPolynomialTokenizer(sourceL); 622 PolynomialList<BigRational> L = null; 623 624 try { 625 G = (PolynomialList<BigRational>) parserG.nextPolynomialSet(); 626 L = (PolynomialList<BigRational>) parserL.nextPolynomialSet(); 627 } catch (IOException e) { 628 e.printStackTrace(); 629 return "fail"; 630 } 631 System.out.println("Input " + G); 632 System.out.println("Input " + L); 633 634 //Computation of the Groebnerbase with Buchberger w.r.t INVLEX 635 long buchberger_Lex = System.currentTimeMillis(); 636 List<GenPolynomial<BigRational>> GL = gb.GB(L.list); 637 buchberger_Lex = System.currentTimeMillis() - buchberger_Lex; 638 639 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 640 long buchberger_Grad = System.currentTimeMillis(); 641 List<GenPolynomial<BigRational>> GG = gb.GB(G.list); 642 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 643 644 //PolynomialList<BigRational> GGG = new PolynomialList<BigRational>(G.ring, GG); 645 //PolynomialList<BigRational> GLL = new PolynomialList<BigRational>(L.ring, GL); 646 647 IdealObjectFGLM = new GroebnerBaseFGLM<BigRational>(); //GGG); 648 //IdealObjectLex = new GroebnerBaseSeq<BigRational>(GLL); 649 650 long tconv = System.currentTimeMillis(); 651 List<GenPolynomial<BigRational>> resultFGLM = IdealObjectFGLM.convGroebnerToLex(GG); 652 tconv = System.currentTimeMillis() - tconv; 653 654 OrderedPolynomialList<BigRational> o1 = new OrderedPolynomialList<BigRational>(GG.get(0).ring, GG); 655 OrderedPolynomialList<BigRational> o2 = new OrderedPolynomialList<BigRational>( 656 resultFGLM.get(0).ring, resultFGLM); 657 //List<GenPolynomial<BigRational>> resultBuchberger = GL; 658 OrderedPolynomialList<BigRational> o3 = new OrderedPolynomialList<BigRational>(GL.get(0).ring, GL); 659 660 int grad_numberOfElements = GG.size(); 661 int lex_numberOfElements = resultFGLM.size(); 662 long grad_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(GG); // IdealObjectFGLM.maxDegreeOfGB(); 663 long lex_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(GL); // IdealObjectLex.maxDegreeOfGB(); 664 665 int grad_height = bitHeight(GG); 666 int lex_height = bitHeight(resultFGLM); 667 668 System.out.println("Order of Variables: " + order); 669 System.out.println("Groebnerbases: "); 670 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 671 System.out.println("Groebnerbase FGML (INVLEX) computed from Buchberger (IGRLEX) " + o2); 672 System.out.println("Groebnerbase Buchberger (INVLEX) " + o3); 673 674 String erg = "BigRational |" + order + " |" + grad_numberOfElements + " |" 675 + lex_numberOfElements + " |" + grad_height + " |" + lex_height 676 + " |" + grad_maxPolyGrad + " |" + lex_maxPolyGrad + " |" 677 + buchberger_Grad + " |" + tconv + " |" + buchberger_Lex; 678 679 //assertEquals(o2, o3); 680 if (!o2.equals(o3)) { 681 throw new RuntimeException("FGLM != GB: " + o2 + " != " + o3); 682 } 683 return erg; 684 } 685 686 687 @SuppressWarnings({ "unchecked", "cast" }) 688 public String fglm(String order, String polynomials) { 689 GroebnerBaseFGLM<BigRational> IdealObjectGrad; 690 //GroebnerBaseAbstract<BigRational> IdealObjectLex; 691 692 BigRational coeff = new BigRational(); 693 GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff); 694 695 String polynomials_Grad = order + " G " + polynomials; 696 697 Reader sourceG = new StringReader(polynomials_Grad); 698 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 699 PolynomialList<BigRational> G = null; 700 701 try { 702 G = (PolynomialList<BigRational>) parserG.nextPolynomialSet(); 703 } catch (IOException e) { 704 e.printStackTrace(); 705 return "fail"; 706 } 707 System.out.println("Input " + G); 708 709 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 710 long buchberger_Grad = System.currentTimeMillis(); 711 List<GenPolynomial<BigRational>> GG = gb.GB(G.list); 712 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 713 714 //PolynomialList<BigRational> GGG = new PolynomialList<BigRational>(G.ring, GG); 715 716 IdealObjectGrad = new GroebnerBaseFGLM<BigRational>(); //GGG); 717 718 long tconv = System.currentTimeMillis(); 719 List<GenPolynomial<BigRational>> resultFGLM = IdealObjectGrad.convGroebnerToLex(GG); 720 tconv = System.currentTimeMillis() - tconv; 721 722 //PolynomialList<BigRational> LLL = new PolynomialList<BigRational>(G.ring, resultFGLM); 723 //IdealObjectLex = new GroebnerBaseSeq<BigRational>(); //LLL); 724 725 OrderedPolynomialList<BigRational> o1 = new OrderedPolynomialList<BigRational>(GG.get(0).ring, GG); 726 OrderedPolynomialList<BigRational> o2 = new OrderedPolynomialList<BigRational>( 727 resultFGLM.get(0).ring, resultFGLM); 728 729 int grad_numberOfElements = GG.size(); 730 int lex_numberOfElements = resultFGLM.size(); 731 long grad_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(GG); //IdealObjectGrad.maxDegreeOfGB(); 732 long lex_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(resultFGLM); //IdealObjectLex.maxDegreeOfGB(); 733 734 int grad_height = bitHeight(GG); 735 int lex_height = bitHeight(resultFGLM); 736 737 System.out.println("Order of Variables: " + order); 738 System.out.println("Groebnerbases: "); 739 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 740 System.out.println("Groebnerbase FGML (INVLEX) computed from Buchberger (IGRLEX) " + o2); 741 742 String erg = "BigRational |" + order + " |" + grad_numberOfElements + " |" 743 + lex_numberOfElements + " |" + grad_height + " |" + lex_height + " |" 744 + grad_maxPolyGrad + " |" + lex_maxPolyGrad + " |" + buchberger_Grad 745 + " |" + tconv; 746 return erg; 747 } 748 749 750 @SuppressWarnings({ "unchecked", "cast" }) 751 public String grad(String order, String polynomials) { 752 BigRational coeff = new BigRational(); 753 GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff); 754 755 String polynomials_Grad = order + " G " + polynomials; 756 757 Reader sourceG = new StringReader(polynomials_Grad); 758 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 759 PolynomialList<BigRational> G = null; 760 761 try { 762 G = (PolynomialList<BigRational>) parserG.nextPolynomialSet(); 763 } catch (IOException e) { 764 e.printStackTrace(); 765 return "fail"; 766 } 767 System.out.println("Input " + G); 768 769 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 770 long buchberger_Grad = System.currentTimeMillis(); 771 List<GenPolynomial<BigRational>> GG = gb.GB(G.list); 772 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 773 774 //PolynomialList<BigRational> GGG = new PolynomialList<BigRational>(G.ring, GG); 775 OrderedPolynomialList<BigRational> o1 = new OrderedPolynomialList<BigRational>(GG.get(0).ring, GG); 776 777 GroebnerBaseFGLM<BigRational> IdealObjectGrad; 778 IdealObjectGrad = new GroebnerBaseFGLM<BigRational>(); //GGG); 779 long grad_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(GG); //IdealObjectGrad.maxDegreeOfGB(); 780 List<GenPolynomial<BigRational>> reducedTerms = IdealObjectGrad.redTerms(GG); 781 OrderedPolynomialList<BigRational> o4 = new OrderedPolynomialList<BigRational>( 782 reducedTerms.get(0).ring, reducedTerms); 783 int grad_numberOfReducedElements = reducedTerms.size(); 784 int grad_numberOfElements = GG.size(); 785 int grad_height = bitHeight(GG); 786 787 System.out.println("Order of Variables: " + order); 788 System.out.println("Groebnerbases: "); 789 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 790 System.out.println("Reduced Terms" + o4); 791 792 String erg = "BigRational |" + order + " |" + grad_numberOfElements + " |" + grad_height + " |" 793 + grad_maxPolyGrad + " |" + buchberger_Grad + " |" 794 + grad_numberOfReducedElements; 795 return erg; 796 } 797 798 799 @SuppressWarnings({ "unchecked", "cast" }) 800 public String lex(String order, String polynomials) { 801 //GroebnerBaseAbstract<BigRational> IdealObjectLex; 802 BigRational coeff = new BigRational(); 803 GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff); 804 805 String polynomials_Lex = order + " L " + polynomials; 806 807 Reader sourceL = new StringReader(polynomials_Lex); 808 GenPolynomialTokenizer parserL = new GenPolynomialTokenizer(sourceL); 809 PolynomialList<BigRational> L = null; 810 811 try { 812 L = (PolynomialList<BigRational>) parserL.nextPolynomialSet(); 813 } catch (IOException e) { 814 e.printStackTrace(); 815 return "fail"; 816 } 817 System.out.println("Input " + L); 818 819 //Computation of the Groebnerbase with Buchberger w.r.t INVLEX 820 long buchberger_Lex = System.currentTimeMillis(); 821 List<GenPolynomial<BigRational>> GL = gb.GB(L.list); 822 buchberger_Lex = System.currentTimeMillis() - buchberger_Lex; 823 824 //PolynomialList<BigRational> GLL = new PolynomialList<BigRational>(L.ring, GL); 825 //IdealObjectLex = new GroebnerBaseAbstract<BigRational>(GLL); 826 827 OrderedPolynomialList<BigRational> o3 = new OrderedPolynomialList<BigRational>(GL.get(0).ring, GL); 828 829 int lex_numberOfElements = GL.size(); 830 long lex_maxPolyGrad = PolyUtil.<BigRational> totalDegreeLeadingTerm(GL); //IdealObjectLex.maxDegreeOfGB(); 831 int lexHeigth = bitHeight(GL); 832 833 System.out.println("Order of Variables: " + order); 834 System.out.println("Groebnerbase Buchberger (INVLEX) " + o3); 835 836 String erg = "BigRational" + order + "|" + lex_numberOfElements + " |" + lexHeigth + " |" 837 + lex_maxPolyGrad + " |" + buchberger_Lex; 838 return erg; 839 } 840 841 842 @SuppressWarnings({ "unchecked", "cast" }) 843 public String modAll(String order, String polynomials, Integer m) { 844 GroebnerBaseFGLM<ModInteger> IdealObjectFGLM; 845 //GroebnerBaseAbstract<ModInteger> IdealObjectLex; 846 ModIntegerRing ring = new ModIntegerRing(m); 847 GroebnerBase<ModInteger> gb = GBFactory.getImplementation(ring); 848 849 String polynomials_Grad = "Mod " + ring.modul + " " + order + " G " + polynomials; 850 String polynomials_Lex = "Mod " + ring.modul + " " + order + " L " + polynomials; 851 852 Reader sourceG = new StringReader(polynomials_Grad); 853 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 854 PolynomialList<ModInteger> G = null; 855 Reader sourceL = new StringReader(polynomials_Lex); 856 GenPolynomialTokenizer parserL = new GenPolynomialTokenizer(sourceL); 857 PolynomialList<ModInteger> L = null; 858 859 try { 860 G = (PolynomialList<ModInteger>) parserG.nextPolynomialSet(); 861 L = (PolynomialList<ModInteger>) parserL.nextPolynomialSet(); 862 } catch (IOException e) { 863 e.printStackTrace(); 864 return "fail"; 865 } 866 System.out.println("G= " + G); 867 System.out.println("L= " + L); 868 869 //Computation of the Groebnerbase with Buchberger w.r.t INVLEX 870 long buchberger_Lex = System.currentTimeMillis(); 871 List<GenPolynomial<ModInteger>> GL = gb.GB(L.list); 872 buchberger_Lex = System.currentTimeMillis() - buchberger_Lex; 873 874 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 875 long buchberger_Grad = System.currentTimeMillis(); 876 List<GenPolynomial<ModInteger>> GG = gb.GB(G.list); 877 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 878 879 //PolynomialList<ModInteger> GGG = new PolynomialList<ModInteger>(G.ring, GG); 880 //PolynomialList<ModInteger> GLL = new PolynomialList<ModInteger>(L.ring, GL); 881 882 IdealObjectFGLM = new GroebnerBaseFGLM<ModInteger>(); //GGG); 883 //IdealObjectLex = new GroebnerBaseAbstract<ModInteger>(GLL); 884 885 long tconv = System.currentTimeMillis(); 886 List<GenPolynomial<ModInteger>> resultFGLM = IdealObjectFGLM.convGroebnerToLex(GG); 887 tconv = System.currentTimeMillis() - tconv; 888 889 OrderedPolynomialList<ModInteger> o1 = new OrderedPolynomialList<ModInteger>(GG.get(0).ring, GG); 890 OrderedPolynomialList<ModInteger> o2 = new OrderedPolynomialList<ModInteger>(resultFGLM.get(0).ring, 891 resultFGLM); 892 List<GenPolynomial<ModInteger>> resultBuchberger = GL; 893 OrderedPolynomialList<ModInteger> o3 = new OrderedPolynomialList<ModInteger>( 894 resultBuchberger.get(0).ring, resultBuchberger); 895 896 int grad_numberOfElements = GG.size(); 897 int lex_numberOfElements = resultFGLM.size(); 898 long grad_maxPolyGrad = PolyUtil.<ModInteger> totalDegreeLeadingTerm(GG); //IdealObjectFGLM.maxDegreeOfGB(); 899 long lex_maxPolyGrad = PolyUtil.<ModInteger> totalDegreeLeadingTerm(GL); //IdealObjectLex.maxDegreeOfGB(); 900 901 System.out.println("Order of Variables: " + order); 902 System.out.println("Groebnerbases: "); 903 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 904 System.out.println("Groebnerbase FGML (INVLEX) computed from Buchberger (IGRLEX) " + o2); 905 System.out.println("Groebnerbase Buchberger (INVLEX) " + o3); 906 907 String erg = "Mod " + m + " |" + order + " |" + grad_numberOfElements + " |" 908 + lex_numberOfElements + " |" + grad_maxPolyGrad + " |" + lex_maxPolyGrad 909 + " |" + buchberger_Grad + " |" + tconv + " |" + buchberger_Lex; 910 911 //assertEquals(o2, o3); 912 if (!o2.equals(o3)) { 913 throw new RuntimeException("FGLM != GB: " + o2 + " != " + o3); 914 } 915 return erg; 916 } 917 918 919 @SuppressWarnings({ "unchecked", "cast" }) 920 public String modGrad(String order, String polynomials, Integer m) { 921 //GroebnerBaseFGLM<ModInteger> IdealObjectFGLM; 922 ModIntegerRing ring = new ModIntegerRing(m); 923 GroebnerBase<ModInteger> gb = GBFactory.getImplementation(ring); 924 925 String polynomials_Grad = "Mod " + ring.modul + " " + order + " G " + polynomials; 926 927 Reader sourceG = new StringReader(polynomials_Grad); 928 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 929 PolynomialList<ModInteger> G = null; 930 931 try { 932 G = (PolynomialList<ModInteger>) parserG.nextPolynomialSet(); 933 } catch (IOException e) { 934 e.printStackTrace(); 935 return "fail"; 936 } 937 System.out.println("G= " + G); 938 939 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 940 long buchberger_Grad = System.currentTimeMillis(); 941 List<GenPolynomial<ModInteger>> GG = gb.GB(G.list); 942 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 943 944 //PolynomialList<ModInteger> GGG = new PolynomialList<ModInteger>(G.ring, GG); 945 //IdealObjectFGLM = new GroebnerBaseFGLM<ModInteger>(); //GGG); 946 947 OrderedPolynomialList<ModInteger> o1 = new OrderedPolynomialList<ModInteger>(GG.get(0).ring, GG); 948 949 int grad_numberOfElements = GG.size(); 950 long grad_maxPolyGrad = PolyUtil.<ModInteger> totalDegreeLeadingTerm(GG); //IdealObjectFGLM.maxDegreeOfGB(); 951 952 System.out.println("Order of Variables: " + order); 953 System.out.println("Groebnerbases: "); 954 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 955 956 String erg = "Mod " + m + " |" + order + " |" + grad_numberOfElements + " |" 957 + grad_maxPolyGrad + " |" + buchberger_Grad; 958 return erg; 959 } 960 961 962 @SuppressWarnings({ "unchecked", "cast" }) 963 public String modfglm(String order, String polynomials, Integer m) { 964 GroebnerBaseFGLM<ModInteger> IdealObjectFGLM; 965 //GroebnerBaseAbstract<ModInteger> IdealObjectLex; 966 ModIntegerRing ring = new ModIntegerRing(m); 967 GroebnerBase<ModInteger> gb = GBFactory.getImplementation(ring); 968 969 String polynomials_Grad = "Mod " + ring.modul + " " + order + " G " + polynomials; 970 971 Reader sourceG = new StringReader(polynomials_Grad); 972 GenPolynomialTokenizer parserG = new GenPolynomialTokenizer(sourceG); 973 PolynomialList<ModInteger> G = null; 974 975 try { 976 G = (PolynomialList<ModInteger>) parserG.nextPolynomialSet(); 977 } catch (IOException e) { 978 e.printStackTrace(); 979 return "fail"; 980 } 981 System.out.println("G= " + G); 982 983 //Computation of the Groebnerbase with Buchberger w.r.t GRADLEX (Total degree + INVLEX) 984 long buchberger_Grad = System.currentTimeMillis(); 985 List<GenPolynomial<ModInteger>> GG = gb.GB(G.list); 986 buchberger_Grad = System.currentTimeMillis() - buchberger_Grad; 987 988 //PolynomialList<ModInteger> GGG = new PolynomialList<ModInteger>(G.ring, GG); 989 IdealObjectFGLM = new GroebnerBaseFGLM<ModInteger>(); //GGG); 990 991 long tconv = System.currentTimeMillis(); 992 List<GenPolynomial<ModInteger>> resultFGLM = IdealObjectFGLM.convGroebnerToLex(GG); 993 tconv = System.currentTimeMillis() - tconv; 994 995 //PolynomialList<ModInteger> LLL = new PolynomialList<ModInteger>(G.ring, resultFGLM); 996 //IdealObjectLex = new GroebnerBaseAbstract<ModInteger>(LLL); 997 998 OrderedPolynomialList<ModInteger> o1 = new OrderedPolynomialList<ModInteger>(GG.get(0).ring, GG); 999 OrderedPolynomialList<ModInteger> o2 = new OrderedPolynomialList<ModInteger>(resultFGLM.get(0).ring, 1000 resultFGLM); 1001 1002 int grad_numberOfElements = GG.size(); 1003 int lex_numberOfElements = resultFGLM.size(); 1004 long grad_maxPolyGrad = PolyUtil.<ModInteger> totalDegreeLeadingTerm(GG); //IdealObjectFGLM.maxDegreeOfGB(); 1005 long lex_maxPolyGrad = PolyUtil.<ModInteger> totalDegreeLeadingTerm(resultFGLM); //IdealObjectLex.maxDegreeOfGB(); 1006 1007 System.out.println("Order of Variables: " + order); 1008 System.out.println("Groebnerbases: "); 1009 System.out.println("Groebnerbase Buchberger (IGRLEX) " + o1); 1010 System.out.println("Groebnerbase FGML (INVLEX) computed from Buchberger (IGRLEX) " + o2); 1011 1012 String erg = "Mod " + m + " |" + order + " |" + grad_numberOfElements + " |" 1013 + lex_numberOfElements + " |" + grad_maxPolyGrad + " |" 1014 + lex_maxPolyGrad + " |" + buchberger_Grad + " |" + tconv; 1015 return erg; 1016 } 1017 1018 1019 /** 1020 * Method shuffle returns a random permutation of a string of variables. 1021 */ 1022 public String shuffle(String[] tempOrder) { 1023 Collections.shuffle(Arrays.asList(tempOrder)); 1024 StringBuffer ret = new StringBuffer("("); 1025 ret.append(ExpVector.varsToString(tempOrder)); 1026 ret.append(")"); 1027 return ret.toString(); 1028 } 1029 1030 1031 /** 1032 * Method bitHeight returns the bitlength of the greatest number occurring 1033 * during the computation of a Groebner base. 1034 */ 1035 public int bitHeight(List<GenPolynomial<BigRational>> list) { 1036 BigInteger denom = BigInteger.ONE; 1037 BigInteger num = BigInteger.ONE; 1038 for (GenPolynomial<BigRational> g : list) { 1039 for (Monomial<BigRational> m : g) { 1040 BigRational bi = m.coefficient(); 1041 BigInteger i = bi.denominator().abs(); 1042 BigInteger j = bi.numerator().abs(); 1043 if (i.compareTo(denom) > 0) 1044 denom = i; 1045 if (j.compareTo(num) > 0) 1046 num = j; 1047 } 1048 } 1049 int erg; 1050 if (denom.compareTo(num) > 0) { 1051 erg = denom.bitLength(); 1052 } else { 1053 erg = num.bitLength(); 1054 } 1055 return erg; 1056 } 1057 1058}