PDEtools
casesplit
split into cases and sequentially decouple a system of equations taking into account its integrability conditions
Calling Sequence
Parameters
Description
Examples
Compatibility
casesplit(sys, optional_1, optional_2,...)
sys
-
single DE, or list or set of DEs; any system of differential equations
optional_1, optional_2, ...
(optional) arguments can be given in any order and are described as follows
ranking
list or set of solving variables represented by names or functions, or list or set of them
caseplot
indicates that in addition to the splitting into cases a graphical representation of the splitting is to be plotted
ivars={y1, y2, ...}
indicates that {y1, y2,...} are independent variables regardless of whether they appear in the unknowns of the system
ivars=[y1, y2, ...]
the right-hand side is a list; indicates the ranking ordering for the independent variables
lex
useful to produce ODEs from PDEs, indicates the use of an elimination ranking for the independent variables instead of the default orderly one
lex(f(y1, y2...)
indicates the elimination ranking ordering of the independent variables to be as in f
parameters=P
P is a list or set of names or functions that are solving variables with lower priority than any other variable
fast=boolean
if boolean = true then run only one round of computations; if false run always two, otherwise let casesplit decide
singsol=false
avoid the computation of the singular cases when the system is nonlinear
arbitrary=A
avoid splitting into cases with respect to elements of A, where A is a list or set of names or functions
ctl=N
compute with a timelimit of N seconds per case
mindim=N
discard cases with solution space of dimension less than N
rankingused = ...
the right-hand side is a name that will be assigned the ranking used for the unknowns of the system
ivarsused = ...
the right-hand side is a name that will be assigned the independent variables of the system with the ordering they were ranked
rif
default, force splitting by using the Rif subpackage of DEtools
diffalg
force splitting by using the DifferentialAlgebra package
The casesplit function receives one DE, or a set or a list of DEs (it is also possible to include inequations and non-differential equations) and splits the system into regular systems associated with different cases. The union of the non-singular solutions of these regular systems returned is equal to the full set of solutions, including the singular ones, of the original input system. Each regular system automatically satisfies all the integrability conditions. The splitting into cases is performed by using the Rif subpackage of DEtools (default), or using the DifferentialAlgebra package when the keyword 'diffalg' is given as an optional argument. casesplit also works with anticommutative variables set using the Physics package using the approach explained in PerformOnAnticommutativeSystem.
The casesplit command is useful for studying the different cases of a given DE system, uncoupling the system in different ways using different orderings for the solving variables (rankings), and determining whether the system is inconsistent. The casesplit command can also be used to remove redundancies and to make the system complete, including simplifying it by using all its integrability conditions. All these tasks are automatically performed each time casesplit is invoked.
Ranking is a fundamental concept related to the splitting process performed through casesplit. A ranking is basically an ordering of the variables of the problem (herein called solving variables) in the form of a list of functions or symbol variables, as in f⁡x,g⁡x,h⁡x,a (one can also specify functions by using only their names as in f,g,h,a). Different rankings imply different uncoupling orderings and, hence, different manners of splitting and uncoupling the DE system (see checkrank, DifferentialAlgebra[Tools][Display], and the examples below).
In the case of a system of ordinary differential equations (ODEs), provided the system is not subdetermined, the default output of casesplit consists of a sequence of uncoupled ODE systems, where the uncoupling ordering used is that of the solving variables in the ranking. The ranking is provided by the user as a list or automatically set by casesplit. That means, for instance, that if a system depending on the functions f⁡x,g⁡x,h⁡x is given with this list as ranking, the equations in each returned system are of the form [..f⁡x..=..f⁡x,g⁡x,h⁡x..,..g⁡x=..g⁡x,h⁡x..,..h⁡x..=..h⁡x⁢]. So, the last equation involves only h⁡x, the next to the last equation involves g⁡x and h⁡x, and the first equation involves the three functions. This is called sequential uncoupling.
In the case of a system of partial differential equations (PDEs), the situation is the same as with ODEs but the concept of sequential uncoupling requires clarification. Concretely, instead of one equation related to each function, one could receive many equations. For instance, if a system depending on the functions f⁡x,y,z,g⁡x,y,z,h⁡x,y,z is given and with this list as ranking, the equations in each returned system are of the form [⁢eqs⁡f=..f,g,h..,eqs⁡g=..g,h..,eqs⁡h=..h..], where eqs⁡h=..h.. means equations (possibly PDEs) only depending on 'h' and so on.
The casesplit command also works with systems of equations that involve mathematical functions, provided that they have a differential equation representation that is rational in the independent variables, the function and its derivatives - i.e a differential polynomial form. That is indeed the case of most of the mathematical functions as well as of indefinite integrals, fractional and symbolic (generic) powers. For example, the exponential function, f⁡x=ⅇx satisfies f '=f. When these functions are present in the system, they are replaced by auxiliary unknowns representing them and the corresponding differential equations they satisfy are added to the system, the system is processed, and before returning these auxiliary unknowns are replaced by the actual functions they represent.
The arguments of mathematical functions present in the system can be arbitrary algebraic expressions, possibly including other mathematical functions, with no limits to the levels of nesting, for example: g⁡x=ⅇBesselJ⁡n,x. These cases are processed by first performing changes of variables that result in a differential polynomial form representing the expression, then proceeding as explained in the previous item.
The casesplit command also works with systems that involve unknown functions whose arguments are not just variables (i.e.: of type name) but generic algebraic expressions. Provided that some conditions are met, through changes of variables the system of equations can be transformed into an equivalent system where the transformed functions all depend on simple variables of type name, this system is processed, a further change of variables to revert to the original variables is performed, and the result is returned.
Finally, casesplit works as well with systems that involve D derivatives evaluated at points represented by algebraic expressions. The key idea is that any D derivative of this type can be mapped into a function of variables not of type name that can in turn be represented in differential polynomial form as a first order PDE, obtained by running backwards what is know as the PDE characteristic strip solving method. This approach makes it possible to perform differential elimination with these objects, as well as solving PDE systems in terms of arbitrary functions, that, at some point in the solving process, become functions of algebraic expressions (variables not of type name) and where the intermediate subsystem involves D derivatives of these functions.
Input and Output
The first argument sys can be one DE, or a set or a list of DEs, possibly including inequations and non-differential equations (such as algebraic constraints). Equations are entered by using expr1=expr2, or expr1. In this case it is assumed that expr1 = 0. Inequations are entered by using expr1≠expr2.
The output of casesplit is a sequence of expressions representing the different cases (possibly only one) and corresponding equations and inequations (these are the ones returned by the corresponding Equations and Inequations commands of DifferentialAlgebra). Each case is returned as a function of two operands and displayed as [eq1,eq2,...]⁢&where⁢[ineq1≠0,ineq2≠0,...]. Both operands are lists. This printing is obtained, however, by using a print/foo mechanism, and the true structure of each returned case is a function `casesplit/ans`( [ eq1, eq2, ...], [ ineq1 <> 0, ineq2 <> 0, ...] ).
The actual splitting of a system obtained when calling casesplit is basically computed through various calls to different commands of the DifferentialAlgebra package, or optionally the DEtools[Rif] package. These are the two Maple differential elimination packages.
Apart from simplifying the steps required by a direct use of DifferentialAlgebra, casesplit radically extends the domain of computation of DifferentialAlgebra or DEtools[Rif]. Concretely, casesplit can split a system into regular cases even when this system contains non-polynomial objects, such as fractional or abstract powers, most Maple known functions (for example, exponentials, logarithms, trigonometric, and special functions) and also any arbitrary composition of these non-polynomial objects, for example, exp⁡sqrt⁡BesselJ⁡....
This extension of the domain of computation is performed by rewriting all non-polynomial objects by using auxiliary functions of the form _Fn (n being an integer) and adding to the input system the polynomial (algebraic and differential) equations these _Fn functions satisfy (see dpolyform). For example, ⅇx is replaced by _F1⁡x, and the auxiliary ODE ⅆ2ⅆx2_F1⁡x=_F1⁡x is added to the system. These auxiliary functions, the equations they satisfy, and their consequences are removed before returning the output.
Optional arguments
All arguments after the first one are optional and can be included in any order.
When the solving variables are not specified, casesplit takes all unknown functions found in the DE system as solving variables, and uses its own heuristic methods to determine what could be the best uncoupling ordering for the given system. However, it is possible to specify a ranking, which indicates the solving variables and their order. When the ranking to be specified involves only one variable, it can be given as this variable, or its name, for example, f for f⁡x,y,z. In all cases the ranking can be specified as a list or a set of solving variables, functions can be indicated by only their names, and this set or list can include 'symbol' solving variables (equivalent to functions with all derivatives equal to zero).
When the ranking is given as a set or list, each of its elements can, in turn, also be a set or list of names or functions. For example, f,g,h,j,k, f,g,h,j,k, and h,f,g,j,k are valid rankings. In such cases, the solving ordering for the elements inside each set {...} is decided by casesplit. Only one level of nested list or sets is allowed.
Using standard terminology, a ranking as in f,g,h - also called lexicographic or elimination ranking - leads to a splitting using a lexicographic ordering. When a ranking is given as a nested list, for example f,g,h, the splitting is performed by using a total degree ordering. These rankings are also called total degree or orderly rankings. Total degree rankings, however, generally do not result in the uncoupling of the given system. They simplify the system by using integrability conditions, and so check for inconsistencies as well as lead to a version of the system with the lowest differential order. This usually leads to faster computations than when using lexicographic ordering. To understand the meaning associated with a given ranking, use the checkrank or DifferentialAlgebra[Tools][Display] commands. Input rankings in casesplit have exactly the same meaning they have in calls to commands of the DifferentialAlgebra package.
When the ranking is not specified, you can see the ranking used by setting infolevel[casesplit] := 2. Setting this variable to 3 causes the display of the input sent to RosenfeldGroebner or DEtools[rifsimp], as well.
The independent variables of a given system are determined by default as the variables on which the unknown functions of the system depend. However, there may be cases in which other variables, not present in the unknown functions of the system, are also independent variables of the problem. These extra independent variables can be indicated using the ivars = {...} optional argument. In such a case, these variables are added to those determined as the independent variables of the problem. This is useful, for example, when the unknowns of the system depend - say - on x, y, but the equations involve - say - z, and you are not interested in solutions depending on z.
By default, the solving ordering for the independent variables of the system is automatically determined by casesplit, such that lower order differentiation variables are ranked lower. Alternatively, this ordering can be enforced to be anyone using the optional argument ivars = [...], specifying its right-hand side as a list with the desired ordering, leading in most of the cases to slight differences in the output (see DifferentialAlgebra[Tools][Display]).
By default, the ranking used with respect to the independent variables is of orderly type (see paragraphs above). To specify an elimination lexicographical ranking add the keyword lex anywhere in the calling sequence. Combining this option with the ivars = [...] option (right-hand side as a list) is useful to generate ODEs from PDE systems when that is possible. The ODEs appearing in the output are the consequence of using an elimination ranking for the independent variables. When ivars = [...] is not given, but lex is given, the elimination raking is set with the ordering for the independent variables chosen by casesplit; or when lex(f) is given, where f is an unknown of the system, the ordering used for ranking the independent variables will be that of the function f.
By default, all unknown functions found in the system and not indicated in the ranking are considered solving variables "with less priority", and are automatically inserted at the end of the ranking. Note however that symbol variables found in the system require an explicit declaration in the ranking to be considered as "solving variables". "Solving variables" with less priority can also be indicated using the optional argument parameters={...} where the right-hand side can also be a list.
In the case of DE systems, the default strategy of casesplit is to solve the system in two rounds. In the first round, a simpler ranking is used to express the more differentiated solving variables with respect to the other ones. Typically this ranking is built as [[f1,f2,...]], and relies on a faster "total degree" process. In the second round, each of the systems (equations and inequations) obtained in the first round are processed separately, but this time with the ranking given by the user (or set by casesplit if no ranking is given). When the optional argument 'fast' is given, casesplit processes the system in only one round. In such a case, if the ranking is given it is used. Otherwise, the ranking is set as [[f,g,h,...]] (that is, total degree ordering) and usually does not lead to an uncoupling of the system.
By default, casesplit splits a nonlinear problem into all the related (perhaps only one) regular cases. This set of regular cases can also be understood as consisting of the main case (general case) plus all the possible singular cases. To avoid spending time in computing these singular cases, one can use the singsol=false optional argument, leading to the computation of only the general case.
By using the optional argument arbitrary=A, where A is a list or set of names or functions, one can force casesplit to avoid considering these functions as solving variables and so avoid splitting into cases with respect to them. This option is quite useful for computations in which the value of some unknown functions must remain arbitrary. It also typically reduces the computation time significantly.
By default, casesplit splits a problem into cases regardless of the time required to compute each case. There are problems, however, for which this default is not practical since some of the cases would take too much time to compute. For these cases, use the ctl=N optional argument to impose a timelimit of N seconds per case, at the cost of missing the output of cases requiring more than N seconds to be computed.
The optional argument mindim=N is useful when we know, in advance, that we are not interested in cases in which the solution space has dimension less than N. This option saves computing time.
If rankingused = .. is passed as argument, where the right-hand side is assignable (e.g., a name), the ranking used for the unknowns will be assigned to that right-hand side.
If ivarsused = .. is passed as argument, where the right-hand side is assignable (e.g., a name), the independent variables of the system, with the ordering they were ranked, will be assigned to that right-hand side.
By default, casesplit makes use of the Rif subpackage of DEtools. In most cases, however, it is possible to perform the same computations by using the DifferentialAlgebra package instead of Rif, by giving the extra argument diffalg. Any of the following optional arguments imply on computations which casesplit can only run using Rif: singsol=false, arbitrary, ctl=N.
The casesplit routine can be used for many different purposes. These examples are organized as follows: first, some typical situations; then, three worked examples in the framework of integrating factors and symmetries for second order ODEs; and finally, an illustration of how different rankings can be used to obtain different results in a DE system with many variables.
with(PDEtools):
with(DEtools):
For convenience, first declare some functions of t to be displayed using only their names (for example, f⁡t as f), and t as the prime variable (see PDEtools[declare]).
declare( [f(t), g(t), h(t), j(t), y(t)], prime=t);
f⁡t⁢will now be displayed as⁢f
g⁡t⁢will now be displayed as⁢g
h⁡t⁢will now be displayed as⁢h
j⁡t⁢will now be displayed as⁢j
y⁡t⁢will now be displayed as⁢y
derivatives with respect to⁢t⁢of functions of one variable will now be displayed with '
The splitting of a single nonlinear ODE into three cases (two of them related to singular solutions) is illustrated here.
ode[1] := 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;
ode1≔y''2+2⁢y''⁢y3⁢y'−4⁢y2⁢y'3
[casesplit(ode[1])];
y''2=−2⁢y''⁢y3⁢y'+4⁢y2⁢y'3wherey3⁢y'+y''≠0,y'=−y44wherey≠0,y'=0wherey≠0,y=0where
To see a graphical representation of this splitting use the caseplot option
casesplit(ode[1], 'caseplot');
========= Pivots Legend =========
p1=y3⁢y'+y''
p2=y
p3=y'
To identify which of these cases lead to the singular solutions, it suffices to note that singular solutions depend on fewer arbitrary constants, that is, they are solutions to ODEs of lower differential order. If there is only one input equation, it can be given directly (no braces or square brackets are required) and there is no need for a ranking specification.
When there are more variables, the ranking given can lead to different regular systems. For the following example, the ranking was chosen by casesplit's heuristics.
sys[1] := {diff(y(t),t)=-x(t)^2,diff(x(t),t)=y(t)};
sys1≔x'=y,y'=−x⁡t2
If infolevel is set to a greater integer (possible settings are 1 through 5), more detailed information about the computation method is displayed.
infolevel[:-casesplit] := 2;
infolevelcasesplit≔2
casesplit(sys[1]);
-> Solving ordering to be used: [y, x]
Ranking for 1st round is: [[y, x]] Ranking for 2nd round is: [y, x]
1st round is performed, original system is split into 1 cases
2nd round is performed; processing answer ...
y=x',x''=−x⁡t2where
Here, the results of the other possible ranking, x,y, are shown.
[casesplit(sys[1],[x, y])];
Ranking for 1st round is: [[x, y]] Ranking for 2nd round is: [x, y]
2nd round is performed, original system is now split into 2 cases. Processing answer ...
x⁡t=−y''2⁢y,y'''=−2⁢y3+y''⁢y'y,y''2=−4⁢y'⁢y2wherey≠0,x⁡t=0,y=0where
This also shows that different rankings may lead to a different number of cases. However, the union of the set of solutions to each case is always equal to the solution to the original problem independent of the ranking used.
The uncoupling of systems with many variables is a more difficult problem. In some cases, as in the following ODE system, the uncoupling ordering determined by casesplit succeeds.
sys[2] := {diff(g(t),t) = -f(t)^(1/2), diff(j(t),t) = -h(t), diff(f(t),t) = h(t)+g(t), diff(diff(h(t),t),t) = j(t)+g(t)^(1/2)};
sys2≔h''=j+g,f '=h+g,g'=−f,j'=−h
casesplit(sys[2]);
-> Solving ordering to be used: [j, h]
Ranking for 1st round is: [[j, h, f, _F1, g, _F2]] Ranking for 2nd round is: [j, h, f, _F1, g, _F2]
1st round is performed, original system is split into 2 cases
j=2⁢g''''⁢g'+6⁢g'''⁢g''−g''−g,h=2⁢g'⁢g''−g,f=−g',g'''''=−16⁢g''''⁢g''+12⁢g'''2+4⁢g'⁢g''−g'g−2⁢g'''−2⁢g4⁢g'whereg'≠0,j=0,h=0,f=0,g=0where
In the answer above, we see from the displayed information (userinfo) that the ranking chosen by casesplit's heuristics was j,h,f,g. This means that each returned case has j expressed in terms of h,f,g, then h in terms of f,g, f in terms of g and, eventually, a condition on g alone. This is the case for all input systems provided that they are not subdetermined (for instance, too many functions for too few equations).
Regarding the functions _F1 and _F2 displayed in the userinfo, they were introduced to transform the non-polynomial system into a polynomial one by extending the system with auxiliary functions _F1 and _F2 and related auxiliary equations. They are removed before returning the answer. To see the polynomial version of the problem actually processed use the dpolyform command.
It is important to remember that, depending on the input system, the ranking chosen by casesplit heuristics may not be the best one. It could, for example, lead to an uncoupling process with too many large intermediate equations. In such a case, the user's suggestion in the form of a different ranking may solve the problem.
In other cases, independent of the ranking, the differential elimination process may be to expensive in time. For these cases one can use the ctl=N optional argument to impose a timelimit of N seconds per case, at the cost of missing the output of cases requiring more time to compute.
infolevel[:-casesplit] := 1;
infolevelcasesplit≔1
casesplit works with systems involving mathematical functions whose arguments are arbitrary algebraic expressions provided they can be represented in differential polynomial form, which is possible provided that each constituting part of the expression, by itself, admits a differential polynomial form. For example
f(x) = exp(BesselJ(nu, sqrt(x)));
f⁡x=ⅇBesselJ⁡ν,x
A differential polynomial form for this expression is
dpolyform((12), no_Fn);
These differential polynomial forms can be verified for correctness as usual using odetest or pdetest when it is the case of PDEs. In this case, we test that f⁡x=ⅇBesselJ⁡ν,x satisfies this ODE
odetest((12), (13));
0
So, if such an expression appears in the system of equations received by casesplit its differential polynomial form is constructed as in the above, this equation is added to the system and the expression replaced by the auxiliary unknown f⁡x, this extended system is processed and before returning a result f⁡x is replaced back by the original expression it represented.
When unknown functions whose arguments are algebraic expressions (i.e. not variables of type name) are present in the system, when possible, a change of variables is performed such that the transformed functions all depend on variables of type name, the transformed system is tackled, and a further change of variables to revert to the original variables is performed before the result is returned. For example,
F(y-I*x) + G(y+I*x) = H(x);
F⁡y−I⁢x+G⁡y+I⁢x=H⁡x
The natural ranking for this system takes H higher than F or G (i.e. write H as a function of the other ones)
casesplit((15));
H⁡x=F⁡y−I⁢x+G⁡y+I⁢xwhere
Writing F or G as a function of H, however, turns evident the (otherwise implicit) relationship between the derivatives of G (or F) and H. To see this, rank F and G higher H
casesplit((15), [F, G]);
F⁡y−I⁢x=−G⁡y+I⁢x+H⁡x,D⁡G⁡y+I⁢x=−I2⁢Hxwhere
These arbitrary objects whose arguments are not of type name can appear nested, and provided a differential polynomial form exists for each component of the composition of expressions, a differential polynomial form exists for the composition, and with that casesplit can handle the case when it appears in a given system of equations. For example, a differential polynomial form for this composite expression is:
F(x, t) = H(t*x+G(1/t));
F⁡x,t=H⁡t⁢x+G⁡1t
dpolyform((18), no_Fn);
Ft,x=Ft⁢Fx,xFx+FxtwhereFx≠0
pdetest((18), (19));
When the system involves D derivatives evaluated at points that are represented by algebraic expressions, these derivative can be mapped into a function of variables not of type name that can in turn be represented in differential polynomial form as explained in the Description section. This is particularly useful to tackle PDEs. For example
pde := diff(u(x, t), x, t) = D(D(D(f)))(x - t) ;
pde≔ut,x=D3⁡f⁡x−t
A differential polynomial form for this pde is given by
dpolyform(pde, no_Fn);
ut,x,x=−ut,t,xwhere
This is a higher order PDE that can be solved in terms of arbitrary functions
pdsolve((22));
u⁡x,t=f__1⁡t+f__2⁡x+f__3⁡t−x
and from this solution, a solution to the original problem can be derived.
A PDE example where we indicate that 'f(x,y,z)' is our solving variable. Hence, h⁡x and g⁡y,z are viewed as function parameters of the problem.
pde[1] := diff(f(x,y,z),x,y)*diff(f(x,y,z),y)=h(x)*g(y,z);
pde1≔fx,y⁢fy=h⁡x⁢g⁡y,z
[casesplit(pde[1], f)]; # [f] or [f(x,y,z)]
fx,y=h⁡x⁢g⁡y,zfywherefy≠0,fy=0,h⁡x=0whereg⁡y,z≠0,fy=0,g⁡y,z=0where
The following is a PDE system which is inconsistent.
pde[2] := [diff(u(x,y),x) + v(x,y) = y, diff(u(x,y),y)+v(x,y)=0, diff(v(x,y),x) = diff(v(x,y),y)];
pde2≔ux+v⁡x,y=y,uy+v⁡x,y=0,vx=vy
casesplit(pde[2]);
Warning: System is inconsistent
A series of worked examples follows.
Worked example I
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 '
ode[3] := diff(y(x),x,x)=y(x)*diff(y(x),x)*x;
ode3≔y''=y⁢y'⁢x
Show that the ode[3] has no integrating factors depending on less than three variables.
There are three possible cases to consider: μ(x,y), μ(x,y'), and μ(y,y'). Starting with μ(x,y), we first set the PDE which must be satisfied by this integrating factor (see odepde).
odepde(ode[3], _mu = mu(x,y(x)));
_y12⁢μy,y+2⁢μx,y⁢_y1+y⁢μ⁡x,y+2⁢_y2⁢μy+μx,x+μx⁢y⁢x
Now, noting that the PDE above is polynomial in y' and y'⁢' (represented by _y1 and _y2, respectively), take the corresponding coefficients and set each one to zero to obtain a PDE system for μ(x,y). These tasks (setting the determining PDE above and splitting it into a system by setting each coefficient of y'⁢' equal to zero) are automatically performed by gensys.
sys[3] := [ gensys(ode[3], _mu = mu(x,y)) ];
sys3≔μy,μy,y,μx,y,y⁢μ⁡x,y+μx,x+μx⁢y⁢x
Taking into account the integrability conditions implicit in the system above, this system simplifies to the following.
casesplit(sys[3]);
μ⁡x,y=0where
This shows that there is no solution other than the trivial μ = 0.
For the case μ(x,y'):
sys[4] := [ gensys(ode[3], _mu = mu(x,diff(y(x),x))) ];
sys4≔μ_y1,_y1⁢x⁢_y1+2⁢μ_y1⁢x,μ_y1,x,μ_y1,x⁢x⁢_y1+μ_y1⁢_y1+μx⁢x+μ⁡x,_y1,μ_y1⁢_y12⁢x+μx,x
casesplit(sys[4]);
μ⁡x,_y1=0where
So, there is no solution of the form μ(x,y'). Finally, for μ(y,y'):
sys[5] := [ gensys(ode[3], _mu = mu(x,diff(y(x),x))) ];
sys5≔μ_y1,_y1⁢x⁢_y1+2⁢μ_y1⁢x,μ_y1,x,μ_y1,x⁢x⁢_y1+μ_y1⁢_y1+μx⁢x+μ⁡x,_y1,μ_y1⁢_y12⁢x+μx,x
casesplit(sys[5]);
From these three results, we conclude that ode[3] has no integrating factors depending on only two variables.
Worked example II
Show that ode[4] has only one point symmetry, _ξ=1,_η=0.
ode[4] := diff(y(x),x,x) - 3*y(x)*diff(y(x),x) - 3*a*y(x)^2 - 4*a^2*y(x) - b = 0;
ode4≔y''−3⁢y⁢y'−3⁢a⁢y2−4⁢a2⁢y−b=0
First, set up the PDE system for the symmetry (the infinitesimal symmetry generators ξ and η). Again, this can be done by using odepde to obtain the determining PDE and then splitting it by taking coefficients or in one step by using gensys.
sys[6] := [ gensys(ode[4], [xi(x,y), eta(x,y)]) ];
sys6≔ξy,y,−6⁢ξy⁢y+ηy,y−2⁢ξx,y,−12⁢ξy⁢a2⁢y−9⁢ξy⁢a⁢y2−3⁢ξy⁢b−3⁢ξx⁢y−3⁢η⁡x,y+2⁢ηx,y−ξx,x,−8⁢ξx⁢a2⁢y−6⁢ξx⁢a⁢y2+4⁢ηy⁢a2⁢y+3⁢ηy⁢a⁢y2−4⁢η⁡x,y⁢a2−6⁢η⁡x,y⁢a⁢y−2⁢ξx⁢b+ηy⁢b−3⁢ηx⁢y+ηx,x
casesplit(sys[6]);
η⁡x,y=0,ξx=0,ξy=0where
The system above has only the solution _ξ=_C1,_η=0, which is equivalent to _ξ=1,_η=0.
Worked example III
ode[5] := diff(y(x),x,x) - diff(y(x),x)^2/y(x) - g(x)*y(x)*diff(y(x),x) - diff(g(x),x)*y(x)^2 = 0;
ode5≔y''−y'2y−g⁡x⁢y⁢y'−g'⁢y2=0
Determine the conditions on g⁡x such that ode[5] has point symmetries with both infinitesimals different from zero.
First, set up the determining PDE system for the infinitesimals ξ and η.
sys[7] := gensys(ode[5], [xi(x,y), eta(x,y)], y(x));
sys7≔−ξy,y⁢y2−ξy⁢y,−2⁢g⁡x⁢ξy⁢y3+ηy,y⁢y2−2⁢ξx,y⁢y2−ηy⁢y+η⁡x,y,−3⁢g'⁢ξy⁢y4−g⁡x⁢ξx⁢y3−g'⁢ξ⁡x,y⁢y3−g⁡x⁢η⁡x,y⁢y2+2⁢ηx,y⁢y2−ξx,x⁢y2−2⁢ηx⁢y,−2⁢g'⁢ξx⁢y4+g'⁢ηy⁢y4−ξ⁡x,y⁢g''⁢y4−g⁡x⁢ηx⁢y3−2⁢g'⁢η⁡x,y⁢y3+ηx,x⁢y2
Note that the dependent variable y is also specified. Otherwise, gensys complains since ode[5] contains derivatives of both y and g, and it cannot determine the dependent variable of the problem. y could be specified as the second argument as well. Now state, using inequations, that both infinitesimals should be different from zero.
ineqs[7] := xi(x,y) <> 0, eta(x,y) <> 0;
ineqs7≔ξ⁡x,y≠0,η⁡x,y≠0
Next, run casesplit. In doing so, different rankings could lead to what is wanted. Use ξ,η,g to solve for ξ,η as functions of g, plus separated extra conditions on g alone (these are the conditions we want). When solving for ξ,η, do not uncouple ξ from η. This uncoupling is irrelevant since it would take more time and resources to be computed, and only the conditions on g are wanted.
[casesplit([sys[7], ineqs[7]], [ [xi,eta], g ])];
ξ⁡x,y=2⁢g⁡x2⁢η⁡x,y⁢g''−2⁢g⁡x⁢η⁡x,y⁢g'2g⁡x2⁢g'''⁢y−5⁢g⁡x⁢g'⁢g''⁢y+4⁢g'3⁢y,ηx=η⁡x,y⁢g⁡x⁢g'''⁢g'−2⁢η⁡x,y⁢g⁡x⁢g''2+η⁡x,y⁢g'2⁢g''g⁡x2⁢g'''−5⁢g⁡x⁢g'⁢g''+4⁢g'3,ηy=η⁡x,yy,g''''=3⁢g⁡x2⁢g'''2−10⁢g⁡x⁢g'⁢g''⁢g'''+6⁢g⁡x⁢g''3+4⁢g'3⁢g'''−3⁢g'2⁢g''22⁢g⁡x2⁢g''−2⁢g⁡x⁢g'2whereη⁡x,y≠0,g⁡x2⁢g'''−5⁢g⁡x⁢g'⁢g''+4⁢g'3≠0,ξx=−g'⁢ξ⁡x,y⁢y+g⁡x⁢η⁡x,yg⁡x⁢y,ξy=0,ηx=g'2⁢ξ⁡x,y⁢y+g⁡x⁢η⁡x,y⁢g'g⁡x2,ηy=η⁡x,yy,g''=g'2g⁡xwhereη⁡x,y≠0,g⁡x≠0,ξ⁡x,y≠0,ξx,x=2⁢ηx,y⁢y−2⁢ηxy,ξx,y=−−ηy,y⁢y2+ηy⁢y−η⁡x,y2⁢y2,ξy,y=−ξyy,ηx,y,y=ηx,y⁢y−ηxy2,ηy,y,y=−ηy⁢y+η⁡x,yy3,ηx,x=0,g⁡x=0whereη⁡x,y≠0,ξ⁡x,y≠0
In the answer above, we see three systems, each one associated to different conditions on g⁡x, and both ξ and η expressed in terms of each other and g.
The last example illustrates the use of different rankings. Consider the following PDE system.
sys[8] := [-diff(mu(x,y),y)-A(y)*mu(x,y)=0, 3*mu(x,y)*F(x)*y^2 - diff(mu(x,y),x) + diff(mu(x,y),y)*H(x) + diff(mu(x,y),y)*F(x)*y^3-B(x)*mu(x,y) = 0, mu(x,y)*diff(H(x),x) + diff(mu(x,y),x)*F(x)*y^3 + diff(mu(x,y),x)*H(x) + mu(x,y)*diff(F(x),x)*y^3 = 0];
sys8≔−μy−A⁡y⁢μ⁡x,y=0,3⁢μ⁡x,y⁢F⁡x⁢y2−μx+μy⁢H⁡x+μy⁢F⁡x⁢y3−B⁡x⁢μ⁡x,y=0,μ⁡x,y⁢H'+μx⁢F⁡x⁢y3+μx⁢H⁡x+μ⁡x,y⁢F'⁢y3=0
You can assign the ranking for the unknowns and/or the ordering used for the independent variables by passing the optional arguments rankingused = R and/or ivarsused = ii, where the right-hand sides, R and ii, can actually be any assignable objects. For example, discarding the singular cases for simplicity, the triangularization of this system and ranking and ordering of independent variables used for that are:
casesplit(sys[8], rankingused = 'R', ivarsused = 'ii', singsol = false);
B⁡x=3⁢μ⁡x,y2⁢F⁡x⁢μy,y⁢y2−6⁢μ⁡x,y⁢F⁡x⁢μy2⁢y2−6⁢μ⁡x,y2⁢F⁡x⁢μy⁢y−μ⁡x,y⁢μy,y⁢μx+μy2⁢μxμ⁡x,y2⁢μy,y−μ⁡x,y⁢μy2,H⁡x=−μ⁡x,y⁢F⁡x⁢μy,y⁢y3+F⁡x⁢μy2⁢y3−3⁢μy⁢μ⁡x,y⁢F⁡x⁢y2−6⁢μ⁡x,y2⁢F⁡x⁢yμy,y⁢μ⁡x,y−μy2,F'=−F⁡x⁢μxμ⁡x,y,A⁡y=−μyμ⁡x,y,μy,y,y=2⁢μ⁡x,y⁢μy,y2⁢y2−μy,y⁢μy2⁢y2+8⁢μ⁡x,y⁢μy,y⁢μy⁢y−6⁢μy3⁢y+2⁢μ⁡x,y2⁢μy,y−2⁢μ⁡x,y⁢μy2μy⁢μ⁡x,y⁢y2+2⁢μ⁡x,y2⁢y,μx,y=μy⁢μxμ⁡x,ywhereF⁡x≠0,μy⁢y+2⁢μ⁡x,y≠0,−μy,y⁢μ⁡x,y+μy2≠0
R, ii;
B,H,F,A,μ,y,x
Suppose however that you are interested in an answer expressing μ, A, and B in terms of F and H, as well as some conditions on F and H is wanted. Then, the corresponding ranking is:
[ [mu,A, B], [F, H] ];
μ,A,B,F,H
If, in addition, these conditions on F and H expressed with F as a function of H, as well as a condition involving H alone, are wanted, then the ranking would be μ,A,B,F,H. If, moreover, m as a function of A and B is wanted, the ranking would be μ,A,B,F,H. The ranking μ,A,B,F,H also works, but in general, when asking for "more uncoupling", the time and memory spent is greater. For the purpose assumed in this example, μ,A,B,F,H is the least expensive ranking leading to what is requested, while μ,A,B,F,H is the most expensive one.
To see what the specified ranking represents more formally, one can query the diffalg[print_ranking] command as follows. Define the differential ring of the problem and then issue the query.
DR := diffalg[differential_ring](notation = diff, derivations = [x,y], ranking = [[mu, A, B], [F, H]]);
DR≔PDE_ring
diffalg[print_ranking](DR);
In lists, leftmost elements are greater than rightmost ones. The derivatives of [mu, A, B] are ordered by grlexA: _U [tau] > _V [phi] when |tau| > |phi| or |tau| = |phi| and _U > _V w.r.t. the list of indeterminates or |tau| = |phi| and _U = _V and tau > phi w.r.t. [x, y] Any derivative of [mu, A, B] is greater than any derivative of [F, H] The derivatives of [F, H] are ordered by grlexA.
casesplit also works with anticommutative variables, using the approach explained in PerformOnAnticommutativeSystem.
with(Physics):
Set first θ and Q as suffixes for variables of type/anticommutative (see Setup)
Setup(anticommutativepre = {theta, Q});
* Partial match of 'anticommutativepre' against keyword 'anticommutativeprefix'
_______________________________________________________
anticommutativeprefix=Q,θ
A PDE system example with one unknown anticommutative function Q of four variables, two commutative and two anticommutative; to avoid redundant typing in the input that follows and redundant display of information on the screen, use PDEtools:-declare, and PDEtools:-diff_table, that also handles anticommutative variables by automatically using Physics:-diff when Physics is loaded
PDEtools:-declare(Q(x, y, theta[1], theta[2]));
Q⁡x,y,θ1,θ2⁢will now be displayed as⁢Q
q := PDEtools:-diff_table(Q(x, y, theta[1], theta[2])):
Now we can enter derivatives directly as the function's name indexed by the differentiation variables and see the display the same way; two PDEs
pde[1] := q[x, y, theta[1]] + q[x, y, theta[2]] - q[y, theta[1], theta[2]] = 0;
pde1≔Qx,y,θ1+Qx,y,θ2−Qy,θ1,θ2=0
pde[2] := q[theta[1]] = 0;
pde2≔Qθ1=0
The simplification of this system taking into account its integrability conditions
casesplit([pde[1], pde[2]]);
Qx,y,θ2=0,Qθ1=0where
The PDEtools[casesplit] command was updated in Maple 2017.
See Also
DEtools
DEtools,checkrank
DEtools,gensys
DEtools,Lie
DEtools,odepde
DEtools,Rif
DEtools,rifsimp
DEtools[rifsimp]
DifferentialAlgebra
DifferentialAlgebra[DifferentialRing]
DifferentialAlgebra[Equations]
DifferentialAlgebra[Inequations]
DifferentialAlgebra[RosenfeldGroebner]
DifferentialAlgebra[Tools][Display]
dsolve, system
gensys
infolevel
PDEtools[charstrip]
PDEtools[declare]
PDEtools[diff_table]
PDEtools[dpolyform]
pdsolve, system
PerformOnAnticommutativeSystem
Physics
print
Setup
userinfo
Download Help Document