
Calling Sequence


rifsimp(system, options)
rifsimp(system, vars, options)


Parameters


system



list or set of polynomially nonlinear PDEs or ODEs (may contain inequations)

vars



(optional) list of the main dependent variables

options



(optional) sequence of options to control the behavior of rifsimp





Description


•

The rifsimp options are given after the input system, and optionally the vars. The following are the most commonly used options:


This is the optional second argument to rifsimp. It indicates which indeterminates are to be solved for. By default rifsimp attempts to solve for all dependent variables with the same differential order and differentiations with equal precedence, breaking ties alphabetically. rifsimp solves for constants when only constants remain in an equation.


The selection of the solving indeterminate (called the leading indeterminate) of an equation is performed based on the ranking imposed on the system. This argument can be used in nested list form to modify the indeterminates to solve for. For example, if $f\left(x\right)$, $g\left(x\right)$, and $h\left(x\right)$ were the dependent variables of a problem, and we wanted to isolate all of these with equal precedence, we could specify vars as $\left[f\,g\,h\right]$. If instead we wanted to eliminate $f\left(x\right)$ from as much of the system as possible, we could specify $\left[\left[f\right]\,\left[g\,h\right]\right]$ instead, which tells rifsimp to solve for $f\left(x\right)$ and its derivatives with higher precedence than $g\left(x\right)$, $h\left(x\right)$ and any of their derivatives, regardless of the differential order of $f\left(x\right)$. Under this nested list ranking, and equation of the form $g\text{'}\text{'}\text{'}fg\text{'}\text{'}h\text{'}\text{'}=0$ would be solved for $f$ giving $f=g\text{'}\text{'}\frac{h\text{'}\text{'}}{g\text{'}\text{'}\text{'}}$. See rifsimp[ranking] and checkrank for more detail.

•

$\mathrm{indep}=\[\mathrm{ind1},\mathrm{ind2},...\]$


This option specifies the names of the unknowns to be treated as independent variables. By default, only those unknowns given in the dependency list of all unknown functions in the input system are considered to be independent variables. All other unknowns are considered constants. Treating an independent variable as though it were a constant will result in an incomplete answer, so you must use this option when required (see examples below). Please note that rifsimp always views unknowns present in a dependency list of an unknown function as independent variables, even when not specified by this option.


The order in which the independent variables are specified in this option affects the selection of the leading indeterminate (the indeterminate to be solved for) in an equation. See rifsimp[ranking] and checkrank for details.

•

$\mathrm{arbitrary}=\[\mathrm{v1},\mathrm{v2},...\]$


This option specifies a list of parameters or functions that should be treated as arbitrary. Any special cases where these parameters or functions take on specific values are rejected as inconsistent cases. Note: This means that no relations purely in the arbitrary parameters or functions can be present in the input system (with the sole exception of dependency related equations such as $\frac{\partial}{\partial y}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}f\left(x\,y\right)=0$). If a constraint is required for one of these unknowns, then it is no longer truly arbitrary, but rather restricted, so at least one of the unknowns in the constraint must be a solving variable.


This option generalizes the concept of a field of constants as used in the DifferentialAlgebra package to functions of the independent variables. It is most useful when only generic results are needed, but it may be the case that the result is invalid for specific values of these parameters (for example, if $a$ was a parameter, and it occurred as a denominator, then the solution is only valid for $a\ne 0$).


This option indicates that the program should explore all cases. A case split is most often introduced when, among the remaining unsolved equations, there is an equation that is linear in its highest ranked indeterminate (called the leading indeterminate, see rifsimp[ranking] or checkrank), and the coefficient of that indeterminate (called the pivot) may or may not be zero (see rifsimp[cases]) .


Isolation of the leading indeterminate in this equation introduces a case split  namely the two possibilities, pivot <> 0 and pivot = 0. The more generic case, pivot <> 0, is explored first. Once that case (possibly containing further case splits) is completed, the case with pivot = 0 is explored. This results in a case tree, which can be represented graphically (see caseplot).


In addition to producing multiple cases, this option changes the output of rifsimp. For more detail, see rifsimp[output].


This option indicates that the program should explore all cases that have the possibility of leading to the most general solution of the problem. Occasionally it is possible for rifsimp to compute only the case corresponding to the general solution of the ODE/PDE system. When this option is given, and this occurs, rifsimp will return the single case corresponding to the general solution. When it is not possible for rifsimp to detect (during the computation) where in the case tree the general solution is, then multiple cases are returned, one or more of which correspond to the general solution of the ODE/PDE system, and others may correspond to singular solutions. For some particularly difficult problems, it is possible that the entire case tree is returned. This option is not a postprocessing option, as it is designed primarily to reduce the explored cases to those that will contain the general solution, so in some cases the output will contain cases that are clearly singular in comparison to others. If only very specific initial data is required for the output cases, the maxdimsystems command should be used instead. Note: this option cannot be used with the casesplit,casecount, and mindim options.

•

$\mathrm{ctl}='\mathrm{time}'$


This option imposes a limit on the amount of time (in CPU seconds) that would be required to compute each case from scratch (i.e. using the extended option $\mathrm{casesplit}=\[...\]$ described in rifsimp[adv_options]). It is clear that this option may count computation time more than once, as the time prior to a case split is counted for each case after the split. This bounds the total time consumed to be no greater than the imposed limit times the number of cases obtained (and most often, significantly less as per the prior comment). For highly nonlinear systems, it may be impossible to obtain all cases in a reasonable amount of time. Use of this option allows the simpler cases to be computed, and the more expensive cases to be deferred. Note: there are two other time limit related options, stl and itl, and these are discussed in the rifsimp[adv_options] page.

•

clean=[cleaning criteria]


This option is a finetuning control over the system(s) output by rifsimp. There are three types of cleaning that the algorithm can perform:


Pivots: These are the inequations resulting from case splitting in the system (or present on input). As an example, consider the pivot $\frac{\ⅆ}{\ⅆx}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}f\left(x\right)\ne 0$. This pivot clearly implies that $f\left(x\right)\ne 0$, so on completion, the pivot $f\left(x\right)\ne 0$ is considered to be redundant. There are three options for specification of pivot cleaning:

nopiv

perform no cleaning, returning all pivots obtained


in the course of the computation.

piv

perform cleaning of obvious redundant pivots (i.e.


those that can be detected by inspection of the


pivots list on output.

fullpiv

perform thorough cleaning of pivots, including


removal of pivots that are redundant only for


solutions of the output case/system.




Note that the $\mathrm{fullpiv}$ criteria may remove pivots that would require a great deal of computation to recover. For example, consider the simple case described earlier for $\frac{\ⅆ}{\ⅆx}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}f\left(x\right)\ne 0$. If later in the algorithm, $\frac{\ⅆ}{\ⅆx}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}f\left(x\right)$ was reduced, and looked nothing like the original pivot, on completion $f\left(x\right)\ne 0$, which is a consequence of the original pivot, would be removed.


OneTerm Equations: These are simply equations of the form derivative=0. These are retained in the course of the computation (for efficiency) even when they reduce modulo one of the other equations of the system. These equations can be quite helpful in attempting to integrate of the results of rifsimp. The oneterm criteria indicates that the redundant oneterm equations should be removed, while nooneterm indicates that they should be retained.


Spawn: The spawning process is only used with nonlinear equations in rifsimp, and results in equations that are derivatives of any nonlinear equations in the output. These spawned equations are necessary for the proper running of initialdata and rtaylor. The following options specify spawned equation cleaning:

nospawn

do not remove any redundant spawned equations

spawn

remove any redundant spawned equations that are guaranteed


to retain the same solution structure

fullspawn

remove all possibly redundant spawned equations.




Note: Use of the fullspawn option may enlarge the solution space by removing too many equations (the remaining system still always contains the solutions, though it may contain more).


By default, the clean settings are $\left[\mathrm{piv}\,\mathrm{oneterm}\,\mathrm{nospawn}\right]$.


This is a shortcut specification for the clean options for rifsimp (see above). This corresponds to the specification $\mathrm{clean}=\left[\mathrm{fullpiv}\,\mathrm{oneterm}\,\mathrm{spawn}\right]$.



Examples


>

$\mathrm{with}\left(\mathrm{DEtools}\right)\:$

This example highlights the difference between treating the unknown y as a constant and treating it as an independent variable; by default, the code assumes that y is a constant.
>

$\mathrm{sys1}\u2254\left[yf\left(x\right)+g\left(x\right)\right]$

${\mathrm{sys1}}{\u2254}\left[{y}{}{f}{}\left({x}\right){+}{g}{}\left({x}\right)\right]$
 (1) 
>

$\mathrm{rifsimp}\left(\mathrm{sys1}\right)$

${table}{}\left(\left[{\mathrm{Case}}{=}\left[\left[{y}{\ne}{0}{\,}{f}{}\left({x}\right)\right]\right]{\,}{\mathrm{Pivots}}{=}\left[{y}{\ne}{0}\right]{\,}{\mathrm{Solved}}{=}\left[{f}{}\left({x}\right){=}{}\frac{{g}{}\left({x}\right)}{{y}}\right]\right]\right)$
 (2) 
Specification of y as an independent variable gives the following.
>

$\mathrm{rifsimp}\left(\mathrm{sys1}\,\mathrm{indep}=\left[x\,y\right]\right)$

${table}{}\left(\left[{\mathrm{Solved}}{=}\left[{f}{}\left({x}\right){=}{0}{\,}{g}{}\left({x}\right){=}{0}\right]\right]\right)$
 (3) 
This next example demonstrates the use of the casesplit option. We consider the Liesymmetry determining system for the following ODE:
>

$\mathrm{ODE}\u2254\mathrm{diff}\left(y\left(x\right)\,x\,x\right)+\left(2y\left(x\right)+f\left(x\right)\right)\mathrm{diff}\left(y\left(x\right)\,x\right)+\mathrm{diff}\left(f\left(x\right)\,x\right)y\left(x\right)$

${\mathrm{ODE}}{\u2254}\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right){+}\left({2}{}{y}{}\left({x}\right){+}{f}{}\left({x}\right)\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{y}{}\left({x}\right)\right){+}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{}\left({x}\right)$
 (4) 
The Lie symmetries are given as the solution of the following system of determining PDEs (as generated using DEtools[odepde]):
>

$\mathrm{sys}\u2254\left\{\mathrm{coeffs}\left(\mathrm{expand}\left(\mathrm{DEtools}\left[\mathrm{odepde}\right]\left(\mathrm{ODE}\,\left[\mathrm{\xi}\left(x\,y\right)\,\mathrm{\eta}\left(x\,y\right)\right]\,y\left(x\right)\right)\right)\,\mathrm{\_y1}\right)\right\}$

${\mathrm{sys}}{\u2254}\left\{{}\frac{{{\partial}}^{{2}}}{{\partial}{{y}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){\,}\frac{{{\partial}}^{{2}}}{{\partial}{{y}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){}{2}{}\frac{{{\partial}}^{{2}}}{{\partial}{x}{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){+}{4}{}\left(\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}{y}{+}{2}{}\left(\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}{f}{}\left({x}\right){\,}\frac{{{\partial}}^{{2}}}{{\partial}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){+}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){+}{2}{}\left(\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)\right){}{y}{+}\left(\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)\right){}{f}{}\left({x}\right){+}{2}{}\left(\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{}\left(\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{+}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}\left(\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{\,}{2}{}\frac{{{\partial}}^{{2}}}{{\partial}{x}{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){}\frac{{{\partial}}^{{2}}}{{\partial}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){+}{2}{}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){+}{3}{}\left(\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{+}{2}{}\left(\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}{y}{+}\left(\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right){}{f}{}\left({x}\right){+}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right)\right\}$
 (5) 
So running this system with rifsimp:
>

$\mathrm{ans}\u2254\mathrm{rifsimp}\left(\mathrm{sys}\,\left[\mathrm{\xi}\,\mathrm{\eta}\right]\right)\:$

>

$\mathrm{ans}\left['\mathrm{Solved}'\right]$

$\left[{\mathrm{\xi}}{}\left({x}{\,}{y}\right){=}{0}{\,}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){=}{0}\right]$
 (6) 
And we see that the given ODE has no point symmetries for general $f\left(x\right)$.
We may want to know if there are particular forms of $f\left(x\right)$ for which point symmetries exist (this is called a classification problem). Running rifsimp with casesplit:
>

$\mathrm{ans}\u2254\mathrm{rifsimp}\left(\mathrm{sys}\,\left[\mathrm{\xi}\,\mathrm{\eta}\right]\,\mathrm{casesplit}\right)\:$

>

$\mathrm{ans}\left['\mathrm{casecount}'\right]$

so we see there are cases.
We could use the caseplot command to give a pictorial view of the case tree with the following command.
>

$\mathrm{caseplot}\left(\mathrm{ans}\right)$

Looking at case 3 in detail:
>

$\mathrm{copy}\left(\mathrm{ans}\left[3\right]\right)$

${table}{}\left(\left[{\mathrm{Case}}{=}\left[\left[{{f}{}\left({x}\right)}^{{2}}{}\left(\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{2}{}{f}{}\left({x}\right){}{\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right)}^{{2}}{+}{2}{}{f}{}\left({x}\right){}\left(\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{+}{2}{}{\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right)}^{{2}}{}{y}{+}\left(\frac{{{\ⅆ}}^{{3}}}{{\ⅆ}{{x}}^{{3}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{f}{}\left({x}\right){+}{2}{}\left(\frac{{{\ⅆ}}^{{3}}}{{\ⅆ}{{x}}^{{3}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{y}{}{3}{}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}\left(\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){=}{0}{\,}{\mathrm{\xi}}{}\left({x}{\,}{y}\right)\right]{\,}\left[\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right){\ne}{0}{\,}\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right]\right]{\,}{\mathrm{Pivots}}{=}\left[\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right){\ne}{0}\right]{\,}{\mathrm{Solved}}{=}\left[\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){=}\frac{{}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{2}{}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)}{{2}{}{y}{+}{f}{}\left({x}\right)}{\,}\frac{{\partial}}{{\partial}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){=}\frac{\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}\left({{f}{}\left({x}\right)}^{{2}}{}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){+}{2}{}{f}{}\left({x}\right){}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}{y}{+}{2}{}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){+}{4}{}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)\right)}{{2}{}{f}{}\left({x}\right){+}{4}{}{y}}{\,}\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){=}{0}{\,}\frac{{\partial}}{{\partial}{y}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{\mathrm{\eta}}{}\left({x}{\,}{y}\right){=}\frac{{}{\mathrm{\xi}}{}\left({x}{\,}{y}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right){}{2}{}{\mathrm{\eta}}{}\left({x}{\,}{y}\right)}{{}{2}{}{y}{}{f}{}\left({x}\right)}{\,}\frac{{{\ⅆ}}^{{2}}}{{\ⅆ}{{x}}^{{2}}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right){=}{}{f}{}\left({x}\right){}\left(\frac{{\ⅆ}}{{\ⅆ}{x}}\phantom{\rule[0.0ex]{0.4em}{0.0ex}}{f}{}\left({x}\right)\right)\right]\right]\right)$
 (8) 
so we see we have a 2 parameter Lie group for the specific form of $f\left(x\right)$ given by:
>

$\mathrm{dsolve}\left(\mathrm{diff}\left(f\left(x\right)\,x\,x\right)=f\left(x\right)\mathrm{diff}\left(f\left(x\right)\,x\right)\right)$

${f}{}\left({x}\right){=}\frac{{\mathrm{tanh}}{}\left(\frac{\left({x}{+}{\mathrm{\_C2}}\right){}\sqrt{{2}}}{{2}{}{\mathrm{\_C1}}}\right){}\sqrt{{2}}}{{\mathrm{\_C1}}}$
 (9) 


