001/*
002 * $Id: Examples.java 4025 2012-07-23 16:41:43Z kredel $
003 */
004
005package edu.jas.ufd;
006
007
008import java.util.SortedMap;
009
010import org.apache.log4j.BasicConfigurator;
011
012import edu.jas.arith.BigInteger;
013import edu.jas.arith.BigRational;
014import edu.jas.kern.ComputerThreads;
015import edu.jas.poly.AlgebraicNumber;
016import edu.jas.poly.AlgebraicNumberRing;
017import edu.jas.poly.GenPolynomial;
018import edu.jas.poly.GenPolynomialRing;
019import edu.jas.poly.PolyUtil;
020import edu.jas.poly.TermOrder;
021import edu.jas.vector.GenMatrix;
022import edu.jas.vector.GenMatrixRing;
023
024
025/**
026 * Examples for ufd and elementaty integration usage.
027 * @author Heinz Kredel.
028 */
029
030public 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}