9.29 FullPartialFractionExpansion
The domain FullPartialFractionExpansion implements
factor-free conversion of quotients to full partial fractions.
Our examples will all involve quotients of univariate polynomials
with rational number coefficients.
Fx := FRAC UP(x, FRAC INT)
|
Type: Domain
Here is a simple-looking rational function.
f : Fx := 36 / (x**5-2*x**4-2*x**3+4*x**2+x-2)
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
We use fullPartialFractionfullPartialFractionFullPartialFractionExpansion
to convert it to an object of type FullPartialFractionExpansion.
g := fullPartialFraction f
|
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
Use a coercion to change it back into a quotient.
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
Full partial fractions differentiate faster than rational functions.
|
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
|
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
We can check that the two forms represent the same function.
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
Here are some examples that are more complicated.
f : Fx := (x**5 * (x-1)) / ((x**2 + x + 1)**2 * (x-2)**3)
|
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
g := fullPartialFraction f
|
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
f : Fx := (2*x**7-7*x**5+26*x**3+8*x) / (x**8-5*x**6+6*x**4+4*x**2-8)
|
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
g := fullPartialFraction f
|
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
f:Fx := x**3 / (x**21 + 2*x**20 + 4*x**19 + 7*x**18 + 10*x**17 + 17*x**16 + 22*x**15 + 30*x**14 + 36*x**13 + 40*x**12 + 47*x**11 + 46*x**10 + 49*x**9 + 43*x**8 + 38*x**7 + 32*x**6 + 23*x**5 + 19*x**4 + 10*x**3 + 7*x**2 + 2*x + 1)
|
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
g := fullPartialFraction f
|
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
This verification takes much longer than the conversion to
partial fractions.
Type: Fraction UnivariatePolynomial(x,Fraction Integer)
For more information, see the paper: Bronstein, M and Salvy, B.
``Full Partial Fraction Decomposition of Rational Functions,''
Proceedings of ISSAC'93, Kiev, ACM Press. All see
PartialFractionXmpPage
for standard partial fraction decompositions.