001 /*
002 * $Id: Examples.java 3454 2010-12-27 13:24:38Z kredel $
003 */
004
005 package edu.jas.ufd;
006
007
008 import java.util.SortedMap;
009
010 import org.apache.log4j.BasicConfigurator;
011
012 import edu.jas.arith.BigInteger;
013 import edu.jas.arith.BigRational;
014 import edu.jas.kern.ComputerThreads;
015 import edu.jas.poly.AlgebraicNumber;
016 import edu.jas.poly.AlgebraicNumberRing;
017 import edu.jas.poly.GenPolynomial;
018 import edu.jas.poly.GenPolynomialRing;
019 import edu.jas.poly.PolyUtil;
020 import edu.jas.poly.TermOrder;
021 import edu.jas.vector.GenMatrix;
022 import edu.jas.vector.GenMatrixRing;
023
024
025 /**
026 * Examples for ufd and elementaty integration usage.
027 * @author Heinz Kredel.
028 */
029
030 public class Examples {
031
032
033 /**
034 * main.
035 */
036 public static void main(String[] args) {
037 //BasicConfigurator.configure();
038 //// no go: example6();
039 //BasicConfigurator.configure();
040 //example9();
041 example1();
042 BasicConfigurator.configure();
043 example10();
044 ComputerThreads.terminate();
045 }
046
047
048 /**
049 * example1 with GenMatrix.
050 */
051 public static void example1() {
052 System.out.println("\n\n example 1");
053
054 BigInteger cfac;
055 GenPolynomialRing<BigInteger> fac;
056 QuotientRing<BigInteger> efac;
057 GenPolynomialRing<Quotient<BigInteger>> qfac;
058 GenMatrixRing<GenPolynomial<Quotient<BigInteger>>> mfac;
059
060 cfac = new BigInteger();
061 System.out.println("cfac = " + cfac);
062
063 fac = new GenPolynomialRing<BigInteger>(cfac,2);
064 System.out.println(" fac = " + fac);
065
066 efac = new QuotientRing<BigInteger>( fac );
067 System.out.println("efac = " + efac);
068
069 String[] v = new String[] {"x", "y", "z" };
070 qfac = new GenPolynomialRing<Quotient<BigInteger>>( efac, 3, v );
071 System.out.println("qfac = " + qfac);
072
073 mfac = new GenMatrixRing<GenPolynomial<Quotient<BigInteger>>>( qfac, 3, 3 );
074 System.out.println("mfac = " + mfac);
075
076 GenPolynomial<Quotient<BigInteger>> p;
077 p = qfac.random(3,4,2,0.3f);
078 System.out.println("\np = " + p);
079
080
081 GenMatrix<GenPolynomial<Quotient<BigInteger>>> m;
082 m = mfac.random(3,0.4f);
083 System.out.println("\nm = " + m);
084
085 }
086
087
088 /**
089 * example6. Partial fraction decomposition.
090 */
091 public static void example6() {
092 System.out.println("\n\nexample 6");
093 // http://www.apmaths.uwo.ca/~rcorless/AM563/NOTES/Nov_16_95/node13.html
094
095 TermOrder to = new TermOrder(TermOrder.INVLEX);
096 BigRational cfac = new BigRational(1);
097 String[] alpha = new String[] { "alpha" };
098 String[] vars = new String[] { "x" };
099 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
100
101 // ( 7 x^6 + 1 ) / ( x^7 + x + 1 )
102 GenPolynomial<BigRational> D = pfac.parse("x^7 + x + 1");
103 GenPolynomial<BigRational> N = PolyUtil.<BigRational> baseDeriviative(D);
104
105 FactorRational engine = new FactorRational();
106
107 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
108 System.out.println("\nintegral " + F);
109 }
110
111
112 /**
113 * example9. Rothstein-Trager and absolute factorization algorithm.
114 */
115 public static void example9() {
116 System.out.println("\n\nexample 9");
117
118 TermOrder to = new TermOrder(TermOrder.INVLEX);
119 BigRational cfac = new BigRational(1);
120 String[] alpha = new String[] { "alpha" };
121 String[] vars = new String[] { "x" };
122 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars);
123
124 // 1 / ( x^5 + x - 7 )
125 GenPolynomial<BigRational> D = pfac.parse("( x^5 + x - 7 )");
126 GenPolynomial<BigRational> N = pfac.getONE();
127
128 FactorRational engine = new FactorRational();
129
130 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D);
131 System.out.println("\nintegral " + F);
132
133 //PartialFraction<BigRational> Fa = engine.baseAlgebraicPartialFractionIrreducibleAbsolute(N,D);
134 //System.out.println("\nintegral_a " + Fa);
135
136 }
137
138
139 /**
140 * example10. factorization in Q(sqrt(2))(x)(sqrt(x))[y].
141 */
142 public static void example10() {
143 System.out.println("\n\nexample 10");
144
145 TermOrder to = new TermOrder(TermOrder.INVLEX);
146 BigRational cfac = new BigRational(1);
147
148 String[] var_w2 = new String[] { "w2" };
149 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, var_w2);
150 System.out.println("pfac = " + pfac.toScript());
151
152 GenPolynomial<BigRational> w2 = pfac.parse(" w2^2 - 2 ");
153 System.out.println("w2 = " + w2);
154
155 AlgebraicNumberRing<BigRational> a2fac = new AlgebraicNumberRing<BigRational>(w2, true);
156 System.out.println("a2fac = " + a2fac.toScript());
157
158 String[] var_x = new String[] { "x" };
159 GenPolynomialRing<AlgebraicNumber<BigRational>> apfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(
160 a2fac, 1, to, var_x);
161 System.out.println("apfac = " + apfac.toScript());
162
163 QuotientRing<AlgebraicNumber<BigRational>> qfac = new QuotientRing<AlgebraicNumber<BigRational>>(
164 apfac);
165 System.out.println("qfac = " + qfac.toScript());
166
167 String[] var_wx = new String[] { "wx" };
168 GenPolynomialRing<Quotient<AlgebraicNumber<BigRational>>> pqfac = new GenPolynomialRing<Quotient<AlgebraicNumber<BigRational>>>(
169 qfac, 1, to, var_wx);
170 System.out.println("pqfac = " + pqfac.toScript());
171
172 GenPolynomial<Quotient<AlgebraicNumber<BigRational>>> wx = pqfac.parse(" wx^2 - { x } ");
173 System.out.println("wx = " + wx);
174
175 AlgebraicNumberRing<Quotient<AlgebraicNumber<BigRational>>> axfac = new AlgebraicNumberRing<Quotient<AlgebraicNumber<BigRational>>>(
176 wx, true);
177 System.out.println("axfac = " + axfac.toScript());
178
179 String[] var_y = new String[] { "y" };
180 GenPolynomialRing<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> apqfac = new GenPolynomialRing<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>>(
181 axfac, 1, to, var_y);
182 System.out.println("apqfac = " + apqfac.toScript());
183
184 // ( y^2 - x ) * ( y^2 - 2 ), need {} for recursive coefficients
185 GenPolynomial<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> f;
186 f = apqfac.parse(" ( y^2 - { { x } } ) * ( y^2 - 2 )^2 ");
187 System.out.println("f = " + f);
188
189 FactorAbstract<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> engine = FactorFactory
190 .getImplementation(axfac);
191 System.out.println("engine = " + engine);
192
193 SortedMap<GenPolynomial<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>>, Long> F = engine
194 .factors(f);
195 System.out.println("factors(f) = " + F);
196 }
197
198 }