DEFINT: A deﬁnite integration interface
Date: 2020-10-07 18:10:00

Up | Next | Prev | PrevTail | Tail

### 16.19 DEFINT: A deﬁnite integration interface

This package ﬁnds the deﬁnite integral of an expression in a stated interval. It uses several techniques, including an innovative approach based on the Meijer G-function, and contour integration.

Authors: Kerry Gaskell, Stanley M. Kameny, Winfried Neun.

#### 16.19.1 Introduction

This documentation describes part of REDUCE’s deﬁnite integration package that is able to calculate the deﬁnite integrals of many functions, including several special functions. There are other parts of this package, such as Stan Kameny’s code for contour integration, that are not included here. The integration process described here is not the more normal approach of initially calculating the indeﬁnite integral, but is instead the rather unusual idea of representing each function as a Meijer G-function (a formal deﬁnition of the Meijer G-function can be found in [PBM89]), and then calculating the integral by using the following Meijer G integration formula.

| (16.72)

The resulting Meijer G-function is then retransformed, either directly or via a hypergeometric function simpliﬁcation, to give the answer. A more detailed account of this theory can be found in [AM90].

#### 16.19.2 Integration between zero and inﬁnity

As an example, if one wishes to calculate the following integral

then initially the correct Meijer G-functions are found, via a pattern matching process, and are substituted into eq. 16.72 to give

The cases for validity of the integral are then checked. If these are found to be satisfactory then the formula is calculated and we obtain the following Meijer G-function

This is reduced to the following hypergeometric function

2F1(,1;;−1)

which is then calculated to give the correct answer of

The above formula (1) is also true for the integration of a single Meijer G-function by replacing the second Meijer G-function with a trivial Meijer G-function.

A list of numerous particular Meijer G-functions is available in [PBM89].

#### 16.19.3 Integration over other ranges

Although the description so far has been limited to the computation of deﬁnite integrals between 0 and inﬁnity, it can also be extended to calculate integrals between 0 and some speciﬁc upper bound, and by further extension, integrals between any two bounds. One approach is to use the Heaviside function, i.e.

Another approach, again not involving the normal indeﬁnite integration process, again uses Meijer G-functions, this time by means of the following formula

| (16.73)

For a more detailed look at the theory behind this see [AM90].

For example, if one wishes to calculate the following integral

then initially the correct Meijer G-function is found, by a pattern matching process, and is substituted into eq. 16.73 to give

which then in turn gives

and returns the result

#### 16.19.4 Using the deﬁnite integration package

To use this package, you must ﬁrst load it by the command

load_package defint;

Deﬁnite integration is then possible using the int command with the syntax:

INT(EXPRN:algebraic,VAR:kernel,LOW:algebraic,UP:algebraic)
:algebraic.

where LOW and UP are the lower and upper bounds respectively for the deﬁnite integration of EXPRN with respect to VAR.

##### Examples

int(e^(-x),x,0,infinity);
1

int(x*sin(1/x),x,0,infinity);
1
INT(X*SIN(---),X,0,INFINITY)
X

int(x^2*cos(x)*e^(-2*x),x,0,infinity);
4
-----
125

int(x*e^(-1/2x)*Heaviside(1-x),x,0,infinity);
2*(2*SQRT(E) - 3)
-------------------
SQRT(E)

int(x*log(1+x),x,0,1);
1
---
4

int(cos(2x),x,y,2y);
SIN(4*Y) - SIN(2*Y)
---------------------
2

#### 16.19.5 Integral Transforms

A useful application of the deﬁnite integration package is in the calculation of various integral transforms. The transforms available are as follows:

- Laplace transform
- Hankel transform
- Y-transform
- K-transform
- StruveH transform
- Fourier sine transform
- Fourier cosine transform

##### Laplace transform

The Laplace transform

f(s) = ℒ {F(t)} = ∫ 0∞e−stF(t)dt

can be calculated by using the laplace_transform command.

This requires as parameters

- the function to be integrated
- the integration variable.

For example

ℒ{e−at} is entered as

laplace_transform(e^(-a*x),x);

and returns the result

##### Hankel transform

The Hankel transform

can be calculated by using the hankel_transform command e.g.

hankel_transform(f(x),x);

This is used in the same way as the laplace_transform command.

##### Y-transform

The Y-transform

can be calculated by using the Y_transform command e.g.

Y_transform(f(x),x);

This is used in the same way as the laplace_transform command.

##### K-transform

The K-transform

can be calculated by using the K_transform command e.g.

K_transform(f(x),x);

This is used in the same way as the laplace_transform command.

##### StruveH transform

The StruveH transform

can be calculated by using the struveh_transform command e.g.

struveh_transform(f(x),x);

This is used in the same way as the laplace_transform command.

##### Fourier sine transform

The Fourier sine transform

can be calculated by using the fourier_sin command e.g.

fourier_sin(f(x),x);

This is used in the same way as the laplace_transform command.

##### Fourier cosine transform

The Fourier cosine transform

can be calculated by using the fourier_cos command e.g.

fourier_cos(f(x),x);

This is used in the same way as the laplace_transform command.

#### 16.19.6 Additional Meijer G-function Deﬁnitions

The relevant Meijer G representation for any function is found by a pattern-matching process which is carried out on a list of Meijer G-function deﬁnitions. This list, although extensive, can never hope to be complete and therefore the user may wish to add more deﬁnitions. Deﬁnitions can be added by adding the following lines:

defint_choose(f(~x),~var => f1(n,x);
symbolic putv(mellin!-transforms!*,n,’
(() (m n p q) (ai) (bj) (C) (var)));

where f(x) is the new function, i = 1..p, j=1..q, C = a constant, var = variable, n = an indexing number.

For example when considering cos(x) we have

Meijer G representation -

Internal deﬁnite integration package representation -

defint_choose(cos(~x),~var) => f1(3,x);

where 3 is the indexing number corresponding to the 3 in the following formula

symbolic putv(mellin!-transforms!*,3,’
(() (1 0 0 2) () (nil (quotient 1 2))
(sqrt pi) (quotient (expt x 2) 4)));

or the more interesting example of Jn(x):

Meijer G representation -

Internal deﬁnite integration package representation -

defint_choose(besselj(~n,~x),~var) => f1(50,x,n);
symbolic putv(mellin!-transforms!*,50,’
((n) (1 0 0 2) () ((quotient n 2)
(minus quotient n 2)) 1
(quotient (expt x 2) 4)));

#### 16.19.7 The print_conditions function

The required conditions for the validity of the transform integrals can be viewed using the following command:

print_conditions().

For example after calculating the following laplace transform

laplace_transform(x^k,x);

using the print_conditions command would produce

repart(sum(ai) - sum(bj)) + 1/2 (q + 1 - p)>(q - p) repart(s)
and ( - min(repart(bj))<repart(s))<1 - max(repart(ai))
or mod(arg(eta))=pi*delta
or ( - min(repart(bj))<repart(s))<1 - max(repart(ai))
or mod(arg(eta))<pi*delta

where

#### 16.19.8 Tracing

A new switch TRDEFINT can be set to ON to print information about intermediate steps of the calculation.

#### 16.19.9 Acknowledgements

I would like to thank Victor Adamchik whose implementation of the deﬁnite integration package for REDUCE is vital to this interface.

Up | Next | Prev | PrevTail | Front