Next: Functions and Variables for abs_integrate, Previous: abs_integrate, Up: abs_integrate [Contents][Index]

### 31.1 Introduction to abs_integrate

The package `abs_integrate` extends Maxima’s integration code to some integrands that involve the absolute value, max, min, signum, or unit step functions. For integrands of the form p(x) |q(x)|, where p is a polynomial and q is a polynomial that `factor` is able to factor into a product of linear or constant terms, the `abs_integrate` package determines an antiderivative that is continuous on the entire real line. Additionally, for an integrand that involves one or more parameters, the function `conditional_integrate` tries to determine an antiderivative that is valid for all parameter values.

Examples:

To use the `abs_integrate` package, you’ll first need to load it:

    (%i1) load("abs_integrate.mac")$
    (%i2) integrate(abs(x),x);
                                x abs(x)
    (%o2)                       --------
                                   2

To convert (%o2) into an expression involving the absolute value function, apply `signum_to_abs`; thus

    (%i3) signum_to_abs(%);
                                x abs(x)
    (%o3)                       --------
                                   2

When the integrand has the form p(x) |x - c1| |x - c2| ... |x - cn|, where p(x) is a polynomial and c1, c2, ..., cn are constants, the `abs_integrate` package returns an antiderivative that is valid on the entire real line; thus without making assumptions on a and b; for example

    (%i4) factor(convert_to_signum(integrate(abs((x-a)*(x-b)),x,a,b)));
                                3       2
                         (b - a)  signum (b - a)
    (%o4)                -----------------------
                                    6

Additionally, `abs_integrate` is able to find antiderivatives of some integrands involving `max`, `min`, `signum`, and `unit_step`, examples:

    (%i5) integrate(max(x,x^2),x);
               3      2                                        3    2
            2 x  - 3 x    1                   1               x    x
    (%o5) ((----------- + --) signum(x - 1) + --) signum(x) + -- + --
                12        12                  12              6    4
    (%i6) integrate(signum(x) - signum(1-x),x);
    (%o6)                  abs(x) + abs(x - 1)

A plot indicates that indeed (%o5) and (%o6) are continuous at zero and at one.

For definite integrals with numerical integration limits (including both minus and plus infinity), the `abs_integrate` package converts the integrand to signum form and then it tries to subdivide the integration region so that the integrand simplifies to a non-signum expression on each subinterval; for example

    (%i1) load(abs_integrate)$
    (%i2) integrate(1 / (1 + abs(x-5)),x,-5,6);
    (%o2)                   log(11) + log(2)

Finally, `abs_integrate` is able to determine antiderivatives of some functions of the form F(x, |x - a|); examples

    (%i3) integrate(1/(1 + abs(x)),x);
          signum(x) (log(x + 1) + log(1 - x))
    (%o3) -----------------------------------
                           2
                                              log(x + 1) - log(1 - x)
                                            + -----------------------
                                                         2
    (%i4) integrate(cos(x + abs(x)),x);
             (signum(x) + 1) sin(2 x) - 2 x signum(x) + 2 x
    (%o4)    ----------------------------------------------
                                   4

Barton Willis (Professor of Mathematics, University of Nebraska at Kearney) wrote the `abs_integrate` package and its English language user documentation. This documentation also describes the `partition` package for integration. Richard Fateman wrote `partition`. Additional documentation for `partition` is located at
http://www.cs.berkeley.edu/~fateman/papers/partition.pdf

Next: Functions and Variables for abs_integrate, Previous: abs_integrate, Up: abs_integrate [Contents][Index]