001/* 002 * $Id: ExamplesGeoTheorems.java 5861 2018-07-20 10:09:03Z kredel $ 003 */ 004 005package edu.jas.application; 006 007 008import java.util.ArrayList; 009import java.util.List; 010 011import edu.jas.arith.BigRational; 012import edu.jas.gb.GBOptimized; 013import edu.jas.gb.GBProxy; 014import edu.jas.gb.GroebnerBase; 015import edu.jas.gb.GroebnerBaseAbstract; 016import edu.jas.gb.GroebnerBaseParallel; 017import edu.jas.gbufd.GBFactory; 018import edu.jas.kern.ComputerThreads; 019import edu.jas.poly.GenPolynomial; 020import edu.jas.poly.GenPolynomialRing; 021import edu.jas.poly.PolynomialList; 022 023 024/** 025 * ExamplesGeoTheorems for Groebner base usage. 026 * @author GeoGebra developers 027 * @author Kovács Zoltán 028 * @author Heinz Kredel 029 */ 030public class ExamplesGeoTheorems { 031 032 033 /** 034 * main. 035 */ 036 public static void main(String[] args) { 037 example10(); 038 example11(); 039 example12(); 040 example13(); 041 example14(); 042 example15(); 043 example16(); 044 example17(); 045 ComputerThreads.terminate(); 046 } 047 048 049 /** 050 * get Pappus Example. 051 */ 052 public static List<GenPolynomial<BigRational>> getExample() { 053 String[] vars = { "a1", "a2", "b1", "b2", "c1", "c2", "d1", "d2", "e1", "e2", "f1", "f2", "g1", "g2", 054 "h1", "h2", "i1", "i2", "j1", "j2", "z1", "z2", "z3" }; 055 056 BigRational br = new BigRational(); 057 GenPolynomialRing<BigRational> pring = new GenPolynomialRing<BigRational>(br, vars); 058 059 GenPolynomial<BigRational> e1 = pring.parse("(a1*(b2 - c2) + a2*( - b1 + c1) + b1*c2 - b2*c1)"); 060 GenPolynomial<BigRational> e2 = pring.parse("(d1*(e2 - f2) + d2*( - e1 + f1) + e1*f2 - e2*f1)"); 061 GenPolynomial<BigRational> e3 = pring.parse("(a1*( - e2 + h2) + a2*(e1 - h1) - e1*h2 + e2*h1)"); 062 GenPolynomial<BigRational> e4 = pring.parse("(b1*(d2 - h2) + b2*( - d1 + h1) + d1*h2 - d2*h1)"); 063 GenPolynomial<BigRational> e5 = pring.parse("(c1*(d2 - i2) + c2*( - d1 + i1) + d1*i2 - d2*i1)"); 064 GenPolynomial<BigRational> e6 = pring.parse("(a1*( - f2 + i2) + a2*(f1 - i1) - f1*i2 + f2*i1)"); 065 GenPolynomial<BigRational> e7 = pring.parse("(c1*(e2 - j2) + c2*( - e1 + j1) + e1*j2 - e2*j1)"); 066 GenPolynomial<BigRational> e8 = pring.parse("(b1*( - f2 + j2) + b2*(f1 - j1) - f1*j2 + f2*j1)"); 067 GenPolynomial<BigRational> e9 = pring 068 .parse("(a1*(b2*z2 - d2*z2) + a2*( - b1*z2 + d1*z2) + b1*d2*z2 - b2*d1*z2 - 1)"); 069 GenPolynomial<BigRational> e10 = pring 070 .parse("(a1*(b2*z3 - e2*z3) + a2*( - b1*z3 + e1*z3) + b1*e2*z3 - b2*e1*z3 - 1)"); 071 GenPolynomial<BigRational> e11 = pring 072 .parse("(h1*(i2*z1 - j2*z1) + h2*( - i1*z1 + j1*z1) + i1*j2*z1 - i2*j1*z1 - 1)"); 073 074 List<GenPolynomial<BigRational>> cp = new ArrayList<GenPolynomial<BigRational>>(11); 075 cp.add(e1); 076 cp.add(e2); 077 cp.add(e3); 078 cp.add(e4); 079 cp.add(e5); 080 cp.add(e6); 081 cp.add(e7); 082 cp.add(e8); 083 cp.add(e9); 084 cp.add(e10); 085 cp.add(e11); 086 return cp; 087 } 088 089 090 /** 091 * Example Pappus, sequential. 092 */ 093 public static void example10() { 094 List<GenPolynomial<BigRational>> cp = getExample(); 095 BigRational br = new BigRational(); 096 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 097 098 GroebnerBase<BigRational> sgb = GBFactory.getImplementation(br); 099 List<GenPolynomial<BigRational>> gb; 100 long t; 101 t = System.currentTimeMillis(); 102 gb = sgb.GB(cp); 103 t = System.currentTimeMillis() - t; 104 //System.out.println("gb = " + gb); 105 System.out.println("time(gb) = " + t); 106 t = System.currentTimeMillis(); 107 gb = sgb.GB(cp); 108 t = System.currentTimeMillis() - t; 109 //System.out.println("gb = " + gb); 110 System.out.println("time(gb) = " + t); 111 112 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 113 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 114 System.out.println("cp = " + cp); 115 System.out.println("id = " + id); 116 117 Dimension dim = id.dimension(); 118 System.out.println("dim = " + dim); 119 } 120 121 122 /** 123 * Example Pappus, parallel proxy. 124 */ 125 public static void example11() { 126 List<GenPolynomial<BigRational>> cp = getExample(); 127 BigRational br = new BigRational(); 128 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 129 130 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getProxy(br); 131 List<GenPolynomial<BigRational>> gb; 132 long t; 133 t = System.currentTimeMillis(); 134 gb = sgb.GB(cp); 135 t = System.currentTimeMillis() - t; 136 //System.out.println("gb = " + gb); 137 System.out.println("time(proxy-gb) = " + t); 138 t = System.currentTimeMillis(); 139 gb = sgb.GB(cp); 140 t = System.currentTimeMillis() - t; 141 //System.out.println("gb = " + gb); 142 System.out.println("time(proxy-gb) = " + t); 143 144 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 145 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 146 System.out.println("cp = " + cp); 147 System.out.println("id = " + id); 148 149 Dimension dim = id.dimension(); 150 System.out.println("dim = " + dim); 151 sgb.terminate(); 152 } 153 154 155 /** 156 * Example Pappus, optimized term order. 157 */ 158 public static void example12() { 159 List<GenPolynomial<BigRational>> cp = getExample(); 160 BigRational br = new BigRational(); 161 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 162 163 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br); 164 GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1 165 List<GenPolynomial<BigRational>> gb; 166 long t; 167 t = System.currentTimeMillis(); 168 gb = ogb.GB(cp); 169 t = System.currentTimeMillis() - t; 170 //System.out.println("gb = " + gb); 171 System.out.println("time(optimized-gb) = " + t); 172 t = System.currentTimeMillis(); 173 gb = ogb.GB(cp); 174 t = System.currentTimeMillis() - t; 175 //System.out.println("gb = " + gb); 176 System.out.println("time(optimized-gb) = " + t); 177 178 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 179 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 180 System.out.println("cp = " + cp); 181 System.out.println("id = " + id); 182 183 Dimension dim = id.dimension(); 184 System.out.println("dim = " + dim); 185 ogb.terminate(); 186 } 187 188 189 /** 190 * Example Pappus, optimized term order and parallel proxy. 191 */ 192 public static void example13() { 193 List<GenPolynomial<BigRational>> cp = getExample(); 194 BigRational br = new BigRational(); 195 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 196 197 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getProxy(br); 198 GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1 199 List<GenPolynomial<BigRational>> gb; 200 long t; 201 t = System.currentTimeMillis(); 202 gb = ogb.GB(cp); 203 t = System.currentTimeMillis() - t; 204 //System.out.println("gb = " + gb); 205 System.out.println("time(optimized-proxy-gb) = " + t); 206 t = System.currentTimeMillis(); 207 gb = ogb.GB(cp); 208 t = System.currentTimeMillis() - t; 209 //System.out.println("gb = " + gb); 210 System.out.println("time(optimized-proxy-gb) = " + t); 211 212 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 213 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 214 System.out.println("cp = " + cp); 215 System.out.println("id = " + id); 216 217 Dimension dim = id.dimension(); 218 System.out.println("dim = " + dim); 219 ogb.terminate(); 220 } 221 222 223 /** 224 * Example Pappus, fraction free. 225 */ 226 public static void example14() { 227 List<GenPolynomial<BigRational>> cp = getExample(); 228 BigRational br = new BigRational(); 229 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 230 231 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb); 232 List<GenPolynomial<BigRational>> gb; 233 long t; 234 t = System.currentTimeMillis(); 235 gb = sgb.GB(cp); 236 t = System.currentTimeMillis() - t; 237 //System.out.println("gb = " + gb); 238 System.out.println("time(fraction-free-gb) = " + t); 239 t = System.currentTimeMillis(); 240 gb = sgb.GB(cp); 241 t = System.currentTimeMillis() - t; 242 //System.out.println("gb = " + gb); 243 System.out.println("time(fraction-free-gb) = " + t); 244 245 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 246 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 247 System.out.println("cp = " + cp); 248 System.out.println("id = " + id); 249 250 Dimension dim = id.dimension(); 251 System.out.println("dim = " + dim); 252 sgb.terminate(); 253 } 254 255 256 /** 257 * Example Pappus, optimized and fraction free. 258 */ 259 public static void example15() { 260 List<GenPolynomial<BigRational>> cp = getExample(); 261 BigRational br = new BigRational(); 262 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 263 264 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb); 265 GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1 266 List<GenPolynomial<BigRational>> gb; 267 long t; 268 t = System.currentTimeMillis(); 269 gb = ogb.GB(cp); 270 t = System.currentTimeMillis() - t; 271 //System.out.println("gb = " + gb); 272 System.out.println("time(optimized-fraction-free-gb) = " + t); 273 t = System.currentTimeMillis(); 274 gb = ogb.GB(cp); 275 t = System.currentTimeMillis() - t; 276 //System.out.println("gb = " + gb); 277 System.out.println("time(optimized-fraction-free-gb) = " + t); 278 279 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 280 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 281 System.out.println("cp = " + cp); 282 System.out.println("id = " + id); 283 284 Dimension dim = id.dimension(); 285 System.out.println("dim = " + dim); 286 ogb.terminate(); 287 } 288 289 290 /** 291 * Example Pappus, proxy, optimized and fraction free. 292 */ 293 public static void example16() { 294 List<GenPolynomial<BigRational>> cp = getExample(); 295 BigRational br = new BigRational(); 296 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 297 298 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb); 299 GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1 300 GroebnerBaseAbstract<BigRational> pgb = new GroebnerBaseParallel<BigRational>(); 301 GroebnerBaseAbstract<BigRational> opgb = new GBOptimized<BigRational>(pgb, true); // false no change for GB == 1 302 GroebnerBaseAbstract<BigRational> popgb = new GBProxy<BigRational>(ogb, opgb); 303 List<GenPolynomial<BigRational>> gb; 304 long t; 305 t = System.currentTimeMillis(); 306 gb = popgb.GB(cp); 307 t = System.currentTimeMillis() - t; 308 //System.out.println("gb = " + gb); 309 System.out.println("time(proxy-optimized-fraction-free-gb) = " + t); 310 t = System.currentTimeMillis(); 311 gb = popgb.GB(cp); 312 t = System.currentTimeMillis() - t; 313 //System.out.println("gb = " + gb); 314 System.out.println("time(proxy-optimized-fraction-free-gb) = " + t); 315 316 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 317 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 318 System.out.println("cp = " + cp); 319 System.out.println("id = " + id); 320 321 Dimension dim = id.dimension(); 322 System.out.println("dim = " + dim); 323 popgb.terminate(); 324 } 325 326 327 /** 328 * Example Pappus, optimized and parallel and fraction free. 329 */ 330 public static void example17() { 331 List<GenPolynomial<BigRational>> cp = getExample(); 332 BigRational br = new BigRational(); 333 GenPolynomialRing<BigRational> pring = cp.get(0).ring; 334 335 GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb); 336 GroebnerBaseAbstract<BigRational> pgb = new GroebnerBaseParallel<BigRational>(); 337 GroebnerBaseAbstract<BigRational> ppgb = new GBProxy<BigRational>(sgb, pgb); 338 GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(ppgb, true); // false no change for GB == 1 339 List<GenPolynomial<BigRational>> gb; 340 long t; 341 t = System.currentTimeMillis(); 342 gb = ogb.GB(cp); 343 t = System.currentTimeMillis() - t; 344 //System.out.println("gb = " + gb); 345 System.out.println("time(optimized-proxy-fraction-free-gb) = " + t); 346 t = System.currentTimeMillis(); 347 gb = ogb.GB(cp); 348 t = System.currentTimeMillis() - t; 349 //System.out.println("gb = " + gb); 350 System.out.println("time(optimized-proxy-fraction-free-gb) = " + t); 351 352 PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb); 353 Ideal<BigRational> id = new Ideal<BigRational>(pl, true); 354 System.out.println("cp = " + cp); 355 System.out.println("id = " + id); 356 357 Dimension dim = id.dimension(); 358 System.out.println("dim = " + dim); 359 ogb.terminate(); 360 } 361 362}