Advanced Math - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


Advanced Mathematics

Maple 2020 includes numerous cutting-edge updates in a variety of branches of mathematics.

 

assume, is, coulditbe, getassumptions, about

asympt

ComputationalGeometry:-PointInPolygon

evala

Integration

Jacobi polynomials

Logic

NumberTheory:-JordanTotient

Parametric limits

Simplification

Miscellaneous

assume, is, coulditbe, getassumptions, about

getassumptions has been made more user-friendly

getassumptions now returns all assumptions directly or indirectly related to the variables in the input.

assumexy>0, yz>0, zreal

In the following, the two assumptions not directly involving x are now also returned because together with the other assumption they provide extra information about x, namely that x is real. These facts cannot be inferred from the assumption xy>0 alone.

getassumptionsx

z~::real,x~y~::0,,y~z~::0,

(1.1.1)

x, y, z  'x, y, z':

assume can now handle generic Or-type assumptions

Previously Maple could only handle Or-type assumptions involving the same subexpression, such as:

assumeOr&ExponentialE;x<0&comma;  &ExponentialE;x&gt;1

Now, any conditions that can be assumed independently can also appear in an Or-type assumption:

assumeOr0<x&comma;0<y

is0<x

false

(1.2.1)

is0<x assuming additionally&comma; y0

true

(1.2.2)

x&comma; y  &apos;x&comma; y&apos;&colon;

is now makes calls to the SMTLIB package

The is command now makes use of SMTLIB:-Satisfy to help compute some answers involving real variables.

isx=0assuming0<x

false

(1.3.1)

coulditbex=0assuming0<x

false

(1.3.2)

is0a2+b2+2ab+r2assuming real

true

(1.3.3)

isxy=xyassuming real

true

(1.3.4)

is0ab2+cd2assuming real

true

(1.3.5)

Triangle Inequality:

isx+yx+yassuming real

true

(1.3.6)

Other new results from is and coulditbe

isabsx1y2x2y1x1x2+y1y2&comma;rationalassumingx1::&apos;posint&apos;,x2::&apos;posint&apos;,y1::&apos;posint&apos;,y2&apos;posint&apos;

true

(1.4.1)

isx1x2&comma;posintassumingx1::&apos;posint&apos;,x2::&apos;posint&apos;,y1::&apos;posint&apos;,y2&apos;posint&apos;

false

(1.4.2)

coulditbe−114=I

false

(1.4.3)

coulditbe2=I

false

(1.4.4)

coulditbeI2=−1

false

(1.4.5)

isa&comma;realassuming1ayab=z,y=x,0<x

false

(1.4.6)

is0<&ExponentialE;fxassuming 0<x

false

(1.4.7)

isf0=0

false

(1.4.8)

coulditbex&comma;1&comma;2assuming xset

true

(1.4.9)

is<Y

false

(1.4.10)

israndpolyx&comma;n&comma;integerassuming x,real,n,prime

false

(1.4.11)

is&ExponentialE;x&comma;realassuming ximaginary

false

(1.4.12)

isn1&comma;−1&comma;0&comma;posintassumingn&apos;nonposint&apos;

true

(1.4.13)

coulditbe1fx0assuming¬0<fx

false

(1.4.14)

isx&comma;complexassumingx::Non0

false

(1.4.15)

isx1y2x2y1&comma;integerassumingx1::&apos;posint&apos;,x2::&apos;posint&apos;,y1::&apos;posint&apos;,y2&apos;posint&apos;

true

(1.4.16)

is0<RootOf1024_Z19+1216_Z131691_Z754_Z&comma;−0.97208064863+3RootOf1024_Z19+1216_Z131691_Z754_Z&comma;−0.9720806486RootOf1024_Z191216_Z131691_Z7+54_Z&comma;0.56123102422zRootOf1024_Z19+1216_Z131691_Z754_Z&comma;−0.9720806486assuming 0<z

true

(1.4.17)

coulditbem&comma;0assuming12n212n<m,n::&apos;integer&apos;,n<01<n

false

(1.4.18)

The following result used to be true.  It now returns FAIL since is cannot determine if the property is always satisfied.

isx&comma;realassumingx&apos;integer&apos;

FAIL

(1.4.19)

about

This result from about is now simpler:

aboutxassumingx::0&comma;,x::&comma;0

Originally x, renamed x~:  is assumed to be: RealRange(0,infinity)

asympt

Maple can now compute asymptotic expansions for various mathematical functions of type F11 with rational parameter values.

asymptKummerM13&comma;1&comma;x&comma;x&comma;4

3Γ231x232π+23Γ231x539π+253Γ231x8381π+16003Γ231x1132187π+O1x143&ExponentialE;x

(2.1)

asymptKummerU13&comma;2&comma;x&comma;x&comma;4

12+I321x13+29+2I391x23+2812I3811x53+20218720I321871x83+O1x113

(2.2)

asymptWhittakerW13&comma;1&comma;x&comma;x&comma;4

11x13+351x23364551x532592+605151x83279936+O1x113&ExponentialE;x

(2.3)

ComputationalGeometry:-PointInPolygon

The new command PointInPolygon determines if a point lies within the polygon formed by a list of points.

withComputationalGeometry&colon;

Q1.1180&comma;0.36327&comma;0.&comma;1.1756&comma;1.1180&comma;0.36327&comma;0.69098&comma;0.95106&comma;0.69098&comma;0.95106&colon;

a0.&comma;0.&colon;b1.&comma;1.&colon;c0.5Q1+0.5Q2&colon;

plots:-displayplottools:-pointa&comma;b&comma;c&comma;symbolsize=20&comma;plots:-textplota&comma;a&comma;align=above&comma;left&comma;plots:-textplotb&comma;b&comma;align=above&comma;left&comma;plots:-textplotc&comma;c&comma;align=below&comma;left&comma;plottools:-polygonQ&comma;style=line&comma;axes=box

PointInPolygona&comma;Q

inside

(3.1)

PointInPolygonb&comma;Q

outside

(3.2)

PointInPolygonc&comma;Q

boundary

(3.3)

evala

The new command evala/Minpoly computes the minimal polynomial of

• 

an algebraic number over the field of rational numbers (or a user-specified extension field thereof), or

• 

an algebraic function over the field of rational functions (or a user-specified extension field thereof).

restart&semi;

evalaMinpoly RootOf_Z22&plus;1&comma;x

x22x1

(4.1)

sortevalaMinpoly11&sol;4&comma;x&comma;2

x22x+1

(4.2)

radnormaleval&comma;x&equals;11&sol;4

0

(4.3)

sortevalaMinpoly11&sol;4&comma;x&comma;I

x2I

(4.4)

A subset of this functionality is also available through a new calling sequence in the MinimalPolynomial command in the PolynomialTools package.

PolynomialTools:-MinimalPolynomial2&plus;5&comma; x

x4+6x2+49

(4.5)

radnormal eval&comma; x&equals;2&plus;5 

0

(4.6)

Integration

There have been some improvements in integration of algebraic, elementary, and piecewise functions:

simplify148x3&plus;6x3&plus;Ix33&plus;3x2&plus;3Ix23&plus;6x&plus;1I3x2&plus;x&plus;1x31x3&plus;5Ix233x2Ix3&plus;3x6x3&plus;Ix33&plus;3x2&plus;3Ix23&plus;6x&plus;1I3x2&plus;x&plus;1x311I32x&plus;1I3x31&DifferentialD;x

2433I3x~+123+Ix~2+Ix~I2arctan2x~+133+3Ix~+I23x~2x~+12ln2+lnx~13+lnx~2+x~+12I32x~1x~13+x~2+x~+1x~11+I3I32x~13x~2+x~+12x~1ln2I33I3I32x~1x~1+3x~+33+3Ix~+3I2Ix~+I3+ln2I+2x~3133I3+316I32x~1x~1I32x~12

(5.1)

simplifyx240545x329681370226x&plus;514094x3&plus;x2&plus;2x&plus;423x42x33&plus;x5&plus;2x42x323x1&plus;32x2x&plus;1x&plus;1&DifferentialD;x

3912488x~3+1x~1+32I3+2x~1I3331694157I978122+1694157978122+I3I32x~+1I3+32x~+1I33EllipticPi2x~+1I33&comma;I3336&comma;I33I3+31694157786261564719978122I564719+453948564719+I3I3+2x~1I33I32x~+1I3+32x~+1I33EllipticF2x~+1I33&comma;I33I3+319562447862613453948262087I3+2x~1I33I32x~+1I3+32x~+1I33EllipticE2x~+1I33&comma;I33I3+397812237829x~+13262087151316x~2x~+11467183x~+13x~3+12+3

(5.2)

simplify13x2I32x1x1x2&plus;x&plus;1&DifferentialD;x

42Ix~+2I33x~ln2I33I3I32x~1x~1+3x~+33+3Ix~+3I2Ix~+I3+32+Ix~I23arctan2I34x~+14I32x~1x~1+33I3x~22x~+2I3+14I32x~1x~1+Ix~+2I33x~ln2I3+124I348x~24

(5.3)

simplifyAx&plus;Bx2&plus;1x2&plus;bx&plus;Ib&plus;1&DifferentialD;x

x~+Ib+x~2+1IbIB+A+IB+Ab2IA2Bx~+IA+Bb2IB+2A2ln22Ibx~+Ix~+Ib+2Ibx~3Ib2x~+I4Ibb+2Ix~+I

(5.4)

simplifyarctanz21z2&plus;1&DifferentialD;z assuming 0<z

arctanzarctanz21+Iarctanzln1+I22zI21+Iz+I2Iarctanzln2z+−1+I2I21Iz+I2+polylog2&comma;−I1+Iz2z2+1214polylog2&comma;−I1+Iz2z2+11+24

(5.5)

034cosh12πy3πcosh32π43cosh32πy3πcosh92π+45cosh52πy3πcosh152π47cosh72πy3πcosh212π+49cosh92πy3πcosh272π&DifferentialD;y

491369&ExponentialE;57π381188&ExponentialE;54π+869457&ExponentialE;51π1534126&ExponentialE;48π+2397245&ExponentialE;45π3375383&ExponentialE;42π+4331471&ExponentialE;39π5192140&ExponentialE;36π+5876409&ExponentialE;33π6251259&ExponentialE;30π+6251259&ExponentialE;27π5876409&ExponentialE;24π+5192140&ExponentialE;21π4331471&ExponentialE;18π+3375383&ExponentialE;15π2397245&ExponentialE;12π+1534126&ExponentialE;9π869457&ExponentialE;6π+381188&ExponentialE;3π91369&ExponentialE;57π299225π2cosh3π2262144cosh3π2181376256cosh3π216+3096576cosh3π2143899392cosh3π212+3010560cosh3π2101467392cosh3π28+447744cosh3π2681648cosh3π24+7980cosh3π22315

(5.6)

12sinπysin_Z4πy24cosπy21_Z3=11_Z3=20otherwise&DifferentialD;y

2_Z4+3sin_Z43y~πsin_Z4+3y~π_Z432π_Z4218π_Z3=1_Z4+1sin_Z41y~πsin_Z4+1y~π_Z412π_Z422π_Z3=20otherwise2

(5.7)

0x&lcub;0s6floor16s&plus;12<310sin2πs&plus;6floor16s&plus;12s6floor16s&plus;12<010sin2πs6floor16s&plus;12s6floor16s&plus;12<30otherwise&DifferentialD;s

102048cosπx~2cosπx~6+1212+2048sinπx~cosπx~sinπx~6+12cosπx~6+12116144cosπx~2cosπx~6+12105120sinπx~cosπx~sinπx~6+12cosπx~6+1291024cosπx~6+1212+6912cosπx~2cosπx~6+128+4608sinπx~cosπx~sinπx~6+12cosπx~6+127+3072cosπx~6+12103584cosπx~2cosπx~6+1261792sinπx~cosπx~sinπx~6+12cosπx~6+1253456cosπx~6+128+840cosπx~2cosπx~6+124+280sinπx~cosπx~sinπx~6+12cosπx~6+123+1792cosπx~6+12672cosπx~2cosπx~6+12212sinπx~cosπx~sinπx~6+12cosπx~6+12420cosπx~6+124+cosπx~2+36cosπx~6+1221π

(5.8)

BesselJn&comma;x&DifferentialD;x assuming nodd

1BesselJ0&comma;x2i&equals;112n12BesselJ2i&comma;x

(5.9)

Maple now performs this change of variables correctly.

IntegrationTools:-Change02π&ExponentialE;38cosxcos38sinx&DifferentialD;x&comma;cosx=t

2−11&ExponentialE;3t8cos3t2+18t2+1&DifferentialD;t

(5.10)

The integral transforms of the inttrans package have also added more functionality - see What's New in Integral Transforms.

Jacobi polynomials

The definition of the JacobiP function has been extended to cases when the 2nd or 3rd argument is a negative integer.

In Maple 2019 and earlier, the following used to return undefined or unevaluated:

JacobiP5&comma;3&comma;0&comma;0.5

−0.05957031250

(6.1)

JacobiP0.5&comma;3&comma;0&comma;0.5

−0.001269583779

(6.2)

JacobiP1&comma;3&comma;0&comma;0.5

0.01562500000

(6.3)

sortexpandJacobiP5&comma;3&comma;0&comma;x

2132x54532x4+516x3+1516x21532x132

(6.4)

expandJacobiP5&comma;3&comma;0&comma;12

611024

(6.5)

Logic

The Logic package contains a number of new routines for understanding the structure of logical expressions.

Incidence graph and primal graph

The new IncidenceGraph and PrimalGraph command return Graph objects which encode the incidence graph and the primal graph of a logical expression.

If e is a Boolean expression in conjunctive normal form (CNF), the primal graph of e is a graph whose vertices are the variables of e. An edge exists between two variables if these variables occur together in a clause of e, in either negated or non-negated form.

In the following example, the variables a and b share an edge because they appear together in the first clause, while a and c do not share an edge because they appear in distinct clauses.

withLogic&colon;

expr  ¬a  b ¬d ¬bc¬db¬cd&colon;

PG  PrimalGraph expr 

PGGraph 1: an undirected unweighted graph with 4 vertices and 5 edge(s)

(7.1.1)

Similarly, if e is a Boolean expression in CNF, the incidence graph of e is a bipartite graph whose vertices correspond to the variables and clauses of e.  Edges in the graph consist of pairs (v,c) where v is a variable and c is a clause, and clause c contains v in negated or non-negated form.

In the example seen earlier, the vertex Clause 1 shares edges with variables a, b, and d because each of these appears in the first clause of expr, but does not share an edge with c as it does not appear in this clause.

IG  Logic:-IncidenceGraph expr 

IGGraph 2: an undirected unweighted graph with 7 vertices and 9 edge(s)

(7.1.2)

Symmetry group

The new SymmetryGroup command returns a Group object describing the group of symmetries of a logical expression.

Let e be a logical expression with variables v__1&comma;..&period;&comma;v__k.  A symmetry is an f which maps each variable v__i to either v__j or ¬v__j for some j, while preserving the structure of e.  Symmetry detection is an important problem in the simplification of logical expressions and especially in determining satisfiability, as a straightforward effort to find solutions for a highly symmetric expression could waste resources exploring paths which are the symmetric analogues of paths already visited.

In this example, we can see that the symmetry group of this logical expression has order 2:

expr  ¬a  b ¬d ¬bc¬db¬cd&colon;

SG  SymmetryGroupexpr

SG2&comma;83&comma;74&comma;610&comma;11

(7.2.1)

GroupTheory:-GroupOrderSG

2

(7.2.2)

The generators of the symmetry group correspond to variables and clauses of the input expression. If we wish to see the correspondence, we can request both the group and the expressions using the output option:

SymmetryGroupexpr&comma;output&equals;expressions&comma;group

a&comma;b&comma;c&comma;d&comma;¬a&comma;¬b&comma;¬c&comma;¬d&comma;¬ab¬d&comma;¬bc¬d&comma;b¬cd,2&comma;83&comma;74&comma;610&comma;11

(7.2.3)

Examining the above output and comparing the elements of the first list with the generators of the symmetry group, we can see that the symmetry discovered here is the one which leaves variable a unchanged but which maps b&comma;c&comma;d to ¬d&comma;¬c&comma;¬b.

NumberTheory:-JordanTotient

The new JordanTotient command in the NumberTheory package computes the kth Jordan totient of a positive integer n, defined as the number of k-tuples a1,..,ak of positive integers such that the greatest common divisor gcda1&comma;..&comma;ak&comma;n is equal to 1.  This generalizes the Euler totient, which is the special case in which k=1.

with( NumberTheory ):

seq( Totient( n ) = JordanTotient( 1, n ), n = 1 .. 10 );

1=1,1=1,2=2,2=2,4=4,2=2,6=6,4=4,6=6,4=4

(8.1)

seq( JordanTotient( 2, n ), n = 1 ..10 );

1,3,8,12,24,24,48,48,72,72

(8.2)

Matrix( 10, 10, JordanTotient );

11224264641381224244848727217265612418234244870286811580240624120024003840648093601312429923124750216806317445880696844163728403215624458641176482580485307129843121127218616256781242776228235422080768478078299217481255656065280390624167280057648001671168043040160996091201511196822616321953124100575024035360613395558438740080699804636411023590481047552976562460406104282475248107269324834867253529990233352

(8.3)

Parametric limits

The limit command has a new option parametric. If specified, limit will attempt to return a (piecewise) answer that is correct for all real parameter values.

limitxa&comma;x&equals;

limxxa

(9.1)

limitxa&comma;x&equals;&comma;&apos;parametric&apos;

0a<01a=00<alimxxaotherwise

(9.2)

See limit for more examples.

Simplification

abs, csgn, signum, and sqrt have improved normalization and simplification:

restart&semi;

tx1t1x

0

(10.1)

csgnxy2csgnyx2

0

(10.2)

1xy

1xy

(10.3)

signum1xy

1signumxy

(10.4)

a2assuming0<a

a

(10.5)

a2assuminga<0

a

(10.6)

radnormal is now more careful at simplifying expressions containing roots of negative numbers:

radnormal2−5+10I−510I5−5+10I−510I2

−I−5+10I+−510I−5+10I−510I

(10.7)

simplify is more careful not to expand powers, avoiding large expressions:

simplifycosπ60+Isinπ6020

12+I32

(10.8)

There have been some improvements in simplification of special functions:

simplifyWeierstrassPt&comma;0&comma;13WeierstrassPPrimet&comma;0&comma;1

WeierstrassPPrimet&comma;0&comma;134+WeierstrassPPrimet&comma;0&comma;14

(10.9)

simplifyln1LambertWz+LambertWz&comma;LambertWassuming¬0<LambertWz

lnz

(10.10)

Trig simplifications have been improved:

simplifycosπ12sinπ12sin42+cos42−1153−1253+−1353−1453t

t62

(10.11)

Some improvements in simplification of piecewise functions:

simplifyx24+x4n=x+10nsignumn+122x<00otherwise

0

(10.12)

simplifygc20x<ctundefinedx=ct2ct<x+2c2t<xcundefinedt=xc0xc<tassuming 0<c

0

(10.13)

simplifyDiracttμ=0tμotherwiset

Diracttμ=01μotherwise

(10.14)

simplify can now recognize that the following expressions are 0:

simplify20ln3+20ln2+20ln510ln9+80&ExponentialE;−1+10ln1+8&ExponentialE;−11&ExponentialE;tt101010&ExponentialE;tt1010110ln9&ExponentialE;+80+10ln&ExponentialE;+820ln3+20ln5+20ln210

0

(10.15)

simplifyInn+112&ExponentialE;π8Inn+1t2InxIx4t6+Inn+112&ExponentialE;π8Inn+1t2InxIx+4t6+Inn+1+12&ExponentialE;π8Inn+1t+2Inx+Ix4t6+Inn+1+12&ExponentialE;π8Inn+1t+2Inx+Ix+4t6+2nn+1+I&ExponentialE;2I3π2nn+1+It&ExponentialE;2I3π2nn+1+It2nn+1+Isinπx2n+16

0

(10.16)

Combining expressions with trig functions is now more efficient in many cases:

combine2sin1102cos1102+14sin152cos152+18sin1102cos110218sin152sin1102sin152cos11024sin15cos15sin110cos110cos152sin1102+cos152cos1102sin152+cos152+sin1102cos110214sin152sin11046sin152sin1102cos1102+sin152cos11048sin15cos15sin1103cos110+8sin15cos15sin110cos1103cos152sin1104+6cos152sin1102cos1102cos152cos1104+sin11046sin1102cos1102+cos1104sin152+cos152128sin1103cos110sin15cos15sin25cos25+8sin110cos1103sin15cos15sin25cos25+sin252sin1103cos110+2sin110cos1103sin25sin1104sin25cos1104+sin25sin152sin25cos152+sin15cos15sin25cos25+8sin25sin15cos15sin1103cos1108sin25sin15cos15sin110cos110312cos25sin15cos15sin1102cos11026sin1102cos1102sin152sin25cos256sin1102cos1102sin15cos15sin252+6sin1102cos1102sin15cos15cos252+6sin1102cos1102cos152sin25cos252sin1103cos110cos252+2sin110cos1103cos252+6sin25sin1102cos1102+4cos25sin1103cos1104cos25sin110cos11032cos25sin15cos15+2sin152sin110cos1103+2cos152sin1103cos1102cos152sin110cos11032sin152sin1103cos1102sin110cos1103sin252+2sin1103cos110sin252+6sin15cos15sin1102cos1102+2sin1103cos110sin152sin2522sin1103cos110sin152cos2522sin1103cos110cos152sin252+2sin1103cos110cos152cos2522sin110cos1103sin152sin252+2sin110cos1103sin152cos252+2sin110cos1103cos152sin252sin15cos15cos1104+cos1104sin152sin25cos25+cos1104sin15cos15sin252cos1104sin15cos15cos252cos1104cos152sin25cos25+sin1104sin152sin25cos25+sin1104sin15cos15sin252sin1104sin15cos15cos252sin1104cos152sin25cos25+6sin25sin152sin1102cos11026sin25cos152sin1102cos1102+4cos25sin152sin1103cos1104cos25sin152sin110cos1103+2cos25sin15cos15sin1104+2cos25sin15cos15cos11044cos25cos152sin1103cos110+4cos25cos152sin110cos11032sin110cos1103cos152cos2526sin1102cos1102sin25cos25sin25sin152sin1104sin25sin152cos1104+sin25cos152sin1104+sin25cos152cos1104sin15cos15sin1104+sin1104sin25cos25+cos1104sin25cos25sin152sin25cos25sin15cos15sin252+sin15cos15cos252+cos152sin25cos25cos25121+sin152cos152sin1104cos1104cos25+cos25sin1104+cos25cos1104cos25sin152+cos25cos152+6sin1102cos1102sin152sin1104sin152cos1104+cos152sin1104+cos152cos110412sin25sin15cos15sin1102cos11028cos25sin15cos15sin1103cos110+8cos25sin15cos15sin110cos11032sin25sin15cos15+6sin152sin1102cos1102+4sin25sin1103cos1104sin25sin110cos11036cos25sin1102cos11026cos152sin1102cos1102+4sin25sin152sin1103cos1104sin25sin152sin110cos1103+2sin25sin15cos15sin1104+2sin25sin15cos15cos11044sin25cos152sin1103cos110+4sin25cos152sin110cos11036cos25sin152sin1102cos1102+6cos25cos152sin1102cos1102+cos25sin152sin1104+cos25sin152cos1104cos25cos152sin1104cos25cos152cos1104+8sin15cos15sin1103cos1108sin15cos15sin110cos1103&comma;trig

cos45+28cos25+358cos3556cos15cos25181+cos1581cos15+cos35+cos254cos85+712cos254cos65+8cos45sin854sin654sin25+6sin45cos45+34cos2513cos25cos65+3cos4532

(10.17)

Miscellaneous

Some other miscellaneous improvements:

seriestanseriescsgnBesselY2&comma;x21&comma;x&comma;x

tancsgnBesselY2&comma;x21

(11.1)

signumRootOf1024_Z19+1216_Z131691_Z754_Z&comma;−0.972080648623RootOf1024_Z191216_Z131691_Z7+54_Z&comma;0.56123102422+zassuming 0<z

1

(11.2)

evalrC has been improved. The output means that abs(1/xy) can take values in the interval from 0+0*I to infinity+0*I.

evalrC1xy

INTERVAL0&comma;0&comma;&comma;0

(11.3)

This result from isolate is now correctly expressed in terms of a RootOf:

isolate1fg+12=q&comma;g

g=RootOff+q1_Z21

(11.4)

frontend is now more careful when recursing:

frontendprocz signnormalIz&semi; end proc&comma; yI

−1

(11.5)