% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved. % !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk. \newcommand{\FullPartialFractionExpansionXmpTitle}{FullPartialFractionExpansion} \newcommand{\FullPartialFractionExpansionXmpNumber}{9.29} % % ===================================================================== \begin{page}{FullPartialFractionExpansionXmpPage}{9.29 FullPartialFractionExpansion} % ===================================================================== \beginscroll The domain \spadtype{FullPartialFractionExpansion} implements factor-free conversion of quotients to full partial fractions. \xtc{ Our examples will all involve quotients of univariate polynomials with rational number coefficients. }{ \spadpaste{Fx := FRAC UP(x, FRAC INT) \bound{Fx}} } \xtc{ Here is a simple-looking rational function. }{ \spadpaste{f : Fx := 36 / (x**5-2*x**4-2*x**3+4*x**2+x-2) \bound{f}\free{Fx}} } \xtc{ We use \spadfunFrom{fullPartialFraction}{FullPartialFractionExpansion} to convert it to an object of type \spadtype{FullPartialFractionExpansion}. }{ \spadpaste{g := fullPartialFraction f \bound{g}\free{f}} } \xtc{ Use a coercion to change it back into a quotient. }{ \spadpaste{g :: Fx \free{g}} } \xtc{ Full partial fractions differentiate faster than rational functions. }{ \spadpaste{g5 := D(g, 5) \free{g}\bound{g5}} } \xtc{ }{ \spadpaste{f5 := D(f, 5) \free{f}\bound{f5}} } \xtc{ We can check that the two forms represent the same function. }{ \spadpaste{g5::Fx - f5 \free{Fx g5 f5}} } \xtc{ Here are some examples that are more complicated. }{ \spadpaste{f : Fx := (x**5 * (x-1)) / ((x**2 + x + 1)**2 * (x-2)**3) \free{Fx}\bound{f2}} } \xtc{ }{ \spadpaste{g := fullPartialFraction f \free{f2}\bound{g2}} } \xtc{ }{ \spadpaste{g :: Fx - f \free{f2 g2 Fx}} } \xtc{ }{ \spadpaste{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) \free{Fx}\bound{f3}} } \xtc{ }{ \spadpaste{g := fullPartialFraction f \free{f3}\bound{g3}} } \xtc{ }{ \spadpaste{g :: Fx - f \free{f3 g3 Fx}} } \xtc{ }{ \spadpaste{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)\free{Fx}\bound{f4}} } \xtc{ }{ \spadpaste{g := fullPartialFraction f \free{f4}\bound{g4}} } \xtc{ This verification takes much longer than the conversion to partial fractions. }{ \spadpaste{g :: Fx - f \free{f4 g4 Fx}} } For more information, see the paper: Bronstein, M and Salvy, B. ``Full Partial Fraction Decomposition of Rational Functions,'' {\it Proceedings of ISSAC'93, Kiev}, ACM Press. All see \downlink{`PartialFraction'}{PartialFractionXmpPage}\ignore{PartialFraction} for standard partial fraction decompositions. \endscroll \autobuttons \end{page} %