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