Enhancements to Symbolic Capabilities in Maple 8
Maple 8 includes a number of enhancements to its symbolic capabilities.
Differential Equations (DE)
New Network of Conversion Routines for Mathematical Functions
Special Functions and Assumptions
Simplification
Improvements in Square Root Computations
index/Circulant and index/Vandermonde
assume
Symbolic Summation
Partial Fractions
Division (`/`)
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.
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).
Example:
ee := exp(1/2*z)* WhittakerM(0,1/2,z);
ee≔ⅇz2⁢WhittakerM⁡0,12,z
convert( (1), MeijerG );
z⁢MeijerG⁡0,,0,−1,−z
convert( (2), exp );
ⅇz22−1
convert( (3), hypergeom, include=exp );
hypergeom⁡,,z22−1
Converting the original expression ee directly to hypergeom we arrive at an identity for hypergeometric functions
(4) = convert(ee, hypergeom);
hypergeom⁡,,z22−1=z⁢hypergeom⁡1,2,z
simplify( (lhs-rhs)((5)) );
0
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
JacobiP(1/2,0,-1,z);
JacobiP⁡12,0,−1,z
convert((7),EllipticE);
2⁢EllipticE⁡−2⁢z+22π
convert((8),LegendreP);
1+z⁢LegendreP⁡−12,z+LegendreP⁡12,3−z1+z⁢2⁢11+z4
convert((9),GegenbauerC);
1+z⁢GegenbauerC⁡−12,12,z+GegenbauerC⁡12,12,3−z1+z⁢2⁢11+z4
convert((10),hypergeom);
1+z⁢hypergeom⁡12,12,1,12−z2+hypergeom⁡−12,32,1,z−11+z⁢2⁢11+z4
Example: Conversions between 1F1 functions
erf(z);
erf⁡z
convert((12),HermiteH);
−2⁢HermiteH⁡−1,zπ⁢ⅇz2+1
convert((13),KummerU);
−2⁢z⁢KummerU⁡1,32,z22−π⁢ⅇz2⁢z−z22⁢z2π⁢ⅇz2+1
normal(convert((14),WhittakerW));
−z⁢−π⁢ⅇz2⁢z234+WhittakerW⁡−14,14,z2⁢z2⁢ⅇz22π⁢ⅇz2⁢z254
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);
LegendreP⁡−12,−12,−2⁢z2+4⁢z−1⁢−2⁢z2+4⁢z14⁢z−12⁢−2⁢z2+4⁢z−214
convert((16),arctrig);
−2⁢z−1214⁢arcsin⁡z−1π⁢−2⁢z2+4⁢z−214
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
H1 := HermiteH(a,z);
H1≔HermiteH⁡a,z
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");
H2≔z⁢HermiteH⁡a+1,z−HermiteH⁡a+2,z2a+1
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 3-D 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.
More Maple functions now take assumptions into account (see assuming).
binomial(a,b) assuming a::fraction, b::integer, b<0;
binomial(a,2) assuming a::fraction;
a−1⁢a2
GAMMA(a,z) assuming a=1/2;
π⁢erfc⁡z
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);
∫141+sinh⁡x2ⅆx
simplify((23)); # <- deduces that x::RealRange(1,4)
∫14cosh⁡xⅆx
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);
tan⁡x2+1−sec⁡x2sin⁡x2+cos⁡x2−1
simplify((25));
Error, (in `simplify/trig`) indeterminate expression of the form 0/0
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)));
MeijerG⁡,4⁢ν−52⁢ν−1,2⁢ν−32⁢ν−1,−2⁢ν−32⁢ν−1,3z⁢ν−1
simplify((26));
32⁢ν−32⁢ν−2⁢1z⁢ν−12⁢ν−32⁢ν−2Γ⁡3⁢ν−4ν−1
MeijerG([[1/2], [-1/2]], [[0, v], [-1/2, -v]], x) + MeijerG([[], [1/2]], [[0, v], [-v]], x);
MeijerG⁡12,−12,0,v,−12,−v,x+MeijerG⁡,12,0,v,−v,x
simplify((28));
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);
KummerU⁡a,b,z+a+1⁢a+2−b⁢KummerU⁡a+2,b,z−2⁢a+1+z2−b2⁢KummerU⁡a+1,b,z
simplify((30));
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');
0=0
LegendreP(48,24,2): (32) = simplify((32),'LegendreP');
0=0=0=0
LegendreQ(5,10,x): (33) = simplify((33),'LegendreQ');
0=0=0=0=0=0=0=0
LegendreQ(50,100,2): (34) = simplify((34),'LegendreQ');
0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0
Other functions can be simplified to elementary form.
GegenbauerC(2,7/2,x): (35) = simplify((35));
0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0
JacobiP(2,3,3,x): (36) = simplify((36));
0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0
ChebyshevT(3,z): (37) = simplify((37));
0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0
The names ChebyshevT(0,x) and other index-0 orthogonal polynomials no longer simplify automatically to 1. Similarly with some index-1 orthogonal polynomials.
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.
sqrt(exp(2));
ⅇ
sqrt(exp(2*x)) assuming x > 0;
ⅇx
sqrt(3^2*997);
3⁢997
sqrt(997^2*3);
997⁢3
q5 := x^5-10*x^4+9*x^3-4*x^2-1;
q5≔x5−10⁢x4+9⁢x3−4⁢x2−1
sol := solve(q5): sol[1];
RootOf⁡_Z5−10⁢_Z4+9⁢_Z3−4⁢_Z2−1,index=1
convert(sol[1],radical);
515⁢445⁢13205⁢5⁢45355−16826⁢5+54725⁢45355−16826⁢5−974827⁢5−253259545355−16826⁢51520+6285+1265⁢52−2255⁢45355−16826⁢5386−20331965⁢5193⁢45355−16826⁢5⁢525⁢43525⁢13205⁢5⁢45355−16826⁢5+54725⁢45355−16826⁢5−974827⁢5−253259545355−16826⁢535+13752+35⁢5+11⁢45355−16826⁢5386−1767012⁢5193⁢45355−16826⁢5⁢535⁢42525⁢13205⁢5⁢45355−16826⁢5+54725⁢45355−16826⁢5−974827⁢5−253259545355−16826⁢525+1552+13⁢52⁢545⁢41525⁢13205⁢5⁢45355−16826⁢5+54725⁢45355−16826⁢5−974827⁢5−253259545355−16826⁢515+2
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.
Procedure hasassumptions has been added to the assume facility. It can be used to check whether some assumptions were made on a variable.
a := 'a';
a≔a
hasassumptions(a);
false
assume(a, real);
true
assume(a+b, real);
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.
Examples:
F:=(x+k)^(k-1)*(y+n-k-a)^(n-k-1)*binomial(n,k);
F≔x+kk−1⁢y+n−k−a~n−k−1⁢nk
sum(F,k=1..n);
Γ⁡n+1⁢x+y−a~+nnn!⁢x⁢y−a~−x+y−a~+nn−1n−1!⁢x⁢y−a~+y+n−a~nx⁢a~−x⁢n−x⁢y
F:=(2+k)^(k-2)*(1+n-k)^(n-k)/(k!*(n-k)!);
F≔2+kk−2⁢n−k+1n−kk!⁢n−k!
sum(F,k=0..n);
3+nn4⁢n!−3+nn−16⁢n−1!
F:=(-1)^x/x!/(y-x)!*(x^n)/(x+1)/(x+7);
F≔−1x⁢xnx!⁢y−x!⁢x+1⁢x+7
sum(F,x=0..y) assuming n::posint;
−1n6⁢Γ⁡y+2−120⁢−1n⁢7nΓ⁡y+8
F:=(-1)^x/x!/(y-x)!*ChebyshevU(2*n-1,x)/(x^2+3*x+2);
F≔−1x⁢ChebyshevU⁡2⁢n−1,xx!⁢y−x!⁢x2+3⁢x+2
sum(F,x=1..y) assuming n::posint;
−2⁢nΓ⁡y+2−ChebyshevU⁡2⁢n−1,−2Γ⁡y+3−ChebyshevU⁡2⁢n−1,02⁢y!
Both parfrac and fullparfrac partial fraction conversions have been enhanced.
The convert⁡...,parfrac,... routine has been rewritten. Additional detail on the new routine can be found in updates/Maple8/efficiency.
convert⁡...,fullparfrac,... 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.
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.
s / t;
st
`/`( s, t );
`/`( t );
1t
Download Help Document