Enhancements to Symbolic Capabilities in Maple 8
|
Maple 8 includes a number of enhancements to its symbolic capabilities.
|
|
Differential Equations (DE)
|
|
|
Differential equation solving capabilities (for exact and numeric solutions) have been greatly enhanced by new algorithms. To learn about the DE updates, including the dsolve and pdsolve commands, see updates,Maple8,differential_equations.
|
|
|
New Network of Conversion Routines for Mathematical Functions
|
|
|
A flexible conversion facility in the mathematical language is as important as a dictionary in spoken languages. Maple 8 introduces such a tool in a computer algebra system for the first time, implemented as a net of conversion routines permitting the expression of any mathematical function in terms of another one, whenever that is possible as a finite sum of terms. When the parameters of the functions being converted depend on symbols in a rational manner, any assumptions on these symbols made by the user are taken into account at the time of performing the conversions (see assuming).
|
>
|
ee := exp(1/2*z)* WhittakerM(0,1/2,z);
|
| (1) |
>
|
convert( (1), MeijerG );
|
| (2) |
| (3) |
>
|
convert( (3), hypergeom, include=exp );
|
| (4) |
|
Converting the original expression directly to hypergeom we arrive at an identity for hypergeometric functions
|
>
|
(4) = convert(ee, hypergeom);
|
| (5) |
>
|
simplify( (lhs-rhs)((5)) );
|
| (6) |
•
|
The main idea behind the Maple 8 conversion network is to split the set of mathematical functions into three main subsets, according to their hypergeometric representation as 2F1, 1F1 and 0F1 hypergeometric functions. Then, generally speaking, conversions - when possible - can be performed among functions of the same class. The Maple 8 routines allow you to convert to any of 58 mathematical functions, including all the elementary transcendental ones and most of the special functions of mathematical physics:
|
|
Example: Conversions between 2F1 functions
|
| (7) |
>
|
convert((7),EllipticE);
|
| (8) |
>
|
convert((8),LegendreP);
|
| (9) |
>
|
convert((9),GegenbauerC);
|
| (10) |
>
|
convert((10),hypergeom);
|
| (11) |
|
Example: Conversions between 1F1 functions
|
| (12) |
>
|
convert((12),HermiteH);
|
| (13) |
| (14) |
>
|
normal(convert((14),WhittakerW));
|
| (15) |
•
|
Taking into account the possible split of the set of mathematical functions into hypergeometric classes as well as their classification found in typical handbooks like Abramowitz and Stegun, the Maple 8 routines also permits converting to a function class; that is, attempting to rewrite a given expression by using any of the functions of a specified class.
|
>
|
1/2*LegendreP(-1/2,-1/2,-1-2*z^2+4*z)*(-2*z^2+4*z)^(1/4)/(-2-2*z^2+4*z)^(1/4)*(z-1);
|
| (16) |
| (17) |
|
The function classes understood by the Maple 8 mathematical function conversion network are:
|
•
|
The new conversion routines also introduce the concept of "rule conversion", that is, a conversion where the input and output are expressed using the same function but applying identity rules to it. For example, the HermiteH function
|
| (18) |
|
can have its (first) parameter raised or lowered by one. Below, "raise a" stands for "raise the first parameter":
|
>
|
H2 := convert(H1, HermiteH, "raise a");
|
| (19) |
|
For functions depending on more parameters, for example, LegendreP or JacobiP, you can raise the second or third parameters using "raise b" or "raise c". The rules known by the Maple 8 conversion routines are:
|
•
|
The mathematical identities which can be derived using the new conversion routines can be checked visually in Maple 8 using the new plotcompare routine, which draws four 3-D plots, comparing the real and imaginary parts of two expressions when evaluated over a complex variable .
|
•
|
All the Maple 8 conversion routines listed in the tables above understand a uniform set of optional arguments for restricting the conversion process in varied manners, for example, performing (or excluding) the conversion process only for some functions (see convert,to_special_function), therefore providing the necessary flexibility for optimal symbolic manipulation.
|
|
|
Special Functions and Assumptions
|
|
|
More Maple functions now take assumptions into account (see assuming).
|
>
|
binomial(a,b) assuming a::fraction, b::integer, b<0;
|
| (20) |
>
|
binomial(a,2) assuming a::fraction;
|
| (21) |
>
|
GAMMA(a,z) assuming a=1/2;
|
| (22) |
|
|
Simplification
|
|
|
Enhancements
|
|
|
In Maple 8, when simplifying definite integrals or sums, the integration range simplifies the integrand assuming the integration variable has its value inside the given range. Example:
|
>
|
Int((1+sinh(x)^2)^(1/2), x=1..4);
|
| (23) |
>
|
simplify((23)); # <- deduces that x::RealRange(1,4)
|
| (24) |
|
A more precise check to recognize hidden invalid expressions of the form 0/0 is now performed during simplification processes. When an indeterminate form is detected an appropriate exception is raised. Example:
|
>
|
(tan(x)^2 + 1 - sec(x)^2)/(sin(x)^2 + cos(x)^2 - 1);
|
| (25) |
|
|
MeijerG Functions
|
|
|
The simplify command can now simplify generalized hypergeometric MeijerG functions.
|
>
|
MeijerG([[], [1/2*(4*nu-5)/(nu-1)]],[[1/2*(2*nu-3)/(nu-1)], [-1/2*(2*nu-3)/(nu-1)]], 3*1/(z*(nu-1)));
|
| (26) |
| (27) |
>
|
MeijerG([[1/2], [-1/2]], [[0, v], [-1/2, -v]], x) + MeijerG([[], [1/2]], [[0, v], [-v]], x);
|
| (28) |
| (29) |
|
|
Kummer Functions
|
|
|
The simplify command now has the ability to simplify confluent hypergeometric Kummer functions.
|
>
|
KummerU(a,b,z)+(a+1)*(a+2-b)*KummerU(a+2,b,z)-2*(a+1+1/2*z-1/2*b)*KummerU(a+1,b,z);
|

| (30) |
| (31) |
|
|
Orthogonal Polynomials and Associated Functions
|
|
•
|
Maple is now able to efficiently simplify Legendre functions of integer degree and order to elementary form (integer and fractional powers).
|
>
|
LegendreP(5,3,x): (31) = simplify((31),'LegendreP');
|
| (32) |
>
|
LegendreP(48,24,2): (32) = simplify((32),'LegendreP');
|
| (33) |
>
|
LegendreQ(5,10,x): (33) = simplify((33),'LegendreQ');
|
| (34) |
>
|
LegendreQ(50,100,2): (34) = simplify((34),'LegendreQ');
|
| (35) |
•
|
Other functions can be simplified to elementary form.
|
>
|
GegenbauerC(2,7/2,x): (35) = simplify((35));
|

| (36) |
>
|
JacobiP(2,3,3,x): (36) = simplify((36));
|

| (37) |
>
|
ChebyshevT(3,z): (37) = simplify((37));
|

| (38) |
•
|
The names ChebyshevT(0,x) and other index-0 orthogonal polynomials no longer simplify automatically to 1. Similarly with some index-1 orthogonal polynomials.
|
|
|
|
Improvements in Square Root Computations
|
|
|
We have made two improvements to sqrt simplification. One is to take the square root of an exponential. The other is to simplify square roots of integers by, without factoring the integers, pulling out squares of small primes and taking the exact square root of the other component. This significantly reduces the size of the formulae computed by solve.
|
| (39) |
>
|
sqrt(exp(2*x)) assuming x > 0;
|
| (40) |
| (41) |
| (42) |
>
|
q5 := x^5-10*x^4+9*x^3-4*x^2-1;
|
| (43) |
>
|
sol := solve(q5): sol[1];
|
| (44) |
>
|
convert(sol[1],radical);
|

| (45) |
|
|
index/Circulant and index/Vandermonde
|
|
•
|
A new Matrix indexing function, index/Circulant, for circulant matrices (which are diagonalizable by the Fourier matrix of the appropriate size, and thus easy to use) has been added. Also, index/Vandermonde has been improved to handle the confluent Vandermonde matrix case. By default, a Vandermonde matrix with repeated interpolation points is singular (because this is what is needed in teaching), but with the option confluent, a nonsingular matrix that demands derivative data is produced.
|
|
|
assume
|
|
|
Procedure hasassumptions has been added to the assume facility. It can be used to check whether some assumptions were made on a variable.
|
| (46) |
| (47) |
| (48) |
| (49) |
| (50) |
| (51) |
|
|
Symbolic Summation
|
|
|
Symbolic summation capabilities have been enhanced by algorithms based on ideas from integral representations. Maple can now handle new types of sums, for example Abel-type definite sums and some hypergeometric sums involving polynomials of unknown degree.
|
>
|
F:=(x+k)^(k-1)*(y+n-k-a)^(n-k-1)*binomial(n,k);
|
| (52) |
| (53) |
>
|
F:=(2+k)^(k-2)*(1+n-k)^(n-k)/(k!*(n-k)!);
|
| (54) |
| (55) |
>
|
F:=(-1)^x/x!/(y-x)!*(x^n)/(x+1)/(x+7);
|
| (56) |
>
|
sum(F,x=0..y) assuming n::posint;
|
| (57) |
>
|
F:=(-1)^x/x!/(y-x)!*ChebyshevU(2*n-1,x)/(x^2+3*x+2);
|
| (58) |
>
|
sum(F,x=1..y) assuming n::posint;
|
| (59) |
|
|
Partial Fractions
|
|
•
|
Both parfrac and fullparfrac partial fraction conversions have been enhanced.
|
•
|
has been modified to be able to produce full partial fraction decompositions in a new form that is far more efficient when additional variables (other than the main variable) are present in the input. The default has also changed for this class of problems. Additional detail can be found in convert,fullparfrac.
|
|
|
Division ( )
|
|
•
|
The division procedure , when called as a function, now accepts 1 argument, in which case it returns the reciprocal of that argument. When used as an operator, however, two operands are still required.
|
| (60) |
| (61) |
| (62) |
|
|