001 /* 002 * $Id: ExamplesPartialFraction.java 2996 2010-02-07 13:32:42Z kredel $ 003 */ 004 005 package edu.jas.ufd; 006 007 008 import edu.jas.arith.BigRational; 009 import edu.jas.kern.ComputerThreads; 010 import edu.jas.poly.GenPolynomial; 011 import edu.jas.poly.GenPolynomialRing; 012 import edu.jas.poly.TermOrder; 013 014 015 /** 016 * Examples related to partial fraction decomposition. 017 * 018 * @author Heinz Kredel 019 */ 020 021 public class ExamplesPartialFraction { 022 023 024 /** 025 * Main program. 026 * 027 * @param args 028 */ 029 public static void main(String[] args) { 030 example11(); 031 example12(); 032 example13(); 033 example14(); 034 // BasicConfigurator.configure(); 035 example15(); 036 example16(); 037 example17(); 038 ComputerThreads.terminate(); 039 } 040 041 042 /** 043 * example11. Rothstein-Trager algorithm. 044 */ 045 public static void example11() { 046 System.out.println("\n\nexample 11"); 047 048 TermOrder to = new TermOrder(TermOrder.INVLEX); 049 BigRational cfac = new BigRational(1); 050 String[] vars = new String[] { "x" }; 051 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 052 053 // 1 / ( x^2 - 2 ) 054 GenPolynomial<BigRational> D = pfac.parse("x^2 - 2"); 055 GenPolynomial<BigRational> N = pfac.getONE(); 056 057 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 058 059 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFractionIrreducible(N, D); 060 System.out.println("\nintegral " + F); 061 } 062 063 064 /** 065 * example12. Rothstein-Trager algorithm. 066 */ 067 public static void example12() { 068 System.out.println("\n\nexample 12"); 069 070 TermOrder to = new TermOrder(TermOrder.INVLEX); 071 BigRational cfac = new BigRational(1); 072 String[] vars = new String[] { "x" }; 073 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 074 075 // 1 / ( x^3 + x ) 076 GenPolynomial<BigRational> D = pfac.parse("x^3 + x"); 077 GenPolynomial<BigRational> N = pfac.getONE(); 078 079 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 080 081 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D); 082 System.out.println("\nintegral " + F); 083 } 084 085 086 /** 087 * example13. Rothstein-Trager algorithm. 088 */ 089 public static void example13() { 090 System.out.println("\n\nexample 13"); 091 092 TermOrder to = new TermOrder(TermOrder.INVLEX); 093 BigRational cfac = new BigRational(1); 094 String[] vars = new String[] { "x" }; 095 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 096 097 // 1 / ( x^6 - 5 x^4 + 5 x^2 + 4 ) 098 GenPolynomial<BigRational> D = pfac.parse("x^6 - 5 x^4 + 5 x^2 + 4"); 099 GenPolynomial<BigRational> N = pfac.getONE(); 100 101 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 102 103 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D); 104 System.out.println("\nintegral " + F); 105 } 106 107 108 /** 109 * example14. Rothstein-Trager algorithm. 110 */ 111 public static void example14() { 112 System.out.println("\n\nexample 14"); 113 114 TermOrder to = new TermOrder(TermOrder.INVLEX); 115 BigRational cfac = new BigRational(1); 116 String[] vars = new String[] { "x" }; 117 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 118 119 // 1 / ( x^4 + 4 ) 120 GenPolynomial<BigRational> D = pfac.parse("x^4 + 4"); 121 GenPolynomial<BigRational> N = pfac.getONE(); 122 123 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 124 125 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D); 126 System.out.println("\nintegral " + F); 127 } 128 129 130 /** 131 * example15. Rothstein-Trager algorithm. 132 */ 133 public static void example15() { 134 System.out.println("\n\nexample 15"); 135 136 TermOrder to = new TermOrder(TermOrder.INVLEX); 137 BigRational cfac = new BigRational(1); 138 String[] vars = new String[] { "x" }; 139 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 140 141 // 1 / ( x^3 - 2 ) 142 GenPolynomial<BigRational> D = pfac.parse("x^3 - 2"); 143 GenPolynomial<BigRational> N = pfac.getONE(); 144 145 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 146 147 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D); 148 System.out.println("\nintegral " + F); 149 } 150 151 152 /** 153 * example16. Rothstein-Trager algorithm. 154 */ 155 public static void example16() { 156 System.out.println("\n\nexample 16"); 157 158 TermOrder to = new TermOrder(TermOrder.INVLEX); 159 BigRational cfac = new BigRational(1); 160 String[] vars = new String[] { "x" }; 161 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 162 163 // 1 / ( x - 1 ) ( x - 2 ) ( x - 3 ) 164 GenPolynomial<BigRational> D = pfac.parse("( x - 1 ) * ( x - 2 ) * ( x - 3 )"); 165 GenPolynomial<BigRational> N = pfac.getONE(); 166 167 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 168 169 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, D); 170 System.out.println("\nintegral " + F); 171 } 172 173 174 /** 175 * example17. Absolute factorization of example15. 176 */ 177 public static void example17() { 178 System.out.println("\n\nexample 17"); 179 180 TermOrder to = new TermOrder(TermOrder.INVLEX); 181 BigRational cfac = new BigRational(1); 182 String[] vars = new String[] { "x" }; 183 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 184 185 // 1 / ( x^3 - 2 ) 186 GenPolynomial<BigRational> D = pfac.parse("x^3 - 2"); 187 GenPolynomial<BigRational> N = pfac.getONE(); 188 189 FactorRational engine = (FactorRational) FactorFactory.getImplementation(cfac); 190 191 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFractionIrreducibleAbsolute(N, D); 192 System.out.println("\nintegral " + F); 193 } 194 195 }