Re: Partial fraction expansion
- To: mathgroup at smc.vnet.net
- Subject: [mg30469] Re: Partial fraction expansion
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 23 Aug 2001 02:15:33 -0400 (EDT)
- References: <9lvh6b$4oc$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Lee, Andrzej
Here are some functions for factorizing and putting into partial fractions.
The methods are different from Andrzej's and sometimes give
different results.
FactorC[p_, x_] := (*over complex numbers*)
Times @@ Cases[Roots[p == 0, x,
Cubics -> False], u_ == v_ -> x - v]
FactorR[p_, x_] := (*over real numbers*)
(Times @@ Join[Cases[#1, u_ == v_ /; Im[v] == 0 :>
x - v], Cases[#1, u_ == v_ /; Im[v] > 0 :>
x^2 - x*2*Re[v] + Abs[v]^2]] & )[
Roots[p == 0, x, Cubics -> False]]
PartialFractionsC[p_, x_] := (*over complex numbers*)
(Apart[Numerator[#1]/FactorC[Denominator[#1], x], x] & )[Together[p]]
PartialFractionsR[p_, x_] := (*over real numbers*)
(Apart[Numerator[#1]/FactorR[Denominator[#1], x], x] & )[Together[p]]
PROGRAMMING NOTES
The option Cubics->False is used to keep roots of cubics in Root[....] form.
This more effIcient for computation.
Re[v] and Abs[v]^2 are used rather than v+Conjugate[v] and v*Conjugate[v]
to prevent Apart from factorising x^2 - x*2*Re[v] + Abs[v]^2] back to
complex form.
EXAMPLES
pol = Expand[(x - 1)*(x + 1)^2*(x^2 + x + 1)^2*(x^2 + 4)];
f1 = FactorC[pol, x]
(-1 + x)*(-2*I + x)*(2*I + x)*(1 + x)^2*((-1)^(1/3) + x)^2*
(-(-1)^(2/3) + x)^2
f2 = FactorR[pol, x]
(-1 + x)*(1 + x)^2*(4 + x^2)*(1 + x + x^2)^2
f3 = FactorR[x^3 + x + 1, x]
(x - Root[1 + #1 + #1^3 & , 1])*
(x^2 - 2*x*Root[-1 + 2*#1 + 8*#1^3 & , 1] +
Root[-1 - #1^4 + #1^6 & , 2]^2)
Root objects appear because of the option Cubics->False in Roots.
We can sometimes get radical forms, but notice the complication.
ToRadicals[f3]
((2/(3*(-9 + Sqrt[93])))^(1/3) -
((1/2)*(-9 + Sqrt[93]))^(1/3)/3^(2/3) + x)*
(1/3 + (1/3)*(29/2 - (3*Sqrt[93])/2)^(1/3) +
(1/3)*((1/2)*(29 + 3*Sqrt[93]))^(1/3) -
2*(((1/2)*(9 + Sqrt[93]))^(1/3)/(2*3^(2/3)) -
1/(2^(2/3)*(3*(9 + Sqrt[93]))^(1/3)))*x + x^2)
Inexact forms can be found, from f3 :
N[f3]
(0.6823278038280193 + x)*(1.4655712318767682 -
0.6823278038280193*x + x^2)
or directly
f3 = FactorR[x^3 + x + 1//N, x]
(0.6823278038280193 + x)*(1.4655712318767682 -
0.6823278038280193*x + x^2)
Partial fractions
pf1 = PartialFractionsR[(2 + x)/pol, x]
1/(60*(-1 + x)) - 1/(10*(1 + x)^2) - 39/(100*(1 + x)) +
(-54 - 31*x)/(4225*(4 + x^2)) +
(-1 + 3*x)/(13*(1 + x + x^2)^2) +
(44 + 193*x)/(507*(1 + x + x^2))
pf2 = PartialFractionsR[(1 + x)/(1 - 3*x + x^2), x]
(-5 - Sqrt[5])/(Sqrt[5]*(3 + Sqrt[5] - 2*x)) +
(-5 + Sqrt[5])/(Sqrt[5]*(-3 + Sqrt[5] + 2*x))
Partial fractions will often involve Root objects (I delete the output for
brevity)
pf3 = PartialFractionsR[(1 + x)/(x^3 - x + 1), x]
This ressult can in fact be put into radical form
ToRadicals[pf3]
We could have found the inexact form directly.
PartialFractionsR[(1+x)/(x^3-x+1)//N,x]
-(0.07614206365252976/(1.324717957244746 + 1.*x)) +
(0.7982664819556426 + 0.07614206365252976*x)/
(0.754877666246693 - 1.324717957244746*x + 1.*x^2)
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Lee Lin Yap" <kendallyap at hotmail.com> wrote in message
news:9ki2fp$kcu$1 at smc.vnet.net...
> Hi,
>
> I'm currently doing a software programming for my final year project. I
need
> to solve a partial fraction expansion in my program. I have a numerator
and
> I got the roots for it. But I can't solve the problem to get the answer
that
> I need.
>
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
>
>