001/* 002 * $Id: ElementaryIntegrationTest.java 4512 2013-07-26 10:23:37Z axelclk $ 003 */ 004 005package edu.jas.integrate; 006 007 008import junit.framework.Test; 009import junit.framework.TestCase; 010import junit.framework.TestSuite; 011 012import org.apache.log4j.BasicConfigurator; 013//import org.apache.log4j.Logger; 014 015import edu.jas.arith.BigRational; 016import edu.jas.poly.GenPolynomial; 017import edu.jas.poly.GenPolynomialRing; 018import edu.jas.poly.TermOrder; 019import edu.jas.poly.PolyUtil; 020import edu.jas.ufd.Quotient; 021import edu.jas.ufd.QuotientRing; 022 023import edu.jas.kern.ComputerThreads; 024 025 026/** 027 * Quotient over BigRational GenPolynomial tests with JUnit. 028 * @author Heinz Kredel. 029 */ 030 031public class ElementaryIntegrationTest extends TestCase { 032 033 /** 034 * main. 035 */ 036 public static void main (String[] args) { 037 //BasicConfigurator.configure(); 038 junit.textui.TestRunner.run( suite() ); 039 } 040 041 /** 042 * Constructs a <CODE>ElementaryIntegrationTest</CODE> object. 043 * @param name String. 044 */ 045 public ElementaryIntegrationTest(String name) { 046 super(name); 047 } 048 049 /** 050 * suite. 051 */ 052 public static Test suite() { 053 TestSuite suite= new TestSuite(ElementaryIntegrationTest.class); 054 return suite; 055 } 056 057 //private final static int bitlen = 100; 058 059 TermOrder tord; 060 QuotientRing<BigRational> qfac; 061 GenPolynomialRing<BigRational> mfac; 062 ElementaryIntegration<BigRational> integrator; 063 QuotIntegral<BigRational> rint; 064 065 Quotient< BigRational > a; 066 Quotient< BigRational > b; 067 Quotient< BigRational > c; 068 Quotient< BigRational > d; 069 Quotient< BigRational > e; 070 071 int rl = 1; // only univariate polynomials 072 int kl = 5; 073 int ll = 3; //6; 074 int el = 4; 075 float q = 0.4f; 076 077 protected void setUp() { 078 a = b = c = d = e = null; 079 tord = new TermOrder( TermOrder.INVLEX ); 080 BigRational br = new BigRational(1); 081 String[] vars = new String[]{ "x" }; 082 mfac = new GenPolynomialRing<BigRational>( br, rl, tord, vars ); 083 qfac = new QuotientRing<BigRational>( mfac ); 084 integrator = new ElementaryIntegration<BigRational>(br); 085 } 086 087 protected void tearDown() { 088 a = b = c = d = e = null; 089 //qfac.terminate(); 090 qfac = null; 091 ComputerThreads.terminate(); 092 } 093 094 095 /** 096 * Test rational integral. 097 */ 098 public void testRational() { 099 for (int i = 0; i < 3; i++) { 100 a = qfac.random(kl, ll+2*i, el+i, q ); 101 //System.out.println("a = " + a); 102// if ( a.isZERO() || a.isONE() ) { 103// continue; 104// } 105 b = integrator.deriviative(a); 106 //System.out.println("b = " + b); 107 rint = integrator.integrate(b); 108 //System.out.println("QuotIntegral: " + rint); 109 110 assertTrue("isIntegral ", integrator.isIntegral(rint)); 111 } 112 } 113 114 115 /** 116 * Test 1/p pure logarithm integral. 117 */ 118 public void testPureLogarithm1() { 119 for (int i = 0; i < 3; i++) { 120 a = qfac.random(kl, ll+i, el+i, q ); 121 //System.out.println("a = " + a); 122// if ( a.isZERO() || a.isONE() ) { 123// continue; 124// } 125 b = new Quotient<BigRational>(qfac,qfac.getONE().num,a.den); 126 //System.out.println("b = " + b); 127 rint = integrator.integrate(b); 128 //System.out.println("QuotIntegral: " + rint); 129 130 assertTrue("isIntegral ", integrator.isIntegral(rint)); 131 } 132 } 133 134 135 /** 136 * Test p'/p pure logarithm integral. 137 * 138 */ 139 public void testPureLogarithmD() { 140 for (int i = 0; i < 3; i++) { 141 a = qfac.random(kl, ll+i, el+i, q ); 142 //System.out.println("a = " + a); 143// if ( a.isZERO() || a.isONE() ) { 144// continue; 145// } 146 GenPolynomial<BigRational> pp = PolyUtil.<BigRational> baseDeriviative(a.den); 147 b = new Quotient<BigRational>(qfac, pp ,a.den); 148 //System.out.println("b = " + b); 149 rint = integrator.integrate(b); 150 //System.out.println("QuotIntegral: " + rint); 151 152 assertTrue("isIntegral ", integrator.isIntegral(rint)); 153 } 154 } 155 156 157 /** 158 * Test mixed rational with p'/p logarithm integral. 159 */ 160 public void testRationalWithLogarithmD() { 161 for (int i = 0; i < 3; i++) { 162 a = qfac.random(kl, ll+i, el+i, q ); 163 //System.out.println("a = " + a); 164// if ( a.isZERO() || a.isONE() ) { 165// continue; 166// } 167 168 b = integrator.deriviative(a); 169 //System.out.println("b = " + b); 170 171 GenPolynomial<BigRational> pp = PolyUtil.<BigRational> baseDeriviative(a.den); 172 c = new Quotient<BigRational>(qfac, pp ,a.den); 173 //System.out.println("c = " + c); 174 175 e = b.sum(c); 176 //System.out.println("e = " + e); 177 178 rint = integrator.integrate(e); 179 //System.out.println("QuotIntegral: " + rint); 180 181 assertTrue("isIntegral ", integrator.isIntegral(rint)); 182 } 183 } 184 185 186 /** 187 * Test mixed rational with 1/p logarithm integral. 188 */ 189 public void xtestRationalWithLogarithm1() { 190 for (int i = 0; i < 3; i++) { 191 a = qfac.random(kl, ll+i, el+i, q ); 192 //System.out.println("a = " + a); 193// if ( a.isZERO() || a.isONE() ) { 194// continue; 195// } 196 197 b = integrator.deriviative(a); 198 //System.out.println("b = " + b); 199 200 d = new Quotient<BigRational>(qfac,qfac.getONE().num,a.den); 201 //System.out.println("d = " + d); 202 203 e = b.sum(d); 204 //System.out.println("e = " + e); 205 206 rint = integrator.integrate(e); 207 //System.out.println("QuotIntegral: " + rint); 208 209 assertTrue("isIntegral ", integrator.isIntegral(rint)); 210 } 211 } 212 213 214 /** 215 * Test mixed rational with p'/p + 1/p logarithm integral. 216 * 217 */ 218 public void testRationalWithLogarithm() { 219 for (int i = 0; i < 3; i++) { 220 a = qfac.random(kl, ll+i, el+i, q ); 221 //System.out.println("a = " + a); 222// if ( a.isZERO() || a.isONE() ) { 223// continue; 224// } 225 226 b = integrator.deriviative(a); 227 //System.out.println("b = " + b); 228 229 GenPolynomial<BigRational> pp = PolyUtil.<BigRational> baseDeriviative(a.den); 230 c = new Quotient<BigRational>(qfac, pp ,a.den); 231 //System.out.println("c = " + c); 232 233 d = new Quotient<BigRational>(qfac,qfac.getONE().num,a.den); 234 //System.out.println("d = " + d); 235 236 e = b.sum(c).sum(d); 237 //System.out.println("e = " + e); 238 239 rint = integrator.integrate(e); 240 //System.out.println("QuotIntegral: " + rint); 241 242 assertTrue("isIntegral ", integrator.isIntegral(rint)); 243 } 244 } 245 246 247 /** 248 * Test rational integral with quotient coefficients. 249 */ 250 public void testRationalRecursive() { 251 QuotientRing<Quotient<BigRational>> qqfac; 252 GenPolynomialRing<Quotient<BigRational>> qmfac; 253 ElementaryIntegration<Quotient<BigRational>> qintegrator; 254 QuotIntegral<Quotient<BigRational>> qrint; 255 String[] vars = new String[]{ "y" }; 256 257 qmfac = new GenPolynomialRing<Quotient<BigRational>>(qfac,1,tord,vars); 258 qqfac = new QuotientRing<Quotient<BigRational>>(qmfac); 259 260 qintegrator = new ElementaryIntegration<Quotient<BigRational>>(qfac); 261 262 Quotient< Quotient< BigRational > > qa, qb; 263 264 for (int i = 0; i < 2; i++) { 265 qa = qqfac.random(2, ll, el, q ); 266 //System.out.println("qa = " + qa); 267 // if ( a.isZERO() || a.isONE() ) { 268 // continue; 269 // } 270 qb = qintegrator.deriviative(qa); 271 //System.out.println("qb = " + qb); 272 qrint = qintegrator.integrate(qb); 273 //System.out.println("QuotIntegral: " + qrint); 274 275 assertTrue("isIntegral ", qintegrator.isIntegral(qrint)); 276 } 277 } 278 279 280 /** 281 * Test mixed rational integral. 282 */ 283 public void testMixedRational() { 284 //integrate( (3*x^16-19*x^15+43*x^14-20*x^13-91*x^12+183*x^11-81*x^10-166*x^9+271*x^8-101*x^7-127*x^6+168*x^5-53*x^4-31*x^3+41*x^2-2*x-2)/(4*x^14-20*x^13+28*x^12+24*x^11-108*x^10+84*x^9+76*x^8-176*x^7+76*x^6+84*x^5-108*x^4+24*x^3+28*x^2-20*x+4), x) 285 286 BigRational br = new BigRational(1); 287 String[] vars = new String[]{ "x" }; 288 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(br,vars); 289 QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(pfac); 290 GenPolynomial<BigRational> n = pfac.parse("(3*x^16-19*x^15+43*x^14-20*x^13-91*x^12+183*x^11-81*x^10-166*x^9+271*x^8-101*x^7-127*x^6+168*x^5-53*x^4-31*x^3+41*x^2-2*x-2)"); 291 GenPolynomial<BigRational> d = pfac.parse("(4*x^14-20*x^13+28*x^12+24*x^11-108*x^10+84*x^9+76*x^8-176*x^7+76*x^6+84*x^5-108*x^4+24*x^3+28*x^2-20*x+4)"); 292 //System.out.println("n = " + n); 293 //System.out.println("d = " + d); 294 Quotient<BigRational> a = new Quotient<BigRational>(qfac,n,d); 295 //System.out.println("a = " + a); 296 297 QuotIntegral<BigRational> rint = integrator.integrate(a); 298 //System.out.println("QuotIntegral: " + rint); 299 assertTrue("isIntegral ", integrator.isIntegral(rint)); 300 301 Quotient<BigRational> b = qfac.parse("{ 3*x^16-19*x^15+43*x^14-20*x^13-91*x^12+183*x^11-81*x^10-166*x^9+271*x^8-101*x^7-127*x^6+168*x^5-53*x^4-31*x^3+41*x^2-2*x-2 | 4*x^14-20*x^13+28*x^12+24*x^11-108*x^10+84*x^9+76*x^8-176*x^7+76*x^6+84*x^5-108*x^4+24*x^3+28*x^2-20*x+4 }"); 302 //System.out.println("b = " + b); 303 assertEquals("a == b: ", a, b); 304 305 rint = integrator.integrate(b); 306 //System.out.println("QuotIntegral: " + rint); 307 assertTrue("isIntegral ", integrator.isIntegral(rint)); 308 } 309 310}