Ask Your Question
1

Partial fraction decomposition over the reals or complex

asked 2012-11-20 08:29:04 -0500

davidsevilla gravatar image

Hi,

I am trying to get partial fraction decomposition (for integration) but over the complex numbers. For example, the denominator (x^2+1)*(x^3-2) should produce five fractions. I have experimented a bit with coercion but didn't manage to get anything. For example:

f=x^3-2
R=CC['x']
ff=R(f)
factor(f); factor(ff)

produces

x^3 - 2
(x - 1.25992104989487) * (x + 0.629960524947437 - 1.09112363597172*I) * (x + 0.629960524947437 + 1.09112363597172*I)

so far so good (except for decimals). But (1/f).partial_fraction() produces 1/(x^3 - 2), and (1/ff).partial_fraction() produces

Traceback (click to the left of this block for traceback)
...
AttributeError: 'FractionFieldElement_1poly_field' object has no attribute 'partial_fraction'

On the other hand, (1/ff).partial_fraction_decomposition() gives

(0, [0.209986841649145/(x - 1.25992104989487), (-0.104993420824573 +
0.181853939328620*I)/(x + 0.629960524947437 - 1.09112363597172*I),
(-0.104993420824573 - 0.181853939328620*I)/(x + 0.629960524947437 +
1.09112363597172*I)])

which is correct but not exact. Is there a command to get an exact decomposition over C, or am I stuck with having to set and solve a linear system?

Thanks

edit retag flag offensive close merge delete

Comments

I don't know how to do the computation like you ask, but I can tell you why it's not exact: you're working over CC, so you're asking for a numerical answer.

Snark gravatar imageSnark ( 2012-11-21 20:12:01 -0500 )edit

1 answer

Sort by ยป oldest newest most voted
1

answered 2013-04-14 13:53:23 -0500

updated 2013-04-14 14:27:18 -0500

Expanding on Snark's comment: use algebraic numbers to get an exact answer.

sage: R.<x> = QQbar['x']
sage: ff = x^3 - 2
sage: factor(ff)
(x - 1.259921049894873?) * (x + 0.6299605249474365? - 1.091123635971722?*I) * (x + 0.6299605249474365? + 1.091123635971722?*I)
sage: (1/ff).partial_fraction_decomposition()
(0,
 [(0.2099868416491456? + 0.?e-19*I)/(x - 1.259921049894873?),
  (-0.10499342082457277? + 0.1818539393286203?*I)/(x + 0.6299605249474365? - 1.091123635971722?*I),
  (-0.10499342082457277? - 0.1818539393286203?*I)/(x + 0.6299605249474365? + 1.091123635971722?*I)])

The entries are exact; they live in QQbar. To access the entries:

sage: for q in factor(ff):
...       q = q[0]
...       print 'x - a =', q
...       a = QQbar(x - q)
...       print '  a =', a
...       print '  minpoly:', a.minpoly()
x - a = x - 1.259921049894873?
  a = 1.259921049894873?
  minpoly: x^3 - 2
x - a = x + 0.6299605249474365? - 1.091123635971722?*I
  a = -0.6299605249474365? + 1.091123635971722?*I
  minpoly: x^3 - 2
x - a = x + 0.6299605249474365? + 1.091123635971722?*I
  a = -0.6299605249474365? - 1.091123635971722?*I
  minpoly: x^3 - 2

and

sage: for q in (1/ff).partial_fraction_decomposition()[1]:
...       print 'a / (x - b) =', q
...       a = QQbar(q.numerator())
...       print '  a =', a
...       print '  minpoly:', a.minpoly()
...       b = QQbar(x - q.denominator())
...       print '  b =', b
...       print '  minpoly:', b.minpoly()
a / (x - b) = (0.2099868416491456? + 0.?e-19*I)/(x - 1.259921049894873?)
  a = 0.2099868416491456? + 0.?e-19*I
  minpoly: x^3 - 1/108
  b = 1.259921049894873?
  minpoly: x^3 - 2
a / (x - b) = (-0.10499342082457277? + 0.1818539393286203?*I)/(x + 0.6299605249474365? - 1.091123635971722?*I)
  a = -0.10499342082457277? + 0.1818539393286203?*I
  minpoly: x^3 - 1/108
  b = -0.6299605249474365? + 1.091123635971722?*I
  minpoly: x^3 - 2
a / (x - b) = (-0.10499342082457277? - 0.1818539393286203?*I)/(x + 0.6299605249474365? + 1.091123635971722?*I)
  a = -0.10499342082457277? - 0.1818539393286203?*I
  minpoly: x^3 - 1/108
  b = -0.6299605249474365? - 1.091123635971722?*I
  minpoly: x^3 - 2
edit flag offensive delete link more

Comments

But this does not answer how you get it to print out an exact answer. That is, I want it to print out: (x-2^(1/3)), ( x + (2^(1.3) )/2 + i ( 2^(1/3)* (sqrt(3)/2) ), ( x + (2^(1.3) )/2 - i ( 2^(1/3)* (sqrt(3)/2) )

How do I make it print this out?

Paul Elliott gravatar imagePaul Elliott ( 2017-06-03 20:16:47 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2012-11-20 08:29:04 -0500

Seen: 1,265 times

Last updated: Apr 14 '13