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