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 }