Symbolics - Maple Help

Online Help

All Products    Maple    MapleSim


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 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).

  

Example:

ee := exp(1/2*z)* WhittakerM(0,1/2,z);

eeⅇz2WhittakerM0,12,z

(1)

convert( (1), MeijerG );

zMeijerG0,,0,−1,z

(2)

convert( (2), exp );

ⅇz221

(3)

convert( (3), hypergeom, include=exp );

hypergeom,,z221

(4)
  

Converting the original expression ee directly to hypergeom we arrive at an identity for hypergeometric functions

(4) = convert(ee, hypergeom);

hypergeom,,z221=zhypergeom1,2,z

(5)

simplify( (lhs-rhs)((5)) );

0

(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:

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);

JacobiP12,0,−1,z

(7)

convert((7),EllipticE);

2EllipticE2z+22π

(8)

convert((8),LegendreP);

1+zLegendreP12,z+LegendreP12,3z1+z211+z4

(9)

convert((9),GegenbauerC);

1+zGegenbauerC12,12,z+GegenbauerC12,12,3z1+z211+z4

(10)

convert((10),hypergeom);

1+zhypergeom12,12,1,12z2+hypergeom12,32,1,z11+z211+z4

(11)
  

Example: Conversions between 1F1 functions

erf(z);

erfz

(12)

convert((12),HermiteH);

2HermiteH−1,zπⅇz2+1

(13)

convert((13),KummerU);

zKummerU1,32,z2z2πⅇz2zz2z2πⅇz2+1

(14)

normal(convert((14),WhittakerW));

zπⅇz2z214+WhittakerW14,14,z2ⅇz22πⅇz2z234

(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.

  

Example:

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);

LegendreP12,12,2z2+4z12z2+4z14z122z2+4z214

(16)

convert((16),arctrig);

2z1214arcsinz1π2z2+4z214

(17)
  

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);

H1HermiteHa,z

(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");

H22zHermiteHa+1,zHermiteHa+2,z2a+2

(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:

"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+Iy.

• 

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;

0

(20)

binomial(a,2) assuming a::fraction;

a1a2

(21)

GAMMA(a,z) assuming a=1/2;

πerfcz

(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);

141+sinhx2&DifferentialD;x

(23)

simplify((23));    # <- deduces that x::RealRange(1,4)

14coshx&DifferentialD;x

(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);

tanx2+1secx2sinx2+cosx21

(25)

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&comma;4ν52ν1&comma;2ν32ν1&comma;2ν32ν1&comma;3zν1

(26)

simplify((26));

32ν32ν21zν12ν32ν2Γ3ν4ν1

(27)

MeijerG([[1/2], [-1/2]], [[0, v], [-1/2, -v]], x) + MeijerG([[], [1/2]], [[0, v], [-v]], x);

MeijerG12&comma;12&comma;0&comma;v&comma;12&comma;v&comma;x+MeijerG&comma;12&comma;0&comma;v&comma;v&comma;x

(28)

simplify((28));

0

(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);

KummerUa&comma;b&comma;z+a+1a+2bKummerUa+2&comma;b&comma;z2a+1+z2b2KummerUa+1&comma;b&comma;z

(30)

simplify((30));

0

(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');

0=0

(32)

LegendreP(48,24,2): (32) = simplify((32),'LegendreP');

0=0=0=0

(33)

LegendreQ(5,10,x): (33) = simplify((33),'LegendreQ');

0=0=0=0=0=0=0=0

(34)

LegendreQ(50,100,2): (34) = simplify((34),'LegendreQ');

0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0

(35)
• 

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

(36)

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

(37)

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

(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.

sqrt(exp(2));

&ExponentialE;

(39)

sqrt(exp(2*x)) assuming x > 0;

&ExponentialE;x

(40)

sqrt(3^2*997);

3997

(41)

sqrt(997^2*3);

9973

(42)

q5 := x^5-10*x^4+9*x^3-4*x^2-1;

q5x510x4+9x34x21

(43)

sol := solve(q5): sol[1];

RootOf_Z510_Z4+9_Z34_Z21&comma;index=1

(44)

convert(sol[1],radical);

51544513205545355168265+547254535516826597482752532595453551682651520+6285+126552225545355168265386203319655193453551682655254352513205545355168265+5472545355168265974827525325954535516826535+13752+355+114535516826538617670125193453551682655354252513205545355168265+5472545355168265974827525325954535516826525+1552+13525454152513205545355168265+5472545355168265974827525325954535516826515+2

(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.

a := 'a';

aa

(46)

hasassumptions(a);

false

(47)

assume(a, real);

hasassumptions(a);

true

(48)

a := 'a';

aa

(49)

hasassumptions(a);

false

(50)

assume(a+b, real);

hasassumptions(a);

true

(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.

  

Examples:

F:=(x+k)^(k-1)*(y+n-k-a)^(n-k-1)*binomial(n,k);

Fx+kk1y+nka~nk1nk

(52)

sum(F,k=1..n);

Γn+1x+ya~+nnn!xya~x+ya~+nn1n1!xya~+y+na~nxa~xnxy

(53)

F:=(2+k)^(k-2)*(1+n-k)^(n-k)/(k!*(n-k)!);

F2+kk2nk+1nkk!nk!

(54)

sum(F,k=0..n);

3+nn4n!3+nn16n1!

(55)

F:=(-1)^x/x!/(y-x)!*(x^n)/(x+1)/(x+7);

F−1xxnx!yx!x+1x+7

(56)

sum(F,x=0..y) assuming n::posint;

120−1n7nΓy+8+−1n6Γy+2

(57)

F:=(-1)^x/x!/(y-x)!*ChebyshevU(2*n-1,x)/(x^2+3*x+2);

F−1xChebyshevU2n1&comma;xx!yx!x2+3x+2

(58)

sum(F,x=1..y) assuming n::posint;

2ny+ChebyshevU2n1&comma;−2+4nΓy+3ChebyshevU2n1&comma;02y!

(59)

Partial Fractions

• 

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.

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.

s / t;

st

(60)

`/`( s, t );

st

(61)

`/`( t );

1t

(62)