001/* 002 * $Id: ExamplesMore.java 5851 2018-06-24 15:52:18Z elbarbary $ 003 */ 004 005package edu.jas.integrate; 006 007 008import edu.jas.arith.BigRational; 009import edu.jas.kern.ComputerThreads; 010import edu.jas.poly.GenPolynomial; 011import edu.jas.poly.GenPolynomialRing; 012import edu.jas.poly.TermOrder; 013import edu.jas.ufd.Quotient; 014import edu.jas.ufd.QuotientRing; 015 016 017/** 018 * More examples for integrating rational functions. 019 * 020 * @author Youssef Elbarbary 021 */ 022 023public class ExamplesMore { 024 025 026 /** 027 * Main program. 028 * 029 * @param args 030 */ 031 public static void main(String[] args) { 032 exampleRothstein(); 033 exampleLazard(); 034 exampleCzichwoski(); 035 exampleBernoulli(); 036 ComputerThreads.terminate(); 037 } 038 039 040 /** 041 * Example for integrating a rational function using Rothstein-Trager 042 * algorithm. 043 */ 044 public static void exampleRothstein() { 045 BigRational br = new BigRational(0); 046 String[] vars = new String[] { "x" }; 047 GenPolynomialRing<BigRational> fac; 048 fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars); 049 050 QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac); 051 ElementaryIntegration<BigRational> eIntegrator = new ElementaryIntegration<BigRational>(br); 052 053 GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6"); 054 GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4"); 055 // GenPolynomial<BigRational> a = fac.parse("36"); 056 // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2"); 057 // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7"); 058 // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2"); 059 // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5"); 060 // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4"); 061 062 Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d); 063 eIntegrator.irredLogPart = true; 064 065 double startTime = System.currentTimeMillis(); 066 edu.jas.integrate.QuotIntegral<BigRational> ret = eIntegrator.integrate(q); 067 double endTime = System.currentTimeMillis(); 068 System.out.println("Rothstein took " + ((endTime - startTime) / 1000) + " seconds"); 069 System.out.println("Result: " + ret); 070 071 boolean testAnswer = eIntegrator.isIntegral(ret); 072 System.out.println(testAnswer); 073 } 074 075 076 /** 077 * Example for integrating a rational function using Lazard algorithm. 078 */ 079 public static void exampleLazard() { 080 BigRational br = new BigRational(0); 081 String[] vars = new String[] { "x" }; 082 GenPolynomialRing<BigRational> fac; 083 fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars); 084 085 QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac); 086 ElementaryIntegration<BigRational> eIntegratorLaz = new ElementaryIntegrationLazard<BigRational>(br); 087 088 GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6"); 089 GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4"); 090 // GenPolynomial<BigRational> a = fac.parse("36"); 091 // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2"); 092 // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7"); 093 // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2"); 094 // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5"); 095 // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4"); 096 097 Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d); 098 eIntegratorLaz.irredLogPart = true; 099 100 double startTime = System.currentTimeMillis(); 101 QuotIntegral<BigRational> ret = eIntegratorLaz.integrate(q); 102 double endTime = System.currentTimeMillis(); 103 System.out.println("Lazard took " + ((endTime - startTime) / 1000) + " seconds"); 104 System.out.println("Result: " + ret); 105 106 boolean testAnswer = eIntegratorLaz.isIntegral(ret); 107 System.out.println(testAnswer); 108 // System.out.println("-----"); 109 } 110 111 112 /** 113 * Example for integrating a rational function using Czichowski algorithm. 114 */ 115 public static void exampleCzichwoski() { 116 BigRational br = new BigRational(0); 117 String[] vars = new String[] { "x" }; 118 GenPolynomialRing<BigRational> fac; 119 fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars); 120 121 QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac); 122 ElementaryIntegration<BigRational> eIntegratorCzi = new ElementaryIntegrationCzichowski<BigRational>( 123 br); 124 125 // GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6"); 126 // GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4"); 127 // GenPolynomial<BigRational> a = fac.parse("36"); 128 // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2"); 129 // GenPolynomial<BigRational> a = fac.parse("8 x^9 + x^8 - 12 x^7 - 4 x^6 - 26 x^5 - 6 x^4 + 30 x^3 + 23 x^2 - 2 x - 7"); 130 // GenPolynomial<BigRational> d = fac.parse("x^10 - 2 x^8 - 2 x^7 - 4 x^6 + 7 x^4 + 10 x^3 + 3 x^2 - 4 x - 2"); 131 GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5"); 132 GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4"); 133 134 Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d); 135 eIntegratorCzi.irredLogPart = true; 136 137 double startTime = System.currentTimeMillis(); 138 QuotIntegral<BigRational> ret = eIntegratorCzi.integrate(q); // 139 double endTime = System.currentTimeMillis(); 140 System.out.println("Czichowski took " + ((endTime - startTime) / 1000) + " seconds"); 141 System.out.println("Result: " + ret); 142 143 boolean testAnswer = eIntegratorCzi.isIntegral(ret); 144 System.out.println(testAnswer); 145 } 146 147 148 /** 149 * Example for integrating a rational function using Bernoulli algorithm. 150 */ 151 public static void exampleBernoulli() { 152 BigRational br = new BigRational(0); 153 String[] vars = new String[] { "x" }; 154 GenPolynomialRing<BigRational> fac; 155 fac = new GenPolynomialRing<BigRational>(br, vars.length, new TermOrder(TermOrder.INVLEX), vars); 156 157 QuotientRing<BigRational> qfac = new QuotientRing<BigRational>(fac); 158 ElementaryIntegration<BigRational> eIntegratorBer = new ElementaryIntegrationBernoulli<BigRational>( 159 br); 160 161 GenPolynomial<BigRational> a = fac.parse("x^4 - 3 x^2 + 6"); 162 GenPolynomial<BigRational> d = fac.parse("x^6 - 5 x^4 + 5 x^2 + 4"); 163 // GenPolynomial<BigRational> a = fac.parse("36"); 164 // GenPolynomial<BigRational> d = fac.parse("x^5 - 2 x^4 - 2 x^3 + 4 x^2 + x - 2"); 165 // GenPolynomial<BigRational> a = fac.parse("x^5 - x^4 + 4 x^3 + x^2 - x + 5"); 166 // GenPolynomial<BigRational> d = fac.parse("x^4 - 2 x^3 + 5 x^2 - 4 x + 4"); 167 168 Quotient<BigRational> q = new Quotient<BigRational>(qfac, a, d); 169 170 double startTime = System.currentTimeMillis(); 171 edu.jas.integrate.QuotIntegral<BigRational> ret = eIntegratorBer.integrate(q); 172 double endTime = System.currentTimeMillis(); 173 System.out.println("Bernoulli took " + ((endTime - startTime) / 1000) + " seconds"); 174 System.out.println("Result: " + ret); 175 176 // boolean testAnswer = eIntegratorBer.isIntegral(ret); 177 // System.out.println(testAnswer); 178 } 179 180}