001/*
002 * $Id$
003 */
004
005package edu.jas.integrate;
006
007
008import java.util.List;
009
010import edu.jas.arith.BigRational;
011import edu.jas.kern.ComputerThreads;
012import edu.jas.poly.GenPolynomial;
013import edu.jas.poly.GenPolynomialRing;
014import edu.jas.poly.TermOrder;
015import edu.jas.ufd.Quotient;
016import edu.jas.ufd.QuotientRing;
017
018
019/**
020 * Examples related to elementary integration.
021 * 
022 * @author Axel Kramer
023 * @author Heinz Kredel
024 */
025
026public 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.derivative(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}