001    /*
002     * $Id: Examples.java 3356 2010-10-23 16:41:01Z kredel $
003     */
004    
005    package edu.jas.integrate;
006    
007    
008    import java.util.List;
009    
010    import edu.jas.arith.BigRational;
011    import edu.jas.kern.ComputerThreads;
012    import edu.jas.poly.GenPolynomial;
013    import edu.jas.poly.GenPolynomialRing;
014    import edu.jas.poly.TermOrder;
015    import edu.jas.ufd.Quotient;
016    import edu.jas.ufd.QuotientRing;
017    
018    
019    /**
020     * Examples related to elementary integration.
021     * 
022     * @author Axel Kramer
023     * @author Heinz Kredel
024     */
025    
026    public class Examples {
027    
028    
029        /**
030         * Main program.
031         * 
032         * @param args
033         */
034        public static void main(String[] args) {
035            example1();
036            example2();
037            example3();
038        }
039    
040    
041        /**
042         * Example rationals.
043         */
044        public static void example1() {
045    
046            BigRational br = new BigRational(0);
047            String[] vars = new String[] { "x" };
048            GenPolynomialRing<BigRational> fac;
049            fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
050    
051            ElementaryIntegration<BigRational> eIntegrator = new ElementaryIntegration<BigRational>(br);
052    
053            GenPolynomial<BigRational> a = fac.parse("x^7 - 24 x^4 - 4 x^2 + 8 x - 8");
054            System.out.println("A: " + a.toString());
055            GenPolynomial<BigRational> d = fac.parse("x^8 + 6 x^6 + 12 x^4 + 8 x^2");
056            System.out.println("D: " + d.toString());
057            GenPolynomial<BigRational> gcd = a.gcd(d);
058            System.out.println("GCD: " + gcd.toString());
059            List<GenPolynomial<BigRational>>[] ret = eIntegrator.integrateHermite(a, d);
060            System.out.println("Result: " + ret[0] + " , " + ret[1]);
061    
062            System.out.println("-----");
063    
064            a = fac.parse("10 x^2 - 63 x + 29");
065            System.out.println("A: " + a.toString());
066            d = fac.parse("x^3 - 11 x^2 + 40 x -48");
067            System.out.println("D: " + d.toString());
068            gcd = a.gcd(d);
069            System.out.println("GCD: " + gcd.toString());
070            ret = eIntegrator.integrateHermite(a, d);
071            System.out.println("Result: " + ret[0] + " , " + ret[1]);
072    
073            System.out.println("-----");
074    
075            a = fac.parse("x+3");
076            System.out.println("A: " + a.toString());
077            d = fac.parse("x^2 - 3 x - 40");
078            System.out.println("D: " + d.toString());
079            gcd = a.gcd(d);
080            System.out.println("GCD: " + gcd.toString());
081            ret = eIntegrator.integrateHermite(a, d);
082            System.out.println("Result: " + ret[0] + " , " + ret[1]);
083    
084            System.out.println("-----");
085    
086            a = fac.parse("10 x^2+12 x + 20");
087            System.out.println("A: " + a.toString());
088            d = fac.parse("x^3 - 8");
089            System.out.println("D: " + d.toString());
090            gcd = a.gcd(d);
091            System.out.println("GCD: " + gcd.toString());
092            ret = eIntegrator.integrateHermite(a, d);
093            System.out.println("Result: " + ret[0] + " , " + ret[1]);
094    
095            System.out.println("------------------------------------------------------\n");
096            ComputerThreads.terminate();
097        }
098    
099    
100        /**
101         * Example rational plus logarithm.
102         */
103        public static void example2() {
104    
105            BigRational br = new BigRational(0);
106            String[] vars = new String[] { "x" };
107            GenPolynomialRing<BigRational> fac;
108            fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
109    
110            ElementaryIntegration<BigRational> eIntegrator = new ElementaryIntegration<BigRational>(br);
111    
112            GenPolynomial<BigRational> a = fac.parse("x^7 - 24 x^4 - 4 x^2 + 8 x - 8");
113            System.out.println("A: " + a.toString());
114            GenPolynomial<BigRational> d = fac.parse("x^8 + 6 x^6 + 12 x^4 + 8 x^2");
115            System.out.println("D: " + d.toString());
116            GenPolynomial<BigRational> gcd = a.gcd(d);
117            System.out.println("GCD: " + gcd.toString());
118            Integral<BigRational> ret = eIntegrator.integrate(a, d);
119            System.out.println("Result: " + ret);
120    
121            System.out.println("-----");
122    
123            a = fac.parse("10 x^2 - 63 x + 29");
124            System.out.println("A: " + a.toString());
125            d = fac.parse("x^3 - 11 x^2 + 40 x -48");
126            System.out.println("D: " + d.toString());
127            gcd = a.gcd(d);
128            System.out.println("GCD: " + gcd.toString());
129            ret = eIntegrator.integrate(a, d);
130            System.out.println("Result: " + ret);
131    
132            System.out.println("-----");
133    
134            a = fac.parse("x+3");
135            System.out.println("A: " + a.toString());
136            d = fac.parse("x^2 - 3 x - 40");
137            System.out.println("D: " + d.toString());
138            gcd = a.gcd(d);
139            System.out.println("GCD: " + gcd.toString());
140            ret = eIntegrator.integrate(a, d);
141            System.out.println("Result: " + ret);
142    
143            System.out.println("-----");
144    
145            a = fac.parse("10 x^2+12 x + 20");
146            System.out.println("A: " + a.toString());
147            d = fac.parse("x^3 - 8");
148            System.out.println("D: " + d.toString());
149            gcd = a.gcd(d);
150            System.out.println("GCD: " + gcd.toString());
151            ret = eIntegrator.integrate(a, d);
152            System.out.println("Result: " + ret);
153    
154            System.out.println("-----");
155    
156            a = fac.parse("1");
157            System.out.println("A: " + a.toString());
158            d = fac.parse("(x**5 + x - 7)");
159            System.out.println("D: " + d.toString());
160            gcd = a.gcd(d);
161            System.out.println("GCD: " + gcd.toString());
162            ret = eIntegrator.integrate(a, d);
163            System.out.println("Result: " + ret);
164    
165            System.out.println("-----");
166    
167            a = fac.parse("1");
168            d = fac.parse("(x**5 + x - 7)");
169            a = a.sum(d);
170            System.out.println("A: " + a.toString());
171            System.out.println("D: " + d.toString());
172            gcd = a.gcd(d);
173            System.out.println("GCD: " + gcd.toString());
174            ret = eIntegrator.integrate(a, d);
175            System.out.println("Result: " + ret);
176    
177            System.out.println("-----");
178            ComputerThreads.terminate();
179        }
180    
181    
182        /**
183         * Example quotients with rational plus logarithm.
184         */
185        public static void example3() {
186    
187            BigRational br = new BigRational(0);
188            String[] vars = new String[] { "x" };
189            GenPolynomialRing<BigRational> fac;
190            fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars);
191    
192            QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac);
193    
194            ElementaryIntegration<BigRational> eIntegrator = new ElementaryIntegration<BigRational>(br);
195    
196            GenPolynomial<BigRational> a = fac.parse("x^7 - 24 x^4 - 4 x^2 + 8 x - 8");
197            GenPolynomial<BigRational> d = fac.parse("x^8 + 6 x^6 + 12 x^4 + 8 x^2");
198            Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d);
199            System.out.println("q =  " + q);
200            QuotIntegral<BigRational> ret = eIntegrator.integrate(q);
201            System.out.println("Result: " + ret);
202    
203            System.out.println("-----");
204    
205            a = fac.parse("10 x^2 - 63 x + 29");
206            d = fac.parse("x^3 - 11 x^2 + 40 x -48");
207            q = new Quotient<BigRational>(qfac, a, d);
208            System.out.println("q =  " + q);
209            ret = eIntegrator.integrate(q);
210            System.out.println("Result: " + ret);
211    
212            System.out.println("-----");
213    
214            a = fac.parse("x+3");
215            d = fac.parse("x^2 - 3 x - 40");
216            q = new Quotient<BigRational>(qfac, a, d);
217            System.out.println("q =  " + q);
218            ret = eIntegrator.integrate(q);
219            System.out.println("Result: " + ret);
220    
221            System.out.println("-----");
222    
223            a = fac.parse("10 x^2+12 x + 20");
224            d = fac.parse("x^3 - 8");
225            q = new Quotient<BigRational>(qfac, a, d);
226            System.out.println("q =  " + q);
227            ret = eIntegrator.integrate(q);
228            System.out.println("Result: " + ret);
229    
230            System.out.println("-----");
231    
232            a = fac.parse("1");
233            d = fac.parse("(x**5 + x - 7)");
234            q = new Quotient<BigRational>(qfac, a, d);
235            System.out.println("q =  " + q);
236            ret = eIntegrator.integrate(q);
237            System.out.println("Result: " + ret);
238    
239            System.out.println("-----");
240    
241            a = fac.parse("1");
242            d = fac.parse("(x**5 + x - 7)");
243            a = a.sum(d);
244            q = new Quotient<BigRational>(qfac, a, d);
245            System.out.println("q =  " + q);
246            ret = eIntegrator.integrate(q);
247            System.out.println("Result: " + ret);
248    
249            System.out.println("-----");
250    
251            Quotient<BigRational> qi = qfac.random(7);
252            //qi = qi.sum( qfac.random(5) );
253            q = eIntegrator.deriviative(qi);
254            System.out.println("qi =  " + qi);
255            System.out.println("q  =  " + q);
256            ret = eIntegrator.integrate(q);
257            System.out.println("Result: " + ret);
258            boolean t = eIntegrator.isIntegral(ret);
259            System.out.println("isIntegral = " + t);
260    
261            System.out.println("-----");
262            ComputerThreads.terminate();
263        }
264    
265    
266    }