Conversions between Special 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);

> 
convert( %, hypergeom, include=exp );

Converting the original expression
ee
directly to
hypergeom
we arrive at an identity for hypergeometric functions
> 
% = convert(ee, hypergeom);

> 
simplify( (lhsrhs)(%) );

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:
arccos
,
arccosh
,
arccot
,
arccoth
,
arccsc
,
arccsch
,
arcsec
,
arcsech
,
arcsin
,
arcsinh
,
arctan
,
arctanh
,
cos
,
cosh
,
cot
,
coth
,
csc
,
csch
,
exp
,
ln
,
sec
,
sech
,
sin
,
sinh
,
tan
,
tanh
,
GAMMA
,
dilog
,
polylog
,
AiryAi
,
AiryBi
,
HankelH1
,
HankelH2
,
BesselI
,
BesselJ
,
BesselK
,
BesselY
,
MeijerG
,
hypergeom
,
Ei
,
erf
,
KummerM
,
KummerU
,
WhittakerM
,
WhittakerW
,
CylinderU
,
CylinderV
,
CylinderD
,
LaguerreL
,
HermiteH
,
GegenbauerC
,
LegendreP
,
LegendreQ
,
ChebyshevT
,
ChebyshevU
,
EllipticE
,
EllipticK
,
JacobiP

Example:
Conversions between 2F1 functions
> 
convert(%,GegenbauerC);


Example:
Conversions between 1F1 functions
> 
normal(convert(%,WhittakerW));

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,12*z^2+4*z)*(2*z^2+4*z)^(1/4)/(22*z^2+4*z)^(1/4)*(z1);

The function classes understood by the Maple 8 mathematical function conversion network are:
trig
,
trigh
,
arctrig
,
arctrigh
,
elementary
,
GAMMA_related
,
Kelvin
,
Airy
,
Hankel
,
Bessel_related
,
0F1
,
Ei_related
,
erf_related
,
Kummer
,
Whittaker
,
Cylinder
,
1F1
,
Orthogonal_polynomials
,
Elliptic_related
,
Legendre
,
Chebyshev
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
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");

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:
"raise a"
,
"lower a"
,
"normalize a"
,
"raise b"
,
"lower b"
,
"normalize b"
,
"raise c"
,
"lower c"
,
"normalize c"
,
"mix a and b"
,
"1F1 to 0F1"
,
"0F1 to 1F1"
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 3D plots, comparing the real and imaginary parts of two expressions when evaluated over a complex variable
z = x + I y
.
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.