Differential Equations - Maple Help

Home : Support : Online Help : System : Information : Updates : Maple 13 : Differential Equations

Updates to Differential Equation (DE) Solvers in Maple 13

Summary

 • The theme for exact, symbolic Ordinary Differential Equation solving in Maple 13 is the exploration of alternative methods for finding solutions to DE problems that are beyond the scope of standard methods or for which standard methods give overly complicated results. For example, important nonlinear ODE families, including some which do not have point symmetries, can be solved by constructing and then solving related linear ODEs of higher order. Similarly, by exploring symmetries in non-standard ways, the solution for various ODE initial value problems can be expressed in simple form even when the ODE general solution cannot be computed. These abilities are now built in to the standard DE solver (dsolve), and the techniques are also available separately through a variety of new tools.
 • For Partial Differential Equations, the functionality of most of the symmetry commands of PDEtools has been significantly expanded in many respects and four new commands were added. Among the novelties there is one new command for the fast computation of polynomial solutions to linear and nonlinear PDE systems, and the internal PDEtools Library, with 45 specialized routines for programming purposes, is now available.
 • For numerical solutions of ODEs, improvements have been made to event handling and to accuracy and error control for ODE and index-1 DAE problems.

Exact Solutions

Ordinary Differential Equations (ODEs)

 The dsolve command can now solve varied problems formerly out of reach, as well as compute remarkably simpler solutions for various ODE families for which former solutions were too complicated.

New solutions for nonlinear ODEs, from 1st to 5th order: linearization by differentiation

 • In some cases, a nonlinear ODE that cannot be solved using standard methods can still be multiplied by an appropriate factor so that after differentiation (one or two times), the resulting expression contains a linear ODE of higher order as a factor. Solving this linear ODE permits expressing the solution to the original problem explicitly and in rather compact manner.
 Examples
 > PDEtools:-declare(y(x), prime=x);
 ${y}{}\left({x}\right){}{\mathrm{will now be displayed as}}{}{y}$
 ${\mathrm{derivatives with respect to}}{}{x}{}{\mathrm{of functions of one variable will now be displayed with \text{'}}}$ (1)
 The following shows a first order ODE nonlinear in $\mathrm{y\text{'}}$, as an arbitrary function $G$ of two arguments, and its corresponding new solution.
 > ode[1] := G((2*y(x)-2+diff(y(x),x)*x)*x^3/(3*x^4+2*x^3),-x^3*(-y(x)+1+(x+1)*diff(y(x),x))/(3*x+2)) = 0;
 ${{\mathrm{ode}}}_{{1}}{≔}{G}{}\left(\frac{\left({\mathrm{y\text{'}}}{}{x}{+}{2}{}{y}{-}{2}\right){}{{x}}^{{3}}}{{3}{}{{x}}^{{4}}{+}{2}{}{{x}}^{{3}}}{,}{-}\frac{{{x}}^{{3}}{}\left({-}{y}{+}{1}{+}\left({x}{+}{1}\right){}{\mathrm{y\text{'}}}\right)}{{3}{}{x}{+}{2}}\right){=}{0}$ (2)
 > sol[1] := dsolve(ode[1], implicit);
 ${{\mathrm{sol}}}_{{1}}{≔}{G}{}\left({-}\frac{{-}{y}{+}\frac{\mathrm{c__1}}{{{x}}^{{2}}}{+}{1}}{{x}{+}{1}}{,}\mathrm{c__1}\right){=}{0}$ (3)
 So, for any form of $G$ in ode[1], the same $G$ in the output above solves the problem. ODE solutions can be verified as usual with odetest.
 > odetest(sol[1], ode[1]);
 ${0}$ (4)
 Here are two nonlinear ODE examples, of third and fourth order, extracted from scientific publications related to applications, and their new solutions computed quickly and in compact manner using linearization by differentiation.
 > ode[2] := diff(y(x),x,x,x) = 1/8*(-8*x*diff(y(x),x,x)*diff(y(x),x) + 4*x^2*diff(y(x),x,x)^2 + diff(y(x),x)^2 + 12*y(x))/x^2/diff(y(x),x);
 ${{\mathrm{ode}}}_{{2}}{≔}{\mathrm{y\text{'}\text{'}\text{'}}}{=}\frac{{4}{}{{x}}^{{2}}{}{{\mathrm{y\text{'}\text{'}}}}^{{2}}{-}{8}{}{x}{}{\mathrm{y\text{'}\text{'}}}{}{\mathrm{y\text{'}}}{+}{{\mathrm{y\text{'}}}}^{{2}}{+}{12}{}{y}}{{8}{}{{x}}^{{2}}{}{\mathrm{y\text{'}}}}$ (5)
 > dsolve(ode[2]);
 ${y}{=}{{x}}^{{2}}{+}\frac{{4}{}{{x}}^{{3}}{{2}}}{}\mathrm{c__1}}{{3}}{-}{4}{}\sqrt{{x}}{}\mathrm{c__2}{+}\mathrm{c__3}{}{x}{-}\frac{{4}{}\mathrm{c__1}{}\mathrm{c__2}}{{3}}{-}\frac{{\mathrm{c__3}}^{{2}}}{{12}}$ (6)
 > ode[3] := diff(y(x),x,x,x,x) = 1/2*(2*diff(y(x),x,x,x)*diff(y(x),x)-diff(y(x),x,x)^2+c^4*y(x)^2)/y(x);
 ${{\mathrm{ode}}}_{{3}}{≔}{\mathrm{y\text{'}\text{'}\text{'}\text{'}}}{=}\frac{{{c}}^{{4}}{}{{y}}^{{2}}{+}{2}{}{\mathrm{y\text{'}\text{'}\text{'}}}{}{\mathrm{y\text{'}}}{-}{{\mathrm{y\text{'}\text{'}}}}^{{2}}}{{2}{}{y}}$ (7)
 > dsolve(ode[3]);
 ${y}{=}\mathrm{c__1}{+}\frac{\left({\mathrm{c__1}}^{{2}}{-}{2}{}{\mathrm{c__3}}^{{2}}{-}{2}{}{\mathrm{c__4}}^{{2}}\right){}{{ⅇ}}^{{-}{c}{}{x}}}{{8}{}\mathrm{c__2}}{+}\mathrm{c__2}{}{{ⅇ}}^{{c}{}{x}}{+}\mathrm{c__3}{}{\mathrm{sin}}{}\left({c}{}{x}\right){+}\mathrm{c__4}{}{\mathrm{cos}}{}\left({c}{}{x}\right)$ (8)

New ODE-IVP solutions from the ODE symmetries

 • For various nonlinear ODE initial value problems (ODE-IVP), a rational solution exists, but the general ODE solution involves elliptic or special functions, making it difficult to compute the simpler form when adjusting the integration constants to match the initial conditions. In Maple 13, dsolve automatically explores the ODE symmetries to compute an ODE-IVP solution in its simpler rational form directly, even if the general solution is entirely out of reach.
 Examples
 > ode[4] := diff(y(x), x, x) + 3*(diff(y(x), x))/x - 8*y(x)^3/x^6 = 0;
 ${{\mathrm{ode}}}_{{4}}{≔}{\mathrm{y\text{'}\text{'}}}{+}\frac{{3}{}{\mathrm{y\text{'}}}}{{x}}{-}\frac{{8}{}{{y}}^{{3}}}{{{x}}^{{6}}}{=}{0}$ (9)
 > ic[4] := y(1) = -1/2, D(y)(1) = -1/2;
 ${{\mathrm{ic}}}_{{4}}{≔}{y}{}\left({1}\right){=}{-}\frac{{1}}{{2}}{,}{\mathrm{D}}{}\left({y}\right){}\left({1}\right){=}{-}\frac{{1}}{{2}}$ (10)
 The general solution of ode[4] involves the inverse of an elliptic integral, represented by the elliptic function JacobiSN.
 > dsolve(ode[4]);
 ${y}{=}\mathrm{c__2}{}{\mathrm{JacobiSN}}{}\left(\left({-}\frac{{I}}{{{x}}^{{2}}}{+}\mathrm{c__1}\right){}\mathrm{c__2}{,}{I}\right)$ (11)
 It is not easy to adjust the integration constants $\mathrm{C1}$, $\mathrm{C2}$ so that the preceding solution satisfies the conditions y(1) = -1/2, D(y)(1) = -1/2. However, by exploring the ODE symmetries,
 > DEtools[symgen](ode[4]);
 $\left[{\mathrm{_ξ}}{=}{{x}}^{{3}}{,}{\mathrm{_η}}{=}{0}\right]{,}\left[{\mathrm{_ξ}}{=}\frac{{x}}{{2}}{,}{\mathrm{_η}}{=}{y}\right]$ (12)
 dsolve can compute directly the following simple solution to the whole ODE initial value problem.
 > sol_ic[4] := dsolve([ode[4], ic[4]]);
 ${{\mathrm{sol_ic}}}_{{4}}{≔}{y}{=}{-}\frac{{{x}}^{{2}}}{{{x}}^{{2}}{+}{1}}$ (13)
 You can use odetest to test solutions against the initial conditions.
 > odetest(sol_ic[4], [ode[4], ic[4]]);
 $\left[{0}{,}{0}{,}{0}\right]$ (14)
 > ode[5] := diff(y(x), x,x,x) - diff(y(x), x,x)*y(x) + diff(y(x),x)^2 = 0;
 ${{\mathrm{ode}}}_{{5}}{≔}{-}{\mathrm{y\text{'}\text{'}}}{}{y}{+}{{\mathrm{y\text{'}}}}^{{2}}{+}{\mathrm{y\text{'}\text{'}\text{'}}}{=}{0}$ (15)
 > ic[5] := y(0) = 1, D(y)(0) = 1/6;
 ${{\mathrm{ic}}}_{{5}}{≔}{y}{}\left({0}\right){=}{1}{,}{\mathrm{D}}{}\left({y}\right){}\left({0}\right){=}\frac{{1}}{{6}}$ (16)
 For ode[5] alone dsolve obtains only a reduction of order, which contains an ODE of Abel type for _g(_f) whose solution is not known.
 > dsolve(ode[5]);
 ${y}{=}\left({{ⅇ}}^{{\int }{\mathrm{_g}}{}\left({\mathrm{_f}}\right)\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_f}}{+}\mathrm{c__2}}\right)\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[\left\{{{\mathrm{_g}}}_{{\mathrm{_f}}}{=}\left({6}{}{\mathrm{_f}}{-}{1}\right){}{{\mathrm{_g}}{}\left({\mathrm{_f}}\right)}^{{3}}{+}\frac{\left({7}{}{\mathrm{_f}}{-}{1}\right){}{{\mathrm{_g}}{}\left({\mathrm{_f}}\right)}^{{2}}}{{\mathrm{_f}}}{+}\frac{{\mathrm{_g}}{}\left({\mathrm{_f}}\right)}{{\mathrm{_f}}}\right\}{,}\left\{{\mathrm{_f}}{=}\frac{{\mathrm{y\text{'}}}}{{{y}}^{{2}}}{,}{\mathrm{_g}}{}\left({\mathrm{_f}}\right){=}\frac{{{y}}^{{2}}}{\frac{{\mathrm{y\text{'}\text{'}}}{}{y}}{{\mathrm{y\text{'}}}}{-}{2}{}{\mathrm{y\text{'}}}}\right\}{,}\left\{{x}{=}{\int }\frac{{\mathrm{_g}}{}\left({\mathrm{_f}}\right)}{{\mathrm{_f}}{}{{ⅇ}}^{{\int }{\mathrm{_g}}{}\left({\mathrm{_f}}\right)\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_f}}{+}\mathrm{c__2}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_f}}{+}\mathrm{c__1}{,}{y}{=}{{ⅇ}}^{{\int }{\mathrm{_g}}{}\left({\mathrm{_f}}\right)\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_f}}{+}\mathrm{c__2}}\right\}\right]$ (17)
 This result is the best one achievable at present but there is no useful way to adjust it to match the conditions y(0) = 1, D(y)(0) = 1/6. In Maple 13, however, dsolve first detects the symmetries of ode[5] and instead of just failing to compute the general solution, it explores these symmetries, solving the problem as a whole.
 > sol_ic[5] := dsolve([ode[5], ic[5]]);
 ${{\mathrm{sol_ic}}}_{{5}}{≔}{y}{=}{-}\frac{{6}}{{x}{-}{6}}$ (18)
 > map(odetest, [sol_ic[5]], [ode[5], ic[5]]);
 $\left[\left[{0}{,}{0}{,}{0}\right]\right]$ (19)

New solutions for linear ODEs with non-rational coefficients

 • The existing routines in dsolve for this problem were optimized to solve more complicated problems and in simpler form, or using simpler special functions.
 Example
 > ode[6] := diff(y(x),x,x) + tan(x)*diff(y(x),x) + a^2*cos(x)^2*sin(x)^(2*n-2)*y(x) = 0;
 ${{\mathrm{ode}}}_{{6}}{≔}{\mathrm{y\text{'}\text{'}}}{+}{\mathrm{tan}}{}\left({x}\right){}{\mathrm{y\text{'}}}{+}{{a}}^{{2}}{}{{\mathrm{cos}}{}\left({x}\right)}^{{2}}{}{{\mathrm{sin}}{}\left({x}\right)}^{{2}{}{n}{-}{2}}{}{y}{=}{0}$ (20)
 For the ode[6], the solution in Maple 12 involves hypergeometric functions. In Maple 13, the solution is computed in terms of simpler Bessel functions.
 > dsolve(ode[6]);
 ${y}{=}\mathrm{c__1}{}\sqrt{{\mathrm{sin}}{}\left({x}\right)}{}{\mathrm{BesselJ}}{}\left(\frac{{1}}{{2}{}{n}}{,}\frac{{{\mathrm{sin}}{}\left({x}\right)}^{{n}}{}{a}}{{n}}\right){+}\mathrm{c__2}{}\sqrt{{\mathrm{sin}}{}\left({x}\right)}{}{\mathrm{BesselY}}{}\left(\frac{{1}}{{2}{}{n}}{,}\frac{{{\mathrm{sin}}{}\left({x}\right)}^{{n}}{}{a}}{{n}}\right)$ (21)

New solutions for nonlinear ODEs exploring dynamical symmetries

 • Maple's dsolve started exploring dynamical symmetries in 1997. The related solving approach, however, is algebraically complicated. For Maple 13, corresponding routines were enhanced substantially to handle these kinds of problems, taking advantage of the properties of subfamilies of these symmetries (for example, self-invariant contact symmetries). In this way, new or concretely simpler solutions can now be computed.
 Example
 > ode[7] := diff(y(x), x,x) = diff(y(x), x)+(ln(diff(y(x), x))-x)*diff(y(x), x)^2/(y(x)-diff(y(x), x));
 ${{\mathrm{ode}}}_{{7}}{≔}{\mathrm{y\text{'}\text{'}}}{=}{\mathrm{y\text{'}}}{+}\frac{\left({\mathrm{ln}}{}\left({\mathrm{y\text{'}}}\right){-}{x}\right){}{{\mathrm{y\text{'}}}}^{{2}}}{{y}{-}{\mathrm{y\text{'}}}}$ (22)
 This ODE admits only one point symmetry, but in addition it has a computable self-invariant contact (dynamical) symmetry that involves $\mathrm{y\text{'}}$.
 > DEtools[symgen](ode[7]);
 $\left[{\mathrm{_ξ}}{=}{1}{,}{\mathrm{_η}}{=}{y}\right]{,}\left[{\mathrm{_ξ}}{=}{0}{,}{\mathrm{_η}}{=}{-}{\mathrm{ln}}{}\left({\mathrm{_y1}}\right){+}{x}\right]$ (23)
 Remarkably, the point symmetry (first one in the preceding output) is of no use to integrate the equation; it leads to an intractable first order ODE. The dynamical symmetry, on the other hand, results in the following new implicit solution, involving the Ei (exponential integral) composed with the LambertW function.
 > dsolve(ode[7], implicit);
 ${{\mathrm{Ei}}}_{{1}}{}\left({-}{1}{-}\mathrm{c__1}{}{{ⅇ}}^{{-}{x}}{-}{\mathrm{LambertW}}{}\left({-}{y}{}{{ⅇ}}^{{-}{x}{-}{1}{-}\mathrm{c__1}{}{{ⅇ}}^{{-}{x}}}\right)\right){}\mathrm{c__1}{-}\frac{{y}}{{\mathrm{LambertW}}{}\left({-}{y}{}{{ⅇ}}^{{-}{x}{-}{1}{-}\mathrm{c__1}{}{{ⅇ}}^{{-}{x}}}\right)}{-}\mathrm{c__2}{=}{0}$ (24)

New parametric solutions for nonlinear ODEs

 • For ODEs of all differential orders, dsolve can now compute parametric solutions directly from their symmetries. This is useful in various cases where the standard solution, of the form $y\left(x\right)=\mathrm{...}$, involves the algebraic inversion of special functions or integrals, while the parametric solution is simpler.
 Example
 > ode[8] := diff(y(x),x,x) = y(x)+_F1(diff(y(x),x)-y(x));
 ${{\mathrm{ode}}}_{{8}}{≔}{\mathrm{y\text{'}\text{'}}}{=}{y}{+}\mathrm{f__1}{}\left({\mathrm{y\text{'}}}{-}{y}\right)$ (25)
 > dsolve(ode[8]);
 ${y}{=}\left({\int }{\mathrm{RootOf}}{}\left({-}{x}{-}\left({{\int }}_{{}}^{{\mathrm{_Z}}}\frac{{1}}{{-}\mathrm{f__1}{}\left({\mathrm{_f}}\right){+}{\mathrm{_f}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_f}}\right){+}\mathrm{c__1}\right){}{{ⅇ}}^{{-}{x}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{x}{+}\mathrm{c__2}\right){}{{ⅇ}}^{{x}}$ (26)
 This solution is the best that can be achieved but involves composite integrals where the inner one is algebraically solved with respect to the integration variable using RootOf. These solutions can frequently be re-expressed in parametric form, free of RootOf, which can now be computed directly by dsolve from the ODE symmetries.
 > dsolve(ode[8], parametric);
 $\left[{y}{}\left({\mathrm{_T}}\right){=}\left({\int }\frac{{{ⅇ}}^{{\int }{-}\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{-}\mathrm{c__2}}{}{\mathrm{_T}}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__1}\right){}{{ⅇ}}^{{\int }\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__2}}{,}{x}{}\left({\mathrm{_T}}\right){=}{\int }\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__2}\right]$ (27)

DEtools[IVPsol], a new command for specializing general solutions and a related new option in dsolve

 • The standard process of solving an ODE-IVP consists of first computing a solution that is more general, which depends on arbitrary constants, and then adjusting these constants to match the initial or boundary conditions. The initial more general solution, however, can frequently be written in different ways, which can either facilitate or make more complicated the posterior adjustment of the solution.
 To take advantage of this situation, a new command, IVPsol, has been added to the DEtools package, with the purpose of adjusting an ODE solution to given initial or boundary conditions. Also, related new flexibility has been added to dsolve: it now accepts a given solution to be used directly as a departure point to match the initial/boundary conditions.
 Example
 > ode[9] := x*diff(y(x),x,x)+4*y(x)^2 = 0;
 ${{\mathrm{ode}}}_{{9}}{≔}{x}{}{\mathrm{y\text{'}\text{'}}}{+}{4}{}{{y}}^{{2}}{=}{0}$ (28)
 A general solution for ode[9] is not known. So, in principle, it would not be possible to solve an initial value problem involving it, such as in the following example with these initial conditions.
 > ic[9] := y(1) = -1/2, D(y)(1) = 1/2;
 ${{\mathrm{ic}}}_{{9}}{≔}{y}{}\left({1}\right){=}{-}\frac{{1}}{{2}}{,}{\mathrm{D}}{}\left({y}\right){}\left({1}\right){=}\frac{{1}}{{2}}$ (29)
 But suppose you know a particular solution for ode[9] that you might have computed by any other means, for instance:
 > sol[9] := y(x) = _C1/(2*x);
 ${{\mathrm{sol}}}_{{9}}{≔}{y}{=}\frac{\mathrm{c__1}}{{2}{}{x}}$ (30)
 You can now pass this solution directly to dsolve so that it uses it to solve the problem instead of trying and failing to compute one itself.
 > dsolve([ode[9], ic[9]], usesolution = sol[9]);
 ${y}{=}{-}\frac{{1}}{{2}{}{x}}$ (31)
 Analogously, you can pass the initial conditions and the solution directly to DEtools[IVPsol].
 > DEtools[IVPsol]([ic[9]], sol[9]);
 ${y}{=}{-}\frac{{1}}{{2}{}{x}}$ (32)

DEtools: extended functionality of parametricsol and particularsol

 • The DEtools commands particularsol and parametricsol can now solve a new range of higher order and nonlinear ODE problems by combining standard methods with alternative ways of using symmetries.
 Example
 > ode[10] := diff(y(x), x,x,x) - diff(y(x), x,x)*y(x) + diff(y(x),x)^2 = 0;
 ${{\mathrm{ode}}}_{{10}}{≔}{-}{\mathrm{y\text{'}\text{'}}}{}{y}{+}{{\mathrm{y\text{'}}}}^{{2}}{+}{\mathrm{y\text{'}\text{'}\text{'}}}{=}{0}$ (33)
 No general solution is known for ode[10]. A particular solution for it, however, depending on one arbitrary constant, is now computable using the following.
 > DEtools[particularsol](ode[10]);
 ${y}{=}{0}{,}{y}{=}\frac{{6}}{{-}{x}{+}\mathrm{c__1}}$ (34)
 For ode[8], introduced in a previous paragraph, a parametric solution is now computable using the following.
 > DEtools[parametricsol](ode[8]);
 $\left\{\left[{y}{}\left({\mathrm{_T}}\right){=}\left({\int }\frac{{{ⅇ}}^{{\int }{-}\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{-}\mathrm{c__2}}{}{\mathrm{_T}}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__1}\right){}{{ⅇ}}^{{\int }\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__2}}{,}{x}{}\left({\mathrm{_T}}\right){=}{\int }\frac{{1}}{\mathrm{f__1}{}\left({\mathrm{_T}}\right){-}{\mathrm{_T}}}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{ⅆ}{\mathrm{_T}}{+}\mathrm{c__2}\right]\right\}$ (35)
 This functionality also has been added as an option to dsolve; see previous paragraphs.

Partial Differential Equations (PDEs)

 A large number of improvements and additions were made to the PDEtools package, setting a new benchmark for the state-of-the-art in symbolic computation and Partial Differential Equations.

The new commands in PDEtools

 • Four new commands were added to PDEtools: CharacteristicQInvariants, ConsistencyTest, PolynomialSolutions, and SymmetrySolutions. As their names suggest, the new commands can perform fast consistency tests, compute polynomial solutions for PDE systems, transform given solutions into other different solutions exploring the symmetries of the problem, and can compute invariants of differential equation systems using a simpler approach, exploring the CharacteristicQ function of the system's symmetries.
 Examples
 > with(PDEtools);
 $\left[{\mathrm{CanonicalCoordinates}}{,}{\mathrm{ChangeSymmetry}}{,}{\mathrm{CharacteristicQ}}{,}{\mathrm{CharacteristicQInvariants}}{,}{\mathrm{ConservedCurrentTest}}{,}{\mathrm{ConservedCurrents}}{,}{\mathrm{ConsistencyTest}}{,}{\mathrm{D_Dx}}{,}{\mathrm{DeterminingPDE}}{,}{\mathrm{Eta_k}}{,}{\mathrm{Euler}}{,}{\mathrm{FirstIntegralSolver}}{,}{\mathrm{FromJet}}{,}{\mathrm{FunctionFieldSolutions}}{,}{\mathrm{InfinitesimalGenerator}}{,}{\mathrm{Infinitesimals}}{,}{\mathrm{IntegratingFactorTest}}{,}{\mathrm{IntegratingFactors}}{,}{\mathrm{InvariantEquation}}{,}{\mathrm{InvariantSolutions}}{,}{\mathrm{InvariantTransformation}}{,}{\mathrm{Invariants}}{,}{\mathrm{Laplace}}{,}{\mathrm{Library}}{,}{\mathrm{PDEplot}}{,}{\mathrm{PolynomialSolutions}}{,}{\mathrm{ReducedForm}}{,}{\mathrm{SimilaritySolutions}}{,}{\mathrm{SimilarityTransformation}}{,}{\mathrm{Solve}}{,}{\mathrm{SymmetryCommutator}}{,}{\mathrm{SymmetryGauge}}{,}{\mathrm{SymmetrySolutions}}{,}{\mathrm{SymmetryTest}}{,}{\mathrm{SymmetryTransformation}}{,}{\mathrm{TWSolutions}}{,}{\mathrm{ToJet}}{,}{\mathrm{ToMissingDependentVariable}}{,}{\mathrm{build}}{,}{\mathrm{casesplit}}{,}{\mathrm{charstrip}}{,}{\mathrm{dchange}}{,}{\mathrm{dcoeffs}}{,}{\mathrm{declare}}{,}{\mathrm{diff_table}}{,}{\mathrm{difforder}}{,}{\mathrm{dpolyform}}{,}{\mathrm{dsubs}}{,}{\mathrm{mapde}}{,}{\mathrm{separability}}{,}{\mathrm{splitstrip}}{,}{\mathrm{splitsys}}{,}{\mathrm{undeclare}}\right]$ (36)
 Polynomial solutions for PDE systems can now be computed using the new PolynomialSolutions command.
 > PDEtools:-declare((f, g)(x,y));
 ${f}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{f}$
 ${g}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{g}$ (37)
 > sys[1] := diff(f(x,y),x)*diff(g(x,y),x) + diff(f(x,y),y)*diff(g(x,y),y) + g(x,y)*(diff(f(x,y),x,x) + diff(f(x,y),y,y)) = -1;
 ${{\mathrm{sys}}}_{{1}}{≔}{{f}}_{{x}}{}{{g}}_{{x}}{+}{{f}}_{{y}}{}{{g}}_{{y}}{+}{g}{}\left({{f}}_{{x}{,}{x}}{+}{{f}}_{{y}{,}{y}}\right){=}{-1}$ (38)
 > psol[1] := PolynomialSolutions(sys[1]);
 ${{\mathrm{psol}}}_{{1}}{≔}\left\{{f}{=}\frac{\left(\left({2}{}{{x}}^{{2}}{-}{{y}}^{{2}}\right){}\mathrm{c__3}{+}{2}{}{x}{}\mathrm{c__2}{+}{2}{}\mathrm{c__1}\right){}{\mathrm{_C5}}{-}{2}{}{y}{}\mathrm{c__3}{}\mathrm{c__4}{-}{2}{}{y}}{{2}{}{\mathrm{_C5}}}{,}{g}{=}{\mathrm{_C5}}{}{y}{+}\mathrm{c__4}\right\}{,}\left\{{f}{=}\frac{\left({-}{2}{}{\mathrm{_C5}}{}{{y}}^{{2}}{+}\left({2}{}\mathrm{c__4}{}{x}{+}{2}{}\mathrm{c__2}\right){}{y}{+}{2}{}{{x}}^{{2}}{}{\mathrm{_C5}}{+}{2}{}\mathrm{c__3}{}{x}{+}{2}{}\mathrm{c__1}\right){}{\mathrm{_C6}}{-}{{y}}^{{2}}}{{2}{}{\mathrm{_C6}}}{,}{g}{=}{\mathrm{_C6}}\right\}{,}\left\{{f}{=}\frac{{-}{2}{}{x}{}\left({y}{}\mathrm{c__3}{+}\frac{\mathrm{c__2}}{{4}}\right){}{\mathrm{_C5}}{}\sqrt{{2}}{+}\left(\mathrm{c__3}{}{{y}}^{{2}}{+}\mathrm{c__2}{}{y}{+}\mathrm{c__1}\right){}{\mathrm{_C5}}{+}\left({-}{2}{}\mathrm{c__3}{}\mathrm{c__4}{-}{1}\right){}{x}}{{\mathrm{_C5}}}{,}{g}{=}{\mathrm{_C5}}{}{x}{+}\frac{\sqrt{{2}}{}{\mathrm{_C5}}{}{y}}{{2}}{+}\mathrm{c__4}\right\}{,}\left\{{f}{=}\frac{{2}{}{x}{}\left({y}{}\mathrm{c__3}{+}\frac{\mathrm{c__2}}{{4}}\right){}{\mathrm{_C5}}{}\sqrt{{2}}{+}\left(\mathrm{c__3}{}{{y}}^{{2}}{+}\mathrm{c__2}{}{y}{+}\mathrm{c__1}\right){}{\mathrm{_C5}}{+}\left({-}{2}{}\mathrm{c__3}{}\mathrm{c__4}{-}{1}\right){}{x}}{{\mathrm{_C5}}}{,}{g}{=}{\mathrm{_C5}}{}{x}{-}\frac{\sqrt{{2}}{}{\mathrm{_C5}}{}{y}}{{2}}{+}\mathrm{c__4}\right\}{,}\left\{{f}{=}\frac{\left({-}{{x}}^{{2}}{}\mathrm{c__3}{+}{2}{}\mathrm{c__3}{}{{y}}^{{2}}{-}\mathrm{c__2}{}{y}{-}\mathrm{c__1}\right){}{{\mathrm{_C6}}}^{{3}}{-}{6}{}{x}{}\left(\left({y}{}\mathrm{c__3}{-}\frac{\mathrm{c__2}}{{6}}\right){}{\mathrm{_C5}}{+}\frac{\mathrm{c__3}{}\mathrm{c__4}}{{3}}{-}\frac{{1}}{{6}}\right){}{{\mathrm{_C6}}}^{{2}}{+}{2}{}\left({{x}}^{{2}}{}\mathrm{c__3}{-}\frac{{1}}{{2}}{}\mathrm{c__3}{}{{y}}^{{2}}{+}\mathrm{c__2}{}{y}{+}\mathrm{c__1}\right){}{{\mathrm{_C5}}}^{{2}}{}{\mathrm{_C6}}{-}{2}{}{x}{}{{\mathrm{_C5}}}^{{2}}{}\left({\mathrm{_C5}}{}\mathrm{c__2}{+}\mathrm{c__3}{}\mathrm{c__4}{+}{1}\right)}{{2}{}{{\mathrm{_C5}}}^{{2}}{}{\mathrm{_C6}}{-}{{\mathrm{_C6}}}^{{3}}}{,}{g}{=}{\mathrm{_C5}}{}{y}{+}{\mathrm{_C6}}{}{x}{+}\mathrm{c__4}\right\}$ (39)
 > map(pdetest, [psol[1]], sys[1]);
 $\left[{0}{,}{0}{,}{0}{,}{0}{,}{0}\right]$ (40)
 New different solutions for PDE systems can now be computed from old known solutions exploring their symmetries; consider, for example, the wave equation in two dimensions:
 > pde[2] := diff(u(x, t), x,x) - diff(u(x, t), t,t) = 0;
 ${{\mathrm{pde}}}_{{2}}{≔}{{u}}_{{x}{,}{x}}{-}{{u}}_{{t}{,}{t}}{=}{0}$ (41)
 Here is a solution separable by product using pdsolve.
 > sol[2] := pdsolve(pde[2], HINT = *, build);
 ${{\mathrm{sol}}}_{{2}}{≔}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__3}{}{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{t}}{}\mathrm{c__1}{}{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{x}}{+}\frac{\mathrm{c__3}{}{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{t}}{}\mathrm{c__2}}{{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{x}}}{+}\frac{\mathrm{c__4}{}\mathrm{c__1}{}{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{x}}}{{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{t}}}{+}\frac{\mathrm{c__4}{}\mathrm{c__2}}{{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{t}}{}{{ⅇ}}^{\sqrt{{{\mathrm{_c}}}_{{1}}}{}{x}}}$ (42)
 Using a new feature, symmetries of polynomial type:
 > S[2] := Infinitesimals(pde[2], typeofsymmetry = polynomial)[-1..-1];
 ${{S}}_{{2}}{≔}\left[{{\mathrm{_ξ}}}_{{x}}{}\left({x}{,}{t}{,}{u}\right){=}{2}{}{x}{}{t}{,}{{\mathrm{_ξ}}}_{{t}}{}\left({x}{,}{t}{,}{u}\right){=}{{t}}^{{2}}{+}{{x}}^{{2}}{,}{{\mathrm{_η}}}_{{u}}{}\left({x}{,}{t}{,}{u}\right){=}{0}\right]$ (43)
 A new solution is obtained transforming sol[2] and exploring the symmetry S[2].
 > newsol[2] := SymmetrySolutions(sol[2], S[2]);
 ${{\mathrm{newsol}}}_{{2}}{≔}\left\{{u}{}\left({x}{,}{t}\right){=}{{ⅇ}}^{{-}\frac{\left({1}{+}\left({t}{-}{x}\right){}{\mathrm{_ε}}\right){}\left({t}{+}{x}\right){}\sqrt{{{\mathrm{_c}}}_{{1}}}}{{1}{+}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){}{{\mathrm{_ε}}}^{{2}}{+}{2}{}{t}{}{\mathrm{_ε}}}}{}\left(\mathrm{c__3}{}{{ⅇ}}^{\frac{{2}{}\left(\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){}{\mathrm{_ε}}{+}{t}\right){}\sqrt{{{\mathrm{_c}}}_{{1}}}}{{1}{+}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){}{{\mathrm{_ε}}}^{{2}}{+}{2}{}{t}{}{\mathrm{_ε}}}}{}\mathrm{c__2}{+}\mathrm{c__3}{}\mathrm{c__1}{}{{ⅇ}}^{\frac{{2}{}\left({1}{+}\left({t}{-}{x}\right){}{\mathrm{_ε}}\right){}\left({t}{+}{x}\right){}\sqrt{{{\mathrm{_c}}}_{{1}}}}{{1}{+}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){}{{\mathrm{_ε}}}^{{2}}{+}{2}{}{t}{}{\mathrm{_ε}}}}{+}\mathrm{c__4}{}\left({{ⅇ}}^{\frac{{2}{}{x}{}\sqrt{{{\mathrm{_c}}}_{{1}}}}{{1}{+}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){}{{\mathrm{_ε}}}^{{2}}{+}{2}{}{t}{}{\mathrm{_ε}}}}{}\mathrm{c__1}{+}\mathrm{c__2}\right)\right)\right\}$ (44)
 This new solution is verified using pdetest.
 > pdetest(newsol[2], pde[2]);
 ${0}$ (45)

Significant functionality added to compute solutions using symmetries

 • Most of the symmetry commands of PDEtools have had their functionality significantly expanded, providing enough flexibility to get a solution, or one of the necessary form, even for tough problems. New features that stand out are:
 – The main solver of the symmetry approach, InvariantSolutions has been packed with options to facilitate obtaining solutions of the most varied forms;
 – All of InvariantSolutions, SimilaritySolutions, and Infinitesimals can now solve problems faster, exploring symmetries of polynomial type or with restricted dependency, making solutions easier to compute;
 – InvariantSolutions and SimilaritySolutions automatically specialize arbitrary functions entering the infinitesimals of PDE systems, including an option to avoid this specialization when desired;
 – The key command of the symmetry approach, DeterminingPDE, can now compute the determining system also for integrating factors and conserved currents.
 Examples
 In many cases, a particular solution for a PDE system, which can also be computed faster than a more general solution, is enough to solve the problem. The new features permit searching for these particular solutions in varied manners. Recall, for example, the wave equation in two dimensions introduced in a previous section:
 > pde[2];
 ${{u}}_{{x}{,}{x}}{-}{{u}}_{{t}{,}{t}}{=}{0}$ (46)
 The following specifies that a solution depending only on $t$ would suffice.
 > InvariantSolutions(pde[2], numberofsolutions = 1, dependency = t);
 ${u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{t}{+}\mathrm{c__2}$ (47)
 This other input specifies to construct a solution using infinitesimals only depending on one variable, either $x$ or $t$, which are easy to compute.
 > InvariantSolutions(pde[2], dependencyofinfinitesimals = {x, t});
 ${u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{t}{+}\mathrm{c__2}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{x}{+}\mathrm{c__2}$ (48)
 With this input, you specify the use of infinitesimals of polynomial type, linear in the jet variables (almost the simplest ones that can be computed, requiring only inverting a matrix); note the display option to show the corresponding invariants and solution.
 > InvariantSolutions(pde[2], degreeofinfinitesimals = 1, display);
 ${\mathrm{invariants}}{=}\left[\frac{{t}}{{x}}{,}{u}{}\left({x}{,}{t}\right)\right]$
 ${\mathrm{solutions}}{=}\left[\left\{{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{+}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{-}{x}}{{x}}\right)}{{2}}{-}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{+}{x}}{{x}}\right)}{{2}}\right\}\right]$
 ${\mathrm{_________________________________________________}}$
 ${\mathrm{invariants}}{=}\left[{{t}}^{{2}}{-}{{x}}^{{2}}{,}{u}{}\left({x}{,}{t}\right)\right]$
 ${\mathrm{solutions}}{=}\left[\left\{{u}{}\left({x}{,}{t}\right){=}\mathrm{c__4}{}{\mathrm{ln}}{}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){+}\mathrm{c__3}\right\}\right]$
 ${\mathrm{_________________________________________________}}$
 ${\mathrm{invariants}}{=}\left[{t}{,}{u}{}\left({x}{,}{t}\right)\right]$
 ${\mathrm{solutions}}{=}\left[\left\{{u}{}\left({x}{,}{t}\right){=}\mathrm{c__5}{}{t}{+}\mathrm{c__6}\right\}\right]$
 ${\mathrm{_________________________________________________}}$
 ${\mathrm{invariants}}{=}\left[{x}{,}{u}{}\left({x}{,}{t}\right)\right]$
 ${\mathrm{solutions}}{=}\left[\left\{{u}{}\left({x}{,}{t}\right){=}\mathrm{c__7}{}{x}{+}\mathrm{c__8}\right\}\right]$
 ${\mathrm{_________________________________________________}}$
 ${u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{t}{+}\mathrm{c__2}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{x}{+}\mathrm{c__2}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__2}{}{\mathrm{ln}}{}\left({{t}}^{{2}}{-}{{x}}^{{2}}\right){+}\mathrm{c__1}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{+}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{-}{x}}{{x}}\right)}{{2}}{-}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{+}{x}}{{x}}\right)}{{2}}$ (49)
 These invariants shown are a fingerprint of each solution; they can now be copied directly from the screen and pasted in the call to InvariantSolutions to reproduce precisely the corresponding solution.
 > InvariantSolutions(pde[2], invariants = [t/x, u(x,t)]);
 ${u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{+}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{-}{x}}{{x}}\right)}{{2}}{-}\frac{\mathrm{c__2}{}{\mathrm{ln}}{}\left(\frac{{t}{+}{x}}{{x}}\right)}{{2}}$ (50)
 The general form of Infinitesimals for pde[2] involves arbitrary functions $\mathrm{_Fn}\left(t+x\right)$ and $\mathrm{_Fm}\left(x-t\right)$.
 > Infinitesimals(pde[2]);
 $\left[{{\mathrm{_ξ}}}_{{x}}{}\left({x}{,}{t}{,}{u}\right){=}\mathrm{f__1}{}\left({t}{+}{x}\right){+}\mathrm{f__2}{}\left({t}{-}{x}\right){,}{{\mathrm{_ξ}}}_{{t}}{}\left({x}{,}{t}{,}{u}\right){=}{-}\mathrm{f__2}{}\left({t}{-}{x}\right){+}\mathrm{f__1}{}\left({t}{+}{x}\right){+}{1}{,}{{\mathrm{_η}}}_{{u}}{}\left({x}{,}{t}{,}{u}\right){=}\mathrm{f__3}{}\left({t}{+}{x}\right){+}\mathrm{f__4}{}\left({t}{-}{x}\right)\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{}\left({x}{,}{t}{,}{u}\right){=}\mathrm{f__5}{}\left({t}{+}{x}\right){+}\mathrm{f__6}{}\left({t}{-}{x}\right){,}{{\mathrm{_ξ}}}_{{t}}{}\left({x}{,}{t}{,}{u}\right){=}{-}\mathrm{f__6}{}\left({t}{-}{x}\right){+}\mathrm{f__5}{}\left({t}{+}{x}\right){,}{{\mathrm{_η}}}_{{u}}{}\left({x}{,}{t}{,}{u}\right){=}{u}{+}{\mathrm{_F7}}{}\left({t}{+}{x}\right){+}{\mathrm{_F8}}{}\left({t}{-}{x}\right)\right]$ (51)
 It is not possible to compute a SimilarityTransformation or, for that matter, any symmetry related transformation with them because of the arbitrary functions. In order to use these infinitesimals, the arbitrary functions are now automatically specialized by all the symmetry commands (except for Infinitesimals), as you could see by interactively using the new specialize_Fn option of Infinitesimals.
 > S := Infinitesimals(pde[2], specialize_Fn, displayfunctionality = false);
 ${S}{≔}\left[{{\mathrm{_ξ}}}_{{x}}{=}{1}{,}{{\mathrm{_ξ}}}_{{t}}{=}{0}{,}{{\mathrm{_η}}}_{{u}}{=}{0}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{1}{,}{{\mathrm{_ξ}}}_{{t}}{=}{2}{,}{{\mathrm{_η}}}_{{u}}{=}{0}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{1}{,}{{\mathrm{_η}}}_{{u}}{=}{1}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{1}{,}{{\mathrm{_ξ}}}_{{t}}{=}{1}{,}{{\mathrm{_η}}}_{{u}}{=}{u}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{1}{,}{{\mathrm{_ξ}}}_{{t}}{=}{-1}{,}{{\mathrm{_η}}}_{{u}}{=}{u}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{1}{,}{{\mathrm{_η}}}_{{u}}{=}{t}{+}{x}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{1}{,}{{\mathrm{_η}}}_{{u}}{=}{t}{-}{x}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{0}{,}{{\mathrm{_η}}}_{{u}}{=}{u}{+}{1}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{0}{,}{{\mathrm{_η}}}_{{u}}{=}{u}{+}{t}{+}{x}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{0}{,}{{\mathrm{_ξ}}}_{{t}}{=}{0}{,}{{\mathrm{_η}}}_{{u}}{=}{u}{+}{t}{-}{x}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{t}{+}{x}{,}{{\mathrm{_ξ}}}_{{t}}{=}{1}{+}{t}{+}{x}{,}{{\mathrm{_η}}}_{{u}}{=}{0}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{t}{-}{x}{,}{{\mathrm{_ξ}}}_{{t}}{=}{-}{t}{+}{x}{+}{1}{,}{{\mathrm{_η}}}_{{u}}{=}{0}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{t}{+}{x}{,}{{\mathrm{_ξ}}}_{{t}}{=}{t}{+}{x}{,}{{\mathrm{_η}}}_{{u}}{=}{u}\right]{,}\left[{{\mathrm{_ξ}}}_{{x}}{=}{t}{-}{x}{,}{{\mathrm{_ξ}}}_{{t}}{=}{x}{-}{t}{,}{{\mathrm{_η}}}_{{u}}{=}{u}\right]$ (52)
 In this way, all these commands can deal with the symmetries of pde[2] properly.
 > SymmetryTransformation(S[5], u(x, t), v(r, s));
 $\left\{{r}{=}{x}{+}{\mathrm{_ε}}{,}{s}{=}{-}{\mathrm{_ε}}{+}{t}{,}{v}{}\left({r}{,}{s}\right){=}{u}{}\left({x}{,}{t}\right){}{{ⅇ}}^{{\mathrm{_ε}}}\right\}$ (53)
 Invariant solutions can then be computed automatically because this specialization of arbitrary functions is now automatic.
 > InvariantSolutions(pde[2]);
 ${u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}\sqrt{{t}{+}{x}}{,}{u}{}\left({x}{,}{t}\right){=}\frac{\mathrm{c__1}}{\sqrt{{t}{-}{x}}}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}{x}{+}\mathrm{c__2}{+}{t}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__1}{}\left({-}{2}{}{x}{+}{t}\right){+}\mathrm{c__2}{,}{u}{}\left({x}{,}{t}\right){=}\frac{\mathrm{c__1}{}{{ⅇ}}^{\frac{{t}}{{2}}{-}\frac{{x}}{{2}}}}{{{ⅇ}}^{{-}{x}}}{,}{u}{}\left({x}{,}{t}\right){=}\frac{\mathrm{c__1}{}{{ⅇ}}^{{-}\frac{{t}}{{2}}{-}\frac{{x}}{{2}}}}{{{ⅇ}}^{{-}{x}}}{,}{u}{}\left({x}{,}{t}\right){=}\frac{{{x}}^{{2}}}{{2}}{+}\left({t}{+}\mathrm{c__1}\right){}{x}{+}\frac{{{t}}^{{2}}}{{2}}{+}\mathrm{c__2}{,}{u}{}\left({x}{,}{t}\right){=}\frac{{{x}}^{{2}}}{{2}}{+}\left({-}{t}{+}\mathrm{c__2}\right){}{x}{+}\frac{{{t}}^{{2}}}{{2}}{+}\mathrm{c__1}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__2}{}{\mathrm{ln}}{}\left({{ⅇ}}^{{2}{}{x}{-}{2}{}{t}}{}\left({1}{+}{2}{}{t}{+}{2}{}{x}\right)\right){+}\mathrm{c__1}{,}{u}{}\left({x}{,}{t}\right){=}\mathrm{c__2}{}{\mathrm{ln}}{}\left({{ⅇ}}^{{2}{}{t}{+}{2}{}{x}}{}\left({2}{}{t}{-}{2}{}{x}{-}{1}\right)\right){+}\mathrm{c__1}$ (54)

The internal PDEtools Library of routines is now available for programming purposes

 • The PDEtools internal library for manipulating and programming with differential equations is now available, starting in Maple 13 with 45 subroutines.
 Example
 The PDEtools Library of routines is made available mainly for programming purposes. Some of these routines, however, are valuable for mathematical reasons. For example, the result previously obtained using the new PolynomialSolutions command for sys[1] is computed by first estimating upper bounds for the degree of the solution.
 > sys[1];
 ${{f}}_{{x}}{}{{g}}_{{x}}{+}{{f}}_{{y}}{}{{g}}_{{y}}{+}{g}{}\left({{f}}_{{x}{,}{x}}{+}{{f}}_{{y}{,}{y}}\right){=}{-1}$ (55)
 > Describe(PDEtools:-Library:-UpperBounds);
 # # Parameters # * PDESYS - a PDE system; it can contain PDEs, ODEs, and also non-differential equations # * F - a list of the unknown functions of PDESYS # * increasefornonautonomous - optional, can be true (default) or false, to increase the upper bounds by 1 in the presence of nonautonomous equations in PDESYS # Description: UpperBounds returns a sequence of sets of equations, where the lhs is a function of F and the rhs is an upper bound for the degree of a solution polynomial in the independent variables. # Example # > sys := diff(f(x,y),x)*diff(g(y),y) + diff(f(x,y),y)*diff(g(y),y) + f(x,y)*(diff(f(x,y),x,x) + diff(f(x,y),y,y)) = x*y: # > PDEtools:-Library:-UpperBounds(sys, [f(x,y), g(y)]); # {f(x, y) = 3, g(y) = 2} # > PDEtools:-Library:-UpperBounds(sys, [f(x,y), g(y)], increasefornonautonomous = false); # {f(x, y) = 2, g(y) = 1} # UpperBounds( PDESYS, F, X::list(name) := _GetIndepVars(F),              { increasefornonautonomous::truefalse := true } )
 > PDEtools:-Library:-UpperBounds(sys[1], [f, g](x,y));
 $\left\{{f}{=}{2}{,}{g}{=}{1}\right\}$ (56)

Relevant extension in dpolyform and casesplit

 • The casesplit and dpolyform commands can now compute with arbitrary functions of algebraic expressions (not symbol variables). In other words, given an expression for some unknowns (that is, non-rational in arbitrary functions whose arguments are non-rational in the independent variables), compute a differential polynomial representation (PDE system), solved by the given expression, where the PDE system is rational in the unknowns and its derivatives, and has rational coefficients.
 Motivation: arbitrary functions of algebraic expressions (typically differential invariants) appear frequently when solving intermediary PDE problems that enter the formulation of applications or larger PDE problems. The new ability permits doing differential elimination with these objects and so uncoupling nonlinear PDE systems that involve them, extending in significant ways what can now be done with PDE systems and their solutions.
 Examples
 Consider the following expression for some $g\left(x,t\right)$ that involves the arbitrary functions $\mathrm{f__1}\left(t+x\right)+\mathrm{f__2}\left(x-t\right)$.
 > sol[3] := g(x,t) = _F1(x+t) + _F2(x-t);
 ${{\mathrm{sol}}}_{{3}}{≔}{g}{}\left({x}{,}{t}\right){=}\mathrm{f__1}{}\left({t}{+}{x}\right){+}\mathrm{f__2}{}\left({x}{-}{t}\right)$ (57)
 What is the PDE satisfied by this expression? It can now be computed: it is the wave equation in two dimensions.
 > pde[3] := dpolyform(sol[3], no_Fn);
 ${{\mathrm{pde}}}_{{3}}{≔}\left[{{g}}_{{x}{,}{x}}{=}{{g}}_{{t}{,}{t}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[\right]$ (58)
 The ability to compute differential polynomial representations for some mapping of variables $x,t,\mathrm{...}$ is old, based on the knowledge of the mathematical properties of the mapping applied to the variables (for example, $\mathrm{sin}\left(t+x\right)$). The ability to compute these PDE representations with arbitrary mappings (for example, $\mathrm{f__1}\left(t+x\right)$) that have no particular mathematical properties is new in Maple 13. Derivatives of arbitrary mappings evaluated at expressions can also be represented in rational PDE form.
 > sol[4] := g(x,t) = D(_F1)(ln(x*t) + _F2(1/exp(t)));
 ${{\mathrm{sol}}}_{{4}}{≔}{g}{}\left({x}{,}{t}\right){=}{\mathrm{D}}{}\left(\mathrm{f__1}\right){}\left({\mathrm{ln}}{}\left({x}{}{t}\right){+}\mathrm{f__2}{}\left(\frac{{1}}{{{ⅇ}}^{{t}}}\right)\right)$ (59)
 > pde[4] := dpolyform(sol[4], no_Fn);
 ${{\mathrm{pde}}}_{{4}}{≔}\left[{{g}}_{{t}{,}{x}}{=}\frac{{{g}}_{{t}}{}{{g}}_{{x}{,}{x}}}{{{g}}_{{x}}}{+}\frac{{{g}}_{{t}}}{{x}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{{g}}_{{t}}{\ne }{0}{,}{{g}}_{{x}}{\ne }{0}\right]$ (60)
 These results can be verified as usual using pdetest.
 > pdetest(sol[4], pde[4]);
 $\left[{0}\right]$ (61)
 • The casesplit command also accepts a new optional argument, caseplot, so that in addition to the splitting into cases, it also produces a plot with a graphical representation of the splitting.
 > ode[11] := diff(y(t),t,t)^2 + 2*diff(y(t),t,t)*y(t)^3*diff(y(t),t) - 4*y(t)^2*diff(y(t),t)^3;
 ${{\mathrm{ode}}}_{{11}}{≔}{{y}}_{{t}{,}{t}}^{{2}}{+}{2}{}{{y}}_{{t}{,}{t}}{}{{y}{}\left({t}\right)}^{{3}}{}{{y}}_{{t}}{-}{4}{}{{y}{}\left({t}\right)}^{{2}}{}{{y}}_{{t}}^{{3}}$ (62)
 > casesplit(ode[11], caseplot);
 ${\mathrm{========= Pivots Legend =========}}$
 ${\mathrm{p1}}{=}{{y}{}\left({t}\right)}^{{3}}{}{{y}}_{{t}}{+}{{y}}_{{t}{,}{t}}$
 ${\mathrm{p2}}{=}{y}{}\left({t}\right)$
 ${\mathrm{p3}}{=}{{y}}_{{t}}$
 ${\mathrm{PLOT}}{}\left({\mathrm{...}}\right)$
 $\left[{{y}}_{{t}{,}{t}}^{{2}}{=}{-}{2}{}{{y}}_{{t}{,}{t}}{}{{y}{}\left({t}\right)}^{{3}}{}{{y}}_{{t}}{+}{4}{}{{y}{}\left({t}\right)}^{{2}}{}{{y}}_{{t}}^{{3}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{{y}{}\left({t}\right)}^{{3}}{}{{y}}_{{t}}{+}{{y}}_{{t}{,}{t}}{\ne }{0}\right]{,}\left[{{y}}_{{t}}{=}{-}\frac{{{y}{}\left({t}\right)}^{{4}}}{{4}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{}\left({t}\right){\ne }{0}\right]{,}\left[{{y}}_{{t}}{=}{0}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{}\left({t}\right){\ne }{0}\right]{,}\left[{y}{}\left({t}\right){=}{0}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[\right]$ (63)

Extended functionality in pdetest regarding boundary conditions

 • The pdetest command can now test solutions for correctness regarding boundary conditions.
 Examples
 Consider the following PDE, boundary condition, and solution.
 > pde[3] := diff(u(x,t),t) = k*diff(diff(u(x,t),x),x)+Q;
 ${{\mathrm{pde}}}_{{3}}{≔}{{u}}_{{t}}{=}{k}{}{{u}}_{{x}{,}{x}}{+}{Q}$ (64)
 > bc[3] := u(0,t) = 2*exp(k*t)-1/k*Q;
 ${{\mathrm{bc}}}_{{3}}{≔}{u}{}\left({0}{,}{t}\right){=}{2}{}{{ⅇ}}^{{k}{}{t}}{-}\frac{{Q}}{{k}}$ (65)
 > sol[3] := u(x,t) = _C1^2*exp(x+k*t)-(_C1^2-2)*exp(-x+k*t)-1/2/k*Q*x^2+1/_C1^2/k*Q*(_C1^2-2)*x-1/k*Q;
 ${{\mathrm{sol}}}_{{3}}{≔}{u}{}\left({x}{,}{t}\right){=}{\mathrm{c__1}}^{{2}}{}{{ⅇ}}^{{k}{}{t}{+}{x}}{-}\left({\mathrm{c__1}}^{{2}}{-}{2}\right){}{{ⅇ}}^{{k}{}{t}{-}{x}}{-}\frac{{Q}{}{{x}}^{{2}}}{{2}{}{k}}{+}\frac{{Q}{}\left({\mathrm{c__1}}^{{2}}{-}{2}\right){}{x}}{{\mathrm{c__1}}^{{2}}{}{k}}{-}\frac{{Q}}{{k}}$ (66)
 You can test whether the sol[1] solves pde[1] using pdetest; the new functionality is that you can now test whether it solves the boundary condition bc[1].
 > pdetest(sol[3], [pde[3], bc[3]]);
 $\left[{0}{,}{0}\right]$ (67)
 The boundary conditions can involve derivatives:
 > bc[3.1] := D[1,1](u)(0,t) = 2*exp(k*t)-1/k*Q;
 ${{\mathrm{bc}}}_{{3.1}}{≔}{{\mathrm{D}}}_{{1}{,}{1}}{}\left({u}\right){}\left({0}{,}{t}\right){=}{2}{}{{ⅇ}}^{{k}{}{t}}{-}\frac{{Q}}{{k}}$ (68)
 > pdetest(sol[3], [pde[3], bc[3.1]]);
 $\left[{0}{,}{0}\right]$ (69)

Numerical Solutions

There have been improvements in several aspects of numerical ODE solution for Maple 13.

 • The event handling features introduced in Maple 12 have been extended with the ability to control initial triggering of events; the addition of new event programming constructs (tobegin, toend, breakiteration, delayhalt); the addition of the side construct for round-off control; the ability to restrict a root-finding trigger to an increasing or decreasing region of the trigger expression; and the ability to interactively query when events have fired (eventfired). See dsolve,Events for more details.
 • There is improved robustness of core solvers with respect to accuracy and error control for pure ODE problems and index-1 DAE variables. This provides better detection of solution discontinuities (for more information see examples,dsolve_numeric_NewErrorControl).
 The error control improvements mean that Maple now gives a correct answer to the following problem:
 > dsn:=dsolve({diff(x(t),t)=1,y(t)=sin(Pi*t),x(0)=0},numeric):
 > dsn(10);
 $\left[{t}{=}{10.}{,}{x}{}\left({t}\right){=}{10.0000000000000}{,}{y}{}\left({t}\right){=}{3.77932738528965}{×}{{10}}^{{-8}}\right]$ (70)
 A gap in the explicit Runga-Kutta technique error control mechanism has been fixed, and Maple now gives a correct answer to the following problem:
 > dsn2:=dsolve({diff(x(t),t)=x(t)/(1-t),x(0)=1},numeric):
 > dsn2(0.99);
 $\left[{t}{=}{0.99}{,}{x}{}\left({t}\right){=}{99.9999931813019}\right]$ (71)
 Maple can also perform more sophisticated error detection:
 > dsn2(1.01);
 This returns an error because the ODE is singular at $t=1$.
 • There is improved performance for DAE problems having relatively few degrees of freedom using an improved projection strategy.
 • There is more effective optimization with optimize=true option, and the addition of the new compile option for use of the Compiler with hardware precision evalhf-capable problems using the default rkf45 and rosenbrock solvers.
 • There is also the addition of the interactive numfun query option to provide the number of evaluations of the ODE performed in computation of a solution value for an IVP problem (supported for all IVP solvers that support maxfun).