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