Updates to Differential Equation (DE) Solvers in Maple 15
Summary
Ordinary Differential Equations (ODEs)
Partial Differential Equations (PDEs)
The theme for exact, symbolic Ordinary Differential Equation solving in Maple 15 is the development of new solving methods for 1st and 2nd order nonlinear ODEs. The results obtained significantly extend the solving capabilities, keeping Maple's ODE solver as the state of the art in computing exact solutions with computer algebra software.
For 1st order ODEs, dsolve can additionally solve two new 1-parameter Abel ODE classes.
For 2nd order ODEs, dsolve can additionally solve eleven new nonlinear ODE families not admitting point symmetries nor integrating factors depending only on just two of x,y,y', so whose solutions are beyond the scope of the previously known solving methods.
Recalling, each new solvable class of equations includes infinitely many different equations that can be transformed into each other through the transformations of the dependent and independent variables that define the class.
For Partial Differential Equations, the theme is the development of more core and new solving algorithms for nonlinear PDEs, and a thorough review of the symmetry commands of PDEtools extending their functionality to handle dynamical symmetries when applicable, and simplifying their use across the board. The Maple mathematical tools for working with Partial Differential Equations are at this point unique, the most complete, and for symmetry analysis the most sophisticated and versatile ones available.
Three new commands were added to PDEtools, one of them involving a new approach to compute solutions to PDE systems involving mathematical functions and for which the standard algorithms are not applicable.
The whole set of symmetry commands of PDEtools now automatically use textbook mathematical jet notation, handle list of infinitesimals or corresponding symmetry generator operators in equal footing, understand different jet notations, and return results in the notation of the input you pass to them, optionally returning in any other jet notation indicated.
Various previously existing commands have had their functionality extended to cover more kinds of problems.
The internal PDEtools Library, presented in Maple 13 with 45 specialized routines for programming purposes, augmented in Maple 14 with 4 new programming routines, is also augmented in Maple 15 with 9 new commands.
By using new algorithms, the dsolve command can additionally solve two 1st order and eleven 2nd order nonlinear ODE families, all of them parametrized by arbitrary functions of the independent and dependent variables and out of reach of the previously existing solving methods.
New solvable 1-parameter 1st order ODE families of Abel type
For 1st order ODEs, the simplest problem beyond reach of complete solving algorithms is known as Abel equations. These are equations of the form
y'=f3⁢y3+f2⁢y2+f1⁢y+f0g1⁢y+g0
where y⁢≡yx is the unknown and the fi⁢≡fix and gj⁢≡gjx are arbitrary functions of x. The biggest subclass of Abel equations known to be solvable was discovered by our research team and is the AIR 4-parameter class. New in Maple 15, two additional 1-parameter classes of Abel equations, beyond the AIR class, are now also solvable.
Examples
PDEtools[declare](y(x), prime=x);
y⁡x⁢will now be displayed as⁢y
derivatives with respect to⁢x⁢of functions of one variable will now be displayed with '
This equation, depending on one parameter α, is now solved in terms of Bessel functions
ode[1] := diff(y(x),x) = (y(x)-x-alpha)/((2*x+2*alpha)*y(x)+2*x);
ode1≔y'=y−x−α2⁢x+2⁢α⁢y+2⁢x
sol[1] := dsolve(ode[1]);
sol1≔c__1+2⁢BesselK⁡4⁢α+12+1,−y2+x⁢y2+x+4⁢α+1+2⁢y+1⁢BesselK⁡4⁢α+12,−y2+x−2⁢BesselI⁡4⁢α+12+1,−y2+x⁢y2+x+4⁢α+1+2⁢y+1⁢BesselI⁡4⁢α+12,−y2+x=0
odetest(sol[1], ode[1]);
0
The related class of Abel equations that is now entirely solvable consists of the set of equations that can be obtained from (2.1.2) by changing variables
x↦F⁡x,y↦P1⁡x⋅y+Q1⁡xP2⁡x⋅y+Q2⁡x
where F⁡x and the four Pi⁡x,Qj⁡x are arbitrary rational functions of x; this is the most general transformation that preserves the form of Abel equations and thus generates Abel ODE classes.
Another Abel equation, also depending on one parameter, is now, surprisingly, solvable entirely in terms of powers, which will be integer whenever α is integer
ode[2] := diff(y(x),x) = -1/2*(y(x)-2)*(((x-1)*alpha+x)*y(x)-2*alpha)/x/((-alpha+x)*y(x)+(x-1)*alpha-x);
ode2≔y'=−y−2⁢x−1⁢α+x⁢y−2⁢α2⁢x⁢−α+x⁢y+x−1⁢α−x
sol[2] := dsolve(ode[2]);
sol2≔c__1+−α⁢2+y2−2⁢y⁢x⁢1+α⁢x−3⁢α2x⁢x⁢α+y−1−α⁢y+12α−1⁢−y−22⁢α−1⁢x2−y⁢α⁢α−1⁢y−2⁢x−2⁢α2⁢1+α⁢x−3⁢α2x2⁢x⁢α+y−1−α⁢y+12−α⁢−αx1+α⁢x−3⁢α+x2x−y−1⁢α+y−1⁢x2=0
As in the case of equation (2.1.2), the entire set of equations obtained by changing variables in (2.1.5) using the transformation that generates Abel ODE classes are now also solvable.
New solvable 2nd order nonlinear ODE families
By using new algorithms developed by our research team, the dsolve command can additionally solve 11 nonlinear 2nd order ODE families that have no point symmetries and admit no integrating factors depending only on two of x,y,y'. Each of these families of equations is parametrized by arbitrary functions of the independent and dependent variables, and the equations are solved by dsolve in Maple 15 for any values of these parametrizing functions. For 3 of these 11 families of equations, a general solution is computable directly, skipping the reduction of order step. For the other 8 families of equations, the original 2nd order ODE is systematically reduced to one of 1st order and dsolve will return a general solution when the 1st order equation is solvable with the existing algorithms. In what follows, an illustration of some of these newly solvable families of equations is presented.
An ODE family parametrized by an arbitrary function G⁡y
ode[3] := diff(diff(y(x),x),x) = (G(y(x)))/(-x + G(y(x)))/D(G)(y(x))/x + (x + G(y(x)) + x^2)/(x-G(y(x)))/x*diff(y(x),x) + ((-x + G(y(x)))*`@@`(D,2)(G)(y(x))-2*(1/2 + x)*D(G)(y(x))^2)/(x-G(y(x)))/D(G)(y(x))*diff(y(x),x)^2 + D(G)(y(x))^2*x/(x-G(y(x)))*diff(y(x),x)^3;
ode3≔y''=G⁡y−x+G⁡y⁢D⁡G⁡y⁢x+x+G⁡y+x2⁢y'x−G⁡y⁢x+−x+G⁡y⁢D2⁡G⁡y−2⁢12+x⁢D⁡G⁡y2⁢y'2x−G⁡y⁢D⁡G⁡y+D⁡G⁡y2⁢x⁢y'3x−G⁡y
This ODE has no point symmetries, the determining PDE for them only admits both infinitesimals equal to zero:
PDEtools[DeterminingPDE](ode[3]);
_ηy⁡x,y=0,_ξx⁡x,y=0
A solution for any of the members of this ODE family ode3, that is regardless of the form of the mapping G, can now be computed
sol[3] := dsolve(ode[3]);
sol3≔c__2+x⁢KummerM⁡−c__1,1−c__1,−x+G⁡y−c__1⁢ⅇ−x+G⁡yx⁢KummerU⁡−c__1,1−c__1,−x+G⁡y=0
Verify this result
odetest(sol[3], ode[3]);
Analogously, this other new ODE family can also be solved for arbitrary values of the parameter α and the function parameter G⁡y
ode[4] := diff(y(x), x, x) = (alpha*exp(1/x)*x + x^2*diff(G(x),x) + alpha*(ln(y(x)) + 2))/(exp(1/x)*x + ln(y(x)))/alpha/y(x)*diff(y(x),x)^2 + ((2*x^3*diff(G(x),x) + alpha*(-1 + x))*exp(1/x) + 2*x^2*diff(G(x),x)*ln(y(x)))/x/(exp(1/x)*x + ln(y(x)))/alpha*diff(y(x),x) + (x^2*exp(2/x) + 2*x*exp(1/x)*ln(y(x)) + ln(y(x))^2)*diff(G(x),x)/(exp(1/x)*x + ln(y(x)))/alpha*y(x);
ode4≔y''=α⁢ⅇ1x⁢x+x2⁢G'+α⁢ln⁡y+2⁢y'2ⅇ1x⁢x+ln⁡y⁢α⁢y+2⁢x3⁢G'+x−1⁢α⁢ⅇ1x+2⁢x2⁢G'⁢ln⁡y⁢y'x⁢ⅇ1x⁢x+ln⁡y⁢α+x2⁢ⅇ2x+2⁢x⁢ⅇ1x⁢ln⁡y+ln⁡y2⁢G'⁢yⅇ1x⁢x+ln⁡y⁢α
sol[4] := dsolve(ode[4], y(x));
sol4≔y=ⅇ∫−x⁢ⅇ1x+∫c__1⁢α−G⁡xc__1⁢α⁢x−G⁡x⁢x+αⅆx⁢c__1⁢α−G⁡xc__1⁢α⁢x−G⁡x⁢x+αⅆx+c__2ⅇ∫c__1⁢α−G⁡xc__1⁢α⁢x−G⁡x⁢x+αⅆx
The following example shows a different kind of situation, where the nonlinear ODE problem is now reducible with new algorithms; the ODE family also does not admit point symmetries, and is parametrized by two functions G⁡y,H⁡x,y, that is, it can be reduced in order for any value or form of these functions
ode[5] := diff(diff(y(x),x),x) = 1/H(x,y(x))/D[2](H)(x,y(x))*D[1](H)(x,y(x))^2-1/x/D[2](H)(x,y(x))*D[1](H)(x,y(x))-D[1,1](H)(x,y(x))/D[2](H)(x,y(x)) + (-2*D[1,2](H)(x,y(x))/D[2](H)(x,y(x))-1/x + 2*D[1](H)(x,y(x))/H(x,y(x)) + 1/H(x,y(x))/D[2](H)(x,y(x))*D[1](H)(x,y(x))^2*x*D(G)(y(x)))*diff(y(x),x) + (1/H(x,y(x))*D[2](H)(x,y(x))-D[2,2](H)(x,y(x))/D[2](H)(x,y(x)) + 2*x*D[1](H)(x,y(x))/H(x,y(x))*D(G)(y(x)))*diff(y(x),x)^2 + 1/H(x,y(x))*x*D[2](H)(x,y(x))*D(G)(y(x))*diff(y(x),x)^3;
ode5≔y''=D1⁡H⁡x,y2H⁡x,y⁢D2⁡H⁡x,y−D1⁡H⁡x,yx⁢D2⁡H⁡x,y−D1,1⁡H⁡x,yD2⁡H⁡x,y+−2⁢D1,2⁡H⁡x,yD2⁡H⁡x,y−1x+2⁢D1⁡H⁡x,yH⁡x,y+D1⁡H⁡x,y2⁢x⁢D⁡G⁡yH⁡x,y⁢D2⁡H⁡x,y⁢y'+D2⁡H⁡x,yH⁡x,y−D2,2⁡H⁡x,yD2⁡H⁡x,y+2⁢x⁢D1⁡H⁡x,y⁢D⁡G⁡yH⁡x,y⁢y'2+x⁢D2⁡H⁡x,y⁢D⁡G⁡y⁢y'3H⁡x,y
dsolve(ode[5]);
y=_b⁡_awhere_b_a=−G⁡_b⁡_a⁢D1⁡H⁡_a,_b⁡_a⁢_a+D1⁡H⁡_a,_b⁡_a⁢_a⁢c__1+H⁡_a,_b⁡_aD2⁡H⁡_a,_b⁡_a⁢_a⁢G⁡_b⁡_a+c__1,_a=x,_b⁡_a=y,x=_a,y=_b⁡_a
As usual, for different sets of particular values of G⁡y and H⁡x,y the 1st order ODE shown in the result above is solvable. For example, consider the following 2nd order ODE that results from specializing G and H
ode[5.1] := eval(ode[5], {G = (y -> 1/y), H = ((x,y) -> (1+x*y))});
ode5.1≔y''=y21+y⁢x⁢x−yx2+−3x+2⁢y1+y⁢x−11+y⁢x⁢y'+x1+y⁢x−2⁢xy⁢1+y⁢x⁢y'2−x2⁢y'31+y⁢x⁢y2
The corresponding reduced ODE is of Abel type with nonconstant invariants and solvable
sol[5.1] := dsolve(ode[5.1]);
sol5.1≔c__2−−x+2⁢c__1⁢ⅇc__1⁢arctanh⁡−y⁢x+2x⁢y22⁢x⁢c__1−∫` `−y⁢x+22⁢x⁢c__1⁢y_f⁢ⅇ2⁢c__1⁢arctanh⁡2⁢c__1⁢_f_f2−14⁢c__12ⅆ_f=0
odetest(sol[5.1], ode[5.1]);
Another kind of 2nd order nonlinear problem, reducible to first order with the new algorithms is the following ODE family depending on two arbitrary functions F⁡y,G⁡y
ode[6] := diff(y(x), x,x) = 1/2*((-2*ln(x)-3)*D(G)(y(x))-2*F(y(x)))/x/(F(y(x)) + D(G)(y(x))*ln(x))*diff(y(x),x) + (-D(F)(y(x))-`@@`(D,2)(G)(y(x))*ln(x))/(F(y(x)) + D(G)(y(x))*ln(x))*diff(y(x),x)^2 + 1/2*x*(F(y(x)) + D(G)(y(x))*ln(x))*D(G)(y(x))*diff(y(x),x)^3;
ode6≔y''=−2⁢ln⁡x−3⁢D⁡G⁡y−2⁢F⁡y⁢y'2⁢x⁢F⁡y+D⁡G⁡y⁢ln⁡x+−D⁡F⁡y−D2⁡G⁡y⁢ln⁡x⁢y'2F⁡y+D⁡G⁡y⁢ln⁡x+x⁢F⁡y+D⁡G⁡y⁢ln⁡x⁢D⁡G⁡y⁢y'32
Consider for instance the simpler case where G=y↦y,F=y↦1y, so that our equation becomes
ode[6.1] := eval(ode[6], {G = (y -> y),F = (y -> 1/y)});
ode6.1≔y''=−2⁢ln⁡x−3−2y⁢y'2⁢x⁢1y+ln⁡x+y'2y2⁢1y+ln⁡x+x⁢1y+ln⁡x⁢y'32
sol[6.1] := dsolve(ode[6.1]);
sol6.1≔c__2+Ei1⁡−y−4⁢c__12⁢Ei1⁡y−ln⁡x⁢ⅇy+2⁢c__12ⅇy=0
In the same line, consider this other nonlinear ODE family, not admitting point symmetries and depending on four arbitrary functions F⁡y,G⁡y,H⁡x,J⁡x for which the new routines in Maple 15 can systematically obtain a reduction of order
ode[7] := diff(y(x), x,x) = diff(y(x),x)*J(x)*(1 + H(x)*diff(y(x),x))^2/H(x)*D(F)(y(x)) + (-diff(J(x),x)-diff(y(x),x)*diff(J(x),x)*H(x)-diff(y(x),x)*J(x)*diff(H(x),x))/J(x)/H(x) + diff(y(x),x)*(1 + H(x)*diff(y(x),x))/H(x)*`@@`(D,2)(G)(y(x))/D(G)(y(x))-diff(y(x),x)*(1 + H(x)*diff(y(x),x))/H(x)*`@@`(D,2)(F)(y(x))/D(F)(y(x));
ode7≔y''=y'⁢J⁡x⁢1+H⁡x⁢y'2⁢D⁡F⁡yH⁡x+−J'−y'⁢J'⁢H⁡x−y'⁢J⁡x⁢H'J⁡x⁢H⁡x+y'⁢1+H⁡x⁢y'⁢D2⁡G⁡yH⁡x⁢D⁡G⁡y−y'⁢1+H⁡x⁢y'⁢D2⁡F⁡yH⁡x⁢D⁡F⁡y
Without specializing the values of the four functions parametrizing the ODE family, only a reduction of order to the most general form of a 1st order equation is possible
sol[7] := dsolve(ode[7], y(x));
sol7≔y=_b⁡_awhere_b_a=−D⁡F⁡_b⁡_a⁢J⁡_a⁢G⁡_b⁡_a+D⁡F⁡_b⁡_a⁢J⁡_a⁢c__1+D⁡G⁡_b⁡_aH⁡_a⁢D⁡F⁡_b⁡_a⁢J⁡_a⁢G⁡_b⁡_a+c__1,_a=x,_b⁡_a=y,x=_a,y=_b⁡_a
odetest(sol[7], ode[7]);
As in the other cases, in the typical situation where these functions F⁡y,G⁡y,H⁡x,J⁡x appear specialized in some way, the 1st order equation obtained systematically by reducing the order will not be the most general one and so frequently automatically solved when the 2nd order equation is passed to dsolve.
A relevant 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 equation solving and symmetry analysis.
New commands: FunctionFieldSolutions, SymmetryCommutator and SymmetryGauge
Three new commands were added to PDEtools.
FunctionFieldSolutions is a new command that involves an innovative approach to computing exact solutions to DE systems involving mathematical functions, possibly inequations, ODEs and also non-differential equations. In these cases, due to the presence of nonpolynomial objects, the original Maple approach by decoupling the system using differential polynomial extensions, although powerful, sometimes fails in solving the problem. The new approach in FunctionFieldSolutions skips entirely that step and instead searches for solutions that can be written as a power series (with some upper bound degree n) in the mathematical functions and its derivatives (up to some upper bound differential order m), having for coefficients multivariable polynomials (with some upper bound degree r). In turn these polynomials have undetermined coefficients that get adjusted, resulting in the solution. To compute the key values of n,m,r to construct these function field solutions, the new command maps the problem into one that can be tackled with the existing PDEtools:-Library:-UpperBounds (see PDEtools[Library]).
SymmetryCommutator is a new command to compute the commutator between two symmetries, given either as lists of infinitesimals or as infinitesimal generator procedures. This command is useful when studying the properties of a group of symmetries or when deriving the group constants or relations to make the group complete.
SymmetryGauge is a new command to gauge PDE symmetries. It is well known that an ODE symmetry can be rewritten in different ways (see Xgauge). It is not so well known, but the same happens with PDE symmetries. The ability to rewrite a symmetry is relevant for a number of purposes. First, that permits identifying that two apparently different symmetries are actually the same by rewriting them in evolutionary form (gauge ξ=0). Second, symmetries that appear as dynamical ones can frequently be rewritten as pointlike, transforming the usability of the symmetry from perhaps very difficult into straightforward. Finally, depending on the form of the symmetry, by rewriting them it is frequently possible to simplify its form considerably so that invariants or canonical coordinates become computable and so the symmetry can be used to reduce the number of independent variables of PDE systems.
with(PDEtools):
For FunctionFieldSolutions, consider the following nonlinear coupled system in F⁡x,y,G⁡x,y that involves the exponential function exp
declare((F, G)(x, y));
F⁡x,y⁢will now be displayed as⁢F
G⁡x,y⁢will now be displayed as⁢G
sys[1] := {-F(x,y)*diff(F(x,y),y)+diff(F(x,y),x) = -F(x,y)*(exp(x)-1/y)+exp(x)*y+1/x, -F(x,y)*diff(G(x,y),y)+diff(G(x,y),x) = -F(x,y)*(exp(x)+1/y)+exp(x)*y+1/x};
sys1≔−F⁢Fy+Fx=−F⁢ⅇx−1y+ⅇx⁢y+1x,−F⁢Gy+Gx=−F⁢ⅇx+1y+ⅇx⁢y+1x
Typically, systems of this type do not admit polynomial solutions
PolynomialSolutions(sys[1]); # returns NULL
On the other hand, these systems frequently admit function field solutions:
sol[1] := FunctionFieldSolutions(sys[1]);
sol1≔F=ⅇx⁢y+ln⁡x−ln⁡y+c__1,G=ⅇx⁢y+ln⁡x+ln⁡y+c__2
Verify this solution
pdetest(sol[1], sys[1]);
The following nonlinear system is also not solvable by pdsolve
sys[2] := {-F(x,y)*diff(F(x,y),y)+diff(F(x,y),x) = -F(x,y)*(exp(x)-1/y*exp(x/y))+exp(x)*y+exp(x/y)/x, -F(x,y)*diff(G(x,y),y)+diff(G(x,y),x) = -F(x,y)*(exp(x)+cos(x*y)/y)+exp(x)*y+cos(x*y)/x};
sys2≔−F⁢Fy+Fx=−F⁢ⅇx−ⅇxyy+ⅇx⁢y+ⅇxyx,−F⁢Gy+Gx=−F⁢ⅇx+cos⁡y⁢xy+ⅇx⁢y+cos⁡y⁢xx
Its solution via FunctionFieldSolutions takes time to be computed; in cases like this, the use of optional arguments to restrict the degrees in which the solution would depend on mathematical functions, can diminish the computational time
sol[2] := FunctionFieldSolutions(sys[2], mathfunctiondegree = 1);
sol2≔F=Ei⁡xy−c__4⁢Si⁡y⁢x+c__4⁢Ssi⁡y⁢x+ⅇx⁢y+c__2,G=Ci⁡y⁢x+c__3⁢Si⁡y⁢x−c__3⁢Ssi⁡y⁢x+ⅇx⁢y+c__1
pdetest(sol[2], sys[2]);
For SymmetryCommutator, consider two list of infinitesimals corresponding to a symmetry transformation where there are two independent (x,t) and one dependent variable, u⁡x,t
S[1], S[2] := [_xi[x] = x, _xi[t] = 1, _eta[u] = t], [_xi[x] = 1, _xi[t] = 1/t, _eta[u] = x^2];
S1,S2≔_ξx=x,_ξt=1,_ηu=t,_ξx=1,_ξt=1t,_ηu=x2
For illustration purposes compute also the corresponding infinitesimal generators as differential operators
G[1] := InfinitesimalGenerator(S[1], u(x,t), expanded);
G1≔f→x⁢∂∂x⁢f+∂∂t⁢f+t⁢∂∂u⁢f
G[2] := InfinitesimalGenerator(S[2], u(x,t), expanded);
G2≔f→∂∂x⁢f+∂∂t⁢ft+x2⁢∂∂u⁢f
The symmetry commutator is S1,S2=S1@S2−S2@S1; when the first symmetry (S1) is a differential operator procedure, the output is also a differential operator
SymmetryCommutator(G[1], G[2], u(x,t));
f→−∂∂x⁢f−∂∂t⁢ft2+2⁢t⁢x2−1⁢∂∂u⁢ft
The output can be requested as a list or a procedure and the input can also be of mixed types, here we pass G1 and S2
SymmetryCommutator(G[1], S[2], u(x,t), output = list);
_ξx=−1,_ξt=−1t2,_ηu=2⁢t⁢x2−1t
The prolongation order of the commutator is by default the one of the given infinitesimals, and the same happens with the output's jetnotation, but both can be requested to be different using the optional arguments prolongation = n, and notation = <any jet notation>
SymmetryCommutator(G[1], G[2], u(x,t), prolongation = 2);
f→−∂∂x⁢f−∂∂t⁢ft2+2⁢t⁢x2−1⁢∂∂u⁢ft+4⁢x⁢∂∂ux⁢f+t−2⁢ut⁢∂∂ut⁢ft3+4⁢∂∂ux,x⁢f−2⁢ux,t⁢∂∂ux,t⁢ft3−2⁢2⁢t⁢ut,t+t−3⁢ut⁢∂∂ut,t⁢ft4
SymmetryCommutator(G[1], G[2], u(x,t), prolongation = 2, notation = jetnumbers);
f→−∂∂x⁢f−∂∂t⁢ft2+2⁢t⁢x2−1⁢∂∂u[]⁢ft+4⁢x⁢∂∂u1⁢f+t−2⁢u2⁢∂∂u2⁢ft3+4⁢∂∂u1,1⁢f−2⁢u1,2⁢∂∂u1,2⁢ft3−2⁢2⁢t⁢u2,2+t−3⁢u2⁢∂∂u2,2⁢ft4
For SymmetryGauge, consider the list of infinitesimals corresponding to a symmetry transformation where there are two independent and one dependent variables, u⁡x,t
S := [_xi[x] = 1, _xi[t] = t, _eta[u] = u];
S≔_ξx=1,_ξt=t,_ηu=u
For illustration purposes let's construct also the general form of a 2nd order PDE admitting this symmetry; for that we use the InvariantEquation command
PDE := InvariantEquation(S, u(x,t), order = 2, name = Lambda);
* Partial match of 'name' against keyword 'arbitraryfunctionname'
PDE≔Λ⁡ut,t⁢ⅇ−x,u⁡x,t⁢ⅇ−x,ut,x,ux⁢ⅇ−x,ut,t⁢ⅇx,ux,x⁢ⅇ−x
This general form can be particularized in different ways, for instance
pde := isolate(op(-1, PDE) = subsop(-1 = NULL, PDE), diff(u(x,t), x,x));
pde≔ux,x=Λ⁡ut,t⁢ⅇ−x,u⁡x,t⁢ⅇ−x,ut,x,ux⁢ⅇ−x,ut,t⁢ⅇxⅇ−x
Now: the general form of the symmetry S admitted by pde is not S but
S1 := SymmetryGauge(S, u(x,t));
S1≔_ξx=f__1⁡x,t,u+1,_ξt=f__2⁡x,t,u+t,_ηu=f__1⁡x,t,u⁢ux+f__2⁡x,t,u⁢ut+u
Verify that S1 is a symmetry of pde
SymmetryTest(S1, pde);
Note the presence of arbitrary functions in S1; there are as many as the number of independent variables. The input of SymmetryGauge can also be the infinitesimal generator procedure corresponding to S, in which case the output of SymmetryGauge will also be a procedure; the option expanded of SymmetryGauge is the same one of InfinitesimalGenerator
G := InfinitesimalGenerator(S, u(x,t), jetnotation = jetvariables);
G≔f→∂∂x⁢f+t⁢∂∂t⁢f+u⁢∂∂u⁢f
SymmetryGauge(G, u(x,t), expanded);
f→_F1⁡x,t,u+1⁢∂∂x⁢f+_F2⁡x,t,u+t⁢∂∂t⁢f+_F1⁡x,t,u⁢ux+_F2⁡x,t,u⁢ut+u⁢∂∂u⁢f
The prolongation order of the symmetry returned is by default the one of the given symmetry, but can also be requested to be different using the optional argument prolongation = n, where n is a positive integer. To rewrite the symmetry in evolutionary form use the _xi = 0 optional argument
S0_xi := SymmetryGauge(S, u(x,t), xi = 0);
S0_xi≔_ξx=0,_ξt=0,_ηu=−t⁢ut+u−ux
Verify that S0_xi is a symmetry of pde
SymmetryTest(S0_xi, pde);
Compare with the gauge where _eta = 0
S0_eta := SymmetryGauge(S, u(x,t), eta = 0);
S0_eta≔_ξx=−f__2⁡x,t,u⁢ut+u−uxux,_ξt=f__2⁡x,t,u+t,_ηu=0
SymmetryTest(S0_eta, pde);
You can also indicate the value of each of the infinitesimals appearing in the output, see SymmetryGauge
New functionality in PDEtools commands
The following commands were significantly enhanced in their functionality: ConservedCurrents, D_Dx, DeterminingPDE, Eta_k, InfinitesimalGenerator, Infinitesimals, IntegratingFactors, InvariantEquation and Solve.
Apart from that, in Maple 15, the entire set of symmetry commands of PDEtools:
automatically use textbook mathematical jet notation on input and output;
handle list of infinitesimals or the corresponding symmetry generator operators in equal footing;
understand different jet notations as representing the same mathematical objects;
return list of infinitesimals with infinitesimal labels in mathematical notation, unless your input contains infinitesimals without labels;
return results in the jet notation of the input you pass to them;
optionally return in any jet notation you request.
Consider a problem with one dependent variable u⁡x,t and the infinitesimal generator of a symmetry transformation
G := f -> x*diff(f, x) + diff(f, t) + u*diff(f, u);
G≔f→x⁢∂∂x⁢f+∂∂t⁢f+u⁢∂∂u⁢f
To compute, for instance, the transformation that maps this operator into its canonical form, that is the canonical coordinates associated to this symmetry, you no longer need to construct the list of infinitesimals corresponding to G; you can now pass G itself
CanonicalCoordinates(G, u(x,t), v(r,s));
r=−ln⁡x+t,s=u⁡x,tx,v⁡r,s=ln⁡x
Solving now for the new variables v⁡r,s, to achieve the canonical form of G you change variables in the symmetry, and now you can pass to ChangeSymmetry the operator G itself; also new: the output is automatically an operator because the input is so, or you can optionally request this output to be a list of infinitesimals
solve((50), {x,t, u(x,t)});
t=r+v⁡r,s,x=ⅇv⁡r,s,u⁡x,t=s⁢ⅇv⁡r,s
ChangeSymmetry((51), G);
f→∂∂v⁢f
ChangeSymmetry((51), G, out = list);
* Partial match of 'out' against keyword 'output'
_ξr=0,_ξs=0,_ηv=1
Note the (new) presence of infinitesimal labels in this output. The motivation behind all these changes is to have a computational experience with symmetry analysis using true mathematical notation, as close as possible as the one you use when computing with paper and pencil.
Apart from the ability to compute conserved currents and integrating factors of general types, ConservedCurrents and IntegratingFactors can now specifically compute conserved currents and integrating factors of polynomial or functionfield types.
Example
declare(u(x, t));
u⁡x,t⁢will now be displayed as⁢u
pde := diff(u(x, t), t, x)+diff(u(x, t), x, x, x)+(diff(u(x, t), x))*u(x, t) = 0;
pde≔ut,x+ux,x,x+ux⁢u=0
A conserved current of order 1 (so involving up to 1st order derivatives), depending on arbitrary functions
ConservedCurrents(pde, order = 1);
_Jx⁡x,t,u,ux,ut=D3⁡f__1⁡x,t,u⁢ut+D2⁡f__1⁡x,t,u+f__3t,_Jt⁡x,t,u,ux,ut=−D3⁡f__1⁡x,t,u⁢ux−D1⁡f__1⁡x,t,u−f__3x+f__4⁡x
A conserved current of order 2 (so involving up to 2nd order derivatives), of polynomial type
ConservedCurrents(pde, type = polynomial, split = false);
* Partial match of 'type' against keyword 'typeofconservedcurrent'
ConservedCurrentTest((57), pde);
An integrating factor of order 1 (so involving up to 1st order derivatives), depending on one arbitrary function
IntegratingFactors(pde, order = 1);
_μ1⁡x,t,u,ux,ut=f__1⁡t
An integrating factor of order 2 of polynomial type
IntegratingFactors(pde, type = polynomial, split = false);
* Partial match of 'type' against keyword 'typeofintegratingfactor'
_μ1⁡x,t,u,ux,ut,ux,x,ut,x,ut,t=u2+2⁢ut+2⁢ux,x⁢c__3+c__4⁢t2+c__2⁢t+c__1
D_Dx can now compute total and partial derivatives, with respect to names and/or functions (including derivatives) of the jet space. This permits computing in a natural way objects like
⁢ⅆⅆt∂∂x.⁢Lxt,⁢x.t=⁢D_DxLxt,⁢x.t,⁢x.t,⁢t,⁢xt
where the right-hand side is entered as D_Dx(L(x(t), diff(x(t), t)), diff(x(t), t), t, [x(t)]) and means to differentiate Lxt,⁢x.t with respect to x.⁡t followed by taking the total derivative with respect to t, taking x⁡t as the dependent variable defining the jet space.
L(t, x, x[t]);
L⁡t,x,xt
D_Dx((61), x[t], t, [x(t)]);
∂2∂t∂xtL⁡t,x,xt+xt⁢∂2∂x∂xtL⁡t,x,xt+xt,t⁢∂2∂xt2L⁡t,x,xt
The result above is computed with L already in jet notation but it can equally be computed passing L in function notation:
FromJet((61), x(t));
L⁡t,x⁡t,ⅆⅆtx⁡t
D_Dx((63), x[t], t, [x(t)]);
or passing the differentiation variable also in function notation
D_Dx((63), diff(x(t), t), t, [x(t)]);
If you need the output not in jetnotation use
D_Dx((61), x[t], t, [x(t)], jetnotation = false);
D1,3⁡L⁡t,x⁡t,ⅆⅆtx⁡t+ⅆⅆtx⁡t⁢D2,3⁡L⁡t,x⁡t,ⅆⅆtx⁡t+ⅆ2ⅆt2x⁡t⁢D3,3⁡L⁡t,x⁡t,ⅆⅆtx⁡t
DeterminingPDE now understands more types of symmetries: evolutionary and general, apart from pointlike and contact.
pde≔∂2∂t∂xu⁡x,t+∂3∂x3u⁡x,t+∂∂xu⁡x,t⁢u⁡x,t=0
Compare the determining equations for the point like and evolutionary symmetries of pde
DeterminingPDE(pde);
∂2∂t2_ξt⁡x,t,u=0,∂∂u_ξt⁡x,t,u=0,∂∂x_ξt⁡x,t,u=0,∂∂t_ξx⁡x,t,u=0,∂∂u_ξx⁡x,t,u=0,∂∂x_ξx⁡x,t,u=∂∂t_ξt⁡x,t,u2,_ηu⁡x,t,u=−∂∂t_ξt⁡x,t,u⁢u
DeterminingPDE(pde, type = evolutionary);
* Partial match of 'type' against keyword 'typeofsymmetry'
∂2∂ut2_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0,∂2∂ut∂ux_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0,∂2∂ux2_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0,∂∂t_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=−ut⁢∂∂ux_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ux+∂∂ut_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ut−_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,tu,∂∂u_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=−∂∂ux_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ux−∂∂ut_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ut+_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,tu,∂∂x_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=−ux⁢∂∂ux_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ux+∂∂ut_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t⁢ut−_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t2⁢u,∂∂ut,t_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0,∂∂ux,t_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0,∂∂ux,x_ηu⁡x,t,u,ux,ut,ux,x,ux,t,ut,t=0
Note in the result above the dependency of the infinitesimal _ηu: it involves derivatives up to the order of pde minus 1.
Eta_k: the returned table procedure η that provides any desired prolongation of the infinitesimals can now be indexed using independent and dependent variables in jet notation, or their respective numeric positions in the lists of independent and dependent variables (that is jetnumbers notation). Correspondingly, the output will be in jetvariables or jetnumbers notation. This implements a more natural mathematical representation of infinitesimal prolongations while providing an easy way to switch between notations, interactively or within a program,
Consider a problem with two dependent variables u⁡x,t,v⁡x,t, a related infinitesimal generator, and the corresponding η returned by Eta_k
DepVars := [u, v](x, t);
DepVars≔u,v⁡x,t
G := f -> x*diff(f, x) + diff(f, t) + v*diff(f, u) - u*diff(f, v);
G≔f→x⁢∂∂x⁢f+∂∂t⁢f+v⁢∂∂u⁢f−u⁢∂∂v⁢f
Eta := Eta_k(G, DepVars);
Η≔η
This is the 4th prolongation of ηv, two times with respect to each of x and t, that is ηv,x,x,t,t; you request it using the same notation
Eta[v, [x, x, t, t]];
−ux,x,t,t−2⁢vx,x,t,t
to see this prolongation in jetnumbers notation just enter the indexation of Η using jetnumbers, so to v corresponds 2 and to x and t respectively corresponds 1 and 2
Eta[2, [1, 1, 2, 2]];
−u1,1,2,2−2⁢v1,1,2,2
InfinitesimalGenerator now has the option jetnotation to choose the notation for the output, and also accepts infinitesimal generator operators on input, so that it can be used to rewrite in different notation or extend and existing infinitesimal generator operator
Consider the same symmetry of the previous example
The first prolongation of the corresponding infinitesimal generator operator, with the same notation of G, is
G[1] := InfinitesimalGenerator(G, [u, v](x,t), prolongation = 1, expanded);
G1≔f→x⁢∂∂x⁢f+∂∂t⁢f+v⁢∂∂u⁢f−u⁢∂∂v⁢f+vx−ux⁢∂∂ux⁢f+−ux−vx⁢∂∂vx⁢f+vt⁢∂∂ut⁢f−ut⁢∂∂vt⁢f
Departing directly from this result, rewrite it with jetnumbers notation and extend it to the 2nd prolongation
G[2] := InfinitesimalGenerator(G[1], [u, v](x,t), expanded, prolongation = 2, notation = jetnumbers);
G2≔f→x⁢∂∂x⁢f+∂∂t⁢f+v[]⁢∂∂u[]⁢f−u[]⁢∂∂v[]⁢f+v1−u1⁢∂∂u1⁢f+−u1−v1⁢∂∂v1⁢f+v2⁢∂∂u2⁢f−u2⁢∂∂v2⁢f+−2⁢u1,1+v1,1⁢∂∂u1,1⁢f+−u1,1−2⁢v1,1⁢∂∂v1,1⁢f+v1,2−u1,2⁢∂∂u1,2⁢f+−u1,2−v1,2⁢∂∂v1,2⁢f+v2,2⁢∂∂u2,2⁢f−u2,2⁢∂∂v2,2⁢f
Infinitesimals understands more types of symmetries: evolutionary and general, apart from pointlike and contact, and can compute infinitesimals combining these types, as for instance in And(evolutionary, polynomial), that is, dynamical symmetries with the _ξ infinitesimals equal to zero and the _η infinitesimals polynomial in the jet variables including all partial derivatives
Consider again a problem with two dependent variables u,v⁡x,t and the following PDE system for them
DepVars := [u,v](x,t);
U, V := diff_table(u(x,t)), diff_table(v(x,t)):
eq[1] := U[t] + 1/2*U[x]^2 + 2*V[] - 2*x = 1/2*(-V[x]^2 + 2*V[x,x] * V[])/V[]^2;
eq1≔ut+ux22+2⁢v⁡x,t−2⁢x=2⁢v⁡x,t⁢vx,x−vx22⁢v⁡x,t2
eq[2] := V[t] + diff(V[]*U[x], x)=0;
eq2≔vt+vx⁢ux+v⁡x,t⁢ux,x=0
PDESYS := [eq[1], eq[2]]:
S := Infinitesimals(PDESYS, DepVars, typeofsymmetry = And(evolutionary, polynomial), displayfunctionality = false);
S≔_ξx=0,_ξt=0,_ηu=1,_ηv=0,_ξx=0,_ξt=0,_ηu=ut,_ηv=vt,_ξx=0,_ξt=0,_ηu=−2⁢t+ux,_ηv=vx,_ξx=0,_ξt=0,_ηu=−t2+t⁢ux−x,_ηv=t⁢vx
Note that, as expected, in the result above there are dynamical symmetries (the last three), involving the derivatives ut,ux,vt and vx. Dynamical symmetries can also be tested for correctness with SymmetryTest
map(SymmetryTest, [S], PDESYS);
0,0,0,0
InvariantEquation accepts a new optional argument, explicit, to indicate that the invariant equation to be returned should have the form of an explicit PDE system with all the highest derivatives isolated in the left-hand sides. In addition, this command can now compute the PDE system invariant under a set of generic dynamical symmetries, that is, symmetries where the corresponding infinitesimals depend directly on the derivatives of the unknowns of the problem.
Consider a problem with two independent and two dependent variables, u,v⁡x,t,
declare(u(x, t), v(x, t));
v⁡x,t⁢will now be displayed as⁢v
and two possible related infinitesimal generator operators, for instance
G[1] := f -> t*diff(f,x) + (t^2+x)*diff(f,u);
G1≔f→t⁢∂∂x⁢f+t2+x⁢∂∂u⁢f
G[2] := f -> t*diff(f,t) + (t^3+3*t*x)*diff(f,u) - v*diff(f,v);
G2≔f→t⁢∂∂t⁢f+t3+3⁢t⁢x⁢∂∂u⁢f−v⁢∂∂v⁢f
To compute the standard invariant equation under both symmetry groups, as an arbitrary function Λ of differential invariants, in Maple 15, instead of the list of infinitesimals corresponding to G1 and G2, you can pass G1 and G2 themselves
InvariantEquation([G[1], G[2]], [u, v](x,t), order = 2, arbitraryfunctionname = Lambda) = 0;
Λ⁡v⁢t,t⁢vx,ux,x,vx,x⁢t,t⁢t⁢vt+vx⁢x,t⁢ut,x+x⁢ux,x−3⁢t,t⁢t⁢vt,x+x⁢vx,x,t2⁢vt,t+2⁢t⁢x⁢vt,x+x2⁢vx,x⁢t,−2⁢t33+t2⁢ut,t+2⁢t⁢x⁢ut,x−2⁢t⁢ut+x2⁢ux,x−2⁢ux⁢x+2⁢u=0
To compute an explicit form of this equation with all the second order partial derivatives of u and v isolated in the left-hand sides, pass the option explicit
InvariantEquation([G[1], G[2]], [u, v](x,t), order = 2, explicit);
ux,x=f__1⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x,vx,x=f__2⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢xt,ut,x=−2⁢f__1⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x⁢x+f__10⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x+6⁢t2⁢t,vt,x=−2⁢f__2⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x⁢x+f__6⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x2⁢t2,ut,t=−3⁢x⁢f__10⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x+3⁢f__1⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x⁢x2+3⁢f__9⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x+2⁢t3+6⁢−3⁢x+ut⁢t+6⁢ux⁢x−6⁢u3⁢t2,vt,t=−f__6⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x⁢x+f__5⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x+f__2⁡v⁢t,t⁢vx,t⁢t⁢vt+vx⁢x⁢x2t3
A problem involving dynamical symmetries, with the first derivative ux in the infinitesimal generator, and the corresponding invariant PDE family
G[dynamical] := f -> diff(f, x) + diff(f, u)/u[x];
Gdynamical≔f→∂∂x⁢f+∂∂u⁢fux
InvariantEquation(G[dynamical], u(x,t), order = 2, explicit);
ux,x=ux⁢ux2+1ux3⁢f__1⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut+ux⁢f__1⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut−2⁢x,ut,x=f__2⁡t,ux,ut,u⁢ux2−2⁢ux⁢x+uux2+1ux3⁢f__1⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut+ux⁢f__1⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut−2⁢x,ut,t=−f__2⁡t,ux,ut,u⁢ux2−2⁢ux⁢x+uux2+12−ux2⁢ux2+12⁢f__1⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut+2⁢x⁢ux⁢ux2+1+f__3⁡t,ux,u⁢ux2−2⁢ux⁢x+uux2+1,ut
To verify this result, SymmetryTest also accepts an infinitesimal generator operator as a representation for the symmetry
SymmetryTest(G[dynamical], (89));
Solve accepts a new optional argument, algebraically, to indicate that the solving variables and their derivatives are to be considered objects independent of each other.
eq[1] := diff(y(x), x) = y(x);
eq1≔y'=y
Solving eq1 for y means considering eq1 an ordinary differential equation, the solution is thus y=c__1⁢ⅇx. To solve eq1 for y algebraically, considering y and all its derivatives independent of each other, use
Solve(eq[1], algebraically);
y=y'
New programming commands in the PDEtools Library
Nine new PDEtools:-Library commands were added to the library of tools to manipulate PDE systems and facilitate programming with them. These are: BuildFunctionFieldHint, ConstructTrivialSymmetry, GenerateInfinitesimalLabels, GetNew_Fn, GetNotation, GetProlongationValue, InfinitesimalGeneratorToList, SortDerivatives
See Also
Index of New Maple 15 Features
Download Help Document