Enhancements to Symbolic Capabilities in Maple 9.5
Maple 9.5 includes enhancements to its symbolic capabilities in the following areas.
Integration
Differential Equations
Summation
Simplification
The FunctionAdvisor command
Mathematical functions and their conversions
Differentiation knowledge for special functions
The combine command
The series command
The plotcompare command
Rational function decomposition
The singular command
Differential Equations (DEs)
The simplify Command
The FunctionAdvisor Command
Mathematical Functions
Network of Conversion Routines for Mathematical Functions
Differentiation Knowledge for Special Functions
The combine Command
The series Command
The plotcompare Command
Rational Function Decomposition
The int command now uses differential equation routines for exact ODEs to compute integrals when the integrand contains unknown functions and is a total derivative with respect to those functions.
Example
Int((3*diff(u(x),x)*v(x)^2-diff(u(x),x)^3)*sin(u(x)) + (-6*v(x)*diff(v(x),x)+2*diff(u(x),x)*diff(u(x),x,x))*cos(u(x)) + 8*diff(v(x),x)*diff(v(x),x,x), x);
∫3⁢ⅆⅆxu⁡x⁢v⁡x2−ⅆⅆxu⁡x3⁢sin⁡u⁡x+−6⁢v⁡x⁢ⅆⅆxv⁡x+2⁢ⅆⅆxu⁡x⁢ⅆ2ⅆx2u⁡x⁢cos⁡u⁡x+8⁢ⅆⅆxv⁡x⁢ⅆ2ⅆx2v⁡xⅆx
value((1));
ⅆⅆxu⁡x2⁢cos⁡u⁡x−3⁢v⁡x2⁢cos⁡u⁡x+4⁢ⅆⅆxv⁡x2
The differential equation solving capabilities of the dsolve and pdsolve commands, for computing both exact and numeric solutions, have been enhanced with new algorithms (see Updates to Differential Equation Solvers). Also, seven new commands, some based on original algorithms, are available in DEtools and PDEtools for this release. For a description of these new commands, see Updates to Differential Equation Solvers: Packages.
The sum command has been greatly enhanced by rewriting it to use the SumTools[Summation] routine.
Examples
More closed forms by using accurate summation:
Sum(Psi(x)^2,x);
∑x⁡Ψ⁡x2
(3) = value((3));
∑x⁡Ψ⁡x2=4⁢x4−16⁢x3−21⁢x2−4⁢x−2⁢Ψ⁡x22⁢2⁢x+1+−2⁢x3+9⁢x2+13⁢x+12⁢Ψ⁡x+12+x+12⁢4⁢x2−24⁢x−1⁢Ψ⁡x+222⁢2⁢x+1
More partial results via additive decomposition:
Sum(5^x*(3*x-2)/x/(x+1), x);
∑x⁡5x⁢3⁢x−2x⁢x+1
(5) = value((5));
∑x⁡5x⁢3⁢x−2x⁢x+1=2⁢5xx+∑x⁡−5⁢5xx+1
Nicer results for some definite sums:
Sum(binomial(n,4*k),k=0..infinity);
∑k=0∞⁡n4⁢k
(7) = value((7));
∑k=0∞⁡n4⁢k=2n4+1+In4+1−In4
The SumTools[IndefiniteSum] package also provides an extension mechanism that is used by sum. Using this facility, you can add a summation definition related to other special functions.
The simplification of different types of expressions has been greatly enhanced in Maple 9.5.
Constant Expressions
The simplification of constant expressions has been enhanced in various ways.
-1/4*(2+2*2^(1/2))^(1/2)*(2*2^(1/2)-2)^(3/2) * (-1/3*(-3+3/(1+2^(1/2))*(2^(1/2)-1)) * (1+2^(1/2))/(2^(1/2)-1) - (1+1/(1+2^(1/2))*(2^(1/2)-1))^2 * (1+2^(1/2))^(3/2)/(2^(1/2)-1)^(3/2) * arctan(1/(1+2^(1/2))^(1/2)*(2^(1/2)- 1)^(1/2)));
−2+2⁢2⁢2⁢2−232⁢−−3+3⁢2−11+2⁢1+23⁢2−1−1+2−11+22⁢1+232⁢arctan⁡2−11+22−1324
simplify((9), constant);
−2+π
(sqrt(3)+3*I)*sqrt(1+I*sqrt(3));
3+3⁢I⁢1+I⁢3
simplify((11), constant);
2⁢I⁢2⁢3
Powers
The simplification of powers is much faster, from one to two orders of magnitude faster for difficult examples. Also, more cases are now recognized.
(-1)^(argument(z)/Pi);
−1arg⁡zπ
simplify((13),power);
signum⁡0,z,1
(-1)^a-(-1)^(-a)-2*I*sin(Pi*a);
−1a−−1−a−2⁢I⁢sin⁡π⁢a
simplify((15),power);
0
Integrals, Sums, Products, and Limits
Enhancements in the simplification of int, sum, product, and limit and in their inert counterparts Int, Sum, Product, and Limit regarding the integration, summation, or product dummy variable and its range:
diff(s(t),t)*Int(f(x)*x^(s(t)-1)*ln(x),x = infinity..0) + int(f(x)*x^(s(t)-1)*diff(s(t),t)*ln(x),x = 0..infinity);
ⅆⅆts⁡t⁢∫∞0f⁡x⁢xs⁡t−1⁢ln⁡xⅆx+∫0∞f⁡x⁢xs⁡t−1⁢ⅆⅆts⁡t⁢ln⁡xⅆx
simplify( (17) );
Expressions Containing undefined
New routines for simplifying undefined expressions:
ee := Pi*undefined+undefined*I*Pi+x;
ee≔π⁢undefined+undefined⁢I⁢π+x
simplify(ee);
undefined−undefined⁢I+x
To take all real and complex undefineds as a single, unique undefined, and then cause products and sums to return undefined if either operand is undefined, use the symbolic option.
simplify((20), symbolic);
undefined
The new routines are also sensitive to assumptions.
simplify(ee) assuming x::And(constant,real);
undefined+undefined⁢I
Simplification of Mathematical Functions
New simplifications regarding mathematical functions are available. Some previously existing simplifications were enhanced.
The abs Function
abs(x*y)^2 - abs(x)^2*abs(y)^2;
x⁢y2−x2⁢y2
simplify((23), abs);
z = abs(z)*exp(I*argument(z));
z=z⁢ⅇI⁢arg⁡z
simplify((25), abs);
z=z
The argument Function
New simplification routine for the argument function:
argument(z) + I*ln(z/abs(z));
arg⁡z+I⁢ln⁡zz
simplify((27), argument);
The exponential Function
exp(argument(z)*I);
ⅇI⁢arg⁡z
simplify( (29) );
The LambertW Function
Enhanced simplification of the LambertW function:
LambertW(-1, 7/6*I*Pi*(-1+3^(1/2)*I));
LambertW⁡−1,7⁢I6⁢π⁢−1+I⁢3
simplify((31));
−7⁢I3⁢π
The new simplifications are sensitive to assumptions.
LambertW(n,2*Pi*I*(n+r)*exp(2*Pi*I*(m+r)));
LambertW⁡n,2⁢I⁢π⁢n+r⁢ⅇ2⁢I⁢π⁢m+r
simplify((33)) assuming n::posint, m::integer, -3/4 < r, r <= 1/4;
2⁢I⁢π⁢n+r
The logarithm Function
Enhancements in the simplification of logarithms and the argument function. Also, there is better manipulation in the presence of signum.
ln(signum(0,z,1));
ln⁡signum⁡0,z,1
simplify( (35) );
I⁢arg⁡z
Better handling of the branches for compositions of the form ln∘exp:
ln(exp(33/5*I));
ln⁡ⅇ33⁢I5
simplify((37),ln);
33⁢I5−2⁢I⁢π
The FunctionAdvisor command provides supporting information on mathematical properties of mathematical functions, for example, on definitions, identities, integral forms, series expansions, and others. For Maple 9.5, the FunctionAdvisor command has been enhanced regarding the computation of non-trivial "specializations" of mathematical functions for particular values of their parameters. This permits answering questions like {"In terms of which functions could a given function, evaluated at some values of its parameters, be expressed?"}
In terms of which functions could Zeta(0, z, nu) be expressed?
FunctionAdvisor(specialize, Zeta(0, z, nu));
ζ0⁡z,ν=LerchPhi⁡1,z,ν,with no restrictions on ⁡z,ν,ζ0⁡z,ν=−1z⁢Ψ⁡z−1,νz−1!,z::ℤ∧1<z,ζ0⁡z,ν=ζ⁡z−harmonic⁡ν−1,z,ν−1::¬ℤ−
Regarding the specialization into Psi, what is the specialization of Psi into Zeta if we ignore the restriction z::ℤ∧1<z on the value of z?
FunctionAdvisor(specialize, Psi(z-1,nu), Zeta);
Ψ⁡z−1,ν=ζ1⁡z,ν+γ+Ψ⁡1−z⁢ζ0⁡z,νΓ⁡1−z,with no restrictions on ⁡ν,z
Non-trivial specializations for the hypergeometric function:
FunctionAdvisor(specialize, hypergeom([1, 1, 1 - n], [2, 2], 1) );
hypergeom⁡1,1,−n+1,2,2,1=LerchPhi⁡1,2,1,n=0,hypergeom⁡1,1,−n+1,2,2,1=MeijerG⁡0,0,n,,0,−1,−1,−1Γ⁡−n+1,with no restrictions on ⁡n,hypergeom⁡1,1,−n+1,2,2,1=Ψ⁡n+1+γn,with no restrictions on ⁡n,hypergeom⁡1,1,−n+1,2,2,1=dilog⁡0,n=0,hypergeom⁡1,1,−n+1,2,2,1=polylog⁡2,1,n=0∧1≠0
The enhanced routines are sensitive to assumptions. The specialization of BesselI⁡a,z in terms of the StruveL function assuming a+12 is a negative integer:
FunctionAdvisor(specialize, BesselI(a,z), StruveL) assuming (a+1/2)::negint;
BesselI⁡a,z=−za⁢I⁢StruveL⁡−a,−z⁢−zaI⁢z2⁢a+∑_k1=0−12−a⁡−1_k1⁢pochhammer⁡a+12,_k1⁢pochhammer⁡12,_k1I2⁢za+1+2⁢_k1⁢−12−a!⁢πI⁢za−1a−12,with no restrictions on ⁡a,z
To compute all the specializations for BesselY⁡12,z that the FunctionAdvisor command can compute, enter FunctionAdvisor⁡specialize,BesselY⁡12,z at the Maple prompt.
The implementation of some mathematical functions has been improved to increase the knowledge about special values and relationships. More functions are sensitive to assumptions.
Elliptic functions:
EllipticNome( EllipticModulus(q) ) assuming abs(q) < 1;
q
EllipticModulus( EllipticNome(k) ) assuming Re(k) > 0;
k
binomial function:
binomial(a,k) assuming a::posint, k::negint;
The classic definition for the Psi(n,z) function as the nth derivative of Ψ⁡z, which requires that n be a positive integer, has been extended to arbitrary complex values of n in terms of the Hurwitz Zeta function and its first derivative.
FunctionAdvisor(analytic_extension, Psi(n,z));
Ψ⁡n,z=ζ1⁡n+1,z+γ+Ψ⁡−n⁢ζ0⁡n+1,zΓ⁡−n
The network of conversions between mathematical functions was introduced in Maple 8. In Maple 9, the number of conversions was almost tripled. In Maple 9.5, more conversion routines and conversion rules were added.
For functions related to special cases of the hypergeom function:
polylog(2,z);
polylog⁡2,z
(47) = convert((47), hypergeom);
polylog⁡2,z=z⁢hypergeom⁡1,1,1,2,2,z
convert((48),LerchPhi);
z⁢LerchPhi⁡z,2,1=z⁢LerchPhi⁡z,2,1
convert(lhs((49)),polylog) = convert(rhs((49)),hypergeom); # convert the other way around
For the argument function:
argument(z);
arg⁡z
(51) = convert((51),ln);
arg⁡z=−I⁢ln⁡zz
(51) = convert((51),arctan);
arg⁡z=arctan⁡ℑ⁡z,ℜ⁡z
More Sum representations for special functions:
EllipticModulus(q);
EllipticModulus⁡q
(54) = convert((54), Sum) assuming abs(q) < 1;
EllipticModulus⁡q=∑_k1=0∞⁡2⁢q12+_k122∑_k1=1∞⁡2⁢q_k12+12
To reveal these sum representations without knowing in advance the required assumption on the function parameters, or the syntax of the function, use the FunctionAdvisor command.
FunctionAdvisor( sum, EllipticNome );
* Partial match of "sum" against topic "sum_form".
EllipticNome⁡k=∑_k2=0∞⁡−∑_k1=0∞⁡pochhammer⁡12,_k12⁢−k2+1_k1_k1!⁢pochhammer⁡1,_k1⁢π∑_k1=0∞⁡pochhammer⁡12,_k12⁢k2⁢_k1_k1!⁢pochhammer⁡1,_k1_k2_k2!,k<1
New conversion rules for the hypergeometric 2F1 function
hypergeom([a,b],[c],z);
hypergeom⁡a,b,c,z
convert((57), hypergeom, "quadratic 1") assuming -1/2+a+b-c = 0;
hypergeom⁡2⁢a−1,−1+2⁢b,−12+a+b,12−1−z21−z
The new rules available for the 2F1 function are: "quadratic n", with n between 1 and 6; "2a2b"; "raise 1/2"; and "lower 1/2". To see under which assumptions these identities are valid, use FunctionAdvisor(identities, hypergeom([a,b],[c],z)). For more information, see convert[function_rules].
More convenient and compact form for the differentiation rule of the incomplete GAMMA(a,z) function in terms of the MeijerG function:
diff(GAMMA(a,z), a);
Γ⁡a,z⁢ln⁡z+MeijerG⁡,1,1,0,0,a,,z
To express the previous expression in terms of the hypergeometric function, use convert⁡Typesetting:−AD,Typesetting:−EV,Typesetting:−mi,Typesetting:−mio,Typesetting:−mn,Typesetting:−mo,Typesetting:−ms,Typesetting:−mtd,Typesetting:−mtr,Typesetting:−maction,Typesetting:−maddr,Typesetting:−matomic,Typesetting:−mempty,Typesetting:−merror,Typesetting:−mfail,Typesetting:−mfenced,Typesetting:−mfrac,Typesetting:−mglyph,Typesetting:−mover,Typesetting:−mpadded,Typesetting:−mparsed,Typesetting:−mprimed,Typesetting:−mroot,Typesetting:−mrow,Typesetting:−mspace,Typesetting:−msqrt,Typesetting:−mstyle,Typesetting:−msub,Typesetting:−msubsup,Typesetting:−msup,Typesetting:−mtable,Typesetting:−mtext,Typesetting:−munder,Typesetting:−none,Typesetting:−maligngroup,Typesetting:−malignmark,Typesetting:−mambiguous,Typesetting:−menclose,Typesetting:−mlabeledtr,Typesetting:−mpattern,Typesetting:−mphantom,Typesetting:−mprescripts,Typesetting:−mprintslash,Typesetting:−mscripts,Typesetting:−msemantics,Typesetting:−munderover,Typesetting:−mverbatim,Typesetting:−mmultiscripts,hypergeom
Improved differentiation of special functions with respect to parameters:
Diff( MeijerG([[], [b+1, b+1]],[[b, b, f(a)], []],z), a );
ⅆⅆaMeijerG⁡,b+1,b+1,f⁡a,b,b,,z
value((60));
ln⁡z⁢MeijerG⁡,b+1,b+1,f⁡a,b,b,,z+2⁢MeijerG⁡,b+1,b+1,b+1,f⁡a,b,b,b,,z⁢ⅆⅆaf⁡a
Diff( MeijerG([[], []],[[f(a)], []],g(z)), a );
ⅆⅆaMeijerG⁡,,f⁡a,,g⁡z
value((62));
ln⁡g⁡z⁢MeijerG⁡,,f⁡a,,g⁡z⁢ⅆⅆaf⁡a
There are new differentiation rules for the argument, Re, Im, and conjugate functions. Although these functions do not strictly satisfy the Cauchy-Riemann conditions, in the same way that Maple implements a differentiation rule for abs and signum, Maple now also implements the differentiation rule for these functions in terms of the 'derivatives' of abs and signum. This allows further computation when these functions are present and differentiation is used. Maple correctly manipulates the results in terms of abs' and signum', which are represented by abs(1,z) and signum(1,z).
z = abs(z)*exp(I*argument(z)); # definition of a complex variable z
diff( (64), z); # a 'representation' for d/dz argument(z) using abs(1,z)
1=abs⁡1,z⁢ⅇI⁢arg⁡z+I⁢z⁢−Iz+I⁢abs⁡1,zz⁢ⅇI⁢arg⁡z
expand( (65) ); # in this example, abs(1,z) cancels out
1=z⁢ⅇI⁢arg⁡zz
simplify( (66) ); # further correct manipulations are then feasible
1=1
Combinations in Sums now take into account that the summation variable can have only integer values in the summation range.
ee := k*(2*ln(k+1)-ln(k)-ln(k+2));
ee≔k⁢2⁢ln⁡k+1−ln⁡k−ln⁡k+2
combine(ee, ln); # <- k is an arbitrary complex variable, nothing to do
k⁢2⁢ln⁡k+1−ln⁡k−ln⁡k+2
Sum( ee, k=1..infinity ); # k is now an integer from 1 to infinity
∑k=1∞⁡k⁢2⁢ln⁡k+1−ln⁡k−ln⁡k+2
combine( (70), ln ); # a combination is therefore possible
∑k=1∞⁡k⁢ln⁡k+12k⁢k+2
The combination of logarithms is now more general.
-ln(5) + ln(abs(x)) - ln(x);
−ln⁡5+ln⁡x−ln⁡x
combine((72));
−ln⁡5⁢xx
ln(x)-ln(y);
ln⁡x−ln⁡y
combine((74)) assuming x > 0;
−ln⁡yx
ln(a-1)+I*Pi-ln(1-a);
ln⁡a−1+I⁢π−ln⁡1−a
combine((76)) assuming a > 1;
The series command can compute series expansions for more functions.
series((78), q);
4⁢q−16⁢q32+56⁢q52−160⁢q72+404⁢q92−944⁢q112+O⁡q132
As a result of the change in the form of the differentiation rule for GAMMA(a,z) and Ei(a,z), it is now possible to also compute series expansions with respect to the first parameter a.
GAMMA(a,z);
Γ⁡a,z
series((80), a, 2);
Ei1⁡z+Ei1⁡z⁢ln⁡z+MeijerG⁡,1,1,0,0,0,,z⁢a+O⁡a2
Ei(a,z);
Eia⁡z
series((82), a, 2);
ⅇ−zz−MeijerG⁡,0,−1,−1,,z⁢a+O⁡a2
A new option in plots[plotcompare], shift_range = r + s I, is available to shift the range of the plot, for example, from a+b⁢I..c+d⁢I to a+r+b+s⁢I..c+r+d+s⁢I. This is useful when the difference between the expressions plotted is visible only after shifting the plotting range, for example, when comparing a function with its series representation.
A comparison of sin⁡x with its cubic Taylor polynomial.
plots[plotcompare]( sin(x), x-x^3/6, x=-3..3 );
If you shift the range, for example, to the right by 10, the function and its cubic approximation no longer look similar.
plots[plotcompare]( sin(x), x-x^3/6, x=-3..3, shift_range=10 );
The new FunctionDecomposition command in the DEtools package performs rational function decomposition on overdetermined systems with parameters. This type of function decomposition can be used to solve symbolic problems in various areas. The command has natural application beyond differential equations.
The singular command now accepts a numeric range as an extra argument, which causes only the singularities within this range to be returned.
singular( tan(x) ); # works as in previous releases
x=12⁢π+_Z1~⁢π
singular( tan(x), 1..10 ); # new
x=π2,x=3⁢π2,x=5⁢π2
See Also
Index of New Maple 9.5 Features
Download Help Document