Main Content

partfrac

Partial fraction decomposition

Description

partfrac(expr,var) finds the partial fraction decomposition of expr with respect to var. If you do not specify var, then partfrac uses the variable determined by symvar.

example

partfrac(expr,var,Name,Value) finds the partial fraction decomposition using additional options specified by one or more Name,Value pair arguments.

example

Examples

Partial Fraction Decomposition of Symbolic Expressions

Find partial fraction decomposition of univariate and multivariate expressions.

First, find partial fraction decomposition of univariate expressions. For expressions with one variable, you can omit specifying the variable.

syms x
partfrac(x^2/(x^3 - 3*x + 2))
ans =
5/(9*(x - 1)) + 1/(3*(x - 1)^2) + 4/(9*(x + 2))

Find partial fraction decomposition of a multivariate expression with respect to a particular variable.

syms a b
partfrac(a^2/(a^2 - b^2),a)
ans =
b/(2*(a - b)) - b/(2*(a + b)) + 1
partfrac(a^2/(a^2 - b^2),b)
ans =
a/(2*(a + b)) + a/(2*(a - b))

If you do not specify the variable, then partfrac computes partial fraction decomposition with respect to a variable determined by symvar.

symvar(a^2/(a^2 - b^2),1)
partfrac(a^2/(a^2 - b^2))
ans =
b
 
ans =
a/(2*(a + b)) + a/(2*(a - b))

Factorization Modes

Choose a particular factorization mode by using the FactorMode input.

Find the partial fraction decomposition without specifying the factorization mode. By default, partfrac uses factorization over rational numbers. In this mode, partfrac keeps numbers in their exact symbolic form.

syms x
f = 1/(x^3 + 2);
partfrac(f,x)
ans =
1/(x^3 + 2)

Repeat the decomposition with numeric factorization over real numbers. In this mode, partfrac factors the denominator into linear and quadratic irreducible polynomials with real coefficients. This mode converts all numeric values to floating-point numbers.

partfrac(f,x,'FactorMode','real')
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) -...
(0.2099868416491455274612017678797*x - 0.52913368398939982491723521309077)/(x^2 -...
1.2599210498948731647672106072782*x + 1.5874010519681994747517056392723)

Repeat the decomposition with factorization over complex numbers. In this mode, partfrac reduces quadratic polynomials in the denominator to linear expressions with complex coefficients. This mode converts all numbers to floating point.

partfrac(f,x,'FactorMode','complex')
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) +...
(- 0.10499342082457276373060088393985 - 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i) +...
(- 0.10499342082457276373060088393985 + 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i)

Find the partial fraction decomposition of this expression using the full factorization mode. In this mode, partfrac factors the denominator into linear expressions, reducing quadratic polynomials to linear expressions with complex coefficients. This mode keeps numbers in their exact symbolic form.

pfFull = partfrac(f,x,'FactorMode','full')
pfFull =
2^(1/3)/(6*(x + 2^(1/3))) +...
(2^(1/3)*((3^(1/2)*1i)/2 - 1/2))/(6*(x + 2^(1/3)*((3^(1/2)*1i)/2 - 1/2))) -...
(2^(1/3)*((3^(1/2)*1i)/2 + 1/2))/(6*(x - 2^(1/3)*((3^(1/2)*1i)/2 + 1/2)))

Approximate the result with floating-point numbers by using vpa. Because the expression does not contain any symbolic parameters besides the variable x, the result is the same as in complex factorization mode.

vpa(pfFull)
ans =
0.2099868416491455274612017678797/(x + 1.2599210498948731647672106072782) +...
(- 0.10499342082457276373060088393985 - 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i) +...
(- 0.10499342082457276373060088393985 + 0.18185393932862023392667876903163i)/...
(x - 0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i)

In the complex mode, partfrac factors only those expressions in the denominator whose coefficients can be converted to floating-point numbers. Show this by replacing 2 in f with a symbolic variable and find the partial fraction decomposition in complex mode. partfrac returns the expression unchanged.

syms a
f = subs(f,2,a);
partfrac(f,x,'FactorMode','complex')
ans =
1/(x^3 + a)

When you use the full factorization mode, partfrac factors expressions in the denominator symbolically. Thus, partfrac in the full factorization mode factors the expression.

partfrac(1/(x^3 + a), x, 'FactorMode', 'full')
ans =
1/(3*(-a)^(2/3)*(x - (-a)^(1/3))) -...
((3^(1/2)*1i)/2 + 1/2)/(3*(-a)^(2/3)*(x + (-a)^(1/3)*((3^(1/2)*1i)/2 + 1/2))) +...
((3^(1/2)*1i)/2 - 1/2)/(3*(-a)^(2/3)*(x - (-a)^(1/3)*((3^(1/2)*1i)/2 - 1/2)))

Full Factorization Mode Returns root

In full factorization mode, partfrac represents coefficients using root when it is not mathematically possible to find the coefficients as exact symbolic numbers. Show this behavior.

syms x
s = partfrac(1/(x^3 + x - 3), x, 'FactorMode','full')
s =
symsum(-((6*root(z^3 + z - 3, z, k)^2)/247 +...
         (27*root(z^3 + z - 3, z, k))/247 +...
          4/247)/(root(z^3 + z - 3, z, k) - x), k, 1, 3)

Approximate the result with floating-point numbers by using vpa.

vpa(s)
ans =
0.1846004942289254798185772017286/(x - 1.2134116627622296341321313773815) +...
(- 0.092300247114462739909288600864302 + 0.11581130283490645120989658654914i)/...
(x + 0.60670583138111481706606568869074 - 1.450612249188441526515442203395i) +...
(- 0.092300247114462739909288600864302 - 0.11581130283490645120989658654914i)/...
(x + 0.60670583138111481706606568869074 + 1.450612249188441526515442203395i)

Numerators and Denominators of Partial Fraction Decomposition

Return a vector of numerators and a vector of denominators of the partial fraction decomposition.

First, find the partial fraction decomposition of the expression.

syms x
P = partfrac(x^2/(x^3 - 3*x + 2), x)
P =
5/(9*(x - 1)) + 1/(3*(x - 1)^2) + 4/(9*(x + 2))

Partial fraction decomposition is a sum of fractions. Use the children function to return a vector containing the terms of that sum. Then, use numden to extract the numerators and denominators of the terms.

C = children(P);
C = [C{:}];
[N,D] = numden(C)
N =
[ 5, 1, 4]
 
D =
[ 9*x - 9, 3*(x - 1)^2, 9*x + 18]

Reconstruct the partial fraction decomposition from the vectors of numerators and denominators.

P1 = sum(N./D)
P1 =
1/(3*(x - 1)^2) + 5/(9*x - 9) + 4/(9*x + 18)

Verify that the reconstructed expression, P1, is equivalent to the original partial fraction decomposition, P.

isAlways(P1 == P)
ans =
  logical
     1

Input Arguments

collapse all

Rational expression, specified as a symbolic expression or function.

Variable of interest, specified as a symbolic variable.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: partfrac(1/(x^3 - 2),x,'FactorMode','real')

Factorization mode, specified as the comma-separated pair consisting of 'FactorMode' and one of these character vectors.

'rational'Factorization over rational numbers.
'real'Factorization into linear and quadratic polynomials with real coefficients. The coefficients of the input must be convertible to real floating-point numbers.
'complex'Factorization into linear polynomials whose coefficients are floating-point numbers. The coefficients of the input must be convertible to floating-point numbers.
'full'Factorization into linear polynomials with exact symbolic coefficients. If partfrac cannot calculate coefficients as exact symbolic numbers, then partfrac represents coefficients by using symsum ranging over a root.

More About

collapse all

Partial Fraction Decomposition

Partial fraction decomposition is an operation on rational expressions.

f(x)=g(x)+p(x)q(x),

Where the denominator of the expression can be written as q(x)=q1(x)q2(x), the partial fraction decomposition is an expression of this form.

f(x)=g(x)+jpj(x)qj(x)

Here, the denominators qj(x) are irreducible polynomials or powers of irreducible polynomials. The numerators pj(x)are polynomials of smaller degrees than the corresponding denominators qj(x).

Partial fraction decomposition can simplify integration by integrating each term of the returned expression separately.

Version History

Introduced in R2015a