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}