From: monagan@inf.ethz.ch (Michael)
Subject: Maple V Release 2
Keywords: Maple
Organization: Dept. Informatik, Swiss Federal Institute of Technology (ETH), Zurich, CH
Date: Tue, 17 Nov 1992 17:56:06 GMT

Here is a summary of the new facilities in Release 2.
I'm sending this in two parts because it's large.
I've put a LaTeX version in the file maple/5.2/tex/summary.tex
in the Maple share library if you want a better copy.
You can get the files using anonymous ftp from
daisy.uwaterloo.ca  or  neptune.inf.ethz.ch

Michael Monagan



     New features that have been added for Maple V Release 2
     -------------------------------------------------------

Development of Improved User Interfaces
=======================================

New user interfaces for Maple which include as a minimum 3-dimensional graphics,
and some command line editing facility have been designed since the release of
Maple V for the X Window system, Sunview, Macintosh, Amiga DOS, Vax VMS, NeXT,
and the PC under Windows and MS/DOS.  The new user interfaces for Release 2
will include worksheets, output real mathematical formulae, and a help browser.

1: Maple worksheets
-------------------
Beginning with the Macintosh user interface for Maple V, the new user
interfaces will all support the concept of a "worksheet" which integrates text,
Maple input commands, Maple output, and graphics into one document.  Worksheets
have been standardized and are being ported to other platforms for Release 2.
They provide editable input and text fields, simple commands for re-executing
parts of worksheets etc.  A collection of examples of applications of Maple
will be now be distributed in the form of worksheets.  A new save facility is
being added that will also save the state of a worksheet as well as the display.

2: Two-dimensional output
-------------------------
Beginning with Release 2 of the X Window interface, new interfaces will
display output using mathematical, Greek, and italics fonts, with proper
subscripts and superscripts for improved display of mathematical formulae.

3: Help topic browser
---------------------
Beginning with Sunview user interface in Maple V, new user interfaces will
include a help browser for accessing the on-line help information.

4: Unix Maple interface
-----------------------
Now supports command line editing using a vi and emacs like editor.
Hitting the interrupt key Ctrl-C twice will no longer kill a Maple session, it
will only interrupt the current calculation.  The quit key Ctrl-\ can be used
to immediately kill the Maple session.  Also, running a Maple session in a
shell under the X Window system, interface(plotdevice=x11); will allow you to
access the X plotting facilities.

5: X Window interface
---------------------
The interface has been redesigned to follow Motif style conventions.  The help
index is accessible from a menu.  The user input fields and the Maple output
fields are completely separated.  Hardcopy output (PostScript) is available for
worksheets including output of mathematical formulae.  Input, text and output
fonts can be set interactively.

6: Improved error messages
--------------------------
The new type checking facility results in better error messages, e.g.

  > f := proc(n:integer) if n < 0 then 0 else n fi end:
  > f(x);
  Error, f expects its 1st argument, n, to be of type integer, but received x

Not all Maple functions have been updated yet to make use of this new facility.
This should be completed by the next version of Maple.

6: On-line tutorial
-------------------

An on-line introductory tutorial has been added for Release 2.  For more
information see ?tutorial .  Note you can write your own tutorial using the
readline, parse and printf commands.



Graphics
========

The Maple plotting facility consists of two parts, the rendering of the picture
which is written in C, and the point generation which is done in Maple.  The
basic 2 dimensional plotting command is plot(f(x),x=a..b);.  It creates a
PLOT data structure which contains the points, which then is displayed by
the user interface.  The 3 dimensional plotting command is
plot3d(f(x,y),x=a..b,y=c..d);.  It creates a PLOT3D data structure.
Thus the PLOT and PLOT3D data structures define the what can be displayed.
Details on these data structures can be obtained from  ?plot3d,structure

1: Improvements to rendering and the PLOT and PLOT3D data structures
--------------------------------------------------------------------
- better (more robust but slower) hidden line removal algorithm
- the PLOT3D data structure supports text and polygon primitives
- PLOT and PLOT3D include support for 2 and 3 D frame sequence animation
- the PLOT3D data structure supports a contour plot style option,
   which is also accessible interactively from the style menu
- The plotting primitives in the PLOT and PLOT3D data structures have
   been made more flexible e.g. each object can have its style and
   colour assigned individually.
- a wider choice of colours, with more user control of surface colouring
   (PLOT3D).
- addition of Lighting models
- We have also made the PLOT and PLOT3D data structures compatible.

2: Device support
-----------------
- encapsulated postscript, colour postscript and grayscale shading postscript
  output are now supported
- addition of HP Laserjet output
- a wider selection of output devices for PLOT3D are supported in particular
   any device that is supported in 2 dimensions including tektronics, i300
   imagen laser printer, Unix plot, DEC ln03 laser printer etc.

3: New plotting facilities and improvements (plots package)
-----------------------------------------------------------
This is a list of the new plotting tools.  All are written in Maple, making
use of the PLOT and PLOT3D data structures.  For details see the section
on the plots package in the section on the Library Packages.
- 2d and 3d animation
- 2d and 3d implicit plotting
- 2d and 3d vectorfield and gradient plots
- Density plots
- Plotting of dsolve(...,numeric) procedures in odeplot
- Plotting of polygons and polyhedra
- Log and log-log plots
- Phase portraits and direction field plots, plotting of 1-st order and
   2-nd order differential equations (in DEtools package)
- Ability to specify color function for objects in plot3d, tubeplot,
   vectorfield and gradient plots, etc.


New and Enhanced Mathematical Facilities
========================================

1: New mathematical functions known to Maple
--------------------------------------------
- The floor and ceiling functions floor(x) and ceil(x)
- The Elliptic integrals where 0<k<1 and c = sqrt(1-k^2)
  LegendreE(x,k) = int( (1-k^2*t^2)/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..x )
  LegendreEc(k) = int( (1-k^2*t^2)/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..1 )
  LegendreEc1(k) = int( (1-k^2*t^2)/sqrt(1-t^2)/sqrt(1-c^2*t^2), t=0..1 )
  LegendreF(x,k) = int( 1/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..x )
  LegendreKc(k) = int( 1/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..1 )
  LegendreKc1(k) = int( 1/sqrt(1-t^2)/sqrt(1-c^2*t^2), t=0..1 )
  LegendrePi(x,k,a) = int( 1/(1-a*t^2)/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..x )
  LegendrePic(k,a) = int( 1/(1-a*t^2)/sqrt(1-t^2)/sqrt(1-k^2*t^2), t=0..1 )
  LegendrePic1(k,a) = int( 1/(1-a*t^2)/sqrt(1-t^2)/sqrt(1-c^2*t^2), t=0..1 )
- Routines for complex numbers Re(z), Im(z), argument(z), conjugate(z), csgn(z)
- Routines for computing the magnitude of a number ilog[b](x), ilog10(x)
- Utility routine polar(z) to allow computing with complex numbers in polar
   form i.e. polar(a,b) = a \cos (b) + i a \sin (b)
- The logarithmic integral Li(x) = Ei(ln(x)) for x > 1
- The exponential integrals Ei(n,x) = int(exp(t)/t^n,t=1..infinity) for Re(x)>0
   extended by analytic continuation to the complex plane except for 0
   when n=1.  Note Ei(x) is the Cauchy principle value.
- Ssi(x) the shifted sine integral
- W(n,x), the W function satisfying exp(W(x))*W(x) = x where n, any integer,
   specifies a branch cut.  Note W(x) is the principle branch
- erfc(n,x) = int(erfc(n-1,t),t=x..infinity), for n=1,2,... where
   erfc(0,x) = erfc(x).  Note erfc(n,z) corresponds to "i^n erfc z" notation
   in Abramowitz & Stegun 
- The derivatives of signum, csgn, trunc, frac, round, floor, ceil implemented
   as signum(1,x), csgn(1,x) etc.

2: Enhanced numerical facilities
--------------------------------
- automatic complex numerical arithmetic, i.e. +, -, *, /, ^
- extend evalf to the complex domain for all elementary functions and erf(z),
   erfc(z), erfc(n,z), GAMMA(z), GAMMA(a,z) (incomplete Gamma function),
   Beta(u,v), Psi(z), Psi(n,z), W(z), W(n,z) (all branches), Ei(z),
   Ci(z), Si(z), Chi(z), Shi(z), Ssi(z)
- Dawson's integral dawson(x) = exp(-x^2) * int(exp(t^2),t=0..x)
- Elliptic integrals, LegendreE(x,k), LegendreEc(k), LegendreEc1(k),
   LegendreF(x,k), LegendreKc(k), LegendreKc1(k), LegendrePi(x,k,a),
   LegendrePic(k,a), LegendrePic1(k,a)
- Li(x) = Ei(ln(x) the logarithmic integral defined only for real x>1
- fsolve has a new algorithm for solving a univariate polynomial over R or C
  which should always succeed and, all digits should be accurate to 0.6 ulps.
- Addition of the Remez algorithm for minimax rational function approximation
- Addition of an adaptive double exponential algorithm for numerical integration
- Addition of Levin's u transform for the numerical evaluation of infinite
   sums, products and limits
- The routines gauselim, gaussjord, rowspace, colspace, eigenvals, eigenvects,
  inverse, det, in the linalg package now all handle matrices of
  floating point and complex floating point entries

3: Algebraic numbers and algebraic functions
--------------------------------------------
The evala facility in Maple V supports polynomial operations over algebraic
number fields.  This facility is used in indefinite integration, eigenvectors,
and solving polynomial equations.  E.g. Maple can factor the polynomial

       3               1/2   2           1/2                         1/2
      x  + (- 28 + 16 2   ) x  + (- 288 2    + 384) x - 1792 + 1280 2

over the algebraic number field  Q(sqrt(2))  as follows

  > a := x^3+(-28+16*sqrt(2))*x^2+(-288*sqrt(2)+384)*x-1792+1280*sqrt(2):
  > factor(a,sqrt(2));
                                       1/2               1/2
                   (x - 8) (x - 8 + 8 2   ) (x - 12 + 8 2   )

Because Maple can do this factorization, it means Maple can compute the
eigenvalues (also the eigenvectors -- see below) of the following matrix, e.g.

  > A := matrix( [[5-5*sqrt(2), -2+4*sqrt(2), 5+sqrt(2)],
  >               [-5+sqrt(2),  10-4*sqrt(2), 3+3*sqrt(2)],
  >               [-3+3*sqrt(2), -2+4*sqrt(2), 13-7*sqrt(2)]] ):
  > eigenvals(A);

                                      1/2         1/2
                           8, 12 - 8 2   , 8 - 8 2

The generalization of the evala facility to algebraic functions in Release 2
means that we can replace the sqrt in the above problem by a sqrt of a formula
and not just an integer, e.g. sqrt(a).  Examples in the following sections
illustrate other new capabilities in Maple which use the evala facility for
integration, polynomial factorization, and symbolic eigenvector calculation.
See also the sections on computing with field extensions describing the
functions Norm, Trace, Indep, and Primfield.

4: Polynomial factorization over algebraic number and function fields
---------------------------------------------------------------------
Maple V can factor multivariate polynomials over the rational numbers Q and
univariate polynomials over algebraic number fields Q(alpha) as in the above
example.  Release 2 can factor multivariate polynomials over algebraic number
fields.  For example let's factor the polynomial x^6+y^6 over the rationals
then over Q(i) the complex rationals.

  > factor(x^6+y^6);
                            2    2    4    2  2    4
                          (x  + y ) (x  - x  y  + y )

  > factor(x^6+y^6,I);

              2            2    2            2
            (x  - I x y - y ) (x  + I x y - y ) (x - I y) (x + I y)

Release 2 can also factor multivariate polynomials over algebraic
function fields e.g. let's factor the following polynomial over Q(sqrt(a)).

  > f := x^3 + (16*a^(1/2)-28)*x^2 + (64*a-288*a^(1/2)+256)*x
  >      -512*a+1280*a^(1/2)-768:
  > factor(f,sqrt(a));

                                1/2          1/2
                   (x - 12 + 8 a   ) (x + 8 a    - 8) (x - 8)

Two new factorization routines split and AFactor have been added to the
library.  split(a,x) factors a univariate polynomial in x into linear factors
over its splitting field.  evala(AFactor(a)) does a complete factorization
of a multivariate polynomial, i.e. over the algebraic closure of Q, e.g.

  > evala(AFactor(x^2-2*y^2));

                              2                       2
                (x - RootOf(_Z  - 2) y) (x + RootOf(_Z  - 2) y)

The RootOf value that you see in the output above is Maples notation for
the algebraic numbers which are the solutions to the polynomial equation
_Z^2 - 2 = 0.  In this case, the solutions are +- sqrt(2), i.e. they can
be written in terms of exact radicals.

5: Symbolic eigenvalue and eigenvector computation.
---------------------------------------------------
The eigenvector routine linalg[eigenvects] returns the eigenvectors of a matrix
represented exactly in terms of the roots of the characteristic polynomial.
For example, for our matrix A used previously, we obtain the eigenvectors

  > A := matrix( [[5-5*sqrt(2), -2+4*sqrt(2), 5+sqrt(2)],
  >               [-5+sqrt(2),  10-4*sqrt(2), 3+3*sqrt(2)],
  >               [-3+3*sqrt(2), -2+4*sqrt(2), 13-7*sqrt(2)]] ):
  > eigenvects(A);

            1/2               1/2                  1/2
    [8 - 8 2   , 1, {[ -1, - 2   , 1 ]}], [12 - 8 2   , 1, {[ 1, -1, 1 ]}],

        [8, 1, {[ 1, 1, 1 ]}]

The output is a sequence of lists [e,m,b] where e is the eigenvalue, m
its multiplicity, and b a basis for the eigenspace for e.  In Maple V, the
eigenvects command could handle algebraic numbers, including rational numbers.
Now it can handle algebraic functions, hence matrices of polynomials, e.g.

  > A := matrix(4,4,[[a,a,a,0], [b,b,0,c], [b,0,c,c], [0,a,a,a]]);
                                   [ a  a  a  0 ]
                                   [            ]
                                   [ b  b  0  c ]
                              A := [            ]
                                   [ b  0  c  c ]
                                   [            ]
                                   [ 0  a  a  a ]

  > factor(charpoly(A,x));

          3    2        2      2                            2      2
(x - a) (x  - x  a - c x  - b x  + b c x - c a x - b x a + c  a + b  a + a b c)

  > alias(alpha=RootOf(op(2,"),x)): # Denote the roots of the cubic by alpha
  > eigenvects(A);

       [a, 1, {[ - c/b, 0, 0, 1 ]}],

                                           2
                              2 b a - alpha  + alpha c + alpha a + c a
           [alpha, 1, {[ 1, - ----------------------------------------,
                                              a (b - c)

                                               2
                          b a + alpha b - alpha  + alpha a + 2 c a
                          ----------------------------------------, 1 ]}]
                                          a (b - c)

Note: the optional argument 'radical' to the eigenvects command asks Maple
to express roots of polynomials as exact radicals where possible instead of in
terms of the RootOf representation.

6: ODEs with Bessel and hypergeometric function solutions
---------------------------------------------------------
Many more cases are handled with a better algorithm, which gives results
in terms of Bessel functions rather than hypergeometric functions, e.g.

> (1-x)*x*diff(y(x),x,x) + (1/3- 23/2*x)*diff(y(x),x) -5*y(x);

                    /   2      \
                    |  d       |                  /  d      \
          (1 - x) x |----- y(x)| + (1/3 - 23/2 x) |---- y(x)| - 5 y(x)
                    |   2      |                  \ dx      /
                    \ dx       /

> dsolve(",y(x));

             y(x) = _C1 hypergeom([1/2, 10], [1/3], x)

                         2/3
                  + _C2 x    hypergeom([7/6, 32/3], [5/3], x)

7: Symbolic Fourier transform
-----------------------------
The call fourier(f(s),s,w) computes the fourier transform

               infinity
                  /
                 |             - I t w
     F(w) =      |      f(t) e          dt
                 |
                /
            - infinity

For example,

  > fourier(s,s,w);
                               2 I Pi Dirac(1, w)

  > fourier(1/(4 - I*t)^(1/3),t,w);

                     1/2
                    3    GAMMA(2/3) exp(- 4 w) Heaviside(w)
                    ---------------------------------------
                                       2/3
                                      w

8: New limit algorithm
----------------------
The idea behind the new algorithm is the following.  First locate the most
varying part of the expression.  Treat this indeterminate as a symbol and
compute a series expansion in this symbol alone.  If there is no constant
coefficient in the resulting series, you are done, otherwise, recurse on
that constant coefficient.  Here are some examples

  > f := exp(exp(exp(Psi(Psi(Psi(n))))))/n;

                           exp(exp(exp(Psi(Psi(Psi(n))))))
                      f := -------------------------------
                                          n

  > limit(f,n=infinity);
                                       0

  > f := n*(GAMMA(n-1/GAMMA(n))-GAMMA(n)+ln(n));

                       /              1                       \
                f := n |GAMMA(n - --------) - GAMMA(n) + ln(n)|
                       \          GAMMA(n)                    /

  > limit( f, n=infinity );
                                      1/2

9: Symbolic simplifications for min, max, trunc, round, ceil, floor, Re, Im
---------------------------------------------------------------------------
These routines now do quite a number of symbolic simplifications.
Note, interval arithmetic is used by the signum function in these examples
to prove that the constant Pi < sqrt(10) and that cos(2) < 0.

  > min( min(Pi,sqrt(10)), min(a+1,a-1), a );

                                 min(Pi, a - 1)

  > Re( ln(Pi-sqrt(10)) + sqrt(cos(2)) );

                                            1/2
                                ln(- Pi + 10   )

10: Norms and traces in algebraic number and function fields
------------------------------------------------------------
Norm(alpha,L,K) and Trace(alpha,L,K) compute the norm (trace) of an algebraic
number or function in L over field K.  I.e. the input is over the field L and
the output is over the field K a subfield of L.  The fields L and K are
specified by sets of RootOf's which define the field extensions.  For example

  > alias( s2 = RootOf(x^2-2=0), s3 = RootOf(x^2-3=0) ):
  > L := {s2,s3}:   # so L = Q(sqrt(2),sqrt(3)) and
  > K := {s2};      #    K = Q(sqrt(2))
  > evala(Trace(x-s2-s3,L,K));
                                   2 x - 2 s2

  > evala(Norm(x-s2-s3,L,K));
                                 2
                                x  - 2 s2 x - 1

  > evala(Norm(x-s2-s3)); # K = Q

                                  4       2
                                 x  - 10 x  + 1

11: Computing with field extensions: Indep, Primfield
-----------------------------------------------------
These are tools for computing with nested field extensions.  Indep(L) searches
for relations between between the set of field extensions (RootOfs) L.
Primfield(L,K) computes a primitive element alpha for a set of field
extensions L over the subfield K of L, e.g.

  > evala(Primfield({s2,s3}));
                                              3                        3
      [ [%1 = s3 + s2], [s3 = 11/2 %1 - 1/2 %1 , s2 = - 9/2 %1 + 1/2 %1 ]]

                                     4        2
  %1 :=                     RootOf(_Z  - 10 _Z  + 1)

The result is a list of two elements.  The first element defines the primitive
element alpha as a RootOf the minimal polynomial over K.  We see that the
minimal polynomial in this example is x^4-10*x^2+1.  It equates alpha in terms
of L, i.e. here alpha = sqrt(3)+sqrt(2).  The second entry expresses the field
extensions of K in terms of alpha.  Here sqrt(2) = alpha^3/2-9*alpha/2, and
sqrt(3) = 11/2*alpha-alpha^3/2.

12: Continued fractions
-----------------------
The cfrac routine in the numtheory package now computes continued fraction
expansions for real numbers, polynomials, series, and formulae.  Several forms
are available including simple, regular, simregular, etc.  The utility routines
nthconver, nthnumer, nthdenom return the nth convergent, numerator, denominator
e.g. here is the continued fraction for Pi, and the first few convergents

  > with(numtheory):
  > cf := cfrac(Pi,5);

                                             1
                      cf := 3 + --------------------------
                                               1
                                7 + ----------------------
                                                 1
                                    15 + -----------------
                                                   1
                                         1 + -------------
                                                      1
                                             292 + -------
                                                   1 + ...

  > seq( nthconver(cf,i), i=0..5 );

                                333  355  103993  104348
                       3, 22/7, ---, ---, ------, ------
                                106  113   33102   33215

  > cf := cfrac(exp(x),x,4,simregular);
                                            x
                   cf := 1 + -------------------------------
                                                x
                             1 - 1/2 -----------------------
                                                    x
                                     1 + 1/6 ---------------
                                                        x
                                             1 - 1/6 -------
                                                     1 + ...
  > seq(nthconver(cf,i),i=0..3);

                                                          2
                              1 + 1/2 x  1 + 2/3 x + 1/6 x
                    1, 1 + x, ---------, ------------------
                              1 - 1/2 x       1 - 1/3 x

13: Diophantine approximation
-----------------------------
The functions  minkowski  and  kronecker  in the number theory package solve
the linear diophantine approximation problem, namely, given real or p-adic
numbers a[i][j] and epsilon[i], and m equations of the form

         || sum( a[i][j]*x[j], j=1..m ) || <= epsilon[i],   for i=1..m

where || z || means, in the real case, the distance between z and the nearest
integer z, for p-adic case || z || means p-adic valuation (see function valuep
in padic package), solve for integers x[j].  I.e. find integers x[j] and y[i]
such that  abs( sum(a[i][j]*x[j],j=1..n) - y[i] ) <= epsilon[i]  for i=1..m
(in the real case).  This homogeneous case is solved by the minkowski function
where the equations are input in the form

      abs( sum( a[i][j]*x[j], j=1..m ) - y[i] ) <= epsilon[i],   for i=1..m

For example

  > eqn1 := abs(  E*x1 + 2^(1/2)*x2 - y1 ) <= 10^(-2):
  > eqn2 := abs( 3^(1/3)*x1 + Pi*x2 - y2 ) <= 10^(-4):
  > minkowski( {eqn1,eqn2}, {x1,x2}, {y1,y2} );

              [x1 = 7484], [x2 = -2534], [y1 = 16760], [y2 = 2833]

The non-homogeneous case (more difficult) i.e. for real or p-adic alpha[i],
equations of the form


    || sum( a[i][j]*x[j], j=1..n ) + alpha[i] || <= epsilon[i],   for i=1..m

are solved by the kronecker function.


New and Enhanced Integration Facilities
=======================================

1: Dirac and Heaviside
----------------------
Integration now knows about the Heaviside and Dirac functions, e.g.

  > int(f(x)*Dirac(x),x=-infinity..infinity);

                                   f(0)

  > int(f(x)*Heaviside(x),x=-3..4);

                                     4
                                    /
                                   |
                                   |  f(x) dx
                                   |
                                  /
                                  0

2: Elliptic integrals
---------------------
Integration now recognizes Elliptic integrals and reduces them to a normal
form in terms of Legendre functions

  > f := sqrt( (1-x^2) * (1/25 + x^2/4) );

                                      2 1/2          2 1/2
                      f := 1/10 (1 - x )    (4 + 25 x )

  > int(1/f,x=1/2..1);

                    10    1/2                1/2         1/2
                   ---- 29    LegendreF(1/2 3   , 5/29 29   )
                    29

  > evalf(");

                                  2.327355206

3: Algebraic functions
----------------------
Integration of algebraic functions is now using the Risch-Trager algorithm.
This includes a full implementation of the algebraic part including integrands
which involve parameters and algebraic numbers, e.g.

  > alias(alpha=RootOf(y^3-x^2-a,y); # i.e. alpha = (x^2+a)^(1/3)
  > f := (4*alpha^2*x^3+(5*x^4+3*x^2*a)*alpha-3*x^2-3*a)/(x^2+a)/x^2;

                       2  3       4      2               2
                4 alpha  x  + (5 x  + 3 x  a) alpha - 3 x  - 3 a
           f := ------------------------------------------------
                                     2       2
                                   (x  + a) x

  > int(f,x);
                            x - 1                      2
                        - 3 ----- + 3 x alpha + 3 alpha
                              x

and an implementation of the transcendental part for algebraic functions
which do not contain parameters, e.g.

  > alias(alpha=RootOf(y^2-x^3-1,y)); # i.e. beta = sqrt(x^3+1)
  > f := (3*x^4-6*x^3+5*x^2-2*x+2)/(x^5-2*x^4-x+2*x^3+1)*beta
  >     +(3*x^4+5*x^2-5*x^3-2*x)/(x^5-2*x^4-x+2*x^3+1);

                4      3      2                      4      2      3
            (3 x  - 6 x  + 5 x  - 2 x + 2) beta   3 x  + 5 x  - 5 x  - 2 x
       f := ----------------------------------- + ------------------------
                   5      4          3             5      4          3
                  x  - 2 x  - x + 2 x  + 1        x  - 2 x  - x + 2 x  + 1

  > int(f,x);
                                   2    3
                                  x  + x  + 1 - 2 x beta
                      2 beta - ln(----------------------)
                                        3    2     2
                                      (x  - x  + 1)

4: Integration of the W function
--------------------------------
Indefinite integration now uses an inverse function transformation to
transform integrals involving the W function (where note W(x) is the function
defined to satisfy exp(W(x))*W(x)=x) of linear arguments to elementary
defined to satisfy e^{W}(x)} W}(x) = x ) of linear arguments to elementary
functions, hence the following integrals are computed

  > int(x/W(x),x);
                                    2           2
                                   x           x
                              1/2 ---- + 1/4 -----
                                  W(x)           2
                                             W(x)
  > int(1/W(x),x);
                                x
                              ---- - Ei(1, - W(x))
                              W(x)

5: The exponential integral, error function, and related integrals
------------------------------------------------------------------
Indefinite integration of the forms g(x)*sin(f(x)) and g(x)*cos(f(x)) where
g(x) is a rational function in x and f(x) is a quadratic polynomial in x are
expressed in terms of the Fresnel integrals FresnelC(x) and FresnelS(x),
and the cosine and sine integrals Ci(x) and Si(x).  Note, Maple V can do
these examples, but the answer involves complex error functions and
Exponential integrals of complex arguments

  > int( 5*x^4*sin(2*x^2+1), x );

                  3        2         15           2
           - 5/4 x  cos(2 x  + 1) + ---- x sin(2 x  + 1)
                                       16

            15    1/2 /                    x                          x   \
         - ---- Pi    |cos(1) FresnelS(2 -----) + sin(1) FresnelC(2 -----)|
            32        |                    1/2                        1/2 |
                      \                  Pi                         Pi    /

  > int( sin(u*x^2-v)/x, x );

                                   2                     2
                  1/2 cos(v) Si(u x ) - 1/2 sin(v) Ci(u x )

6: New classes of definite integrals
------------------------------------
Several new classes of infinite indefinite integrals are now handled.
These are computed by evaluating derivatives of special functions
and exploiting symmetry.  For example, for p>0 and q>0, the class

                    infinity
                       /
                      |       (a - 1)          s     q
                      |      x        exp(- p x  - ----) dx
                      |                              s
                     /                              x
                     0

in general can be expressed in terms of the Bessel K function e.g.

  > assume(p>0);
  > assume(q>0);
  > int( x^2*exp(-p*x^3-q/x^3), x=0..infinity );

                            1/2                1/2   1/2
                          q~    BesselK(1, 2 p~    q~   )
                      2/3 -------------------------------
                                         1/2
                                       p~

Note, the appearance of p~ and q~ in this answer indicates that assumptions
about p and q have been made.
Also, several classes involving Bessel functions e.g. for u>0,v>0, the class

            infinity
              /
              |              s    w                  s/2
              |     exp(- u t )  t    BesselJ(v , c t    )   dt
              |
             /
             0

in general results in 1 F 1, the confluent hypergeomic function, e.g.

  > int( exp(-t)*t^2*BesselJ(1,sqrt(t)), t=0..infinity );

                      15    1/2
                     ---- Pi    hypergeom([7/2], [2], -1/4)
                      16

Also classes involving the error functions, e.g. for u>0

  > assume(u>0);
  > Int( exp(-u*x^2)*erf(b*x), x=0..infinity ) = 
  > int( exp(-u*x^2)*erf(b*x), x=0..infinity );

                                                             b
                infinity                            arctan(-----)
                   /                                         1/2
                  |                2                       u~
                  |      exp(- u~ x ) erf(b x) dx = -------------
                  |                                    1/2   1/2
                 /                                   Pi    u~
                 0

7: Handling singularities in an indefinite integral
---------------------------------------------------
Definite integration now uses a new algorithm to resolve integrals which have
discontinuities (removable or non-removable) in the result from indefinite
integration.  For example,

  > int( 1/(5+3*cos(x)), x=0..13*Pi/2 );

                            1/2 arctan(1/2) + 3/2 Pi

This result was obtained by first computing the indefinite integral

  > int( 1/(5+3*cos(x)), x );

                           1/2 arctan(1/2 tan(1/2 x))

then by taking limits given the following information about the discontinuities

  > readlib(discont)(",x);
                                {2 Pi _Z1 + Pi}

A second example showing that Maple can prove that this integral diverges,
instead of returning unevaluated -- meaning I don't know.

  > int(1/x^2,x=-1..1);
                                    infinity

Also, the addition of the CauchyPrincipalValue option to int handles

  > int( 1/x, x=-1..1, CauchyPrincipalValue);

                                       0

  > int( exp(-t)/t, t=-2..infinity, CauchyPrincipalValue );

                                    - Ei(2)


Newsgroups: sci.math.symbolic