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 }