001/*
002 * $Id: ExamplesPartialFraction.java 2996 2010-02-07 13:32:42Z kredel $
003 */
004
005package edu.jas.ufd;
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;
013
014
015/**
016 * Examples related to partial fraction decomposition.
017 * 
018 * @author Heinz Kredel
019 */
020
021public 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}