# Apart for complex roots?

Let p[x] be a polynomial in x and consider the partial fraction decomposition of 1/p[x].

The function Apart[] fails in simple cases like this

Apart[1/(1 + x^2)]

(* Out= 1/(1 + x^2) *)


We could define a function

cApart[invp_] := Module[{z, c},
z = x /. Solve[0 == 1/invp, x];
c[k_] :=
Product[If[i != k, 1/(z[[k]] - z[[i]]), 1], {i, 1, Length[z]}];
Sum[c[i]/(x - z[[i]]), {i, 1, Length[z]}]];


which does the job

cApart[1/(1 + x^2)]

(* Out = -(I/(2 (-I + x))) + I/(2 (I + x)) *)


But my question: is there an option for Apart[] or another standard facility in Mathematica which gives the decomposition in general, i.e. in the complex domain?

EDIT #1.1 Standard solution using Extension

The hints given so far can be codensed in this example

With[{d = 1 + x + x^2},
Apart[1/Factor[d, Extension -> (x /. Solve[d == 0, x])]]]

(* -(1/((-1 + 2 (-1)^(1/3)) (-1 + (-1)^(1/3) - x))) - 1/((-1 +
2 (-1)^(1/3)) ((-1)^(1/3) + x)) *)


But it turns out that this procedure is not useful in practical applications as it takes extremely long calculation times (e.g. 1+x+x^4 took to Long to wait for it).

The following form (or something similar) would be nice to have

Apart[1/p[x], Extension -> Complexes] (* proposal, not available *)


EDIT #1.2 Other applications of cApart

It is interesting to apply cApart to a polynomial of higher degree

cApart[1/(1 + x + x^6)]

(*
Out=
1/((x - Root[1 + #1 + #1^6 &, 1]) (Root[1 + #1 + #1^6 &, 1] -
Root[1 + #1 + #1^6 &, 2]) (Root[1 + #1 + #1^6 &, 1] -
Root[1 + #1 + #1^6 &, 3]) (Root[1 + #1 + #1^6 &, 1] -
Root[1 + #1 + #1^6 &, 4]) (Root[1 + #1 + #1^6 &, 1] -
Root[1 + #1 + #1^6 &, 5]) (Root[1 + #1 + #1^6 &, 1] -
Root[1 + #1 + #1^6 &, 6])) +
1/((x - Root[1 + #1 + #1^6 &, 2]) (-Root[1 + #1 + #1^6 &, 1] +
Root[1 + #1 + #1^6 &, 2]) (Root[1 + #1 + #1^6 &, 2] -
Root[1 + #1 + #1^6 &, 3]) (Root[1 + #1 + #1^6 &, 2] -
Root[1 + #1 + #1^6 &, 4]) (Root[1 + #1 + #1^6 &, 2] -
Root[1 + #1 + #1^6 &, 5]) (Root[1 + #1 + #1^6 &, 2] -
Root[1 + #1 + #1^6 &, 6])) +
1/((x - Root[1 + #1 + #1^6 &, 3]) (-Root[1 + #1 + #1^6 &, 1] +
Root[1 + #1 + #1^6 &, 3]) (-Root[1 + #1 + #1^6 &, 2] +
Root[1 + #1 + #1^6 &, 3]) (Root[1 + #1 + #1^6 &, 3] -
Root[1 + #1 + #1^6 &, 4]) (Root[1 + #1 + #1^6 &, 3] -
Root[1 + #1 + #1^6 &, 5]) (Root[1 + #1 + #1^6 &, 3] -
Root[1 + #1 + #1^6 &, 6])) +
1/((x - Root[1 + #1 + #1^6 &, 4]) (-Root[1 + #1 + #1^6 &, 1] +
Root[1 + #1 + #1^6 &, 4]) (-Root[1 + #1 + #1^6 &, 2] +
Root[1 + #1 + #1^6 &, 4]) (-Root[1 + #1 + #1^6 &, 3] +
Root[1 + #1 + #1^6 &, 4]) (Root[1 + #1 + #1^6 &, 4] -
Root[1 + #1 + #1^6 &, 5]) (Root[1 + #1 + #1^6 &, 4] -
Root[1 + #1 + #1^6 &, 6])) +
1/((x - Root[1 + #1 + #1^6 &, 5]) (-Root[1 + #1 + #1^6 &, 1] +
Root[1 + #1 + #1^6 &, 5]) (-Root[1 + #1 + #1^6 &, 2] +
Root[1 + #1 + #1^6 &, 5]) (-Root[1 + #1 + #1^6 &, 3] +
Root[1 + #1 + #1^6 &, 5]) (-Root[1 + #1 + #1^6 &, 4] +
Root[1 + #1 + #1^6 &, 5]) (Root[1 + #1 + #1^6 &, 5] -
Root[1 + #1 + #1^6 &, 6])) +
1/((x - Root[1 + #1 + #1^6 &, 6]) (-Root[1 + #1 + #1^6 &, 1] +
Root[1 + #1 + #1^6 &, 6]) (-Root[1 + #1 + #1^6 &, 2] +
Root[1 + #1 + #1^6 &, 6]) (-Root[1 + #1 + #1^6 &, 3] +
Root[1 + #1 + #1^6 &, 6]) (-Root[1 + #1 + #1^6 &, 4] +
Root[1 + #1 + #1^6 &, 6]) (-Root[1 + #1 + #1^6 &, 5] +
Root[1 + #1 + #1^6 &, 6]))
*)


Which gives the solution in a very regular pattern involving the function Root[]. The numeric evaluation gives

% // N

(*
Out= -((
0.0965468 + 0.0295033 I)/((-0.945402 - 0.611837 I) + x)) - (
0.0965468 - 0.0295033 I)/((-0.945402 + 0.611837 I) + x) - (
0.084438 + 0.114801 I)/((0.154735 - 1.03838 I) + x) - (
0.084438 - 0.114801 I)/((0.154735 + 1.03838 I) + x) + (
0.180985 - 0.279696 I)/((0.790667 - 0.300507 I) + x) + (
0.180985 + 0.279696 I)/((0.790667 + 0.300507 I) + x)
*)


We can even continue to use these symbolic Root[] expressions in more complicated environments such as

g[a_] = Integrate[
Exp[-a x]/(x - Root[1 + #1 + #1^6 &, 1]), {x, 0, \[Infinity]},
Assumptions -> a > 0]

(* Out= E^(-a Root[1 + #1 + #1^6 &, 1]) (-I \[Pi] -
CoshIntegral[a Root[1 + #1 + #1^6 &, 1]] -
SinhIntegral[a Root[1 + #1 + #1^6 &, 1]]) *)


It is gratifying that the integral is evaluated symbolically. We can now easily calculate numerical values, e.g.

g[1.]

(* Out= 0.653737 - 0.158332 I *)

Regards,
Wolfgang

• Maybe this is related? Dec 11, 2014 at 9:20
• You can do this: Apart@Factor[1/(x^2 + 1), Extension -> I]. This answer is closely related Factoring polynomials to factors involving complex coefficients. Apart Dec 11, 2014 at 9:20
• @Artes: Thanks. It looks good but it fails for 1/(1+x^3) which is not completely decomposed or 1/(1+x+x^2) which is not decomposed at all (Version 8). Dec 11, 2014 at 9:45
• @Dr.WolfgangHintze Extension depends on a case by case basis of course. Here this works: Apart@Factor[1/(1 + x^3), Extension -> {(-1)^(1/3)}] or even better FullSimplify /@ Apart@Factor[1/(1 + x^3), Extension -> {(-1)^(1/3), I}] Dec 11, 2014 at 9:53
• There are both ExtendedApart and ApartAll in the Wolfram Function Repository. May 5, 2022 at 15:18

Re: "But my question: is there an option for Apart[] or another standard facility in Mathematica which gives the decomposition in general, i.e. in the complex domain?"

There's IntegrateComplexApart[p[x], x]:

IntegrateComplexApart[1/(x^2 + 1), x]


$$\frac{i}{2 (x+i)}-\frac{i}{2 (x-i)}$$

IntegrateComplexApart[1/(1 + x + x^6), x]


$$\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,6\right]\right)}+\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,5\right]\right)}+\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,4\right]\right)}+\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,3\right]\right)}+\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,2\right]\right)}+\frac{-7776 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]+6480 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]^2-5400 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]^3+4500 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]^4-3750 \text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]^5-3125}{43531 \left(x-\text{Root}\left[\text{\#1}^6+\text{\#1}+1\&,1\right]\right)}$$

I (re?)discovered Factor[..., Extension -> All] today in V13, which may or may not have worked since year 1. It gives the complete factorization of a polynomial, which is needed for the partial fractions decomposition. However, Apart does not always seem to succeed.

(* SUCCESS *)
Apart[Factor[1/(1 + x^6), Extension -> All]] // Map@Simplify
(*
I/(6 I - 6 x) + I/(6 I + 6 x) +
1/(6 - 3 (-I + Sqrt) x) + 1/(6 + 3 (-I + Sqrt) x) +
1/(6 - 3 (I + Sqrt) x) + 1/(6 + 3 (I + Sqrt) x)
*)

(* FAILURE *)
Apart[Factor[1/(1 + x + x^6), Extension -> All]]
(*
-(1/((x - Root[1 + #1 + #1^6 &, 1]) *
(x - Root[1 + #1 + #1^6 &, 2]) *
(x - Root[1 + #1 + #1^6 &, 3]) *
(x - Root[1 + #1 + #1^6 &, 4]) *
(x - Root[1 + #1 + #1^6 &, 5]) *
(-x + Root[1 + #1 + #1^6 &, 6])))
*)


Applying the x /. Solve[..] method in Edit #1 of the OP ran for minutes before I killed it:

With[{d = (1 + x + x^6)},
Apart[1/Factor[d, Extension -> (x /. Solve[d == 0, x])]]]


Update 2023.03.24

There are (since 2020) resource functions that accomplish partial fractions decompositions over extensions of the rationals:

• It does not appear to be Root[] per se for it fails when we replace them by a compound numeric expression: Apart[Factor[1/(1 + x + x^6), Extension -> All] /. Verbatim[Root][_, n_, ___] :> Sin[n]]. But Apart works if the Root[]` objects are replaced by symbols. May 5, 2022 at 14:00