 updatesR4/symbolic - Maple Help

New Symbolic Features That Have Been Added to Maple V for Release 4 New and Improved Packages:

 • Integral transforms:
 The new integral transform package inttrans includes: inttrans[laplace], inttrans[invlaplace], inttrans[mellin], inttrans[fourier], inttrans[invfourier], inttrans[fouriersin], inttrans[fouriercos], inttrans[hankel], inttrans[hilbert].
 > inttrans[fouriersin](3/(t + a),t,w);
 $\frac{{3}{}\sqrt{{2}}{}\left({-}{\mathrm{cos}}{}\left({a}{}{w}\right){}{\mathrm{Ssi}}{}\left({a}{}{w}\right){+}{\mathrm{sin}}{}\left({a}{}{w}\right){}{\mathrm{Ci}}{}\left({a}{}{w}\right)\right)}{\sqrt{{\mathrm{\pi }}}}$ (1)
 > assume(a>0);
 > inttrans[hilbert](exp(I*a*x),x,y);
 ${I}{}{{ⅇ}}^{{I}{}{y}{}{\mathrm{a~}}}$ (2)
 > a := 'a':
 User defined lookup tables are added to the Fourier and Laplace transforms via routine inttrans[addtable]. Table entries can have an arbitrary number of constant parameters:
 > with(inttrans):
 > inttrans[mellin](t^a*int(x^b*f1(t/x)*f2(x),x=0..infinity),t,s);
 ${\mathrm{F1}}{}\left({s}{+}{a}\right){}{\mathrm{F2}}{}\left({s}{+}{a}{+}{b}{+}{1}\right)$ (3)
 Recognition and transformation of general convolution integrals is added to all three transforms:
 > inttrans[mellin](diff(f(t),t),t,s);
 ${-}\left({s}{-}{1}\right){}{F}{}\left({s}{-}{1}\right)$ (4)
 > inttrans[mellin](int(f(x),x=t..infinity),t,s);
 $\frac{{F}{}\left({s}{+}{1}\right)}{{s}}$ (5)
 Functions which are being integrated and differentiated with respect to parameters other than the transform parameter are now simplified using Leibniz and Fubini's theorem.
 > inttrans[fourier](diff(f(t,u),u),t,s);
 ${\mathrm{fourier}}{}\left({\mathrm{diff}}{}\left({f}{}\left({t}{,}{u}\right){,}{u}\right){,}{t}{,}{s}\right)$ (6)
 > inttrans[laplace](int(f(t,u),u=a..b),t,s);
 ${\mathrm{int}}{}\left({\mathrm{laplace}}{}\left({f}{}\left({t}{,}{u}\right){,}{t}{,}{s}\right){,}{u}{=}{a}{..}{b}\right)$ (7)
 Transforms can now return multiple integrals, allowing for expressions of the form f(t)/t^n to be transformed for n>1:
 > inttrans[laplace](f(t)/t^4,t,s);
 ${\mathrm{laplace}}{}\left(\frac{{f}{}\left({t}\right)}{{{t}}^{{4}}}{,}{t}{,}{s}\right)$ (8)
 In many cases, hypergeometric functions are returned where formerly only definite integrals were returned:
 > inttrans[fourier]((1+I*t)^(-1/2)*(1+2*I*t)^(-3/2),t,w);
 ${-}\frac{\sqrt{{2}}{}{\mathrm{\pi }}{}{{ⅇ}}^{{w}}{}{w}{}{\mathrm{hypergeom}}{}\left(\left[\frac{{3}}{{2}}\right]{,}\left[{2}\right]{,}{-}\frac{{w}}{{2}}\right){}{\mathrm{Heaviside}}{}\left({-}{w}\right)}{{2}}$ (9)
 • DEtools: Differential Equations Tools package
 There are significant changes over release 3 version. Some new functionalities include:

 handle a variety of substitutions and transformations in DEs. allow users to change independent variables in a PDE to a new coordinate system. either return an ODE of reduced order or solve the ODE explicitly by the method of reduction of order. convert a system of differential equations to a first order system.

 > DEtools[PDEchangecoords](D[1,2](w)(x,y,z)-D(w)(x,y,z), [x,y,z], cylindrical,[r,phi,theta]);
 $\left(\frac{{{\mathrm{sin}}{}\left({\mathrm{\phi }}\right)}^{{2}}}{{{r}}^{{2}}}{-}\frac{{{\mathrm{cos}}{}\left({\mathrm{\phi }}\right)}^{{2}}}{{{r}}^{{2}}}{+}\frac{{\mathrm{sin}}{}\left({\mathrm{\phi }}\right)}{{r}}\right){}{{\mathrm{D}}}_{{2}}{}\left({w}\right){}\left({r}{,}{\mathrm{\phi }}{,}{\mathrm{\theta }}\right){+}\left({-}\frac{{\mathrm{cos}}{}\left({\mathrm{\phi }}\right){}{\mathrm{sin}}{}\left({\mathrm{\phi }}\right)}{{r}}{-}{\mathrm{cos}}{}\left({\mathrm{\phi }}\right)\right){}{{\mathrm{D}}}_{{1}}{}\left({w}\right){}\left({r}{,}{\mathrm{\phi }}{,}{\mathrm{\theta }}\right){-}\frac{{\mathrm{cos}}{}\left({\mathrm{\phi }}\right){}{\mathrm{sin}}{}\left({\mathrm{\phi }}\right){}{{\mathrm{D}}}_{{2}{,}{2}}{}\left({w}\right){}\left({r}{,}{\mathrm{\phi }}{,}{\mathrm{\theta }}\right)}{{{r}}^{{2}}}{+}\left({-}\frac{{{\mathrm{sin}}{}\left({\mathrm{\phi }}\right)}^{{2}}}{{r}}{+}\frac{{{\mathrm{cos}}{}\left({\mathrm{\phi }}\right)}^{{2}}}{{r}}\right){}{{\mathrm{D}}}_{{1}{,}{2}}{}\left({w}\right){}\left({r}{,}{\mathrm{\phi }}{,}{\mathrm{\theta }}\right){+}{\mathrm{sin}}{}\left({\mathrm{\phi }}\right){}{\mathrm{cos}}{}\left({\mathrm{\phi }}\right){}{{\mathrm{D}}}_{{1}{,}{1}}{}\left({w}\right){}\left({r}{,}{\mathrm{\phi }}{,}{\mathrm{\theta }}\right)$ (10)
 • combstruct: Combinatorial Structures package
 The package combstruct is used to define, count and generate combinatorial structures.
 A combinatorial class is defined by writing a grammar specification that describes it. In this way, an extensive collection of different classes may be defined. For example, the system applies to all regular and context-free grammars, grammars to define binary trees, plane general trees, necklaces, functional graphs, expression trees etc.
 > with(combstruct):
 Model alcohol molecules, C_n H_{2n+1} OH.
 Define the grammar for an alkyl, C_n H_{2n+1}, which is a ternary rooted tree that moves freely in space.
 > molecule := {alkyl = Union(H, Prod(C, Set(alkyl, card=3))), H=Atom, C=Atom}:
 > count([alkyl, molecule], size=6+2*6+1);
 ${17}$ (11)
 Thus we see that there are 17 different alcohol molecules with 6 carbon atoms. Here is one of them.
 > draw([alkyl, molecule], size=6+6*2+1);
 ${\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({H}{,}{H}{,}{H}\right)\right){,}{\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({H}{,}{H}{,}{H}\right)\right){,}{H}\right)\right){,}{H}{,}{H}\right)\right){,}{\mathrm{Prod}}{}\left({C}{,}{\mathrm{Set}}{}\left({H}{,}{H}{,}{H}\right)\right){,}{H}\right)\right)$ (12)
 • tensor: Tensor Analysis and General Relativity Computations
 The tensor package deals with tensors, their operations, and their use in General relativity both in the natural basis and in a rigid moving frame. Some utilities to manipulate tensors are also provided, as well as a mechanism for customizing the way simplification is done in multi-step calculations.
 Compute the curvature in the natural basis for the Schwarzschild solution:
 > with(tensor):
 > g := create([-1,-1], array(1..4, 1..4, symmetric, sparse, [(1,1) = 1-2*M/r, (2,2) = -1/(1-2*M/r), (3,3) = -r^2, (4,4) = -r^2*sin(theta)^2])):
 > coord := [t, r, theta, phi]:
 > tensor/simp := proc(a) simplify(a); end:
 > con_g := invert(g, 'det_g'):
 > d1_g := d1metric(g, coord):
 > d2_g := d2metric(d1_g, coord):
 > Cf1 := Christoffel1(d1_g):
 > Cf2 := Christoffel2(con_g, Cf1):
 > Rm := Riemann(con_g, d2_g, Cf1):
 > Rc := Ricci(con_g, Rm):
 Display the non-zero independent components of the covariant Riemann and Ricci tensors:
 > displayGR('Riemann', Rm);
 ${}$
 ${\mathrm{The Riemann Tensor}}$
 ${\mathrm{non-zero components :}}$
 ${\mathrm{R1212}}{=}\frac{{2}{}{M}}{{{r}}^{{3}}}$
 ${\mathrm{R1313}}{=}\frac{\left({-}{r}{+}{2}{}{M}\right){}{M}}{{{r}}^{{2}}}$
 ${\mathrm{R1414}}{=}\frac{\left({-}{r}{+}{2}{}{M}\right){}{M}{}{{\mathrm{sin}}{}\left({\mathrm{\theta }}\right)}^{{2}}}{{{r}}^{{2}}}$
 ${\mathrm{R2323}}{=}{-}\frac{{M}}{{-}{r}{+}{2}{}{M}}$
 ${\mathrm{R2424}}{=}{-}\frac{{M}{}{{\mathrm{sin}}{}\left({\mathrm{\theta }}\right)}^{{2}}}{{-}{r}{+}{2}{}{M}}$
 ${\mathrm{R3434}}{=}{-}{2}{}{M}{}{{\mathrm{sin}}{}\left({\mathrm{\theta }}\right)}^{{2}}{}{r}$
 ${}$
 ${\mathrm{character : \left[-1, -1, -1, -1\right]}}$ (13)
 > displayGR('Ricci', Rc);
 ${}$
 ${\mathrm{The Ricci tensor}}$
 ${\mathrm{non-zero components :}}$
 ${\mathrm{None}}$
 ${}$
 ${\mathrm{character : \left[-1, -1\right]}}$ (14)
 Notice that the last result confirms the fact that the Schwarzschild solution is indeed a vacuum solution.
 Verify the Bianchi identity by computing the covariant derivatives of the Riemann components and anti-symmetrizing them on the last three indices:
 > D_Rm := cov_diff(Rm, coord, Cf2):
 > asymm_D_Rm := antisymmetrize(D_Rm, [3,4,5]):
 > act('display', asymm_D_Rm);
 ${\mathrm{_____________________________________________________}}$
 ${\mathrm{No non-zero independent components.}}$
 CHARACTER :
 $\left[{-1}{,}{-1}{,}{-1}{,}{-1}{,}{-1}\right]$
 ${\mathrm{_____________________________________________________}}$ (15)
 Since all of the components are zero, the Bianchi identity is verified.
 • geometry: 2D Euclidean Geometry Package
 The geometry package is re-designed, and has more functionalities: the conic section is completely implemented, more transformations, graphical visualization is also provided.
 > with(geometry):
 > conic(h,9*y^2-4*x^2=36,[x,y]):
 > detail(h);
 ${\mathrm{GeometryDetail}}{}\left(\left[{"name of the object"}{,}{h}\right]{,}\left[{"form of the object"}{,}{\mathrm{hyperbola2d}}\right]{,}\left[{"center"}{,}\left[{0}{,}{0}\right]\right]{,}\left[{"foci"}{,}\left[\left[{0}{,}{-}\sqrt{{13}}\right]{,}\left[{0}{,}\sqrt{{13}}\right]\right]\right]{,}\left[{"vertices"}{,}\left[\left[{0}{,}{-}{2}\right]{,}\left[{0}{,}{2}\right]\right]\right]{,}\left[{"the asymptotes"}{,}\left[{y}{+}\frac{{2}}{{3}}{}{x}{=}{0}{,}{y}{-}\frac{{2}}{{3}}{}{x}{=}{0}\right]\right]{,}\left[{"equation of the hyperbola"}{,}{-}{4}{}{{x}}^{{2}}{+}{9}{}{{y}}^{{2}}{-}{36}{=}{0}\right]\right)$ (16)
 > draw(h); Illustration of glide reflection transformation:
 > circle(c1,[point(o,-3/2,0),1]):
 > dsegment(AB,[point(A,0,0),point(B,0,2)]):
 > line(l,[A,B]):
 > for i from 2 to 10 do    GlideReflection(c.i,c.(i-1),l,AB) od: draw([seq(c.i,i=1..10),l(thickness=2)],filled=true,color=maroon, printtext=false,scaling=constrained);
 • linalg: Linear Algebra Package
 Matrix decompositions: linalg[cholesky], linalg[LUdecomp], linalg[QRdecomp]
 > with(linalg):
 > A := matrix(3,3, [1,2,3,0,0,1,2,3,4]):
 > linalg[QRdecomp](A, Q='q', rank='r');
 $\left[\begin{array}{ccc}\sqrt{{5}}& \frac{{8}{}\sqrt{{5}}}{{5}}& \frac{{11}{}\sqrt{{5}}}{{5}}\\ {0}& \frac{\sqrt{{5}}}{{5}}& \frac{{2}{}\sqrt{{5}}}{{5}}\\ {0}& {0}& {1}\end{array}\right]$ (17)
 The linalg[hermite] and linalg[smith] functions are faster over polynomials with rational coefficients;  the old algorithm for hermite and smith did not admit polynomial time and complexity bounds.  By contrast, the new algorithms admit good time and space bounds.
 The linalg[inverse] and linalg[rank] functions are faster over polynomials with integer coefficients.  For an input matrix with dimension n and entries which are degree d polynomials with integer coefficients bounded in length by B bits, the new algorithm for rank and inverse are O(n) faster than the old. In the case where input matrix has full column or row rank, the new algorithm for rank is O(n^2*B^2) faster.
 The following is a summary of results:
 Input Matrices:
 A1: 12x12, entries=randpoly(x,degree=4,terms=3,coeffs=rand(-1000..1000)) A2: 8x8, entries=randpoly(x,degree=5,terms=2,coeffs=rank(-10^20..10^20)) A3: 10x10, entries=randpoly(x) A4: 10x50, entries=randpoly(x) A5: 5x4, entries=randpoly(x)
 Timing for inverse: (cpu seconds on DEC ALPHA UNIX)

 Input matrix R3 R4 Speedup Factor A1 247.2 37.8 6.7 A2 373.0 27.1 13.8 A3 75.2 20.2 3.8

 Timings for rank:

 Input matrix R3 R4 Speedup Factor A1 13.4 1.2 11.2 A2 13.8 .28 49.3 A3 7.3 .87 8.4 A4 100.3 6.7 15.0

 Compare the performance of hermite(A5,x) in release 3 and release 4:

 Maple V, Release 3, DEC ALPHA UNIX, Apr 22 1994, SerialNumberSerialNumber bytes used=134300024, alloc=12580608, time=399.87 TTY Iris, Research, DEC ALPHA UNIX, Jun 11, 1995 bytes used=22076000, alloc=3669344, time=11.72

 Compare the performance of smith(A5,x) in release 3 and release 4:

 Maple V, Release 3, DEC ALPHA UNIX, Apr 22 1994, SerialNumberSerialNumber bytes used=106607176, alloc=12318512, time=350.33 TTY Iris, Research, DEC ALPHA UNIX, Jun 11, 1995 bytes used=3048504, alloc=1703624, time=1.4

 • LREtools:
 manipulation and solution of linear recurrence equations The package LREtools is for manipulation and solution of linear recurrence equations.
 > with(LREtools):
 > rec:=a(n+2)=-a(n)/(n+1)/(n+2):
 > REtoDE(rec,a(n),{},f(x));
 ${\mathrm{DESol}}{}\left(\left\{{-}{f}{-}{{\mathrm{D}}}^{\left({2}\right)}{}\left({f}\right)\right\}{,}\left\{{f}\right\}\right)$ (18)
 > REplot(rec,a(n),{a(0)=1,a(1)=0},0..8); • sumtools:
 The package sumtools is a collection of routines for computing indefinite and definite sums. The principal routines are Gosper's algorithm for indefinite summation and Zeilberger's algorithm, and extensions to both algorithms.
 > with(sumtools,[gosper,sumtohyper]):
 > gosper(1/(k^2-1),k);
 ${-}\frac{\left({k}{+}{1}\right){}\left({-}{1}{+}{2}{}{k}\right)}{{2}{}{k}{}\left({{k}}^{{2}}{-}{1}\right)}$ (19)
 > sumtohyper(binomial(n,k)^2,k);
 ${\mathrm{hypergeom}}{}\left(\left[{-}{n}{,}{-}{n}\right]{,}\left[{1}\right]{,}{1}\right)$ (20)
 > with(sumtools,extended_gosper):
 > extended_gosper(pochhammer(b,k/2)/factorial(k/2),k);
 $\frac{{k}{}{\mathrm{pochhammer}}{}\left({b}{,}\frac{{k}}{{2}}\right)}{{2}{}{b}{}\left(\frac{{k}}{{2}}\right){!}}{+}\frac{\left({k}{+}{1}\right){}{\mathrm{pochhammer}}{}\left({b}{,}\frac{{k}}{{2}}{+}\frac{{1}}{{2}}\right)}{{2}{}{b}{}\left(\frac{{k}}{{2}}{+}\frac{{1}}{{2}}\right){!}}$ (21)
 • Domains: (previously "Gauss")
 Quotient fields (both factored normal form FNFQF and expanded normal form ENFQF), Groebner base (GB) are implemented. The routine evaldomains provides a Maple-like user-interface, data-encapsulation and type-checking for the arguments of Domains-functions.
 > with(Domains):
 ---------------------- Domains version 1.0 --------------------- Initially defined domains are Z and Q the integers and rationals Abbreviations, e.g. DUP for DenseUnivariatePolynomial, also made
 > C := DUP(Q, x):
 > R1 := FNFQF(C):
 > F := (x^2+2*x+1)^2/x:
 > f1 := R1[Input](F):
 > R1[Output](R1[Diff](f1));
 $\frac{{3}{}\left({-}\frac{{1}}{{3}}{+}{{x}}^{{4}}{+}\frac{{8}}{{3}}{}{{x}}^{{3}}{+}{2}{}{{x}}^{{2}}\right)}{{{x}}^{{2}}}$ (22)
 The following is an example of the interface-routine evaldomains:
 > Dup := DUP (Zmod(7), x):
 Create a Dup-evaluator using the alias statement
 > alias (dup = evaldomains[Dup]):
 > dup (Rem (-x^7+4*x^3-2, x^3+3*x) * (x^3+x-6));
 ${{x}}^{{4}}{+}{5}{}{{x}}^{{3}}{+}{{x}}^{{2}}{+}{6}{}{x}{+}{5}$ (23)
 Note that it is quite clumsy to obtain the same result without evaldomains:
 > Dup['Output'](Dup[*](Dup['Rem'](Dup['Input'](-x^7+4*x^3-2), Dup['Input'](x^3+3*x)),Dup['Input'](x^3+x-6)));
 ${{x}}^{{4}}{+}{5}{}{{x}}^{{3}}{+}{{x}}^{{2}}{+}{6}{}{x}{+}{5}$ (24)
 See Domains.
 > f := (x^3+1)/(x^2+3*x+5):
 $\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{1}}}{\left(\frac{{1}}{{x}}\right)}{+}\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{2}}}{{\left(\frac{{1}}{{x}}\right)}^{{2}}}{+}\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{3}}}{{\left(\frac{{1}}{{x}}\right)}^{{3}}}{+}\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{4}}}{{\left(\frac{{1}}{{x}}\right)}^{{4}}}{+}\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{5}}}{{\left(\frac{{1}}{{x}}\right)}^{{5}}}{+}\frac{{\left({{\mathrm{p_adic}}{}\left(\frac{{1}}{{x}}{,}{-1}{,}\left[{1}{,}{-3}{,}{4}{,}{4}{,}{-32}{,}{76}\right]\right)}_{{3}}\right)}_{{6}}}{{\left(\frac{{1}}{{x}}\right)}^{{6}}}{+}{\mathrm{O}}{}\left({\left(\frac{{1}}{{x}}\right)}^{{5}}\right)$ (25)
 ${-1}$ (26)
 ${1}$ (27)
 • numtheory: Number Theory Package
 numtheory[invcfrac]: convert a simple periodic continued fraction expansion to a quadratic surd.
 > numtheory[cfrac]((31)^(1/2), periodic);
 ${5}{+}\frac{{1}}{{1}{+}\frac{{1}}{{1}{+}\frac{{1}}{{3}{+}\frac{{1}}{{5}{+}\frac{{1}}{{3}{+}\frac{{1}}{{1}{+}\frac{{1}}{{1}{+}\frac{{1}}{{10}{+}\frac{{1}}{{1}{+}\frac{{1}}{{1}{+}\frac{{1}}{{3}{+}\frac{{1}}{{5}{+}\frac{{1}}{{3}{+}\frac{{1}}{{1}{+}\frac{{1}}{{1}{+}\frac{{1}}{{10}{+}{\mathrm{...}}}}}}}}}}}}}}}}}}$ (28)
 > numtheory[invcfrac] ((28));
 $\sqrt{{31}}$ (29)
 numtheory[pdexpand]: compute the periodic expansion of a rational number.
 > numtheory[pdexpand](-83/74);
 ${\mathrm{PDEXPAND}}{}\left({-1}{,}{1}{,}\left[{1}\right]{,}\left[{2}{,}{1}{,}{6}\right]\right)$ (30)
 > convert((30),rational);
 ${-}\frac{{83}}{{74}}$ (31)
 The routine legendre in previous releases was actually computing the "generalized" quadratic residue (it worked even if the two input arguments are not co-prime). It is now modified to compute the Legendre symbol.
 A new routine quadres is used to compute the "generalized" quadratic residue. New and Improved Functionalities:

 • piecewise:
 A new implementation of piecewise functions which has significant increase in functionalities. The new piecewise function is built upon a new theory of algebraization of distributions based on being able to compute with normal forms of these distributions.
 > p:=piecewise(x<0, -1, x>1, 2*x, x^2);
 ${p}{≔}\left\{\begin{array}{cc}{-1}& {x}{<}{0}\\ {2}{}{x}& {1}{<}{x}\\ {{x}}^{{2}}& {\mathrm{otherwise}}\end{array}\right\$ (32)
 support for integration,
 > int(p,x);
 $\left\{\begin{array}{cc}{-}{x}& {x}{\le }{0}\\ \frac{{{x}}^{{3}}}{{3}}& {x}{\le }{1}\\ {{x}}^{{2}}{-}\frac{{2}}{{3}}& {1}{<}{x}\end{array}\right\$ (33)
 differentiation,
 > diff(p,x);
 $\left\{\begin{array}{cc}{0}& {x}{<}{0}\\ {\mathrm{undefined}}& {x}{=}{0}\\ {2}{}{x}& {x}{<}{1}\\ {\mathrm{undefined}}& {x}{=}{1}\\ {2}& {1}{<}{x}\end{array}\right\$ (34)
 ordinary differential equations
 > dsolve( diff(y(x),x)+p*y(x), y(x));
 ${y}{}\left({x}\right){=}\left\{\begin{array}{cc}{{ⅇ}}^{{x}}{}\mathrm{c__1}& {x}{<}{0}\\ {{ⅇ}}^{{-}\frac{{{x}}^{{3}}}{{3}}}{}\mathrm{c__1}& {x}{<}{1}\\ {{ⅇ}}^{\frac{{2}}{{3}}{-}{{x}}^{{2}}}{}\mathrm{c__1}& {1}{\le }{x}\end{array}\right\$ (35)
 simplification
 > simplify(p*x);
 $\left(\left\{\begin{array}{cc}{-1}& {x}{<}{0}\\ {{x}}^{{2}}& {x}{\le }{1}\\ {2}{}{x}& {1}{<}{x}\end{array}\right\\right){}{x}$ (36)
 • Solve:
 A new solver which handles many new classes of problems has been written.
 The canonical example for the new algorithm:
 > eqns := {x^a*y^b-U, 1+mu*x^a*a/x*y^b, 1+mu*x^a*y^b*b/y};
 ${\mathrm{eqns}}{≔}\left\{{1}{+}\frac{{\mathrm{\mu }}{}{{x}}^{{a}}{}{a}{}{{y}}^{{b}}}{{x}}{,}{1}{+}\frac{{\mathrm{\mu }}{}{{x}}^{{a}}{}{{y}}^{{b}}{}{b}}{{y}}{,}{{x}}^{{a}}{}{{y}}^{{b}}{-}{U}\right\}$ (37)
 > solve( eqns, {x,y,mu} );
 $\left\{{\mathrm{\mu }}{=}{-}\frac{{{ⅇ}}^{\frac{{\mathrm{ln}}{}\left(\frac{{b}}{{a}}\right){}{a}{+}{\mathrm{ln}}{}\left({U}\right)}{{b}{+}{a}}}}{{U}{}{b}}{,}{x}{=}{{ⅇ}}^{{-}\frac{{\mathrm{ln}}{}\left(\frac{{b}}{{a}}\right){}{b}{-}{\mathrm{ln}}{}\left({U}\right)}{{b}{+}{a}}}{,}{y}{=}{{ⅇ}}^{\frac{{\mathrm{ln}}{}\left(\frac{{b}}{{a}}\right){}{a}{+}{\mathrm{ln}}{}\left({U}\right)}{{b}{+}{a}}}\right\}$ (38)
 solving systems of inequalities:
 > solve( {x^2<1, y^2<=1, x+y<1/2}, {x,y} );
 $\left\{{-1}{\le }{y}{,}{y}{\le }{-}\frac{{1}}{{2}}{,}{-1}{<}{x}{,}{x}{<}{1}\right\}{,}\left\{{y}{\le }{1}{,}{-1}{<}{x}{,}{-}\frac{{1}}{{2}}{<}{y}{,}{x}{<}\frac{{1}}{{2}}{-}{y}\right\}$ (39)
 equations with inverse trigonometric functions:
 > solve(arccos(x) - arctan(x), {x});
 $\left\{{x}{=}\frac{\sqrt{{-}{2}{+}{2}{}\sqrt{{5}}}}{{2}}\right\}$ (40)
 • PDE solver, ODE solver:
 The PDE solver pdesolve produces closed form solutions for certain classes of partial differential equations.
 Lagrange equations: Non-homogeneity affine in the dependent variable.
 > A:='A': B:='B': C:='C':
 > pdsolve( (x+A)*diff(U(x,y),x) + (y+B)*diff(U(x,y),y) = U(x,y)+C, U(x,y) );
 ${U}{}\left({x}{,}{y}\right){=}\mathrm{f__1}{}\left(\frac{{y}{+}{B}}{{x}{+}{A}}\right){}{A}{+}\mathrm{f__1}{}\left(\frac{{y}{+}{B}}{{x}{+}{A}}\right){}{x}{-}{C}$ (41)
 The ODE solver dsolve is now able to solve Riemann-Papperitz equations.
 > eq:=18*(x-1)^2*(x-4)*diff(y(x),x,x)+27*(x-1)*(x-2)* diff(y(x),x)+(x+80)*y(x):
 > dsolve(eq,y(x));
 ${y}{}\left({x}\right){=}\frac{\mathrm{c__1}{}{\mathrm{hypergeom}}{}\left(\left[{-}\frac{{5}}{{6}}{,}{-}\frac{{2}}{{3}}\right]{,}\left[{-}\frac{{3}}{{2}}\right]{,}\frac{{x}}{{3}}{-}\frac{{1}}{{3}}\right)}{{x}{-}{1}}{+}\mathrm{c__2}{}{\left({x}{-}{1}\right)}^{{3}}{{2}}}{}{\mathrm{hypergeom}}{}\left(\left[\frac{{5}}{{3}}{,}\frac{{11}}{{6}}\right]{,}\left[\frac{{7}}{{2}}\right]{,}\frac{{x}}{{3}}{-}\frac{{1}}{{3}}\right)$ (42)
 • Integration:
 Significant improvements to elliptic integration. These provide more elegant and robust solutions to a wider range of problems.
 > assume(k>1,1-k^2<0);
 > int(1/sqrt((1-x^2)*(1-k^2*x^2)),x=0..1);
 ${-}\frac{{I}{}{\mathrm{EllipticK}}{}\left(\frac{\sqrt{{{\mathrm{k~}}}^{{2}}{-}{1}}}{{\mathrm{k~}}}\right)}{{\mathrm{k~}}}{+}\frac{{\mathrm{EllipticK}}{}\left(\frac{{1}}{{\mathrm{k~}}}\right)}{{\mathrm{k~}}}$ (43)
 > k := 'k':
 Integrals containing a general hypergeometric function.
 > int(z*hypergeom([3,4],,z),z);
 $\frac{{2}{}{z}{}{\mathrm{hypergeom}}{}\left(\left[{2}{,}{3}\right]{,}\left[{4}\right]{,}{z}\right)}{{3}}{-}{\mathrm{hypergeom}}{}\left(\left[{1}{,}{2}\right]{,}\left[{3}\right]{,}{z}\right)$ (44)
 • limit:
 Limit now does a better job in zero recognition.
 > f := [sec,csc,sinh,cosh,tanh,coth,sech,csch]:
 > f := map(proc(a) (a(x+h)-a(x))/h end,f):
 > g := map(limit, f, h=0);
 ${g}{≔}\left[\frac{{\mathrm{sin}}{}\left({x}\right)}{{{\mathrm{cos}}{}\left({x}\right)}^{{2}}}{,}{-}\frac{{\mathrm{cos}}{}\left({x}\right)}{{{\mathrm{sin}}{}\left({x}\right)}^{{2}}}{,}\frac{{{ⅇ}}^{{x}}}{{2}}{+}\frac{{{ⅇ}}^{{-}{x}}}{{2}}{,}\frac{{{ⅇ}}^{{x}}}{{2}}{-}\frac{{{ⅇ}}^{{-}{x}}}{{2}}{,}\frac{{4}{}{{ⅇ}}^{{2}{}{x}}}{{\left({{ⅇ}}^{{2}{}{x}}\right)}^{{2}}{+}{2}{}{{ⅇ}}^{{2}{}{x}}{+}{1}}{,}{-}\frac{{4}{}{{ⅇ}}^{{2}{}{x}}}{{\left({{ⅇ}}^{{2}{}{x}}\right)}^{{2}}{-}{2}{}{{ⅇ}}^{{2}{}{x}}{+}{1}}{,}\frac{{-}{2}{}{{ⅇ}}^{{x}}{+}{2}{}{{ⅇ}}^{{-}{x}}}{{\left({{ⅇ}}^{{x}}\right)}^{{2}}{+}{2}{}{{ⅇ}}^{{-}{x}}{}{{ⅇ}}^{{x}}{+}{\left({{ⅇ}}^{{-}{x}}\right)}^{{2}}}{,}\frac{{-}{2}{}{{ⅇ}}^{{x}}{-}{2}{}{{ⅇ}}^{{-}{x}}}{{\left({{ⅇ}}^{{x}}\right)}^{{2}}{-}{2}{}{{ⅇ}}^{{-}{x}}{}{{ⅇ}}^{{x}}{+}{\left({{ⅇ}}^{{-}{x}}\right)}^{{2}}}\right]$ (45)
 It is also better at recognizing undefined limits.
 > limit((-1+W+1/(1+W))^(1/2)/W, W=0);
 ${\mathrm{undefined}}$ (46)
 > limit(sqrt(1-cos(x))/x*sqrt(2),x=0);
 ${\mathrm{undefined}}$ (47)
 • sum:
 With the implementation of the Moenck algorithm, Maple is able to sum every rational polynomial with an ever expanding coefficient field.
 > sum(1/(x^3+x+1), x);
 ${\sum }_{{\mathrm{_α}}{=}{\mathrm{RootOf}}{}\left({{\mathrm{_Z}}}^{{3}}{+}{\mathrm{_Z}}{+}{1}\right)}{}\left(\frac{{6}}{{31}}{}{{\mathrm{_α}}}^{{2}}{-}\frac{{9}}{{31}}{}{\mathrm{_α}}{+}\frac{{4}}{{31}}\right){}{\mathrm{\Psi }}{}\left({x}{-}{\mathrm{_α}}\right)$ (48)
 • product:
 The product function is improved so that many more infinite products are now computed.   Option "continuous" is added to instruct product not to look for discontinuities.
 > product((n^2-4)/(n^2-1),n=3..infinity);
 $\frac{{1}}{{4}}$ (49)
 > product(1+(z-z^2)/(n+n^2),n=1..infinity,continuous);
 $\frac{{\mathrm{sin}}{}\left({\mathrm{\pi }}{}\left({1}{+}{z}\right)\right)}{{z}{}\left({z}{-}{1}\right){}{\mathrm{\pi }}}$ (50)
 • Special functions:
 Many more special functions are implemented and integrated into Maple: Bessel family:AiryAi, AiryBi, BesselI, BesselJ, BesselK, BesselY, HankelH1, HankelH2, KelvinBer, KelvinBei, KelvinKer, KelvinKei, KelvinHer, KelvinHei, StruveH, StruveL, AngerJ, WeberE.
 Elliptic and Inverse Elliptic: EllipticK, EllipticE, EllipticPi, EllipticF, EllipticE, EllipticPi, EllipticCK, EllipticCE, EllipticCPi, EllipticNome
 Jacobi Amplitude and  Elliptic functions: JacobiAM, JacobiSN, JacobiCN, JacobiDN, JacobiNS, JacobiNC, JacobiND, JacobiSC, JacobiCS, JacobiSD, JacobiDS, JacobiCD, JacobiDC
 Jacobi Theta Functions: JacobiTheta1, JacobiTheta2, JacobiTheta3, JacobiTheta4
 Weierstrass P, P', zeta and sigma functions: WeierstrassP, WeierstrassPPrime, WeierstrassZeta, WeierstrassSigma
 General Pochhammer function: pochhammer
 > series(AngerJ(1/3,x),x,4);
 $\frac{{3}{}\sqrt{{3}}}{{2}{}{\mathrm{\pi }}}{+}\frac{{9}}{{16}}{}\frac{\sqrt{{3}}}{{\mathrm{\pi }}}{}{x}{-}\frac{{27}}{{70}}{}\frac{\sqrt{{3}}}{{\mathrm{\pi }}}{}{{x}}^{{2}}{-}\frac{{81}}{{1280}}{}\frac{\sqrt{{3}}}{{\mathrm{\pi }}}{}{{x}}^{{3}}{+}{O}{}\left({{x}}^{{4}}\right)$ (51)
 > diff(HankelH2(v,x^2),x);
 ${2}{}\left({-}{\mathrm{HankelH2}}{}\left({v}{+}{1}{,}{{x}}^{{2}}\right){+}\frac{{v}{}{\mathrm{HankelH2}}{}\left({v}{,}{{x}}^{{2}}\right)}{{{x}}^{{2}}}\right){}{x}$ (52)
 • Branch Cut:
 Maple has been continuously improved in this respect. Basic routines such as simplify, expand, combine, ... have been enhanced to work correctly with respect to brach cut.
 > assume( xpos>0, ypos>0, apos>0);assume(npos,posint);
 The simplify function no longer transforms exp(x)^y to exp(x*y) by default unless always correct.
 > simplify( exp(xpos)^ypos ), simplify( exp(x)^y );
 ${{ⅇ}}^{{\mathrm{ypos~}}{}{\mathrm{xpos~}}}{,}{\left({{ⅇ}}^{{x}}\right)}^{{y}}$ (53)
 Similarly, simplify no longer transforms ln(x^y) to y*ln(x) by default:
 > simplify( ln(xpos^ypos)),simplify( ln(x^y));
 ${\mathrm{ypos~}}{}{\mathrm{ln}}{}\left({\mathrm{xpos~}}\right){,}{\mathrm{ln}}{}\left({{x}}^{{y}}\right)$ (54)
 Nor does it convert ln(exp(x)) to x and ln(x+y) to ln(x)+ln(y):
 > simplify(ln(exp(xpos))), simplify(ln(exp(x)));
 ${\mathrm{xpos~}}{,}{\mathrm{ln}}{}\left({{ⅇ}}^{{x}}\right)$ (55)
 > simplify(ln(xpos*ypos)), simplify(ln(x*y));
 ${\mathrm{ln}}{}\left({\mathrm{ypos~}}\right){+}{\mathrm{ln}}{}\left({\mathrm{xpos~}}\right){,}{\mathrm{ln}}{}\left({x}{}{y}\right)$ (56)
 > xpos:='xpox': ypos:='ypos': apos:='apos': npos:='npos':
 For expand, when the environment variable _EnvExpandln is set to false allows the routine to always work correctly with respect to branch cut:
 > _EnvExpandln := false:
 > expand(log(a^x));
 ${\mathrm{ln}}{}\left({{a}}^{{x}}\right)$ (57)
 > expand(ln(1/z));
 ${\mathrm{ln}}{}\left(\frac{{1}}{{z}}\right)$ (58)
 > expand(log(a^x));
 ${\mathrm{ln}}{}\left({{a}}^{{x}}\right)$ (59)
 combine: the routine can now take options, such as 'symbolic'.  Note that the answer using the symbolic option is not mathematically equivalent to the input over the whole complex plane, but allows for simplifications using the principal branch.
 > combine(ln(a)+ln(b), ln), combine(ln(a)+ln(b),ln, symbolic);
 ${\mathrm{ln}}{}\left({a}\right){+}{\mathrm{ln}}{}\left({b}\right){,}{\mathrm{ln}}{}\left({a}{}{b}\right)$ (60)
 There are other changes in the direction of taking greater care with branch cuts:
 The function series() now returns:
 > series(ln(x),x);
 ${\mathrm{ln}}{}\left({x}\right)$ (61)
 The routine radnormal normalizes an expression containing radical numbers.  It has been greatly improved, and become more reliable. The option 'rationalized' is added for rationalizing the denominator.
 > a := ((x^2+2*x*2^(1/2)-2*x*3^(1/2)+5-2*2^(1/2)*3^(1/2))/ (x^2-2*x*3^(1/2)+1));
 ${a}{≔}\frac{{{x}}^{{2}}{+}{2}{}{x}{}\sqrt{{2}}{-}{2}{}{x}{}\sqrt{{3}}{+}{5}{-}{2}{}\sqrt{{2}}{}\sqrt{{3}}}{{{x}}^{{2}}{-}{2}{}{x}{}\sqrt{{3}}{+}{1}}$ (62)
 $\frac{{x}{+}\sqrt{{2}}{-}\sqrt{{3}}}{{x}{-}\sqrt{{3}}{-}\sqrt{{2}}}$ (63)
 > c := 1/(2^(1/2)+3^(1/2)+6^(1/2));
 ${c}{≔}\frac{{1}}{\sqrt{{2}}{+}\sqrt{{3}}{+}\sqrt{{6}}}$ (64)
 $\frac{{5}{}\sqrt{{3}}}{{23}}{-}\frac{\sqrt{{2}}{}\sqrt{{3}}}{{23}}{-}\frac{{12}}{{23}}{+}\frac{{7}{}\sqrt{{2}}}{{23}}$ (65)
 • The assume System:
 Increased power and robustness in the assume facility provides solutions to a wider range of problems. The assume system is further incorporated into Maple.
 > is(2*(-1-I)^(1/2)*(-1+I)^(1/2) <> 0);
 ${\mathrm{true}}$ (66)
 > assume(n, integer);
 > cos(n*Pi);
 ${\left({-1}\right)}^{{\mathrm{n~}}}$ (67)
 > cos(n*Pi);
 ${1}$ (68)
 > sin(n*Pi);
 ${0}$ (69)
 > n := 'n':
 • convert:
 Many more routines are added to help conversion of a given expression to a different form:

 convert an expression having Heaviside, abs, signum, or If to a piecewise function. convert a piecewise function to a Heaviside expression. convert a piecewise function to an ordered list which represents the given piecewise-defined function. convert an expression with abs to signum. convert an expression with signum to abs. converts an expression with Bessel functions of various forms into Airy functions. replace the functional form of any integral transforms occurring in an expression with their integral representations. perform a partial fraction decomposition of a rational function in a given variable after completely factoring the denominator into linear factors over its splitting field.

 > convert(abs(1-abs(x)),piecewise);
 $\left\{\begin{array}{cc}{-}{1}{-}{x}& {x}{\le }{-1}\\ {x}{+}{1}& {x}{<}{0}\\ {1}{-}{x}& {x}{<}{1}\\ {x}{-}{1}& {1}{\le }{x}\end{array}\right\$ (70)
 > convert(HankelH2(-2/3,z),Airy);
 ${-}\frac{\left(\left(\frac{{I}{}{{3}}^{{5}}{{6}}}}{{3}}{+}{{3}}^{{1}}{{3}}}\right){}{\mathrm{AiryAi}}{}\left({1}{,}{-}\frac{{{3}}^{{2}}{{3}}}{}{{2}}^{{1}}{{3}}}{}{{z}}^{{2}}{{3}}}}{{2}}\right){+}\left({I}{}{{3}}^{{1}}{{3}}}{-}\frac{{{3}}^{{5}}{{6}}}}{{3}}\right){}{\mathrm{AiryBi}}{}\left({1}{,}{-}\frac{{{3}}^{{2}}{{3}}}{}{{2}}^{{1}}{{3}}}{}{{z}}^{{2}}{{3}}}}{{2}}\right)\right){}{{2}}^{{2}}{{3}}}}{{2}{}{{z}}^{{2}}{{3}}}}$ (71)
 > convert((x^2+1)/(x^2+x+1), fullparfrac, x);
 ${1}{+}\left({\sum }_{{\mathrm{_α}}{=}{\mathrm{RootOf}}{}\left({{\mathrm{_Z}}}^{{2}}{+}{\mathrm{_Z}}{+}{1}\right)}{}\frac{{-}\frac{{\mathrm{_α}}}{{3}}{-}\frac{{2}}{{3}}}{{x}{-}{\mathrm{_α}}}\right)$ (72)
 • Coordinate Systems:
 A large library of 2D and 3D coordinate systems which is integrated with other packages and functions such as linalg and plot, is provided.
 > restart;
 > linalg[ grad ] ( f(r,theta,z), [r,theta,z], coords=cylindrical);
 $\left[\begin{array}{ccc}\frac{{\partial }}{{\partial }{r}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{f}{}\left({r}{,}{\mathrm{\theta }}{,}{z}\right)& \frac{\frac{{\partial }}{{\partial }{\mathrm{\theta }}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{f}{}\left({r}{,}{\mathrm{\theta }}{,}{z}\right)}{{r}}& \frac{{\partial }}{{\partial }{z}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{f}{}\left({r}{,}{\mathrm{\theta }}{,}{z}\right)\end{array}\right]$ (73)
 • mod and modp2: Computation over the integers modulo m.
 Frobenius, Inverse, Issimilar and Linsolve matrix calculations modulo integers are implemented.
 > A := matrix([[1,2,3],[4,5,6],[7,8,9]]):
 > B := matrix([[0,0,0], [1,0,-4], [0,1,-7]]):
 > Issimilar(A,B,P) mod 11;
 ${\mathrm{true}}$ (74)
 > eval(P);
 $\left[\begin{array}{ccc}{8}& {6}& {8}\\ {8}& {2}& {3}\\ {1}& {0}& {0}\end{array}\right]$ (75)
 The modp2 function offers fast arithmetic for bivariate polynomials over the integers modulo p.
 > a:=(x^3*y^2+1)*(x^2*y^2+1)^2*(x+y+1)^3*(x*y+2)^4:
 > a1:=Expand(a) mod 3: Sqrfree(a1) mod 3;
 $\left[{1}{,}\left[\left[{{x}}^{{3}}{}{{y}}^{{2}}{+}{1}{,}{1}\right]{,}\left[{{x}}^{{2}}{}{{y}}^{{2}}{+}{1}{,}{2}\right]{,}\left[{x}{+}{y}{+}{1}{,}{3}\right]{,}\left[{x}{}{y}{+}{2}{,}{4}\right]\right]\right]$ (76)
 • implicitdiff:
 The function implicitdiff is used to differentiate a function defined by an equation.
 > f := x^2+y^3=1;
 ${f}{≔}{{y}}^{{3}}{+}{{x}}^{{2}}{=}{1}$ (77)
 > implicitdiff(f,y,x);
 ${-}\frac{{2}{}{x}}{{3}{}{{y}}^{{2}}}$ (78)
 > implicitdiff(f,x,y);
 ${-}\frac{{3}{}{{y}}^{{2}}}{{2}{}{x}}$ (79) Other improvements:

 The following describes a few other improvements and new functionalities in release 4. The list is by no means exhaustive. Lots of effort has been put into improving product quality.
 • compoly: The routine compoly now handles more than one variable (as a second argument).
 > p := -2-7*x+7*y-x^2+2*x*y-y^2;
 ${p}{≔}{-}{{x}}^{{2}}{+}{2}{}{x}{}{y}{-}{{y}}^{{2}}{-}{7}{}{x}{+}{7}{}{y}{-}{2}$ (80)
 > r := compoly(p,{x,y});
 ${r}{≔}{-}{{x}}^{{2}}{+}{7}{}{x}{-}{2}{,}{x}{=}{x}{-}{y}{+}{7}$ (81)
 > subs( r, r );
 ${-}{\left({x}{-}{y}{+}{7}\right)}^{{2}}{+}{7}{}{x}{-}{7}{}{y}{+}{47}$ (82)
 > expand(-p);
 ${{x}}^{{2}}{-}{2}{}{x}{}{y}{+}{{y}}^{{2}}{+}{7}{}{x}{-}{7}{}{y}{+}{2}$ (83)
 • RootOf: RootOf's are denested, if possible.
 > RootOf( x+ RootOf(_Z^2-x), x);
 ${\mathrm{RootOf}}{}\left({{\mathrm{_Z}}}^{{2}}{-}{\mathrm{_Z}}\right)$ (84)
 • splits: A new function splits which is to split what factors is to factor.
 > with(polytools,splits):
 > splits( x^2+x+1, x);
 $\left[{1}{,}\left[\left[{x}{-}{\mathrm{RootOf}}{}\left({{\mathrm{_Z}}}^{{2}}{+}{\mathrm{_Z}}{+}{1}\right){,}{1}\right]{,}\left[{x}{+}{1}{+}{\mathrm{RootOf}}{}\left({{\mathrm{_Z}}}^{{2}}{+}{\mathrm{_Z}}{+}{1}\right){,}{1}\right]\right]\right]$ (85)
 • root: The routine root computes n-th root of a given expression.
 > root(3.0+4.0*I);
 ${1.628937146}{+}{0.5201745022}{}{I}$ (86)
 > assume(x>0);
 > root(16*x^3*y);
 ${2}{}{\mathrm{x~}}{}{{2}}^{{1}}{{3}}}{}{{y}}^{{1}}{{3}}}$ (87)
 > assume(x<0);
 > root(16*x^3*y);
 ${-}{2}{}{\mathrm{x~}}{}{\left({-}{2}{}{y}\right)}^{{1}}{{3}}}$ (88)
 > x:='x':
 • roots: The function roots works with input that has parameters. It returns the roots that do not contain parameters.
 > roots((x^2-1)*(x-a),x);
 $\left[\left[{-1}{,}{1}\right]{,}\left[{1}{,}{1}\right]\right]$ (89)
 • surd: The function surd is extended over the complex plane.
 > surd(-1+2*I,3);
 $\left({-}\frac{{1}}{{2}}{+}\frac{{I}{}\sqrt{{3}}}{{2}}\right){}{\left({-1}{+}{2}{}{I}\right)}^{{1}}{{3}}}$ (90)
 • collect: The function collect was enhanced to do general collection on forms previously lacking support, such as diff, D, and trigonometric functions.
 > f := sin(x)^2*x*diff(y(x),x)-x*diff(diff(y(x),x),x)-x*sin(x)-sin(x)^2* tan(x)*diff(y(x),x)-cos(x)*sin(x)-diff(diff(y(x),x),x)+sin(x)^2* diff(y(x),x,x)+cos(x)*diff(y(x),x,x);
 ${f}{≔}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{}{x}{}\left(\frac{{ⅆ}}{{ⅆ}{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){-}{x}{}\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){-}{x}{}{\mathrm{sin}}{}\left({x}\right){-}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{}{\mathrm{tan}}{}\left({x}\right){}\left(\frac{{ⅆ}}{{ⅆ}{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){-}{\mathrm{cos}}{}\left({x}\right){}{\mathrm{sin}}{}\left({x}\right){-}\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right){+}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{}\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){+}{\mathrm{cos}}{}\left({x}\right){}\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right)$ (91)
 > collect(f,diff);
 $\left({{\mathrm{sin}}{}\left({x}\right)}^{{2}}{+}{\mathrm{cos}}{}\left({x}\right){-}{x}{-}{1}\right){}\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){+}\left({-}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{}{\mathrm{tan}}{}\left({x}\right){+}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{}{x}\right){}\left(\frac{{ⅆ}}{{ⅆ}{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){-}{\mathrm{cos}}{}\left({x}\right){}{\mathrm{sin}}{}\left({x}\right){-}{x}{}{\mathrm{sin}}{}\left({x}\right)$ (92)
 > collect(f,[sin,diff]);
 $\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right){+}\left({-}{\mathrm{tan}}{}\left({x}\right){+}{x}\right){}\left(\frac{{ⅆ}}{{ⅆ}{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right)\right){}{{\mathrm{sin}}{}\left({x}\right)}^{{2}}{+}\left({-}{\mathrm{cos}}{}\left({x}\right){-}{x}\right){}{\mathrm{sin}}{}\left({x}\right){+}\left({\mathrm{cos}}{}\left({x}\right){-}{x}{-}{1}\right){}\left(\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{x}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right)$ (93)
 • simplify/trig: modified such that tan(x) does not get simplified to sin(x)/cos(x) if there is only tan or sec in the expression.
 > simplify(tan(x));
 ${\mathrm{tan}}{}\left({x}\right)$ (94)
 > simplify(tan(x)-tan(x)^2);
 ${-}{\mathrm{tan}}{}\left({x}\right){}\left({\mathrm{tan}}{}\left({x}\right){-}{1}\right)$ (95)
 • combine/arctan: combine arctangent terms:
 > f := arctan(1/3) + arctan(1/5) + arctan(1/7) - Pi/4 + arctan(1/8);
 ${f}{≔}{\mathrm{arctan}}{}\left(\frac{{1}}{{3}}\right){+}{\mathrm{arctan}}{}\left(\frac{{1}}{{5}}\right){+}{\mathrm{arctan}}{}\left(\frac{{1}}{{7}}\right){-}\frac{{\mathrm{\pi }}}{{4}}{+}{\mathrm{arctan}}{}\left(\frac{{1}}{{8}}\right)$ (96)
 > combine(f,arctan);
 ${0}$ (97)
 > f := arctan(x)+arctan(1/x);
 ${f}{≔}{\mathrm{arctan}}{}\left({x}\right){+}{\mathrm{arctan}}{}\left(\frac{{1}}{{x}}\right)$ (98)
 > combine(f);
 $\frac{{\mathrm{csgn}}{}\left(\frac{{{x}}^{{2}}{+}{1}}{{x}}\right){}{\mathrm{\pi }}}{{2}}$ (99)
 > assume(x>0);
 > combine(f,arctan);
 $\frac{{\mathrm{\pi }}}{{2}}$ (100)
 • binomial: The function binomial(n,m) returns 0 if n-m is a negative integer.
 > assume(npos,posint):
 > binomial(npos,npos+5);
 ${0}$ (101)
 • Function name changes:
 Lambert's W function: W --> LambertW.
 Elliptic integral functions:

 LegendreF(k,z) = EllipticF(k,z) LegendreKc(k) = EllipticK(k) LegendreKc1(k) = EllipticCK(k) LegendreE(k,z) = EllipticE(k,z) LegendreEc(k) = EllipticE(k) LegendreEc1(k) = EllipticCE(k) LegendrePi(k,nu,z) = EllipticPi(k,nu,z) LegendrePic(k,nu) = EllipticPi(k,nu) LegendrePic1(k,nu) = EllipticCPi(k,nu)