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