001/*
002 * $Id$
003 */
004
005package edu.jas.integrate;
006
007
008import edu.jas.arith.BigRational;
009import edu.jas.kern.ComputerThreads;
010import edu.jas.poly.GenPolynomial;
011import edu.jas.poly.GenPolynomialRing;
012import edu.jas.poly.TermOrder;
013import edu.jas.ufd.Quotient;
014import edu.jas.ufd.QuotientRing;
015
016
017/**
018 * More examples for integrating rational functions.
019 * 
020 * @author Youssef Elbarbary
021 */
022
023public class ExamplesMore {
024
025
026    /**
027     * Main program.
028     * 
029     * @param args
030     */
031    public static void main(String[] args) {
032        exampleRothstein();
033        exampleLazard();
034        exampleCzichwoski();
035        exampleBernoulli();
036        ComputerThreads.terminate();
037    }
038
039
040    /**
041     * Example for integrating a rational function using Rothstein-Trager
042     * algorithm.
043     */
044    public static void exampleRothstein() {
045        BigRational br = new BigRational(0);
046        String[] vars = new String[] { "x" };
047        GenPolynomialRing<BigRational> fac;
048        fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
049
050        QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac);
051        ElementaryIntegration<BigRational> eIntegrator = new ElementaryIntegration<BigRational>(br);
052
053        GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6");
054        GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4");
055        // GenPolynomial<BigRational> a = fac.parse("36");
056        // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2");
057        // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7");
058        // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2");
059        // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5");
060        // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4");
061
062        Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d);
063        eIntegrator.irredLogPart = true;
064
065        double startTime = System.currentTimeMillis();
066        edu.jas.integrate.QuotIntegral<BigRational> ret = eIntegrator.integrate(q);
067        double endTime = System.currentTimeMillis();
068        System.out.println("Rothstein took " + ((endTime - startTime) / 1000) + " seconds");
069        System.out.println("Result: " + ret);
070
071        boolean testAnswer = eIntegrator.isIntegral(ret);
072        System.out.println(testAnswer);
073    }
074
075
076    /**
077     * Example for integrating a rational function using Lazard algorithm.
078     */
079    public static void exampleLazard() {
080        BigRational br = new BigRational(0);
081        String[] vars = new String[] { "x" };
082        GenPolynomialRing<BigRational> fac;
083        fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
084
085        QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac);
086        ElementaryIntegration<BigRational> eIntegratorLaz = new ElementaryIntegrationLazard<BigRational>(br);
087
088        GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6");
089        GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4");
090        // GenPolynomial<BigRational> a = fac.parse("36");
091        // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2");
092        // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7");
093        // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2");
094        // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5");
095        // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4");
096
097        Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d);
098        eIntegratorLaz.irredLogPart = true;
099
100        double startTime = System.currentTimeMillis();
101        QuotIntegral<BigRational> ret = eIntegratorLaz.integrate(q);
102        double endTime = System.currentTimeMillis();
103        System.out.println("Lazard took " + ((endTime - startTime) / 1000) + " seconds");
104        System.out.println("Result: " + ret);
105
106        boolean testAnswer = eIntegratorLaz.isIntegral(ret);
107        System.out.println(testAnswer);
108        // System.out.println("-----");
109    }
110
111
112    /**
113     * Example for integrating a rational function using Czichowski algorithm.
114     */
115    public static void exampleCzichwoski() {
116        BigRational br = new BigRational(0);
117        String[] vars = new String[] { "x" };
118        GenPolynomialRing<BigRational> fac;
119        fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
120
121        QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac);
122        ElementaryIntegration<BigRational> eIntegratorCzi = new ElementaryIntegrationCzichowski<BigRational>(
123                        br);
124
125        // GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6");
126        // GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4");
127        // GenPolynomial<BigRational> a = fac.parse("36");
128        // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2");
129        // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7");
130        // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2");
131        GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5");
132        GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4");
133
134        Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d);
135        eIntegratorCzi.irredLogPart = true;
136
137        double startTime = System.currentTimeMillis();
138        QuotIntegral<BigRational> ret = eIntegratorCzi.integrate(q); //
139        double endTime = System.currentTimeMillis();
140        System.out.println("Czichowski took " + ((endTime - startTime) / 1000) + " seconds");
141        System.out.println("Result: " + ret);
142
143        boolean testAnswer = eIntegratorCzi.isIntegral(ret);
144        System.out.println(testAnswer);
145    }
146
147
148    /**
149     * Example for integrating a rational function using Bernoulli algorithm.
150     */
151    public static void exampleBernoulli() {
152        BigRational br = new BigRational(0);
153        String[] vars = new String[] { "x" };
154        GenPolynomialRing<BigRational> fac;
155        fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
156
157        QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac);
158        ElementaryIntegration<BigRational> eIntegratorBer = new ElementaryIntegrationBernoulli<BigRational>(
159                        br);
160
161        GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6");
162        GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4");
163        // GenPolynomial<BigRational> a = fac.parse("36");
164        // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2");
165        // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5");
166        // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4");
167
168        Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d);
169
170        double startTime = System.currentTimeMillis();
171        edu.jas.integrate.QuotIntegral<BigRational> ret = eIntegratorBer.integrate(q);
172        double endTime = System.currentTimeMillis();
173        System.out.println("Bernoulli took " + ((endTime - startTime) / 1000) + " seconds");
174        System.out.println("Result: " + ret);
175
176        // boolean testAnswer = eIntegratorBer.isIntegral(ret);
177        // System.out.println(testAnswer);
178    }
179
180}