reduce the order of an ODE using symmetries or solutions
reduce_order(ODE, symmetries, method, new_vars, keep_order, in_sequence, output = opts)
reduce_order(ODE, y(x)=solution1(x), y(x)=solution2(x), ..., new_vars, keep_order, in_sequence, output = opts)
reduce_order(ODE, basis=[S1(x), S2(x), ...], new_vars, keep_order, in_sequence, output = opts)
ODE that is to be reduced
list or expression sequence of symmetries admitted by the ODE
(optional) related to reduction using symmetries, can be can (default; canonical coordinates) or dif (differential invariants)
equations where the left-hand side is the dependent variable of ODE and the right-hand side a solution for it
related to reducing linear ODEs; S1(x), S2(x), ... are linearly independent solutions
(optional) sequence of functions - u(t); specify new dependent variables
(optional) specify that reduce_order reduce the ODE using the symmetries or solutions in the given order instead of optimizing (default behavior)
(optional) specify that reduce_order return the whole sequence or chain of reductions of order when many symmetries or solutions are given
(optional); specify output type; can be any of: ODESolStruc (default), DESol, basis, reduced_ode, solution
The reduce_order function uses ODE symmetries or ODE solutions to compute appropriate changes of variables that reduce the order of the input ODE. By default, the output is a solution expressed in terms of the reduced ODE (see ODESolStruc). As with all ODESolStruc, these solutions can be converted to standard closed form solutions by using the DEtools[buildsol] command if you can solve the reduced ODE.
Optionally, in the case of a linear ODE, the solution can also be expressed in terms of DESol. There is an equivalence between DESol and ODESolStruc; the output can also be the reduced ODE itself, or a solution in standard closed form. For these purposes use the optional argument output=<keyword>, where <keyword> is one of: ODESolStruc, DESol, basis, reduced_ode, and solution.
Up to r reductions of order are returned when r symmetries are given and form a solvable Lie Algebra (see solve_group).
Similarly, up to r reductions of order are returned when r independent solutions y=solution1(x), ..., y=solutionr(x) (instead of symmetries) are given.
In the case of a linear ODE, any solution S⁡x is also a symmetry of the form ξ=0,η=S⁡x; so it is possible to use the symmetry routines with linear ODEs as well. In that case, it suffices to pass the r solutions [S1(x), ..., Sr(x)] written as symmetries [0, S1(x)], ..., [0, Sr(x)].
When many reductions of order are performed, reduce_order can also output in two different manners. The default output is one object (the solution or the reduced ODE) without giving any information on the intermediate reductions of order. By giving the optional argument in_sequence, a Maple sequence of reductions of order is returned such that the first element in the sequence shows the input ODE reduced in order by one, the second element shows the first reduced ODE reduced in order by one, and so on.
When no output=<keyword> is indicated, this sequence is a sequence of ODESolStruc, where each ODESolStruc contains the reduced ODE, the forward transformation of variables from the original ODE to the new ODE, and the reverse transformation. All these transformations can be combined using buildsol.
Optionally, you can indicate the name of the dependent variable new_vars to be used in the reduced ODE or also in each of the reduced ODEs when the in_sequence optional argument is given. To indicate these dependent variables it suffices to specify them in the calling sequence anywhere after the first argument (the ODE to reduce).
If many symmetries or solutions are given, for nonlinear ODEs, reduce_order optimizes the order in which the symmetries or solutions are used. To enforce the use of these symmetries in exactly the given order use the optional argument keep_order.
Two algorithms are used to reduce the order of ODEs using symmetries: the method of differential invariants and the method of canonical coordinates. They can be specified by passing dif or can, respectively, as an extra argument. The default is can. See invariants for more information.
Optional arguments can be specified in any order after the first argument (the ODE to reduce).
With a first order ODE, reduce_order returns the reduction of order obtained by introducing, as new variables, the differential invariants associated to the given symmetry.
sym ≔ 1,0
ode ≔ ⅆⅆx⁢y⁡x=y⁡x
The output appears as an ODESolStruc where the first set contains the reduced ODE expressed in terms of the new variables. In this example, it is an ODE of order zero.
The differential invariants, however, are not uniquely defined, and the different methods (can and dif) lead to similar but different reductions of order. For example, by giving the extra argument dif, the differential invariants appear as:
and the reduction of order becomes:
The ODESolStruc above can be used together with a solution to the reduced ODE to build the solution to the original ODE by using the buildsol function. This is the reduced ODE, which in this example happens to be of order zero, that is, already a solution for u(t)
and this is how you build the solution using DEtools[buildsol] from the output of reduce_order and this solution for u(t)
Here is a second order ODE example. Given two symmetries, build the second order equation simultaneously invariant under the symmetries (see equinv).
syms ≔ 1,0,0,ⅇx
ode ≔ equinv⁡syms,y⁡x,2
Reduce this ODE using the first symmetry 1,0.
The reduction using the second symmetry 0,ⅇx is given by:
Find the complete reduction using both symmetries. By giving the extra argument in_sequence, the output is shown as a sequence: the first reduction followed by the second reduction.
oo ≔ reduce_order⁡ode,syms,u⁡v,U⁡V,dif,in_sequence
Show the reduced ODEs.
o1 ≔ op⁡2,1,1,rhs⁡oo1
o2 ≔ op⁡2,1,1,rhs⁡oo2
Build the general solution.
Construct a parametric solution.
Download Help Document