001    /*
002     * $Id: ExamplesPartialFraction.java 2996 2010-02-07 13:32:42Z kredel $
003     */
004    
005    package edu.jas.ufd;
006    
007    
008    import edu.jas.arith.BigRational;
009    import edu.jas.kern.ComputerThreads;
010    import edu.jas.poly.GenPolynomial;
011    import edu.jas.poly.GenPolynomialRing;
012    import edu.jas.poly.TermOrder;
013    
014    
015    /**
016     * Examples related to partial fraction decomposition.
017     * 
018     * @author Heinz Kredel
019     */
020    
021    public class ExamplesPartialFraction {
022    
023    
024        /**
025         * Main program.
026         * 
027         * @param args
028         */
029        public static void main(String[] args) {
030            example11();
031            example12();
032            example13();
033            example14();
034            // BasicConfigurator.configure();
035            example15();
036            example16();
037            example17();
038            ComputerThreads.terminate();
039        }
040    
041    
042        /**
043         * example11. Rothstein-Trager algorithm.
044         */
045        public static void example11() {
046            System.out.println("\n\nexample 11");
047    
048            TermOrder to = new TermOrder(TermOrder.INVLEX);
049            BigRational cfac = new BigRational(1);
050            String[] vars = new String[] { "x" };
051            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
052    
053            // 1 / ( x^2 - 2 )
054            GenPolynomial<BigRational> D = pfac.parse("x^2 - 2");
055            GenPolynomial<BigRational> N = pfac.getONE();
056    
057            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
058    
059            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFractionIrreducible(N, D);
060            System.out.println("\nintegral " + F);
061        }
062    
063    
064        /**
065         * example12. Rothstein-Trager algorithm.
066         */
067        public static void example12() {
068            System.out.println("\n\nexample 12");
069    
070            TermOrder to = new TermOrder(TermOrder.INVLEX);
071            BigRational cfac = new BigRational(1);
072            String[] vars = new String[] { "x" };
073            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
074    
075            // 1 / ( x^3 + x )
076            GenPolynomial<BigRational> D = pfac.parse("x^3 + x");
077            GenPolynomial<BigRational> N = pfac.getONE();
078    
079            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
080    
081            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
082            System.out.println("\nintegral " + F);
083        }
084    
085    
086        /**
087         * example13. Rothstein-Trager algorithm.
088         */
089        public static void example13() {
090            System.out.println("\n\nexample 13");
091    
092            TermOrder to = new TermOrder(TermOrder.INVLEX);
093            BigRational cfac = new BigRational(1);
094            String[] vars = new String[] { "x" };
095            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
096    
097            // 1 / ( x^6 - 5 x^4 + 5 x^2 + 4 )
098            GenPolynomial<BigRational> D = pfac.parse("x^6 - 5 x^4 + 5 x^2 + 4");
099            GenPolynomial<BigRational> N = pfac.getONE();
100    
101            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
102    
103            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
104            System.out.println("\nintegral " + F);
105        }
106    
107    
108        /**
109         * example14. Rothstein-Trager algorithm.
110         */
111        public static void example14() {
112            System.out.println("\n\nexample 14");
113    
114            TermOrder to = new TermOrder(TermOrder.INVLEX);
115            BigRational cfac = new BigRational(1);
116            String[] vars = new String[] { "x" };
117            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
118    
119            // 1 / ( x^4 + 4 )
120            GenPolynomial<BigRational> D = pfac.parse("x^4 + 4");
121            GenPolynomial<BigRational> N = pfac.getONE();
122    
123            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
124    
125            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
126            System.out.println("\nintegral " + F);
127        }
128    
129    
130        /**
131         * example15. Rothstein-Trager algorithm.
132         */
133        public static void example15() {
134            System.out.println("\n\nexample 15");
135    
136            TermOrder to = new TermOrder(TermOrder.INVLEX);
137            BigRational cfac = new BigRational(1);
138            String[] vars = new String[] { "x" };
139            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
140    
141            // 1 / ( x^3 - 2 )
142            GenPolynomial<BigRational> D = pfac.parse("x^3 - 2");
143            GenPolynomial<BigRational> N = pfac.getONE();
144    
145            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
146    
147            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
148            System.out.println("\nintegral " + F);
149        }
150    
151    
152        /**
153         * example16. Rothstein-Trager algorithm.
154         */
155        public static void example16() {
156            System.out.println("\n\nexample 16");
157    
158            TermOrder to = new TermOrder(TermOrder.INVLEX);
159            BigRational cfac = new BigRational(1);
160            String[] vars = new String[] { "x" };
161            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
162    
163            // 1 / ( x - 1 ) ( x - 2 ) ( x - 3 ) 
164            GenPolynomial<BigRational> D = pfac.parse("( x - 1 ) * ( x - 2 ) * ( x - 3 )");
165            GenPolynomial<BigRational> N = pfac.getONE();
166    
167            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
168    
169            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
170            System.out.println("\nintegral " + F);
171        }
172    
173    
174        /**
175         * example17. Absolute factorization of example15.
176         */
177        public static void example17() {
178            System.out.println("\n\nexample 17");
179    
180            TermOrder to = new TermOrder(TermOrder.INVLEX);
181            BigRational cfac = new BigRational(1);
182            String[] vars = new String[] { "x" };
183            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
184    
185            // 1 / ( x^3 - 2 )
186            GenPolynomial<BigRational> D = pfac.parse("x^3 - 2");
187            GenPolynomial<BigRational> N = pfac.getONE();
188    
189            FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac);
190    
191            PartialFraction<BigRational> F = engine.baseAlgebraicPartialFractionIrreducibleAbsolute(N, D);
192            System.out.println("\nintegral " + F);
193        }
194    
195    }