Advanced Math Improvements in Maple 2024
Maple 2024 includes many improvements to the math engine.
fsolve for Univariate Polynomials
Multivariate Complex Solver
Better Handling of Parameters in Solve Solutions
Pattern Matching for Definite Summation
Improvements to the Collocation Method for Solving Integral Equations
Improvements to is, coulditbe, argument, and signum
Manipulating Trigonometric Expressions
Sum, products, integrals, limits: simplification and evaluation
simplify
min/max
IntegrationTools:-Change
Verification
Miscellaneous Improvements in Advanced Math
The fsolve command now uses RootFinding:-Isolate for computing roots of univariate polynomials of degree greater than two.
By default no method is specified. The Isolate methods ABND, RS, RC, HR, and PW are optionally accepted by fsolve and passed to Isolate.
The PW method is new. For more about that method and the improved underlying RootFinding:-Isolate command, see the Faster Univariate Complex Solver section of the Performance Improvements in Maple 2024 help page.
Supplying the option NAG to fsolve will force use of the modified Laguerre method followed by iterated root-polishing, which was the prior default.
The RootFinding:-Isolate command can now find complex solutions for multivariate polynomial systems.
unassign('a','b','c','d','e'):
cyclic5 := [a+b+c+d+e, a*b+b*c+c*d+d*e+e*a, a*b*c+b*c*d+c*d*e+d*e*a+e*a*b, a*b*c*d+b*c*d*e+c*d*e*a+d*e*a*b+e*a*b*c, a*b*c*d*e-1];
cyclic5≔a+b+c+d+e,a⁢b+a⁢e+b⁢c+c⁢d+d⁢e,a⁢b⁢c+a⁢b⁢e+a⁢d⁢e+b⁢c⁢d+c⁢d⁢e,a⁢b⁢c⁢d+a⁢b⁢c⁢e+a⁢b⁢d⁢e+a⁢c⁢d⁢e+b⁢c⁢d⁢e,a⁢b⁢c⁢d⁢e−1
map(print, RootFinding:-Isolate(cyclic5, [a,b,c,d,e])):
a=−2.618033989,b=−0.3819660113,c=1.000000000,d=1.000000000,e=1.000000000
a=−2.618033989,b=1.000000000,c=1.000000000,d=1.000000000,e=−0.3819660112
a=−0.3819660112,b=−2.618033989,c=1.000000000,d=1.000000000,e=1.000000000
a=−0.3819660112,b=1.000000000,c=1.000000000,d=1.000000000,e=−2.618033989
a=1.000000000,b=−2.618033989,c=−0.3819660113,d=1.000000000,e=1.000000000
a=1.000000000,b=−0.3819660112,c=−2.618033989,d=1.000000000,e=1.000000000
a=1.000000000,b=1.000000000,c=−2.618033989,d=−0.3819660113,e=1.000000000
a=1.000000000,b=1.000000000,c=−0.3819660113,d=−2.618033989,e=1.000000000
a=1.000000000,b=1.000000000,c=1.000000000,d=−2.618033989,e=−0.3819660113
a=1.000000000,b=1.000000000,c=1.000000000,d=−0.3819660113,e=−2.618033989
map(print, RootFinding:-Isolate(cyclic5, [a,b,c,d,e], 'complex')):
a=−2.618033989,b=−0.3819660112,c=1.,d=1.,e=1.
a=−2.618033989,b=1.,c=1.,d=1.,e=−0.3819660112
a=−0.8090169944−2.489898285⁢I,b=−0.1180339887−0.3632712640⁢I,c=0.3090169944+0.9510565163⁢I,d=0.3090169944+0.9510565163⁢I,e=0.3090169944+0.9510565163⁢I
a=−0.8090169944−2.489898285⁢I,b=0.3090169944+0.9510565163⁢I,c=0.3090169944+0.9510565163⁢I,d=0.3090169944+0.9510565163⁢I,e=−0.1180339887−0.3632712640⁢I
a=−0.8090169944−0.5877852523⁢I,b=−0.8090169944−0.5877852523⁢I,c=−0.8090169944−0.5877852523⁢I,d=0.3090169944+0.2245139883⁢I,e=2.118033989+1.538841769⁢I
a=−0.8090169944−0.5877852523⁢I,b=−0.8090169944−0.5877852523⁢I,c=−0.8090169944−0.5877852523⁢I,d=2.118033989+1.538841769⁢I,e=0.3090169944+0.2245139883⁢I
a=−0.8090169944−0.5877852523⁢I,b=−0.8090169944−0.5877852523⁢I,c=0.3090169944+0.2245139883⁢I,d=2.118033989+1.538841769⁢I,e=−0.8090169944−0.5877852523⁢I
a=−0.8090169944−0.5877852523⁢I,b=−0.8090169944−0.5877852523⁢I,c=2.118033989+1.538841769⁢I,d=0.3090169944+0.2245139883⁢I,e=−0.8090169944−0.5877852523⁢I
a=−0.8090169944−0.5877852523⁢I,b=−0.8090169944+0.5877852523⁢I,c=0.3090169944+0.9510565163⁢I,d=1.,e=0.3090169944−0.9510565163⁢I
a=−0.8090169944−0.5877852523⁢I,b=0.3090169944−0.9510565163⁢I,c=1.,d=0.3090169944+0.9510565163⁢I,e=−0.8090169944+0.5877852523⁢I
a=−0.8090169944−0.5877852523⁢I,b=0.3090169944+0.2245139883⁢I,c=2.118033989+1.538841769⁢I,d=−0.8090169944−0.5877852523⁢I,e=−0.8090169944−0.5877852523⁢I
a=−0.8090169944−0.5877852523⁢I,b=0.3090169944+0.9510565163⁢I,c=0.3090169944−0.9510565163⁢I,d=−0.8090169944+0.5877852523⁢I,e=1.
a=−0.8090169944−0.5877852523⁢I,b=1.,c=−0.8090169944+0.5877852523⁢I,d=0.3090169944−0.9510565163⁢I,e=0.3090169944+0.9510565163⁢I
a=−0.8090169944−0.5877852523⁢I,b=2.118033989+1.538841769⁢I,c=0.3090169944+0.2245139883⁢I,d=−0.8090169944−0.5877852523⁢I,e=−0.8090169944−0.5877852523⁢I
a=−0.8090169944+0.5877852523⁢I,b=−0.8090169944−0.5877852523⁢I,c=0.3090169944−0.9510565163⁢I,d=1.,e=0.3090169944+0.9510565163⁢I
a=−0.8090169944+0.5877852523⁢I,b=−0.8090169944+0.5877852523⁢I,c=−0.8090169944+0.5877852523⁢I,d=0.3090169944−0.2245139883⁢I,e=2.118033989−1.538841769⁢I
a=−0.8090169944+0.5877852523⁢I,b=−0.8090169944+0.5877852523⁢I,c=−0.8090169944+0.5877852523⁢I,d=2.118033989−1.538841769⁢I,e=0.3090169944−0.2245139883⁢I
a=−0.8090169944+0.5877852523⁢I,b=−0.8090169944+0.5877852523⁢I,c=0.3090169944−0.2245139883⁢I,d=2.118033989−1.538841769⁢I,e=−0.8090169944+0.5877852523⁢I
a=−0.8090169944+0.5877852523⁢I,b=−0.8090169944+0.5877852523⁢I,c=2.118033989−1.538841769⁢I,d=0.3090169944−0.2245139883⁢I,e=−0.8090169944+0.5877852523⁢I
a=−0.8090169944+0.5877852523⁢I,b=0.3090169944−0.9510565163⁢I,c=0.3090169944+0.9510565163⁢I,d=−0.8090169944−0.5877852523⁢I,e=1.
a=−0.8090169944+0.5877852523⁢I,b=0.3090169944−0.2245139883⁢I,c=2.118033989−1.538841769⁢I,d=−0.8090169944+0.5877852523⁢I,e=−0.8090169944+0.5877852523⁢I
a=−0.8090169944+0.5877852523⁢I,b=0.3090169944+0.9510565163⁢I,c=1.,d=0.3090169944−0.9510565163⁢I,e=−0.8090169944−0.5877852523⁢I
a=−0.8090169944+0.5877852523⁢I,b=1.,c=−0.8090169944−0.5877852523⁢I,d=0.3090169944+0.9510565163⁢I,e=0.3090169944−0.9510565163⁢I
a=−0.8090169944+0.5877852523⁢I,b=2.118033989−1.538841769⁢I,c=0.3090169944−0.2245139883⁢I,d=−0.8090169944+0.5877852523⁢I,e=−0.8090169944+0.5877852523⁢I
a=−0.8090169944+2.489898285⁢I,b=−0.1180339887+0.3632712640⁢I,c=0.3090169944−0.9510565163⁢I,d=0.3090169944−0.9510565163⁢I,e=0.3090169944−0.9510565163⁢I
a=−0.8090169944+2.489898285⁢I,b=0.3090169944−0.9510565163⁢I,c=0.3090169944−0.9510565163⁢I,d=0.3090169944−0.9510565163⁢I,e=−0.1180339887+0.3632712640⁢I
a=−0.3819660113,b=−2.618033989,c=1.,d=1.,e=1.
a=−0.3819660112,b=1.,c=1.,d=1.,e=−2.618033989
a=−0.1180339887−0.3632712640⁢I,b=−0.8090169944−2.489898285⁢I,c=0.3090169944+0.9510565163⁢I,d=0.3090169944+0.9510565163⁢I,e=0.3090169944+0.9510565163⁢I
a=−0.1180339887−0.3632712640⁢I,b=0.3090169944+0.9510565163⁢I,c=0.3090169944+0.9510565163⁢I,d=0.3090169944+0.9510565163⁢I,e=−0.8090169944−2.489898285⁢I
a=−0.1180339887+0.3632712640⁢I,b=−0.8090169944+2.489898285⁢I,c=0.3090169944−0.9510565163⁢I,d=0.3090169944−0.9510565163⁢I,e=0.3090169944−0.9510565163⁢I
a=−0.1180339887+0.3632712640⁢I,b=0.3090169944−0.9510565163⁢I,c=0.3090169944−0.9510565163⁢I,d=0.3090169944−0.9510565163⁢I,e=−0.8090169944+2.489898285⁢I
a=0.3090169944−0.9510565163⁢I,b=−0.8090169944−0.5877852523⁢I,c=−0.8090169944+0.5877852523⁢I,d=0.3090169944+0.9510565163⁢I,e=1.
a=0.3090169944−0.9510565163⁢I,b=−0.8090169944+0.5877852523⁢I,c=1.,d=−0.8090169944−0.5877852523⁢I,e=0.3090169944+0.9510565163⁢I
a=0.3090169944−0.9510565163⁢I,b=−0.8090169944+2.489898285⁢I,c=−0.1180339887+0.3632712640⁢I,d=0.3090169944−0.9510565163⁢I,e=0.3090169944−0.9510565163⁢I
a=0.3090169944−0.9510565163⁢I,b=−0.1180339887+0.3632712640⁢I,c=−0.8090169944+2.489898285⁢I,d=0.3090169944−0.9510565163⁢I,e=0.3090169944−0.9510565163⁢I
a=0.3090169944−0.9510565163⁢I,b=0.3090169944−0.9510565163⁢I,c=−0.8090169944+2.489898285⁢I,d=−0.1180339888+0.3632712640⁢I,e=0.3090169944−0.9510565163⁢I
a=0.3090169944−0.9510565163⁢I,b=0.3090169944−0.9510565163⁢I,c=−0.1180339888+0.3632712640⁢I,d=−0.8090169944+2.489898285⁢I,e=0.3090169944−0.9510565163⁢I
a=0.3090169944−0.9510565163⁢I,b=0.3090169944−0.9510565163⁢I,c=0.3090169944−0.9510565163⁢I,d=−0.8090169944+2.489898285⁢I,e=−0.1180339887+0.3632712640⁢I
a=0.3090169944−0.9510565163⁢I,b=0.3090169944−0.9510565163⁢I,c=0.3090169944−0.9510565163⁢I,d=−0.1180339887+0.3632712640⁢I,e=−0.8090169944+2.489898285⁢I
a=0.3090169944−0.9510565163⁢I,b=0.3090169944+0.9510565163⁢I,c=−0.8090169944−0.5877852523⁢I,d=1.,e=−0.8090169944+0.5877852523⁢I
a=0.3090169944−0.9510565163⁢I,b=1.,c=0.3090169944+0.9510565163⁢I,d=−0.8090169944+0.5877852523⁢I,e=−0.8090169944−0.5877852523⁢I
a=0.3090169944−0.2245139883⁢I,b=−0.8090169944+0.5877852523⁢I,c=−0.8090169944+0.5877852523⁢I,d=−0.8090169944+0.5877852523⁢I,e=2.118033989−1.538841769⁢I
a=0.3090169944−0.2245139883⁢I,b=2.118033989−1.538841769⁢I,c=−0.8090169944+0.5877852523⁢I,d=−0.8090169944+0.5877852523⁢I,e=−0.8090169944+0.5877852523⁢I
a=0.3090169944+0.2245139883⁢I,b=−0.8090169944−0.5877852523⁢I,c=−0.8090169944−0.5877852523⁢I,d=−0.8090169944−0.5877852523⁢I,e=2.118033989+1.538841769⁢I
a=0.3090169944+0.2245139883⁢I,b=2.118033989+1.538841769⁢I,c=−0.8090169944−0.5877852523⁢I,d=−0.8090169944−0.5877852523⁢I,e=−0.8090169944−0.5877852523⁢I
a=0.3090169944+0.9510565163⁢I,b=−0.8090169944−2.489898285⁢I,c=−0.1180339887−0.3632712640⁢I,d=0.3090169944+0.9510565163⁢I,e=0.3090169944+0.9510565163⁢I
a=0.3090169944+0.9510565163⁢I,b=−0.8090169944−0.5877852523⁢I,c=1.,d=−0.8090169944+0.5877852523⁢I,e=0.3090169944−0.9510565163⁢I
a=0.3090169944+0.9510565163⁢I,b=−0.8090169944+0.5877852523⁢I,c=−0.8090169944−0.5877852523⁢I,d=0.3090169944−0.9510565163⁢I,e=1.
a=0.3090169944+0.9510565163⁢I,b=−0.1180339887−0.3632712640⁢I,c=−0.8090169944−2.489898285⁢I,d=0.3090169944+0.9510565163⁢I,e=0.3090169944+0.9510565163⁢I
a=0.3090169944+0.9510565163⁢I,b=0.3090169944−0.9510565163⁢I,c=−0.8090169944+0.5877852523⁢I,d=1.,e=−0.8090169944−0.5877852523⁢I
a=0.3090169944+0.9510565163⁢I,b=0.3090169944+0.9510565163⁢I,c=−0.8090169944−2.489898285⁢I,d=−0.1180339888−0.3632712640⁢I,e=0.3090169944+0.9510565163⁢I
a=0.3090169944+0.9510565163⁢I,b=0.3090169944+0.9510565163⁢I,c=−0.1180339888−0.3632712640⁢I,d=−0.8090169944−2.489898285⁢I,e=0.3090169944+0.9510565163⁢I
a=0.3090169944+0.9510565163⁢I,b=0.3090169944+0.9510565163⁢I,c=0.3090169944+0.9510565163⁢I,d=−0.8090169944−2.489898285⁢I,e=−0.1180339887−0.3632712640⁢I
a=0.3090169944+0.9510565163⁢I,b=0.3090169944+0.9510565163⁢I,c=0.3090169944+0.9510565163⁢I,d=−0.1180339887−0.3632712640⁢I,e=−0.8090169944−2.489898285⁢I
a=0.3090169944+0.9510565163⁢I,b=1.,c=0.3090169944−0.9510565163⁢I,d=−0.8090169944−0.5877852523⁢I,e=−0.8090169944+0.5877852523⁢I
a=1.,b=−2.618033989,c=−0.3819660112,d=1.,e=1.
a=1.,b=−0.8090169944−0.5877852523⁢I,c=0.3090169944+0.9510565163⁢I,d=0.3090169944−0.9510565163⁢I,e=−0.8090169944+0.5877852523⁢I
a=1.,b=−0.8090169944+0.5877852523⁢I,c=0.3090169944−0.9510565163⁢I,d=0.3090169944+0.9510565163⁢I,e=−0.8090169944−0.5877852523⁢I
a=1.,b=−0.3819660112,c=−2.618033989,d=1.,e=1.
a=1.,b=0.3090169944−0.9510565163⁢I,c=−0.8090169944−0.5877852523⁢I,d=−0.8090169944+0.5877852523⁢I,e=0.3090169944+0.9510565163⁢I
a=1.,b=0.3090169944+0.9510565163⁢I,c=−0.8090169944+0.5877852523⁢I,d=−0.8090169944−0.5877852523⁢I,e=0.3090169944−0.9510565163⁢I
a=1.,b=1.,c=−2.618033989,d=−0.3819660112,e=1.
a=1.,b=1.,c=−0.3819660112,d=−2.618033989,e=1.
a=1.,b=1.,c=1.,d=−2.618033989,e=−0.3819660113
a=1.,b=1.,c=1.,d=−0.3819660113,e=−2.618033989
a=2.118033989−1.538841769⁢I,b=−0.8090169944+0.5877852523⁢I,c=−0.8090169944+0.5877852523⁢I,d=−0.8090169944+0.5877852523⁢I,e=0.3090169944−0.2245139883⁢I
a=2.118033989−1.538841769⁢I,b=0.3090169944−0.2245139883⁢I,c=−0.8090169944+0.5877852523⁢I,d=−0.8090169944+0.5877852523⁢I,e=−0.8090169944+0.5877852523⁢I
a=2.118033989+1.538841769⁢I,b=−0.8090169944−0.5877852523⁢I,c=−0.8090169944−0.5877852523⁢I,d=−0.8090169944−0.5877852523⁢I,e=0.3090169944+0.2245139883⁢I
a=2.118033989+1.538841769⁢I,b=0.3090169944+0.2245139883⁢I,c=−0.8090169944−0.5877852523⁢I,d=−0.8090169944−0.5877852523⁢I,e=−0.8090169944−0.5877852523⁢I
By default, solve gives a representative solution for the following problems:
solve( cos(x)*sin(x)=0, x );
π2,0
solve( cos(x)=1/2, x );
π3
The allsolutions option can be used to get a more complete solution, using _Z to represent any integer.
solve( cos(x)=1/2, x, 'allsolutions' );
13⁢π+2⁢π⁢_Z1~,−13⁢π+2⁢π⁢_Z1~
If preferred, the new command SolveTools:-DisplaySolutions can be used to format the solution in a more readable way using standard notation.
sol1 := solve(x*sin(x)^2 = -x, [x], allsolutions);
sol1≔x=0,x=I⁢ln⁡1+2+2⁢π⁢_Z2~,x=−I⁢ln⁡1+2+π+2⁢π⁢_Z2~,x=−I⁢ln⁡1+2+2⁢π⁢_Z3~,x=I⁢ln⁡1+2+π+2⁢π⁢_Z3~
SolveTools:-DisplaySolutions( sol1 );
x=0x=I⁢ln⁡1+2+2⁢π⁢n__1x=−I⁢ln⁡1+2+π+2⁢π⁢n__1n__1∈ℤx=−I⁢ln⁡1+2+2⁢π⁢n__2n__2∈ℤx=I⁢ln⁡1+2+π+2⁢π⁢n__2
When called with the option allsolutions=true in Maple 2023 and earlier, solve may return a solution in terms of parameters starting with _B, _NN, and _Z. In Maple 2024, solutions will no longer include the _B variables but instead solve will expand those automatically into multiple solutions.
The _NN and _Z parameters typically stand for all natural numbers or integers, respectively, so cannot be expanded, but the new command SolveTools:-DisplaySolutions can be used to format them in an easier to read format.
Maple 2024 includes a new pattern matching method for definite summation problems, accessible through the sum command. This method uses a database of known definite summation problems with their closed forms. By matching a given definite sum to all entries of the database, Maple can now return closed forms for several definite sums which earlier versions were unable to compute.
The sum command now recognizes power series expansions of some non-hypergeometric functions.
sum(z^k*(-k)^(k-1)/k!, k=1..infinity) assuming abs(z) < exp(-1);
LambertW⁡z
sum(bernoulli(2*n)*(-4)^n*(1-4^n)*x^(2*n-1)/(2*n)!, n=1..infinity) assuming abs(x) < Pi/2;
tan⁡x
sum(Stirling2(n,k)*z^k, k=0..n) assuming n::nonnegint;
BellB⁡n,z
The database also contains some definite sums involving the floor function.
sum(binomial(n,k)*binomial(n-k,n-2*k)/4^k, k=0..floor(n/2)) assuming n::nonnegint;
2−n⁢2⁢nn
Option formal can be used instead of assumptions.
sum(z^k*(-k)^(k-1)/k!, k=1..infinity);
∑k=1∞⁡zk⁢−kk−1k!
sum(z^k*(-k)^(k-1)/k!, k=1..infinity, 'formal');
The intsolve command now supports special nodes, custom nodes, and custom basis functions for the collocation method. For example, consider the following integral equation:
a := 0;
a≔0
b := 2 * Pi;
b≔2⁢π
ie := sin(x) - 3 * f(x) - 2 * int( y * f(y), y = a .. b );
ie≔sin⁡x−3⁢f⁡x−2⁢∫02⁢πy⁢f⁡yⅆy
We can find the exact solution, and use it to compare with two collocation approximations:
p := rhs( intsolve( ie, f(x) ) );
p≔sin⁡x3+4⁢π3⁢4⁢π2+3
For our first approximation, we use Chebyshev nodes and polynomial degree of 10:
q := rhs( intsolve( ie, f(x), 'method' = 'collocation', 'nodes' = 'chebyshev', 'order' = 10 ) );
q≔0.0986117180199675+0.333260721136443⁢x+0.000459774186883343⁢x2−0.0566851981500202⁢x3+0.00141350936973957⁢x4+0.00175692703471011⁢x5+0.000451378463928863⁢x6−0.000189985444315232⁢x7+0.0000202277956660655⁢x8−7.15411949355276×10−7⁢x9+1.39364321385603×10−15⁢x10
plot( abs( p - q ), x = a .. b, 'color' = 'blue', 'adaptive' = 'false', 'numpoints' = 1000, 'size' = [0.4,0.4], 'title' = "Error of Collocation Solution Using Chebyshev Nodes" );
For our second approximation, we specify a custom basis, which gives the exact solution here:
r := rhs( intsolve( ie, f(x), 'method' = 'collocation', 'basis' = [1,x,sin(x),cos(x)], 'numeric' = 'false' ) );
r≔sin⁡x3+4⁢π3⁢4⁢π2+3
is( p = r );
true
a, b, q, r := 'a, b, q, r':
Maple 2024 includes improvements to assumption handling, leading to better results from the is, coulditbe, argument, and signum commands.
is and coulditbe are now careful when dealing with inequalities with nonreal operands:
is(I*((x-1)^20+1)+I<0);
false
A subalgorithm used by is and coulditbe which assumed that variables were real has been corrected, leading to these improved answers:
conditions := [w^2 = abs(w)^2, w = conjugate(w), cos(z)/abs(cos(z)) = abs(cos(z))/cos(z)]:
map(is, conditions);
false,false,false
map(is, conditions) assuming real;
true,true,true
Some improvements in normalization of properties (see assume) have been fixed, leading to the following improvements for top-level calls.
This call to coulditbe now returns immediately:
coulditbe(y^4*(y^8+6*y^4+1)^2*(y-1)^6*(y+1)^6*(y^2+1)^6, 0) assuming y::real;
This square root previously simplified only by replacing z/x by a new variable. Now that's not necessary:
sqrt(sin(z/x)^2) assuming 0<z/x, z/x<Pi/2;
sin⁡zx
These results no longer return FAIL:
coulditbe(y^2*(y^4+1)/(y^2+1)=0) assuming y::real;
is(1/x=0) assuming x=0;
coulditbe(-N^(1/2)/Pi,integer) assuming (N^(1/2)/Pi)::Not(integer);
coulditbe is better at dealing with the conjunction of multiple conditions which depend on the same subexpression:
coulditbe(And(k::integer,k <= 20,0 <= k));
Maple 2023 included some new improved functionality for recognizing difference of squares patterns in is and coulditbe:
is(0 <= sqrt(p^3 + q^2) + q) assuming (0 < p, q::real);
This feature has been improved again for Maple 2024. For example, this problem:
is((a*u+b)^(1/2)/b^(1/2)-1>0) assuming a>0,b>0,u>0;
is now solved by recognizing that it can be transformed into is((a*u+b)/b-1 > 0), i.e. is(a*u/b > 0).
Maple 2023 included some improvements in coulditbe/is when there are assumptions involving Re or Im:
is(b, real) assuming 0 < Re(b);
is(r + i*I, real) assuming r < 0, i::real;
These improvements have been extended for Maple 2024:
coulditbe(x<0) assuming Im(x)>0;
coulditbe(x<0) assuming Re(x)>0;
piecewise(a<0,0,a<=0,1,Im(a)<>0,2) assuming Im(a)<>0;
2
This answer used to be true which was incorrect:
coulditbe((a+I*b+1)/2, integer) assuming abs(a)<1, a::real, b::real;
FAIL
There are also some improved results from is when there are multiple related inequality assumptions:
is(exp(I*y)^2, real) assuming 0<y, y<t, 0<t;
An improvement in AndProp led to this new result in coulditbe:
coulditbe(a+I*b, imaginary) assuming b::real, a>0;
In Maple 2023, some improvements were made to handle nested signum:
signum(a - signum(a)) assuming (1 < a^2);
signum⁡a
For Maple 2024, argument and signum now recognize determining assumptions such as the following:
(argument, signum)(x) assuming x/(I+1) > 0;
π4,22+I⁢22
Before Maple 2023, simplify in general converted trig functions to sincos form. Now it uses any of the 6 trig functions (sin, cos, tan, sec, csc, cot) and the corresponding hyperbolic trig functions (sinh, cosh, etc.) to express the simplified answer. As a result, many examples can be returned in a more compact form:
simplify((sin(x)+cos(x))/sin(x));
1+cot⁡x
Along the same lines, 1/tan and 1/cot simplify to cot and tan respectively as of Maple 2024:
map(simplify,[1/tan(x),1/cot(x)]);
cot⁡x,tan⁡x
Trig simplification now includes combining trig functions by default:
simplify((sin(8) - 2*sin(4))/(1 + cos(8) - 2*cos(4)));
tan⁡4
simplify(2*c[1]*tan(sqrt(3)*x/4)/(1 + tan(sqrt(3)*x/4)^2) + c[2]*(1 - tan(sqrt(3)*x/4)^2)/(1 + tan(sqrt(3)*x/4)^2));
c1⁢sin⁡3⁢x2+c2⁢cos⁡3⁢x2
Conversion of tan(x/2) to sincos now just uses tan=sin/cos, which is consistent with what happens with arbitrary arguments:
convert~([tan(x/2), tan(f(x)/2), tan(x)], sincos);
sin⁡x2cos⁡x2,sin⁡f⁡x2cos⁡f⁡x2,sin⁡xcos⁡x
simplify more consistently uses the inverse trig identities arccos + arcsin = arccsc + arcsec = Pi/2 to convert expressions to a more compact form if possible:
simplify([Pi/2 - arcsin(sin(x)), Pi/2 - arccos(cos(x)), Pi/2 - arccsc(csc(x)), Pi/2 - arcsec(sec(x))]);
arccos⁡sin⁡x,arcsin⁡cos⁡x,arcsec⁡csc⁡x,arccsc⁡sec⁡x
Combining with respect to trig no longer expands unnecessarily. This result is now more compact:
combine(-7+(4*cos(1/7*Pi)^3+I*cos(1/14*Pi)-3*cos(1/7*Pi))*(-7^(5/7)*O*(I*cos(5/14*Pi)+cos(1/7*Pi)))^(1/2), trig);
−7+cos⁡3⁢π7+I⁢cos⁡π14⁢−757⁢O⁢I⁢cos⁡5⁢π14+cos⁡π7
simplify now converts this expression to a simpler one involving radicals:
simplify(-1/7-(-1/7*I*7^(5/7)*exp(2/7*I*Pi)*sin(1/7*Pi)-1/7*cos(1/7*Pi)*7^(5/7)*exp(2/7*I*Pi))^(7/2));
−17−−127⁢−−1377
simplify in Maple 2023 included an improved ability to remove terms in trig arguments which are integer multiples of Pi/2:
simplify(sin(Pi*(x + z))) assuming z::integer;
sin⁡π⁢x⁢−1z
This feature has been improved for Maple 2024. For example this previously simplified only without the assumption:
simplify(cos((x+1)*Pi/2)) assuming x::integer;
−sin⁡π⁢x2
In previous versions of Maple, to get the following simplified answer, simplify had to be called twice:
simplify((-2*F+2*_y1*sin(y)*cos(y))/(-1+cos(2*y)), trig);
F⁢csc⁡y2−_y1⁢cot⁡y
Due to improved trig simplifications this integral is now solved:
int(sqrt((1-cos(t))^2+sin(t)^2)*(t-sin(t)),t=0..Pi);
163
and this answer is smaller:
int(1/sqrt(cos(x)-cos(x0)), x=0..x0) assuming x0>0,x0<Pi;
2⁢InverseJacobiAM⁡x02,csc⁡x02sin⁡x02
Similarly this result from dsolve is more compact:
dsolve(diff(y(t), t, t)-sin(t)*(diff(y(t), t))-y(t));
y⁡t=c__1⁢HeunC⁡2,−12,−12,−1,158,cos⁡t2+12+c__2⁢cos⁡t2⁢HeunC⁡2,12,−12,−1,158,cos⁡t2+12
After various improvements in Maple 2023 and Maple 2024, the length of this result from simplify has decreased by more than 10 times:
simplify(-8/Pi^2/cosh(3/2*Pi)*(1/2*exp(1/2*Pi*x-3/2*Pi)-1/2*exp(-1/2*Pi*x+3/2*Pi))+8/9/Pi^2/cosh(9/2*Pi)*(1/2*exp(3/2*Pi*x-9/2*Pi)-1/2*exp(-3/2*Pi*x+9/2*Pi))-8/25/Pi^2/cosh(15/2*Pi)*(1/2*exp(5/2*Pi*x-15/2*Pi)-1/2*exp(-5/2*Pi*x+15/2*Pi))+8/49/Pi^2/cosh(21/2*Pi)*(1/2*exp(7/2*Pi*x-21/2*Pi)-1/2*exp(-7/2*Pi*x+21/2*Pi))-8/81/Pi^2/cosh(27/2*Pi)*(1/2*exp(9/2*Pi*x-27/2*Pi)-1/2*exp(-9/2*Pi*x+27/2*Pi)), trig, size=false);
4⁢−ⅇπ⁢−3+x2+ⅇπ⁢3−x2⁢sech⁡3⁢π2+ⅇ3⁢π⁢−3+x29−ⅇ3⁢π⁢3−x29⁢sech⁡9⁢π2+−ⅇ5⁢π⁢−3+x225+ⅇ5⁢π⁢3−x225⁢sech⁡15⁢π2+ⅇ7⁢π⁢−3+x249−ⅇ7⁢π⁢3−x249⁢sech⁡21⁢π2+−ⅇ9⁢π⁢−3+x281+ⅇ9⁢π⁢3−x281⁢sech⁡27⁢π2π2
For Maple 2023, there were a number of improvements in evaluating integrals using transformations involving the integration variable:
eval(Int(f(x, a), a), a = x);
∫` `xf⁡x,_aⅆ_a
eval(Intat(f(x, y), x = g(x)), y=x);
∫` `g⁡xf⁡_a,xⅆ_a
Also as of Maple 2023, simplify began to follow the semantics of sum in applying limit instead of eval when simplifying a Sum at a singular point:
tmp := Sum(sin(k)/k, k = 0 .. 0):
(simplify = value)(tmp);
1=1
and improved its ability to pull out provably non-zero factors from potentially infinite sums, integrals, limits, products, etc.:
simplify(Sum(-sin(n*Pi*x)*(exp(Pi) - exp(-Pi))*(-1 + (-1)^n)/n, n = 2 .. infinity));
−∑n=2∞⁡sin⁡n⁢π⁢x⁢−1+−1nn⁢ⅇπ−ⅇ−π
simplify(Int(2*Pi*n*f(x), x = 0 .. infinity));
2⁢π⁢∫0∞f⁡x⁢nⅆx
In Maple 2024, evaluation of a sum or product involving t^k at t=0 now correctly recognizes that the k=0 term should actually be 1:
eval(sum(t^k*f(k), k=0..infinity), t=0);
f⁡0
eval(Product(f(t^k), k=0..infinity), t=0);
∏k=00⁡f⁡1⁢∏k=1∞⁡f⁡0
Also, simplify now recognizes when sums or products can absorb extra terms or factors to simplify the whole expression:
simplify(f(n)+Sum(f(k), k=1..n-1)) assuming integer;
∑k=1n⁡f⁡k
simplify(f(n)*Product(f(k), k=1..n-1)) assuming integer;
∏k=1n⁡f⁡k
Argument processing, options and core algorithm improvements
As of Maple 2023, simplify included the following improvements to its option processing and core algorithms:
It raises an exception when there is an unexpected argument passed to it:
simplify(sin(x + Pi/4), foo);
Error, (in `simplify/do`) unexpected argument: foo
The symbolic option is now effective even when given not as the last argument:
simplify(sqrt(x^2), symbolic, sqrt);
x
When multiple particular simplification procedures are requested via extra arguments to simplify, they will each be retried as many times as needed to obtain the full simplification. For example, the extra arguments exp and RootOf can now be given in either order to achieve the full simplification:
e := RootOf(_Z^2 - exp(2*RootOf(_Z^2+1,index=1)*x) - 1):
simplify( diff(e-subs(RootOf(_Z^2+1,index=1) = I, e), x), RootOf, exp);
0
It uses expand more extensively to simplify functions:
simplify(polar(sqrt(13), arctan(3/2)) + polar(sqrt(65), -arctan(7/4)));
6−4⁢I
It avoids normalizing pure rational polynomials when there is no advantage in doing so:
simplify((x + 1)^5/a + 1);
x+15a+1
... or when the benefits are outweighed by the drawbacks. In this case, the input expression, although non-polynomial, is nevertheless considered simpler than the 307-term polynomial which results from dividing through by the denominator:
simplify((x^307 - 1)/(x - 1));
x307−1x−1
The latter can of course still be obtained via normal or factor:
type(normal((x^307 - 1)/(x - 1)), polynom);
As of Maple 2024, simplify cancels factors whose ratio is the imaginary unit:
simplify((I*x+1)/(x-I) );
I
Elliptic functions
Maple now has improved simplification and normalization for various Elliptic functions.
Symmetries in EllipticPi are now used to automatically factor out or remove minus signs from its arguments:
EllipticPi(1, nu, -k), EllipticPi(nu, -k), EllipticPi(-z, nu, -k);
EllipticPi⁡ν,k,EllipticPi⁡ν,k,−EllipticPi⁡z,ν,k
A symmetry in EllipticF is now used to simplify its arguments:
simplify(EllipticF(z*k, 1/k));
EllipticF⁡z,k⁢k
simplify([EllipticPi((-1)^n, nu, k), EllipticF((-1)^n, k)]) assuming n::integer;
−1n⁢EllipticPi⁡ν,k,−1n⁢EllipticK⁡k
simplify(EllipticPi((z^2)^(1/2),nu,k), EllipticPi);
z2⁢EllipticPi⁡z,ν,kz
tmp := [EllipticE, EllipticK](k*I/sqrt(1-k^2)):
simplify(tmp);
EllipticE⁡kk2−1,EllipticK⁡kk2−1
simplify(tmp) assuming k^2 < 1;
EllipticE⁡k−k2+1,EllipticK⁡k⁢−k2+1
simplify((-2*k^2 + 2)*EllipticE(k*I/sqrt(-k^2 + 1)) - EllipticK(k*I/sqrt(-k^2 + 1)) + (-2*EllipticE(k) + EllipticK(k))*sqrt(-k^2 + 1)) assuming 0<k, k<1;
Limits of Elliptic functions at certain infinite values are now more accurate. This example previously returned a complex infinity:
evalf(Limit(BesselI(0,z)+EllipticPi(1/2,1/z),z = -infinity));
Float⁡∞
binomial, Beta, GAMMA
Simplification of binomial was introduced in Maple 2023 and has been improved for Maple 2024:
simplify(4^n*binomial(n - 1/2, n) - binomial(2*n, n));
Conversion and simplification of Beta has been introduced for Maple 2024:
convert(Beta(a,1-a),elementary);
πsin⁡π⁢a
simplify(-1/2*Beta(1/6,1/2)+1/3*Pi^2*2^(2/3)/GAMMA(2/3)^3*3^(1/2));
This integral now returns (unevaluated) quickly due to improved simplification of GAMMA:
int((1/2)^(2061+2*z)/z/(1+2*z)*GAMMA(3/2+z)^2/GAMMA(z)^2, z);
∫122061+2⁢z⁢Γ⁡32+z2z⁢1+2⁢z⁢Γ⁡z2ⅆz
piecewise
In Maple 2023, simplify became better at recognizing when function calls can be factored out of piecewise functions:
simplify(piecewise(x < 0, f(y), f(z)));
f⁡yx<0z0≤x
In Maple 2024, simplify and combine are both now better at recognizing when two piecewise branch values can be merged into one:
{simplify, combine}(piecewise(x <= 0,2*ln(1-x),0 < x,ln((x-1)^2))) assuming x,real;
ln⁡x−12
and when multiple piecewise functions can be merged into one:
{simplify, combine}(piecewise(a<0, f1(a), a>0, f2(a), Or(a=0, Im(a)<>0), f3(a)) + piecewise(a<0, g1(a), a>0, g2(a), Or(a=0, Im(a)<>0), g3(a)));
f1⁡a+g1⁡aa<0f2⁡a+g2⁡a0<af3⁡a+g3⁡aa=0∨ℑ⁡a≠0
As a result the following integral can now be solved in terms of limits:
int(piecewise(t <= 1,-(cos(alpha*t)-1)/alpha,1 < t,(cos(alpha*t)*cos(alpha)+sin(alpha*t)*sin(alpha)-cos(alpha*t))/alpha)*sin(alpha*x),alpha=0..infinity);
limα→∞⁡Si⁡α⁢x−Si⁡α⁢t+x2+Si⁡α⁢t−x2t<1limα→∞⁡Si⁡α⁢t−x2−Si⁡α⁢t+x2−Si⁡α⁢−x+t−12+Si⁡α⁢x+t−121≤t
logarithm and dilogarithm
Simplification and numeric evaluation of expressions containing ln with large integer components is now handled more carefully:
tmp := simplify(-127/6*ln(2)-1/2*ln(3)+7/6*ln(233512967+14798283*249^(1/2))+ln(11014713425-698029101*249^(1/2)));
tmp≔−127⁢ln⁡26−ln⁡32+7⁢ln⁡233512967+14798283⁢2496+ln⁡11014713425−698029101⁢249
evalf[20](tmp);
−1.8847449302970215778
Simplification of dilog is now more careful to avoid simplifications which are branch dependent. For example, this call to simplify now correctly returns the input unchanged:
simplify(dilog(s + 2) + dilog(1/(s + 2))) assuming s < -2;
dilog⁡s+2+dilog⁡1s+2
power and radical
In Maple 2023, there were some improvements in the simplification of radicals which led to the following improved results:
simplify(sqrt(x^2), sqrt) assuming x::real;
simplify(-1/(x*(-y + sqrt(-2/x))*(y + sqrt(-2/x))));
1y2⁢x+2
simplify((A + B*sqrt(x))^a*a^2*B^2/(4*x*(A + B*sqrt(x))^2) - (A + B*sqrt(x))^a*a*B/(4*x^(3/2)*(A + B*sqrt(x))) - (A + B*sqrt(x))^a*a*B^2/(4*x*(A + B*sqrt(x))^2) + a*B*(A + B*sqrt(x))^(a - 1)/(4*x^(3/2)) - pochhammer(a - 1, 2)*B^2*(A + B*sqrt(x))^(a - 2)/(4*x));
simplify(-B*(A^2*sqrt(x) + 2*A*B*x + B^2*x^(3/2))*(a - 1)*(A + B*sqrt(x))^(a - 2) + (2*A*B*sqrt(x) + B^2*x + A^2)*(A + B*sqrt(x))^(a - 1) - (-B*(a - 2)*sqrt(x) + A)*(A + B*sqrt(x))^a);
For Maple 2024, simplify(.., power) no longer expands unnecessarily. For this example the new result is now more compact:
simplify( (Pi^k*2^(2*k+2)*5^(2*k+1)/(-1+2*k)*hypergeom([-2*k-1, -k+1/2],[3/2-k],1/100)/GAMMA(2*k+2)+25*Pi^(k+1)*(2*k+1)*(3+2*k)/GAMMA(k+5/2)^2*sec(Pi*k))*(-1)^(3*k), power);
20⁢πk⁢4k⁢25k⁢hypergeom⁡−2⁢k−1,−k+12,32−k,1100−1+2⁢k⁢Γ⁡2⁢k+2+25⁢πk+1⁢2⁢k+1⁢3+2⁢k⁢sec⁡π⁢kΓ⁡k+522⁢−13⁢k
Also, simplify no longer pulls polynomial factors out of a radical without good reason:
simplify(I/(cos(x)-1)^(3/2), radical) assuming 0 < x,x < 1/2*Pi;
−1−cos⁡x+132
As of Maple 2023, simplify included better normalization for min and max:
simplify(Vector([min(x + y, x + z), max(3*x, 3*y), max(-x, -y), min(x, -y) + max(y, -x), min(x, -y) - max(y, -x), min(x, -x) - max(x, -x), min(x, -x) + max(x, -x)]));
min⁡y,z+x3⁢max⁡x,y−min⁡x,y02⁢min⁡x,−y2⁢min⁡x,−x0
(simplify(max(z*x, z*y)) assuming (z < 0));
z⁢min⁡x,y
For Maple 2024, min and max are now better at recognizing whether inputs are real. For example, this is a real number in disguise:
alias(r= -1/2*(-cos(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,-0.-1.931327404*I))-3)*csc(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,3.761757270))*sin(1/2*(-cos(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,-0.-1.931327404*I))-3)*csc(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,3.761757270)))^2-1/2*(-cos(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,-0.-1.931327404*I))-3)*csc(RootOf(sin(_Z)^2*_Z^2+sin(_Z)^2+6*_Z*sin(_Z)+8,3.761757270))):
evalf(r);
−7.786927399+0.⁢I
Im(r);
min no longer complains that the number is not real:
min(2,r);
min⁡2,r
alias(:-r=:-r):
In Maple 2023, IntegrationTools:-Change became better at restricting the change of variables to the subinterval where it is valid. For example, in this case the transformation is not valid on x=Pi/4..Pi/2 so it is only applied to the subinterval x=0..Pi/4:
IntegrationTools:-Change(Int(sin(x)/(1 + sin(x)*cos(x))^(1/2), x = 0 .. 1/2*Pi), x = arcsin(y)/2);
∫01sin⁡arcsin⁡y2−y2+1⁢4+2⁢yⅆy+∫π4π2sin⁡x1+sin⁡x⁢cos⁡xⅆx
After some more improvements for Maple 2024, this change of variables can now be done:
tmp := convert(-EllipticF(u*2^(1/2)*(1/(cos(y0)+1))^(1/2),cos(1/2*y0))*2^(1/2)/(1/(cos(y0)+1))^(1/2)/(2*cos(y0)+2), Int);
tmp≔−∫0u⁢2⁢1−I⁢2⁢y0+π⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y02+11−_α12+1⁢1+y0+π2⁢∫01ⅇI⁢_t1⁢y0+πⅆ_t12⁢ⅇ−I2⁢y02⁢_α124ⅆ_α1⁢21−I⁢2⁢y0+π⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y02+1⁢−I⁢2⁢y0+π⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y0+2
IntegrationTools:-Change(tmp, _alpha1=a*T, a);
−2⁢T⁢∫0u⁢2⁢−2I⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y0⁢π+2⁢I⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y0⁢y0−2T1−a2⁢T2+1⁢π2⁢∫01ⅇI⁢_t1⁢y0+πⅆ_t12⁢ⅇ−I⁢y0⁢a2⁢T2+2⁢π⁢∫01ⅇI⁢_t1⁢y0+πⅆ_t12⁢ⅇ−I⁢y0⁢a2⁢T2⁢y0+∫01ⅇI⁢_t1⁢y0+πⅆ_t12⁢ⅇ−I⁢y0⁢a2⁢T2⁢y02+4ⅆa⁢21−I⁢2⁢y0+π⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y02+1⁢−I⁢2⁢y0+π⁢∫01ⅇI⁢_t1⁢2⁢y0+πⅆ_t1⁢ⅇ−I⁢y0+2
Also, this request to change variables now returns the given integral unchanged because the change of variables requested does not involve the existing integration variable:
IntegrationTools:-Change(Int(cos(t),z), {x = r*cos(t)}, [r]);
∫cos⁡tⅆz
Finally, these calls to IntegrationTools:-Change now give more useful error messages:
IntegrationTools:-Change(Int(f(x),x=a..b), x=-x);
Error, (in IntegrationTools:-Change) transformation equations must depend on at least two variables, the old integration variable and the new one
IntegrationTools:-Change(Int(f(k*z+v*t,v*z+k*t),z = 0 .. 1),{t = (k*y-x*v)/(-v^2+k^2), z = (-v*y+k*x)/(-v^2+k^2)},[x, y]);
Error, (in IntegrationTools:-Change) only 1 transformation equation(s) {z = (k*x-v*y)/(k^2-v^2)} was applicable to the integral(s) in the input; the number of new integration variables specified, [x, y], should be the same
tmp := Int(Int(f(x^2)*g(y),x = a .. b),y = c .. d);
tmp≔∫cd∫abf⁡x2⁢g⁡yⅆxⅆy
IntegrationTools:-Change(tmp, {x = u^2+U, y = v^2+V});
Error, (in IntegrationTools:-Change) ambiguous change of variables; please specify (using the third argument) which 2 of {U, V, u, v} are the new variables
Verification of two expressions up to sign differences has undergone some significant improvements recently.
As of Maple 2023, verify,sign now recurses into non-algebraic expressions:
verify([x/(1-x)], [-x/(x-1)], sign);
Signs can now be factored out of both even and odd powers as part of the equivalence:
verify((1-x)^2/(1-y)^3, -(x-1)^2/(y-1)^3, sign);
Also two new options oddfuncs = ... and evenfuncs = ... were added, allowing use of odd or even function symmetries in the equivalence:
verify(-Int(sin(1 - x), x), Int(sin(x - 1), x), 'sign'(oddfuncs = {Int, sin}));
For Maple 2024, verification of relations (equations, inequations, and inequalities) with respect to sign is now possible:
verify(a = b, -a = -b, 'sign');
verify(a <> b, -a <> -b, 'sign');
verify(a < b, -b < -a, 'sign');
verify(a <= b, -b <= -a, 'sign');
verify(a < b, -a < -b, 'sign');
verify(a <= b, -a <= -b, 'sign');
The results of converting between mathematical functions are now better simplified:
convert(-I-1/z*Im(z)+I*abs(1,z)/signum(z),signum);
I2⁢1−1signum⁡z2
There was an improvement in int by expressing exponentials in the integrand as integer powers of a common base exponential:
For this answer the length has decreased by more than 10x:
int(arctanh(exp(2*x))*(exp(10*x)-3*exp(6*x)-exp(-2*x)+3*exp(2*x))/(exp(4*x)-1)^2, x);
arctanh⁡ⅇx2⁢ⅇx22+arctanh⁡ⅇx22⁢ⅇx2+ln⁡ⅇx2+12−ln⁡ⅇx+ln⁡ⅇx+12+ln⁡ⅇx−12
For this answer, the length has decreased by 7.5 times:
dsolve(-diff(y(x), x)^2/y(x)^2 + diff(y(x), x, x)/y(x) + 2*coth(2*x)*diff(y(x), x)/y(x) = 2);
y⁡x=ⅇc__1⁢arctanh⁡ⅇ2⁢x⁢ⅇ2⁢x+1⁢ⅇx+1⁢ⅇx−1ⅇx⁢c__2
A problem in dsolve was fixed, leading to this now correct (and much more compact) answer:
ode := x^4*diff(y(x),x$2)+(a*sin(lambda/x)+b)*y(x)=0:
ans := dsolve(ode);
ans≔y⁡x=c__1⁢x⁢MathieuC⁡4⁢bλ2,−2⁢aλ2,arccos⁡sin⁡π⁢x+2⁢λ4⁢x+c__2⁢x⁢MathieuS⁡4⁢bλ2,−2⁢aλ2,arccos⁡sin⁡π⁢x+2⁢λ4⁢x
odetest(ans, ode);
FunctionAdvisor is now more careful when generating identities:
FunctionAdvisor(arccoth, identities, quiet);
coth⁡arccoth⁡z=z,I⁢coth⁡arccoth⁡−y+arccoth⁡z+I⁢π=y⁢z−1I⁢z−I⁢y
lcm and gcd now treat single-argument input consistently with that of multiple argument inputs and just leave it alone rather than potentially returning an error:
lcm(sin(2*x));
sin⁡2⁢x
gcd(1+I+z);
1+I+z
A case where factor was not idempotent has been fixed:
alias(c=-(-x^2*y^n + 2*g(x)*y^n + 5*x*y^n - 4*y^n + 2*y)*(g(x)*x*y^n + x^2*y^n - 10*x*y^n + y*x + 24*y^n)/(y^n*(x - 3)*(x + 4)^2*(g(x)*y^n + x*y^n - 2*y^n + y))):
alias(d=-(-g(x)*x^3*(y^n)^2 - x^4*(y^n)^2 + 2*g(x)^2*x*(y^n)^2 + 7*g(x)*x^2*(y^n)^2 + 15*x^3*(y^n)^2 - y*x^3*y^n - 24*g(x)*x*(y^n)^2 - 78*x^2*(y^n)^2 + 4*y*g(x)*x*y^n + 7*y*x^2*y^n + 48*g(x)*(y^n)^2 + 160*x*(y^n)^2 - 24*y*x*y^n + 2*x*y^2 - 96*(y^n)^2 + 48*y*y^n)/(y^n*(x - 3)*(x + 4)^2*(g(x)*y^n + x*y^n - 2*y^n + y))):
factor(d^(5/4)-c^(5/4));
alias(:-c=:-c, :-d=:-d):
A formula relating InverseJacobiSD to InverseJacobiCN has been corrected:
tmp := InverseJacobiSD(z, k):
tmp = convert(tmp, InverseJacobiCN);
InverseJacobiSD⁡z,k=−InverseJacobiCN⁡−k2+1⁢z,k+EllipticK⁡k
This call to product no longer gives an unexpected error:
product( q*sinh(Pi*(q^2+1)^(1/2))/sinh(Pi*q)/(q^2+1)^(1/2), q=2..infinity);
∏q=2∞⁡q⁢sinh⁡π⁢q2+1sinh⁡π⁢q⁢q2+1
Numeric evaluation of certain trig expressions is now more careful:
evalf(cot(-1/8-10^10*I));
−4.259906707×10−8685889639+I
evalf(Psi(-1/8-10^10*I));
23.02585093−1.570796327⁢I
The relative difference between the absolute values of the radical and non-radical part of a large power of the golden ratio is very small, making it difficult to distinguish numerically whether the expanded power is positive or negative:
phi := (sqrt(5) - 1)/2:
phi_381 := expand(phi^381);
phi_381≔−21050428445219715212283513071197708058110642480418964396226164263063778766736638+9414037791801298231433263155603126899071963535550379906525232657258068886564353⁢5
evalf([op(phi_381)]);
−2.105042845×1079,2.105042844×1079
As such, some extra care is now taken by abs to determine that this expression is positive:
abs(phi_381);
−21050428445219715212283513071197708058110642480418964396226164263063778766736638+9414037791801298231433263155603126899071963535550379906525232657258068886564353⁢5
phi := 'phi':phi_381 := 'phi_381':
Some improvements to the inttrans code led to these new results:
inttrans:-fourier(sqrt(-t^2 + 1)*(Heaviside(t + 1) - Heaviside(t - 1)), t, w);
π⁢BesselJ⁡1,ww
This result is new as of Maple 2023:
inttrans:-laplace( 1 / ( 1 + I * mu * x )-Int( f(y) / ( 1 + I * x * y ), y = 0 .. infinity ), x, s );
I2⁢2⁢∫0∞f⁡y⁢ⅇ−I⁢sy⁢Ei1⁡−I⁢syyⅆy+−2⁢Ei1⁡−I⁢sμ−2⁢ln⁡−I⁢sμ+2⁢ln⁡s+ln⁡−Iμ−ln⁡I⁢μ⁢ⅇ−I⁢sμμ
expand was not being called recursively on some examples involving integrals. Now it is:
expand(Int(f(x)*(b*x+c),x));
b⁢∫f⁡x⁢xⅆx+c⁢∫f⁡xⅆx
evalc no longer assumes that two-argument GAMMA must be real if it has real arguments:
evalc(Im(GAMMA(2/3, -1/3)));
ℑ⁡Γ⁡23,−13
Expansion of Bessel and Hankel functions has been made much more efficient. This example now runs over 250 times faster than it did in Maple2023:
time(expand(BesselJ(750,x)));
0.046
As well, expansion of BesselK in particular now takes advantage of the symmetry BesselK(-v,x)=BesselK(v,x) to achieve a new expanded normal form in terms of BesselK(v__i, k) with v_i between 0 and 1:
expand(BesselK(4/3, x));
2⁢BesselK⁡13,x3⁢x+BesselK⁡23,x
expand(2/3*BesselK(1/3, x)/x+BesselK(2/3, x)-BesselK(4/3, x));
collect no longer gets confused by the letter O (which is used to express series results):
collect(O, O, F);
F⁡1⁢O
Download Help Document