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

Online Help

All Products    Maple    MapleSim


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
 

 

Integration 

Differential Equations (DEs) 

Summation 

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 singular command 

Integration 

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

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

> value(??);
 

`+`(`*`(`^`(diff(u(x), x), 2), `*`(cos(u(x)))), `-`(`*`(3, `*`(`^`(v(x), 2), `*`(cos(u(x)))))), `*`(4, `*`(`^`(diff(v(x), x), 2)))) (2)
 

Differential Equations (DEs) 

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

Summation 

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

Sum(`*`(`^`(Psi(x), 2)), x) (3)
 

> Sum(`*`(`^`(Psi(x), 2)), x) = value(Sum(`*`(`^`(Psi(x), 2)), x));
 

Sum(`*`(`^`(Psi(x), 2)), x) = `+`(`/`(`*`(`/`(1, 2), `*`(`+`(`*`(4, `*`(`^`(x, 4))), `-`(`*`(16, `*`(`^`(x, 3)))), `-`(`*`(21, `*`(`^`(x, 2)))), `-`(`*`(4, `*`(x))), `-`(2)), `*`(`^`(Psi(x), 2)))), `*...
Sum(`*`(`^`(Psi(x), 2)), x) = `+`(`/`(`*`(`/`(1, 2), `*`(`+`(`*`(4, `*`(`^`(x, 4))), `-`(`*`(16, `*`(`^`(x, 3)))), `-`(`*`(21, `*`(`^`(x, 2)))), `-`(`*`(4, `*`(x))), `-`(2)), `*`(`^`(Psi(x), 2)))), `*...
(4)
 

  • More partial results via additive decomposition:
 

> Sum(5^x*(3*x-2)/x/(x+1), x);
 

Sum(`/`(`*`(`^`(5, x), `*`(`+`(`*`(3, `*`(x)), `-`(2)))), `*`(x, `*`(`+`(x, 1)))), x) (5)
 

> Sum(`/`(`*`(`^`(5, x), `*`(`+`(`*`(3, `*`(x)), `-`(2)))), `*`(x, `*`(`+`(x, 1)))), x) = value(Sum(`/`(`*`(`^`(5, x), `*`(`+`(`*`(3, `*`(x)), `-`(2)))), `*`(x, `*`(`+`(x, 1)))), x));
 

Sum(`/`(`*`(`^`(5, x), `*`(`+`(`*`(3, `*`(x)), `-`(2)))), `*`(x, `*`(`+`(x, 1)))), x) = `+`(`/`(`*`(2, `*`(`^`(5, x))), `*`(x)), sum(`+`(`-`(`/`(`*`(5, `*`(`^`(5, x))), `*`(`+`(x, 1))))), x)) (6)
 

  • Nicer results for some definite sums:
 

> Sum(binomial(n,4*k),k=0..infinity);
 

Sum(binomial(n, `+`(`*`(4, `*`(k)))), k = 0 .. infinity) (7)
 

> Sum(binomial(n, `+`(`*`(4, `*`(k)))), k = 0 .. infinity) = value(Sum(binomial(n, `+`(`*`(4, `*`(k)))), k = 0 .. infinity));
 

Sum(binomial(n, `+`(`*`(4, `*`(k)))), k = 0 .. infinity) = `+`(`*`(`/`(1, 4), `*`(`^`(2, n))), `*`(`/`(1, 4), `*`(`^`(`+`(1, I), n))), `*`(`/`(1, 4), `*`(`^`(`+`(1, `-`(I)), n)))) (8)
 

  • 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 simplify Command 

  • The simplification of different types of expressions has been greatly enhanced in Maple 9.5.
 

  • Examples
 

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

`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(2, `*`(2, `*`(`^`(2, `/`(1, 2))))), `/`(1, 2)), `*`(`^`(`+`(`*`(2, `*`(`^`(2, `/`(1, 2)))), `-`(2)), `/`(3, 2)), `*`(`+`(`-`(`/`(`*`(`/`(1, 3), `*`(`+`(`-`(3), `/`(`...
`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(2, `*`(2, `*`(`^`(2, `/`(1, 2))))), `/`(1, 2)), `*`(`^`(`+`(`*`(2, `*`(`^`(2, `/`(1, 2)))), `-`(2)), `/`(3, 2)), `*`(`+`(`-`(`/`(`*`(`/`(1, 3), `*`(`+`(`-`(3), `/`(`...
(9)
 

> simplify(`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(2, `*`(2, `*`(`^`(2, `/`(1, 2))))), `/`(1, 2)), `*`(`^`(`+`(`*`(2, `*`(`^`(2, `/`(1, 2)))), `-`(2)), `/`(3, 2)), `*`(`+`(`-`(`/`(`*`(`/`(1, 3), `*`(`+`(`-`(3), `/`(`...
`+`(`-`(`*`(`/`(1, 4), `*`(`^`(`+`(2, `*`(2, `*`(`^`(2, `/`(1, 2))))), `/`(1, 2)), `*`(`^`(`+`(`*`(2, `*`(`^`(2, `/`(1, 2)))), `-`(2)), `/`(3, 2)), `*`(`+`(`-`(`/`(`*`(`/`(1, 3), `*`(`+`(`-`(3), `/`(`..., constant);
 

`+`(`-`(2), Pi) (10)
 

> (sqrt(3)+3*I)*sqrt(1+I*sqrt(3));
 

`*`(`+`(`*`(`^`(3, `/`(1, 2))), `*`(3, `*`(I))), `*`(`^`(`+`(1, `*`(I, `*`(`^`(3, `/`(1, 2))))), `/`(1, 2)))) (11)
 

> simplify(`*`(`+`(`*`(`^`(3, `/`(1, 2))), `*`(3, `*`(I))), `*`(`^`(`+`(1, `*`(I, `*`(`^`(3, `/`(1, 2))))), `/`(1, 2)))), constant);
 

`*`(`*`(2, `*`(I)), `*`(`^`(2, `/`(1, 2)), `*`(`^`(3, `/`(1, 2))))) (12)
 

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

`^`(-1, `/`(`*`(argument(z)), `*`(Pi))) (13)
 

> simplify(`^`(-1, `/`(`*`(argument(z)), `*`(Pi))),power);
 

signum(0, z, 1) (14)
 

> (-1)^a-(-1)^(-a)-2*I*sin(Pi*a);
 

`+`(`^`(-1, a), `-`(`^`(-1, `+`(`-`(a)))), `-`(`*`(`+`(`*`(2, `*`(I))), `*`(sin(`*`(Pi, `*`(a))))))) (15)
 

> simplify(`+`(`^`(-1, a), `-`(`^`(-1, `+`(`-`(a)))), `-`(`*`(`+`(`*`(2, `*`(I))), `*`(sin(`*`(Pi, `*`(a))))))),power);
 

0 (16)
 

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

`+`(`*`(diff(s(t), t), `*`(Typesetting:-mrow(Typesetting:-msubsup(Typesetting:-mstyle(Typesetting:-mo( (17)
 

> simplify( `+`(`*`(diff(s(t), t), `*`(Typesetting:-mrow(Typesetting:-msubsup(Typesetting:-mstyle(Typesetting:-mo( );
 

0 (18)
 

Expressions Containing undefined 

  • New routines for simplifying undefined expressions:
 

> ee := Pi*undefined+undefined*I*Pi+x;
 

ee := `+`(`*`(Pi, `*`(undefined)), `*`(`*`(undefined, `*`(I)), `*`(Pi)), x) (19)
 

> simplify(ee);
 

`+`(`+`(undefined, `*`(undefined, `*`(I))), x) (20)
 

  • 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(`+`(`+`(undefined, `*`(undefined, `*`(I))), x), symbolic);
 

undefined (21)
 

  • The new routines are also sensitive to assumptions.
 

> simplify(ee) assuming x::And(constant,real);
 

`+`(undefined, `*`(undefined, `*`(I))) (22)
 

Simplification of Mathematical Functions 

  • New simplifications regarding mathematical functions are available. Some previously existing simplifications were enhanced.
 

  • Examples
 

The abs Function 

> abs(x*y)^2 - abs(x)^2*abs(y)^2;
 

`+`(`*`(`^`(abs(`*`(x, `*`(y))), 2)), `-`(`*`(`^`(abs(x), 2), `*`(`^`(abs(y), 2))))) (23)
 

> simplify(`+`(`*`(`^`(abs(`*`(x, `*`(y))), 2)), `-`(`*`(`^`(abs(x), 2), `*`(`^`(abs(y), 2))))), abs);
 

0 (24)
 

> z = abs(z)*exp(I*argument(z));
 

z = `*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))) (25)
 

> simplify(z = `*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))), abs);
 

z = z (26)
 

The argument Function 

  • New simplification routine for the argument function:
 

> argument(z) + I*ln(z/abs(z));
 

`+`(argument(z), `*`(I, `*`(ln(`/`(`*`(z), `*`(abs(z))))))) (27)
 

> simplify(`+`(argument(z), `*`(I, `*`(ln(`/`(`*`(z), `*`(abs(z))))))), argument);
 

0 (28)
 

The exponential Function 

> exp(argument(z)*I);
 

exp(`*`(I, `*`(argument(z)))) (29)
 

> simplify( exp(`*`(I, `*`(argument(z)))) );
 

signum(0, z, 1) (30)
 

The LambertW Function 

  • Enhanced simplification of the LambertW function:
 

> LambertW(-1, 7/6*I*Pi*(-1+3^(1/2)*I));
 

LambertW(-1, `*`(`*`(`/`(7, 6), `*`(I)), `*`(Pi, `*`(`+`(`-`(1), `*`(I, `*`(`^`(3, `/`(1, 2))))))))) (31)
 

> simplify(LambertW(-1, `*`(`*`(`/`(7, 6), `*`(I)), `*`(Pi, `*`(`+`(`-`(1), `*`(I, `*`(`^`(3, `/`(1, 2))))))))));
 

`+`(`-`(`*`(`+`(`*`(`/`(7, 3), `*`(I))), `*`(Pi)))) (32)
 

  • The new simplifications are sensitive to assumptions.
 

> LambertW(n,2*Pi*I*(n+r)*exp(2*Pi*I*(m+r)));
 

LambertW(n, `*`(`*`(2, `*`(I)), `*`(Pi, `*`(`+`(n, r), `*`(exp(`*`(`*`(2, `*`(I)), `*`(Pi, `*`(`+`(m, r)))))))))) (33)
 

> simplify(LambertW(n, `*`(`*`(2, `*`(I)), `*`(Pi, `*`(`+`(n, r), `*`(exp(`*`(`*`(2, `*`(I)), `*`(Pi, `*`(`+`(m, r))))))))))) assuming n::posint, m::integer, -3/4 < r, r <= 1/4;
 

`*`(`*`(2, `*`(I)), `*`(`+`(n, r), `*`(Pi))) (34)
 

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

> simplify( ln(signum(0, z, 1)) );
 

`*`(I, `*`(argument(z))) (36)
 

  • Better handling of the branches for compositions of the form `@`(ln, exp); :
 

> ln(exp(33/5*I));
 

ln(exp(`*`(`/`(33, 5), `*`(I)))) (37)
 

> simplify(ln(exp(`*`(`/`(33, 5), `*`(I)))),ln);
 

`+`(`*`(`/`(33, 5), `*`(I)), `-`(`*`(`+`(`*`(2, `*`(I))), `*`(Pi)))) (38)
 

The FunctionAdvisor Command 

  • 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?"}
 

  • Examples
 

  • In terms of which functions could Zeta(0, z, nu) be expressed?
 

> FunctionAdvisor(specialize, Zeta(0, z, nu));
 

[Zeta(0, z, nu) = LerchPhi(1, z, nu), MathematicalFunctions:-`with no restrictions on `(z, nu)], [Zeta(0, z, nu) = `/`(`*`(`^`(-1, z), `*`(Psi(`+`(z, `-`(1)), nu))), `*`(factorial(`+`(z, `-`(1))))), A...
[Zeta(0, z, nu) = LerchPhi(1, z, nu), MathematicalFunctions:-`with no restrictions on `(z, nu)], [Zeta(0, z, nu) = `/`(`*`(`^`(-1, z), `*`(Psi(`+`(z, `-`(1)), nu))), `*`(factorial(`+`(z, `-`(1))))), A...
(39)
 

  • Regarding the specialization into Psi, what is the specialization of Psi into Zeta if we ignore the restriction And(z::integer, `<`(1, z)); on the value of z; ?
 

> FunctionAdvisor(specialize, Psi(z-1,nu), Zeta);
 

[Psi(`+`(z, `-`(1)), nu) = `/`(`*`(`+`(Zeta(1, z, nu), `*`(`+`(gamma, Psi(`+`(1, `-`(z)))), `*`(Zeta(0, z, nu))))), `*`(GAMMA(`+`(1, `-`(z))))), MathematicalFunctions:-`with no restrictions on `(nu, z... (40)
 

  • 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)), `*`(GAMMA(`+`(`-`(n),...
[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)), `*`(GAMMA(`+`(`-`(n),...
[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)), `*`(GAMMA(`+`(`-`(n),...
[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)), `*`(GAMMA(`+`(`-`(n),...
[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)), `*`(GAMMA(`+`(`-`(n),...
(41)
 

  • The enhanced routines are sensitive to assumptions. The specialization of BesselI(a, z); in terms of the StruveL; function assuming `+`(a, `/`(1, 2)); is a negative integer:
 

> FunctionAdvisor(specialize, BesselI(a,z), StruveL) assuming (a+1/2)::negint;
 

[BesselI(a, z) = `+`(`-`(`/`(`*`(`^`(z, a), `*`(`+`(`/`(`*`(I, `*`(StruveL(`+`(`-`(a)), `+`(`-`(z))), `*`(`^`(`+`(`-`(z)), a)))), `*`(`^`(`*`(I, `*`(z)), `+`(`*`(2, `*`(a)))))), `/`(`*`(Sum(`/`(`*`(`^...
[BesselI(a, z) = `+`(`-`(`/`(`*`(`^`(z, a), `*`(`+`(`/`(`*`(I, `*`(StruveL(`+`(`-`(a)), `+`(`-`(z))), `*`(`^`(`+`(`-`(z)), a)))), `*`(`^`(`*`(I, `*`(z)), `+`(`*`(2, `*`(a)))))), `/`(`*`(Sum(`/`(`*`(`^...
[BesselI(a, z) = `+`(`-`(`/`(`*`(`^`(z, a), `*`(`+`(`/`(`*`(I, `*`(StruveL(`+`(`-`(a)), `+`(`-`(z))), `*`(`^`(`+`(`-`(z)), a)))), `*`(`^`(`*`(I, `*`(z)), `+`(`*`(2, `*`(a)))))), `/`(`*`(Sum(`/`(`*`(`^...
(42)
 

  • To compute all the specializations for BesselY(`/`(1, 2), z); that the FunctionAdvisor command can compute, enter FunctionAdvisor(specialize, ('BesselY')(`/`(1, 2), z)); at the Maple prompt.
 

Mathematical Functions 

  • The implementation of some mathematical functions has been improved to increase the knowledge about special values and relationships. More functions are sensitive to assumptions.
 

  • Examples
 

  • Elliptic functions:
 

> EllipticNome( EllipticModulus(q) ) assuming abs(q) < 1;
 

q (43)
 

> EllipticModulus( EllipticNome(k) ) assuming Re(k) > 0;
 

k (44)
 

  • binomial function:
 

> binomial(a,k) assuming a::posint, k::negint;
 

0 (45)
 

  • The classic definition for the Psi(n,z) function as the nth derivative of Psi(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));
 

Psi(n, z) = `/`(`*`(`+`(Zeta(1, `+`(n, 1), z), `*`(`+`(gamma, Psi(`+`(`-`(n)))), `*`(Zeta(0, `+`(n, 1), z))))), `*`(GAMMA(`+`(`-`(n))))) (46)
 

Network of Conversion Routines for Mathematical Functions 

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

  • Examples
 

  • For functions related to special cases of the hypergeom function:
 

> polylog(2,z);
 

polylog(2, z) (47)
 

> polylog(2, z) = convert(polylog(2, z), hypergeom);
 

polylog(2, z) = `*`(z, `*`(hypergeom([1, 1, 1], [2, 2], z))) (48)
 

> convert(polylog(2, z) = `*`(z, `*`(hypergeom([1, 1, 1], [2, 2], z))),LerchPhi);
 

`*`(z, `*`(LerchPhi(z, 2, 1))) = `*`(z, `*`(LerchPhi(z, 2, 1))) (49)
 

> convert(lhs(`*`(z, `*`(LerchPhi(z, 2, 1))) = `*`(z, `*`(LerchPhi(z, 2, 1)))),polylog) = convert(rhs(`*`(z, `*`(LerchPhi(z, 2, 1))) = `*`(z, `*`(LerchPhi(z, 2, 1)))),hypergeom);    # convert the other way around
 

polylog(2, z) = `*`(z, `*`(hypergeom([1, 1, 1], [2, 2], z))) (50)
 

  • For the argument function:
 

> argument(z);
 

argument(z) (51)
 

> argument(z)  =  convert(argument(z),ln);
 

argument(z) = `+`(`-`(`*`(`+`(I), `*`(ln(`/`(`*`(z), `*`(abs(z)))))))) (52)
 

> argument(z) = convert(argument(z),arctan);
 

argument(z) = arctan(Im(z), Re(z)) (53)
 

  • More Sum representations for special functions:
 

> EllipticModulus(q);
 

EllipticModulus(q) (54)
 

> EllipticModulus(q) = convert(EllipticModulus(q), Sum) assuming abs(q) < 1;
 

EllipticModulus(q) = `/`(`*`(`^`(Sum(`+`(`*`(2, `*`(`^`(q, `*`(`^`(`+`(`/`(1, 2), _k1), 2)))))), _k1 = 0 .. infinity), 2)), `*`(`^`(`+`(Sum(`+`(`*`(2, `*`(`^`(q, `*`(`^`(_k1, 2)))))), _k1 = 1 .. infin... (55)
 

  • 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) = Sum(`/`(`*`(`^`(`+`(`-`(`/`(`*`(Sum(`/`(`*`(`^`(pochhammer(`/`(1, 2), _k1), 2), `*`(`^`(`+`(`-`(`*`(`^`(k, 2))), 1), _k1))), `*`(factorial(_k1), `*`(pochhammer(1, _k1)))), _k1 = 0 .... (56)
 

  • New conversion rules for the hypergeometric 2F1 function
 

> hypergeom([a,b],[c],z);
 

hypergeom([a, b], [c], z) (57)
 

> convert(hypergeom([a, b], [c], z), hypergeom, "quadratic 1") assuming -1/2+a+b-c = 0;
 

`/`(`*`(hypergeom([`+`(`*`(2, `*`(a)), `-`(1)), `+`(`-`(1), `*`(2, `*`(b)))], [`+`(`-`(`/`(1, 2)), a, b)], `+`(`/`(1, 2), `-`(`*`(`/`(1, 2), `*`(`^`(`+`(1, `-`(z)), `/`(1, 2)))))))), `*`(`^`(`+`(1, `-... (58)
 

  • 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].
 

Differentiation Knowledge for Special Functions 

  • Examples
 

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

`+`(`*`(GAMMA(a, z), `*`(ln(z))), MeijerG([[], [1, 1]], [[0, 0, a], []], z)) (59)
 

  • 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:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
    convert([Typesetting:-AD, Typesetting:-EV, Typesetting:-mi, Typesetting:-mio, Typesetting:-mn, Typesetting:-mo, Typesetting:-ms, Typesetting:-mtd, Typesetting:-mtr, Typesetting:-maction, Typesetting:-...
 

  • Improved differentiation of special functions with respect to parameters:
 

> Diff( MeijerG([[], [b+1, b+1]],[[b, b, f(a)], []],z), a );
 

Diff(MeijerG([[], [`+`(b, 1), `+`(b, 1)]], [[f(a), b, b], []], z), a); (60)
 

> value(Diff(MeijerG([[], [`+`(b, 1), `+`(b, 1)]], [[f(a), b, b], []], z), a); );
 

`*`(`+`(`*`(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)))), `*`(diff(f(a), a)))
`*`(`+`(`*`(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)))), `*`(diff(f(a), a)))
(61)
 

> Diff( MeijerG([[], []],[[f(a)], []],g(z)), a );
 

Diff(MeijerG([[], []], [[f(a)], []], g(z)), a); (62)
 

> value(Diff(MeijerG([[], []], [[f(a)], []], g(z)), a); );
 

`*`(ln(g(z)), `*`(MeijerG([[], []], [[f(a)], []], g(z)), `*`(diff(f(a), a)))) (63)
 

  • 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
 

z = `*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))) (64)
 

> diff( z = `*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))), z);    # a 'representation' for d/dz argument(z) using abs(1,z)
 

1 = `+`(`*`(abs(1, z), `*`(exp(`*`(I, `*`(argument(z)))))), `*`(I, `*`(abs(z), `*`(`+`(`-`(`/`(`*`(`+`(I)), `*`(z))), `/`(`*`(I, `*`(abs(1, z))), `*`(abs(z)))), `*`(exp(`*`(I, `*`(argument(z))))))))) (65)
 

> expand( 1 = `+`(`*`(abs(1, z), `*`(exp(`*`(I, `*`(argument(z)))))), `*`(I, `*`(abs(z), `*`(`+`(`-`(`/`(`*`(`+`(I)), `*`(z))), `/`(`*`(I, `*`(abs(1, z))), `*`(abs(z)))), `*`(exp(`*`(I, `*`(argument(z))))))))) );    # in this example, abs(1,z) cancels out
 

1 = `/`(`*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))), `*`(z)) (66)
 

> simplify( 1 = `/`(`*`(abs(z), `*`(exp(`*`(I, `*`(argument(z)))))), `*`(z)) );  # further correct manipulations are then feasible
 

1 = 1 (67)
 

The combine Command 

  • Combinations in Sums now take into account that the summation variable can have only integer values in the summation range.
 

  • Examples
 

> ee := k*(2*ln(k+1)-ln(k)-ln(k+2));
 

ee := `*`(k, `*`(`+`(`*`(2, `*`(ln(`+`(k, 1)))), `-`(ln(k)), `-`(ln(`+`(k, 2)))))) (68)
 

> combine(ee, ln);   # <- k is an arbitrary complex variable, nothing to do
 

`*`(k, `*`(`+`(`*`(2, `*`(ln(`+`(k, 1)))), `-`(ln(k)), `-`(ln(`+`(k, 2)))))) (69)
 

> Sum( ee, k=1..infinity );   # k is now an integer from 1 to infinity
 

Sum(`*`(k, `*`(`+`(`*`(2, `*`(ln(`+`(k, 1)))), `-`(ln(k)), `-`(ln(`+`(k, 2)))))), k = 1 .. infinity) (70)
 

> combine( Sum(`*`(k, `*`(`+`(`*`(2, `*`(ln(`+`(k, 1)))), `-`(ln(k)), `-`(ln(`+`(k, 2)))))), k = 1 .. infinity), ln );   # a combination is therefore possible
 

Sum(`*`(k, `*`(ln(`/`(`*`(`^`(`+`(k, 1), 2)), `*`(k, `*`(`+`(k, 2))))))), k = 1 .. infinity) (71)
 

  • The combination of logarithms is now more general.
 

> -ln(5) + ln(abs(x)) - ln(x);
 

`+`(`-`(ln(5)), ln(abs(x)), `-`(ln(x))) (72)
 

> combine(`+`(`-`(ln(5)), ln(abs(x)), `-`(ln(x))));
 

`+`(`-`(ln(`+`(`/`(`*`(5, `*`(x)), `*`(abs(x))))))) (73)
 

> ln(x)-ln(y);
 

`+`(ln(x), `-`(ln(y))) (74)
 

> combine(`+`(ln(x), `-`(ln(y)))) assuming x > 0;
 

`+`(`-`(ln(`/`(`*`(y), `*`(x))))) (75)
 

> ln(a-1)+I*Pi-ln(1-a);
 

`+`(ln(`+`(a, `-`(1))), `*`(I, `*`(Pi)), `-`(ln(`+`(1, `-`(a))))) (76)
 

> combine(`+`(ln(`+`(a, `-`(1))), `*`(I, `*`(Pi)), `-`(ln(`+`(1, `-`(a)))))) assuming a > 1;
 

0 (77)
 

The series Command 

  • The series command can compute series expansions for more functions.
 

  • Examples
 

> EllipticModulus(q);
 

EllipticModulus(q) (78)
 

> series(EllipticModulus(q), q);
 

`+`(`*`(4, `*`(`^`(q, `/`(1, 2)))), `-`(`*`(16, `*`(`^`(q, `/`(3, 2))))), `*`(56, `*`(`^`(q, `/`(5, 2)))), `-`(`*`(160, `*`(`^`(q, `/`(7, 2))))), `*`(404, `*`(`^`(q, `/`(9, 2)))), `-`(`*`(944, `*`(`^`... (79)
 

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

GAMMA(a, z) (80)
 

> series(GAMMA(a, z), a, 2);
 

series(`+`(Ei(1, z), `*`(`+`(`*`(Ei(1, z), `*`(ln(z))), MeijerG([[], [1, 1]], [[0, 0, 0], []], z)), `*`(a)))+O(`^`(a, 2)),a,2) (81)
 

> Ei(a,z);
 

Ei(a, z) (82)
 

> series(Ei(a, z), a, 2);
 

series(`+`(`/`(`*`(exp(`+`(`-`(z)))), `*`(z)), `-`(`*`(MeijerG([[], [0]], [[-1, -1], []], z), `*`(a))))+O(`^`(a, 2)),a,2) (83)
 

The plotcompare Command 

  • A new option in plots[plotcompare], shift_range = r + s I, is available to shift the range of the plot, for example, from `*`(`+`(a, `*`(I, `*`(b))), `*`(`..`(`+`(c, `*`(I, `*`(d)))))); to `*`(`+`(a, r, `*`(I, `*`(`+`(b, s)))), `*`(`..`(`+`(c, r, `*`(I, `*`(`+`(d, s))))))); . 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.
 

  • Example
 

  • A comparison of sin(x); with its cubic Taylor polynomial.
 

> plots[plotcompare]( sin(x), x-x^3/6, x=-3..3 );
 


Image Image
Image Image


 

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


Image Image
Image Image


 

Rational Function Decomposition 

  • 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 

  • The singular command now accepts a numeric range as an extra argument, which causes only the singularities within this range to be returned.
 

  • Example
 

> singular( tan(x) );         # works as in previous releases
 

{x = `+`(`*`(`/`(1, 2), `*`(Pi)), `*`(_Z1, `*`(Pi)))} (84)
 

> singular( tan(x), 1..10 );  # new
 

{x = `+`(`*`(`/`(1, 2), `*`(Pi)))}, {x = `+`(`*`(`/`(3, 2), `*`(Pi)))}, {x = `+`(`*`(`/`(5, 2), `*`(Pi)))} (85)
 

See Also 

Index of New Maple 9.5 Features