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    }