PDEtools - Maple Programming Help

Home : Support : Online Help : Mathematics : Differential Equations : PDEtools : PDEtools/dpolyform

PDEtools

 dpolyform
 compute a differential polynomial form for a given system of non-polynomial equations

 Calling Sequence dpolyform(sys, no_Fn, opts)

Parameters

 sys - single expression or an equation, or a set or list of them no_Fn - (optional) specify that all auxiliary functions $\mathrm{_Fn}$ (n integer) introduced in the process are to be eliminated before outputting opts - (optional) argument(s) accepted by the Maple casesplit command

Description

 • The dpolyform function receives an equation or expression, or a set or list of them, containing some unknown functions of one or many variables, possibly containing non-polynomial objects (fractional powers, mathematical functions, etc.) and returns an equivalent differential polynomial (DP) system of equations.
 • The DP returned is equivalent to the given system in that any solution (value of the unknown functions) of the input is also a solution of the output DP system. This DP returned is differential polynomial in that it is entirely polynomial in the unknowns and its derivatives, with coefficients entirely rational in the independent variables. In this sense, dpolyform has the concrete ability to compute differential polynomial representations for non-polynomial objects.
 • The mathematical expressions dpolyform can represent in DP form include almost all the functions of the mathematical language, arbitrary compositions of them with the operations $+,,^,@$, including in that abstract powers, inverse functions constructed with @@, functions represented as ODE solutions using DESol, algebraic expressions represented using RootOf, integrals represented with Int, int or Intat, etc. The only exceptions are mathematical functions related to Zeta (e.g. Psi and GAMMA), not admitting a polynomial differential equation representation.
 • This routine has enormous potential in that it permits the use of the existing methods for polynomial systems, for example, differential elimination (see, for example, DifferentialAlgebra, DEtools[Rif], or casesplit), to solve, or in general work with, non-polynomial systems in a systematic way.
 • The dpolyform command can be used to also decouple non-polynomial systems of differential or algebraic equations (unlike the output of casesplit, the output of dpolyform is DP), or in the computation of identities for special functions. The dpolyform subroutines are used by the Maple dsolve, pdsolve and casesplit commands when solving ODE and PDE systems, in order to triangularize non-polynomial systems using techniques for polynomial ones.
 • By default, dpolyform is expected to return rather fast, outputting a DP system equivalent to the input system, representing the non-polynomial objects by means of auxiliary functions $\mathrm{_Fn}\left(...\right)$ (n is an integer) which in turn satisfy DP equations. Thus, the output of dpolyform consists of three lists.
 -  The first list contains DP equations of the form "DP_expression = 0".
 - The second list consists of inequations of the form "DP_expression <> 0".
 - The third list consists of 'back substitution equations', showing which non-polynomial object is represented by each auxiliary function $\mathrm{_Fn}$ introduced.
 • By giving the optional argument 'no_Fn', a second process is run to remove all the $\mathrm{_Fn}$ functions introduced in the first step, ending with a DP system (which can be a single DP equation) that involves only the unknown functions found in the given input. This system that is free of auxiliary functions is obtained by running a differential elimination process ranking all the auxiliary $\mathrm{_Fn}$ higher than the unknown functions present in the input. For details on rankings, see DEtools[checkrank].
 • The dpolyform routine also accepts the same optional arguments that are accepted by casesplit.

Examples

 > with(PDEtools):

For ease of reading, these functions are declared to be displayed in a compact way. Also, derivatives are displayed as indexed objects.

 > declare(g(x,y), _F1(x,y), _F2(x,y), _F3(x,y));
 ${g}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{g}$
 ${\mathrm{_F1}}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{\mathrm{_F1}}$
 ${\mathrm{_F2}}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{\mathrm{_F2}}$
 ${\mathrm{_F3}}{}\left({x}{,}{y}\right){}{\mathrm{will now be displayed as}}{}{\mathrm{_F3}}$ (1)

Consider the following non-polynomial expression.

 > e1 := g(x,y) = tan(2*x-y^(1/2));
 ${\mathrm{e1}}{≔}{g}{=}{\mathrm{tan}}{}\left({2}{}{x}{-}\sqrt{{y}}\right)$ (2)

A differential polynomial system (DPS) equivalent to $\mathrm{e1}$ is given by:

 > DPS := dpolyform(e1);
 ${\mathrm{DPS}}{≔}\left[{g}{-}{\mathrm{_F1}}{=}{0}{,}{-}{{\mathrm{_F1}}}^{{2}}{-}{2}{}{{\mathrm{_F1}}}_{{y}}{}{\mathrm{_F2}}{-}{1}{=}{0}{,}{-}{2}{}{{\mathrm{_F1}}}^{{2}}{+}{{\mathrm{_F1}}}_{{x}}{-}{2}{=}{0}{,}{{\mathrm{_F2}}}^{{2}}{-}{y}{=}{0}{,}{{\mathrm{_F2}}}_{{x}}{=}{0}\right]{,}\left[{\mathrm{_F2}}{\ne }{0}{,}{{\mathrm{_F1}}}_{{x}}{\ne }{0}{,}{{\mathrm{_F1}}}_{{y}}{}{\mathrm{_F2}}{\ne }{0}\right]{,}\left[{\mathrm{_F2}}{=}\sqrt{{y}}{,}{\mathrm{_F1}}{=}{\mathrm{tan}}{}\left({2}{}{x}{-}\sqrt{{y}}\right)\right]$ (3)

To view the expression above in the usual Maple format, use the macro show.

 > show;
 $\left[{g}{}\left({x}{,}{y}\right){-}{\mathrm{_F1}}{}\left({x}{,}{y}\right){=}{0}{,}{-}{2}{}\left(\frac{{\partial }}{{\partial }{y}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{\mathrm{_F1}}{}\left({x}{,}{y}\right)\right){}{\mathrm{_F2}}{}\left({x}{,}{y}\right){-}{1}{-}{{\mathrm{_F1}}{}\left({x}{,}{y}\right)}^{{2}}{=}{0}{,}{-}{2}{}{{\mathrm{_F1}}{}\left({x}{,}{y}\right)}^{{2}}{+}\frac{{\partial }}{{\partial }{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{\mathrm{_F1}}{}\left({x}{,}{y}\right){-}{2}{=}{0}{,}{{\mathrm{_F2}}{}\left({x}{,}{y}\right)}^{{2}}{-}{y}{=}{0}{,}\frac{{\partial }}{{\partial }{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{\mathrm{_F2}}{}\left({x}{,}{y}\right){=}{0}\right]{,}\left[{\mathrm{_F2}}{}\left({x}{,}{y}\right){\ne }{0}{,}\frac{{\partial }}{{\partial }{x}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{\mathrm{_F1}}{}\left({x}{,}{y}\right){\ne }{0}{,}\left(\frac{{\partial }}{{\partial }{y}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{\mathrm{_F1}}{}\left({x}{,}{y}\right)\right){}{\mathrm{_F2}}{}\left({x}{,}{y}\right){\ne }{0}\right]{,}\left[{\mathrm{_F2}}{}\left({x}{,}{y}\right){=}\sqrt{{y}}{,}{\mathrm{_F1}}{}\left({x}{,}{y}\right){=}{\mathrm{tan}}{}\left({2}{}{x}{-}\sqrt{{y}}\right)\right]$ (4)

A sequence of three lists is returned. The first list contains the Equations of the problem, the second list contains the Inequations, and the third list contains the back-substitution equations, specifying which non-polynomial object is represented by each auxiliary function $\mathrm{_Fn}$.

Concerning the lists of equations and inequations, two remarks are in order. First, the DPS returned by dpolyform represents an expression a bit more general than the given input. For example, to exactly represent $\mathrm{tan}\left(2x+\sqrt{y}\right)$ polynomially, initial conditions need to be introduced for the DPS returned by dpolyform. Second, while performing differential elimination, or various other manipulations on the DPS returned, Maple solves a system slightly more general than the input. However, in the solution, all the functions $\mathrm{_F1}$, $\mathrm{_F2}$, ... are replaced by the restricted objects they represent (the back substitution equations returned by dpolyform) to produce a valid solution.

To obtain a DPS satisfied by $\mathrm{e1}$ which, in turn, only involves the original unknowns (no $\mathrm{_F1}$, $\mathrm{_F2}$, ...), call dpolyform with the optional argument 'no_Fn'. In such a case, the output has the same format as that produced by the casesplit command.

 > dpolyform(e1, no_Fn);
 $\left[{{g}}_{{x}}{=}{2}{}{{g}}^{{2}}{+}{2}{,}{{g}}_{{y}}^{{2}}{=}\frac{{{g}}^{{4}}}{{4}{}{y}}{+}\frac{{{g}}^{{2}}}{{2}{}{y}}{+}\frac{{1}}{{4}{}{y}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{{g}}_{{y}}{\ne }{0}{,}{-}{{g}}^{{2}}{-}{1}{\ne }{0}\right]$ (5)

As in casesplit, the '&where' in the display above is obtained using a print/foo mechanism. The real structure of this result is of the form casesplit/ans( [ equations ], [ inequations ] ), and can be seen by using:

 > lprint((5));
 casesplit/ans([diff(g(x,y),x) = 2*g(x,y)^2+2, diff(g(x,y),y)^2 = 1/4/y*g(x,y)^4+1/2/y*g(x,y)^2+1/4/y],[diff(g(x,y),y) <> 0, -g(x,y)^2-1 <> 0])

To verify that this nonlinear PDE system

 > pde_sys := [op( map(op,(5)) )];
 ${\mathrm{pde_sys}}{≔}\left[{{g}}_{{x}}{=}{2}{}{{g}}^{{2}}{+}{2}{,}{{g}}_{{y}}^{{2}}{=}\frac{{{g}}^{{4}}}{{4}{}{y}}{+}\frac{{{g}}^{{2}}}{{2}{}{y}}{+}\frac{{1}}{{4}{}{y}}{,}{{g}}_{{y}}{\ne }{0}{,}{-}{{g}}^{{2}}{-}{1}{\ne }{0}\right]$ (6)

for $g\left(x,y\right)$ is satisfied by $\mathrm{e1}$, use the Maple pdetest command.

 > {e1};
 $\left\{{g}{=}{\mathrm{tan}}{}\left({2}{}{x}{-}\sqrt{{y}}\right)\right\}$ (7)
 > pdetest( (7), pde_sys);
 $\left[{0}{,}{0}\right]$ (8)

Note that, while the solution of the given expression $\mathrm{e1}$ is included in the solution of the DP output by dpolyform, the opposite is not true. The solution of the DP problem is slightly more general. It contains an arbitrary constant.

 > pdsolve(pde_sys);
 $\left\{{g}{=}{\mathrm{tan}}{}\left({2}{}{x}{+}\sqrt{{y}}{+}{2}{}{\mathrm{_C1}}\right)\right\}$ (9)

Moreover, due to the nonlinear character of this example, if, in $\mathrm{pde_sys}$, one excludes the inequation returned by dpolyform, then $\mathrm{pde_sys}$ also admits singular solutions

 > pde_sys[1..2];
 $\left[{{g}}_{{x}}{=}{2}{}{{g}}^{{2}}{+}{2}{,}{{g}}_{{y}}^{{2}}{=}\frac{{{g}}^{{4}}}{{4}{}{y}}{+}\frac{{{g}}^{{2}}}{{2}{}{y}}{+}\frac{{1}}{{4}{}{y}}\right]$ (10)
 > pdsolve((10));
 $\left\{{g}{=}{-I}\right\}{,}\left\{{g}{=}{I}\right\}{,}\left\{{g}{=}{\mathrm{tan}}{}\left({2}{}{x}{+}\sqrt{{y}}{+}{2}{}{\mathrm{_C1}}\right)\right\}$ (11)

and $\mathrm{e1}$ is not included in the singular solutions $g=\left(±\right)I$.

The dpolyform routine can handle systems of equations containing most functions known to Maple, including fractional or abstract powers, as well as arbitrary compositions of these objects. A useful side effect of this is that, by asking for the DP form of a special function, one receives the polynomial differential equation it satisfies. For example,

 > declare(f(x), y(x), prime=x);
 ${f}{}\left({x}\right){}{\mathrm{will now be displayed as}}{}{f}$
 ${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{'}}}$ (12)
 > y(x) = BesselJ(n,x);
 ${y}{=}{\mathrm{BesselJ}}{}\left({n}{,}{x}\right)$ (13)
 > dpolyform((13), no_Fn);
 $\left[{\mathrm{y\text{'}\text{'}}}{=}{-}\frac{{\mathrm{y\text{'}}}}{{x}}{+}\frac{\left({{n}}^{{2}}{-}{{x}}^{{2}}\right){}{y}}{{{x}}^{{2}}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{\ne }{0}\right]$ (14)

 > y(x) = hypergeom( [a,b], [c], f(x));
 ${y}{=}{\mathrm{hypergeom}}{}\left(\left[{a}{,}{b}\right]{,}\left[{c}\right]{,}{f}\right)$ (15)
 > dpolyform((15), [y,f], no_Fn);
 $\left[{\mathrm{y\text{'}\text{'}}}{=}\frac{{\mathrm{y\text{'}}}{}{\mathrm{f\text{'}\text{'}}}}{{\mathrm{f\text{'}}}}{-}\frac{{y}{}{a}{}{b}{}{{\mathrm{f\text{'}}}}^{{2}}}{{{f}}^{{2}}{-}{f}}{+}\frac{\left(\left({-}{a}{-}{b}{-}{1}\right){}{f}{+}{c}\right){}{\mathrm{y\text{'}}}{}{\mathrm{f\text{'}}}}{{{f}}^{{2}}{-}{f}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{\ne }{0}{,}{\mathrm{f\text{'}}}{\ne }{0}\right]$ (16)

In the input above, $\left[y,f\right]$ means that $y\left(x\right)$ expressed as a function of $f\left(x\right)$ is wanted. If not given, this ordering is the one casesplit finds simpler.

 > y(x) = MeijerG( [[a],[b]], [[c],[d]], f(x));
 ${y}{=}{\mathrm{MeijerG}}{}\left(\left[\left[{a}\right]{,}\left[{b}\right]\right]{,}\left[\left[{c}\right]{,}\left[{d}\right]\right]{,}{f}\right)$ (17)
 > dpolyform((17), y(x), no_Fn);
 $\left[{\mathrm{y\text{'}\text{'}}}{=}\frac{{\mathrm{y\text{'}}}{}{\mathrm{f\text{'}\text{'}}}}{{\mathrm{f\text{'}}}}{+}\frac{\left({-}\left({b}{-}{1}\right){}\left({a}{-}{1}\right){}{y}{}{f}{+}{y}{}{c}{}{d}\right){}{{\mathrm{f\text{'}}}}^{{2}}}{{{f}}^{{3}}{-}{{f}}^{{2}}}{+}\frac{\left(\left({a}{+}{b}{-}{3}\right){}{{f}}^{{2}}{+}\left({-}{c}{-}{d}{+}{1}\right){}{f}\right){}{\mathrm{y\text{'}}}{}{\mathrm{f\text{'}}}}{{{f}}^{{3}}{-}{{f}}^{{2}}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{\ne }{0}{,}{\mathrm{f\text{'}}}{\ne }{0}\right]$ (18)

In the input above, 'y(x)' means that in the output $y\left(x\right)$ is expressed as a function of the other unknowns of the system (here $f\left(x\right)$). This is equivalent to giving $\left[y,f\right]$ or $\left[y\left(x\right),f\left(x\right)\right]$.

It is evident from the last two results by dpolyform that, for some values of a, b, c, d, and f(x), there is a relation between the hypergeometric and the more general MeijerG functions. This relation is actually given by:

 > hypergeom([a,b],[c],f(x)) = convert( hypergeom([a,b],[c],f(x)), MeijerG);
 ${\mathrm{hypergeom}}{}\left(\left[{a}{,}{b}\right]{,}\left[{c}\right]{,}{f}\right){=}\frac{{\mathrm{\Gamma }}{}\left({c}\right){}{\mathrm{MeijerG}}{}\left(\left[\left[{1}{-}{a}{,}{-}{b}{+}{1}\right]{,}\left[\right]\right]{,}\left[\left[{0}\right]{,}\left[{1}{-}{c}\right]\right]{,}{-}{f}\right)}{{\mathrm{\Gamma }}{}\left({a}\right){}{\mathrm{\Gamma }}{}\left({b}\right)}$ (19)

More complicated cases are also handled. For example, the complete Elliptic integral of the third kind (see EllipticPi)

 > P(nu,k) = EllipticPi(nu,k);
 ${P}{}\left({\mathrm{\nu }}{,}{k}\right){=}{\mathrm{EllipticPi}}{}\left({\mathrm{\nu }}{,}{k}\right)$ (20)

is represented in DP form, not by an ODE, but by a PDE system.

 > dpolyform((20), no_Fn);
 $\left[{{P}}_{{k}{,}{k}}{=}\frac{\left({-}{3}{}{{k}}^{{4}}{+}\left({\mathrm{\nu }}{+}{1}\right){}{{k}}^{{2}}{+}{\mathrm{\nu }}\right){}{{P}}_{{k}}}{{k}{}\left({k}{-}{1}\right){}\left({k}{+}{1}\right){}\left({{k}}^{{2}}{-}{\mathrm{\nu }}\right)}{+}\frac{{2}{}{\mathrm{\nu }}{}\left({\mathrm{\nu }}{-}{1}\right){}{{P}}_{{\mathrm{\nu }}}}{\left({k}{-}{1}\right){}\left({k}{+}{1}\right){}\left({{k}}^{{2}}{-}{\mathrm{\nu }}\right)}{-}\frac{{P}{}\left({\mathrm{\nu }}{,}{k}\right)}{\left({k}{-}{1}\right){}\left({k}{+}{1}\right)}{,}{{P}}_{{k}{,}{\mathrm{\nu }}}{=}\frac{{{P}}_{{k}}}{{{k}}^{{2}}{-}{\mathrm{\nu }}}{-}\frac{{k}{}{{P}}_{{\mathrm{\nu }}}}{{{k}}^{{2}}{-}{\mathrm{\nu }}}{,}{{P}}_{{\mathrm{\nu }}{,}{\mathrm{\nu }}}{=}\frac{\left({-}{{k}}^{{3}}{+}{k}\right){}{{P}}_{{k}}}{{2}{}{\mathrm{\nu }}{}\left({\mathrm{\nu }}{-}{1}\right){}\left({{k}}^{{2}}{-}{\mathrm{\nu }}\right)}{+}\frac{\left({-}{4}{}{\mathrm{\nu }}{}{{k}}^{{2}}{+}{{k}}^{{2}}{+}{5}{}{{\mathrm{\nu }}}^{{2}}{-}{2}{}{\mathrm{\nu }}\right){}{{P}}_{{\mathrm{\nu }}}}{{2}{}{\mathrm{\nu }}{}\left({\mathrm{\nu }}{-}{1}\right){}\left({{k}}^{{2}}{-}{\mathrm{\nu }}\right)}{-}\frac{{P}{}\left({\mathrm{\nu }}{,}{k}\right)}{{2}{}{\mathrm{\nu }}{}\left({\mathrm{\nu }}{-}{1}\right)}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{P}{}\left({\mathrm{\nu }}{,}{k}\right){\ne }{0}\right]$ (21)

The dpolyform command can handle expressions involving more abstract representations as DESol, RootOf or @@. For example, consider the inverse of the dawson function.

 > y(x) = @@(dawson,-1)(x);
 ${y}{=}{{\mathrm{dawson}}}^{\left({-1}\right)}{}\left({x}\right)$ (22)

The differential polynomial representation of this object is an Abel equation of the 2nd kind which happens to admit symmetries separable by product.

 > dpolyform((22), no_Fn);
 $\left[{\mathrm{y\text{'}}}{=}{-}\frac{{1}}{{2}{}{y}{}{x}{-}{1}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{\ne }{0}\right]$ (23)
 $\left[\left[{\mathrm{_1st_order}}{,}{\mathrm{_with_symmetry_\left[F\left(x\right)*G\left(y\right),0\right]}}\right]{,}\left[{\mathrm{_Abel}}{,}{\mathrm{2nd type}}{,}{\mathrm{class C}}\right]\right]$ (24)

By using dpolyform to obtain the differential equation satisfied by a given expression, it is possible to establish identities for special functions, or relations between them and simpler Liouvillian (for example, exponential and trigonometric) functions. As an example illustrating the mechanism, consider $y\left(x\right)$ as the following hypergeometric function.

 > a3 := y(x) = hypergeom([1],[2],-2*I*x);
 ${\mathrm{a3}}{≔}{y}{=}{\mathrm{hypergeom}}{}\left(\left[{1}\right]{,}\left[{2}\right]{,}{-}{2}{}{I}{}{x}\right)$ (25)

A polynomial (in this case linear) ODE satisfied by $y\left(x\right)$ is given by:

 > e3 := dpolyform(a3, no_Fn);
 ${\mathrm{e3}}{≔}\left[{\mathrm{y\text{'}\text{'}}}{=}\frac{\left({-}{2}{}{I}{}{x}{-}{2}\right){}{\mathrm{y\text{'}}}}{{x}}{-}\frac{{2}{}{I}{}{y}}{{x}}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{\ne }{0}\right]$ (26)

The ODE above also has a solution in terms of Liouvillian functions, which can be obtained by using Kovacic's algorithm. See DEtools[kovacicsols].

 > op([1,1],e3);
 ${\mathrm{y\text{'}\text{'}}}{=}\frac{\left({-}{2}{}{I}{}{x}{-}{2}\right){}{\mathrm{y\text{'}}}}{{x}}{-}\frac{{2}{}{I}{}{y}}{{x}}$ (27)
 > a3_bis := dsolve((27),[Kovacic]);
 ${\mathrm{a3_bis}}{≔}{y}{=}\frac{{\mathrm{_C1}}}{{x}}{+}\frac{{\mathrm{_C2}}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{x}}$ (28)

This means that the hypergeometric function appearing in $\mathrm{a3}$ is equal to the right-hand side of $\mathrm{a3_bis}$ for some particular values of _C1 and _C2. The actual values of _C1 and _C2 can be obtained by expanding in series. For that purpose, first build an expression equating $\mathrm{a3}$ to the solution of the ODE.

 > e4 := a3 - a3_bis;
 ${\mathrm{e4}}{≔}{0}{=}{\mathrm{hypergeom}}{}\left(\left[{1}\right]{,}\left[{2}\right]{,}{-}{2}{}{I}{}{x}\right){-}\frac{{\mathrm{_C1}}}{{x}}{-}\frac{{\mathrm{_C2}}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{x}}$ (29)

Next, compute the series of the right-hand side. In this case, it suffices to compute it up to order $2$.

 > series(rhs(e4),x,2);
 $\left({-}{\mathrm{_C1}}{-}{\mathrm{_C2}}\right){}{{x}}^{{-1}}{+}{1}{+}{2}{}{I}{}{\mathrm{_C2}}{+}{O}{}\left({x}\right)$ (30)

Now, to solve for _C1 and _C2, build a system with the coefficients of $x$.

 > sys := {coeffs(convert((30),polynom),x)};
 ${\mathrm{sys}}{≔}\left\{{1}{+}{2}{}{I}{}{\mathrm{_C2}}{,}{-}{\mathrm{_C1}}{-}{\mathrm{_C2}}\right\}$ (31)

Finally, produce:

 > ans_C := solve(sys,{_C1,_C2});
 ${\mathrm{ans_C}}{≔}\left\{{\mathrm{_C1}}{=}{-}\frac{{I}}{{2}}{,}{\mathrm{_C2}}{=}\frac{{I}}{{2}}\right\}$ (32)

It can be proved that this solution for _C1 and _C2 is independent of the order of the series. This is always the case when dealing with linear ODEs provided that the system "sys" includes all the unknowns _Cn. At these values of _C1 and _C2, our equation relating hypergeom([1],[2],-2*I*x) with ${ⅇ}^{-2Ix}$ becomes

 > eval(e4,ans_C);
 ${0}{=}{\mathrm{hypergeom}}{}\left(\left[{1}\right]{,}\left[{2}\right]{,}{-}{2}{}{I}{}{x}\right){+}\frac{{I}}{{2}{}{x}}{-}\frac{{I}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{2}{}{x}}$ (33)

from where the hypergeometric function can be isolated, resulting in the desired identity.

 > isolate((33),hypergeom([1],[2],-2*I*x));
 ${\mathrm{hypergeom}}{}\left(\left[{1}\right]{,}\left[{2}\right]{,}{-}{2}{}{I}{}{x}\right){=}{-}\frac{{I}}{{2}{}{x}}{+}\frac{{I}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{2}{}{x}}$ (34)

In this easy case, this relation can be verified by means of a black box, table-lookup approach by using:

 > convert((34),StandardFunctions);
 ${-}\frac{{I}}{{2}{}{x}}{+}\frac{{I}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{2}{}{x}}{=}{-}\frac{{I}}{{2}{}{x}}{+}\frac{{I}{}{{ⅇ}}^{{-}{2}{}{I}{}{x}}}{{2}{}{x}}$ (35)
 > (lhs-rhs)((35));
 ${0}$ (36)

The approach discussed above, however, does not rely on table lookups and can be used in general, provided that Maple can compute the series of the expressions involved. When the right-hand side of the departing expression ('a3' in the example above) is an integral, this approach is useful for computing its exact value when the integral can be expanded in series and its differential polynomial form can be solved exactly. In the same way, the approach can be used to compute identities between different special functions by directing dsolve to solve the DP problem by using different solving methods, for example, first by using method 'hypergeometric' or 'MeijerG', and then solving the same problem by using method 'Bessel', 'Whittaker', or 'elliptic'.

Finally, it is possible to use dpolyform to solve algebraic (nondifferential) systems as well. As an example of this, consider the following non-polynomial, nondifferential system of equations for the unknowns $y\left(t\right),z\left(t\right)$.

 > declare((y,z)(t), prime=t);
 ${y}{}\left({t}\right){}{\mathrm{will now be displayed as}}{}{y}$
 ${z}{}\left({t}\right){}{\mathrm{will now be displayed as}}{}{z}$
 ${\mathrm{derivatives with respect to}}{}{t}{}{\mathrm{of functions of one variable will now be displayed with \text{'}}}$ (37)
 > sys := [t-tan(y(t)+z(t)-ln(y(t))) = 0, y(t)-exp(-y(t)+z(t)+arctan(t)) = 0];
 ${\mathrm{sys}}{≔}\left[{t}{+}{\mathrm{tan}}{}\left({-}{y}{-}{z}{+}{\mathrm{ln}}{}\left({y}\right)\right){=}{0}{,}{y}{-}{{ⅇ}}^{{-}{y}{+}{z}{+}{\mathrm{arctan}}{}\left({t}\right)}{=}{0}\right]$ (38)

Due to the non-trivial non-polynomial expressions involved, the Maple solve command in previous releases failed to solve this problem for $y\left(t\right)$ and $z\left(t\right)$. By using dpolyform you can solve $\mathrm{sys}$ as follows. First compute a differential polynomial form for $\mathrm{sys}$.

 > dpolyform(sys, no_Fn);
 $\left[{\mathrm{y\text{'}}}{=}\frac{{1}}{{{t}}^{{2}}{+}{1}}{,}{\mathrm{z\text{'}}}{=}\frac{{1}}{{y}{}\left({{t}}^{{2}}{+}{1}\right)}\right]\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}{&where}\phantom{\rule[-0.0ex]{0.3em}{0.0ex}}\left[{y}{+}{1}{\ne }{0}{,}{y}{\ne }{0}\right]$ (39)
 > DP_sys := [op( map(op, (39)) )];
 ${\mathrm{DP_sys}}{≔}\left[{\mathrm{y\text{'}}}{=}\frac{{1}}{{{t}}^{{2}}{+}{1}}{,}{\mathrm{z\text{'}}}{=}\frac{{1}}{{y}{}\left({{t}}^{{2}}{+}{1}\right)}{,}{y}{+}{1}{\ne }{0}{,}{y}{\ne }{0}\right]$ (40)

Second, solve $\mathrm{DP_sys}$ using dsolve

 > sol_DP_sys := dsolve(DP_sys, explicit);
 ${\mathrm{sol_DP_sys}}{≔}\left\{{y}{=}{\mathrm{arctan}}{}\left({t}\right){+}{\mathrm{_C2}}{,}{z}{=}{\mathrm{ln}}{}\left({\mathrm{arctan}}{}\left({t}\right){+}{\mathrm{_C2}}\right){+}{\mathrm{_C1}}\right\}$ (41)

This solution to $\mathrm{DP_sys}$ includes the solution to sys for some particular values of the integration constants $\left\{\mathrm{_C1},\mathrm{_C2}\right\}$ involved. To determine $\left\{\mathrm{_C1},\mathrm{_C2}\right\}$, substitute the above into sys.

 > sys_C := eval(sys, sol_DP_sys);
 ${\mathrm{sys_C}}{≔}\left[{t}{-}{\mathrm{tan}}{}\left({\mathrm{arctan}}{}\left({t}\right){+}{\mathrm{_C2}}{+}{\mathrm{_C1}}\right){=}{0}{,}{\mathrm{arctan}}{}\left({t}\right){+}{\mathrm{_C2}}{-}{{ⅇ}}^{{-}{\mathrm{_C2}}{+}{\mathrm{ln}}{}\left({\mathrm{arctan}}{}\left({t}\right){+}{\mathrm{_C2}}\right){+}{\mathrm{_C1}}}{=}{0}\right]$ (42)

The next step is to solve $\mathrm{sys_C}$ for $\left\{\mathrm{_C1},\mathrm{_C2}\right\}$. We must expand $\mathrm{sys_C}$ in a series. It is sufficient to find a few terms from which you can get a solution. For computational reasons, use three intermediate steps.

 > z1 := map(lhs, sys_C):       # take left-hand-sides
 > z2 := map(series, z1, t, 1): # compute series
 > z3 := simplify( map(convert, z2, polynom) );
 ${\mathrm{z3}}{≔}\left[{-}{\mathrm{tan}}{}\left({\mathrm{_C2}}{+}{\mathrm{_C1}}\right){,}{\mathrm{_C2}}{-}{\mathrm{_C2}}{}{{ⅇ}}^{{-}{\mathrm{_C2}}{+}{\mathrm{_C1}}}\right]$ (43)

Now solve for $\left\{\mathrm{_C1},\mathrm{_C2}\right\}$:

 > _EnvAllSolutions := true;  # see ?solve,details
 ${\mathrm{_EnvAllSolutions}}{≔}{\mathrm{true}}$ (44)
 > sol_C := solve({op(z3)},{_C1,_C2});
 ${\mathrm{sol_C}}{≔}\left\{{\mathrm{_C1}}{=}{\mathrm{\pi }}{}{\mathrm{_Z1~}}{,}{\mathrm{_C2}}{=}{0}\right\}{,}\left\{{\mathrm{_C1}}{=}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{+}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}{,}{\mathrm{_C2}}{=}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{-}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}\right\}$ (45)

where, by convention, $\mathrm{_Z1~}$ is an integer (see solve). Finally, the solution above leads to the solution for the nondifferential $\mathrm{sys}$, by evaluating sol_DP_sys at these values of the integration constants. To see this, take for instance the solution containing the imaginary unit

 > select(has,[sol_C],I)[1];
 $\left\{{\mathrm{_C1}}{=}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{+}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}{,}{\mathrm{_C2}}{=}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{-}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}\right\}$ (46)
 > sol_sys := eval( sol_DP_sys, (46) );
 ${\mathrm{sol_sys}}{≔}\left\{{y}{=}{\mathrm{arctan}}{}\left({t}\right){+}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{-}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}{,}{z}{=}{\mathrm{ln}}{}\left({\mathrm{arctan}}{}\left({t}\right){+}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{-}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}\right){+}\frac{{\mathrm{\pi }}{}{\mathrm{_Z2~}}}{{2}}{+}{I}{}{\mathrm{\pi }}{}{\mathrm{_Z3~}}\right\}$ (47)

This solution can be verified by substituting into $\mathrm{sys}$.

 > sys;
 $\left[{t}{+}{\mathrm{tan}}{}\left({-}{y}{-}{z}{+}{\mathrm{ln}}{}\left({y}\right)\right){=}{0}{,}{y}{-}{{ⅇ}}^{{-}{y}{+}{z}{+}{\mathrm{arctan}}{}\left({t}\right)}{=}{0}\right]$ (48)
 > simplify( expand(eval( sys, sol_sys ) ));
 $\left[{0}{=}{0}{,}{0}{=}{0}\right]$ (49)

References

 Cheb-Terrab, E.S. "A Computational Approach for the Exact Solving of Systems of Partial Differential Equations." Submitted to Computer Physics Communications, 2001.