Maple dsolve in EducationDescriptionODEs can be classifiedSolutions using "this" or "that" methodIntegrating factors and ODEsThe Lie symmetry approach for solving ODEsSingular solutions for nonlinear ODEs

<Text-field style="Heading 2" layout="Heading 2" bookmark="info">Description</Text-field>Most of the intermediate solving steps used by Maple dsolve are now available as user level commands, including all the steps of the integrating factor and symmetry approaches.New optional arguments in dsolve also permit you to tackle a given ODE using methods you specify, and with or without performing the integration step, facilitating the understanding of the different possible solving methods, and the use of dsolve and related Maple commands in classroom.
<Text-field style="Heading 2" layout="Heading 2" bookmark="bkmrk0">ODEs can be classified</Text-field>The relevant command is odeadvisor. The capability of classifying ODEs was introduced in Maple 5. In subsequent versions, the list of classifications known by the system was enlarged, focusing in classifications traditionally found in textbooks, and also in new ones related to solving algorithms recently presented in the literature.
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk1">Example</Text-field>If infolevel is set to a greater integer (possible settings are 1 through 5), more detailed information about the computation method is displayed.with(DEtools):with(PDEtools, declare):declare(y(x), prime=x); # Turn ON the enhanced DEdisplay featureinfolevel[dsolve] := 3;ode1 := diff(y(x), x)-y(x)^2+y(x)*sin(x)-cos(x);This ODE is recognized by the system as of Riccati typeodeadvisor(ode1);and solved accordingly:dsolve(ode1);To know more about this type of ODE and related solving methods one can give the extra argument help:odeadvisor(ode1, help);A table with all the classifications recognized in Maple is found at odeadvisor, classifications.
<Text-field style="Heading 2" layout="Heading 2" bookmark="bkmrk2">Solutions using "this" or "that" method</Text-field>dsolve accepts extra arguments related to the solving method to be used (a single ODE can usually be solved using different methods); it is also possible to avoid the integration step, or avoid making the answer explicit; (these last two steps may easily obscure the whole solving process).
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk3">Example</Text-field>A linear ODEode_L := sin(x)*diff(y(x), x)-cos(x)*y(x)=0;Although dsolve has its own strategy and defaults, one can also indicate to dsolve the use of any specific sequence of 'methods' to tackle the ODE. In this example the method for 'linear' ODEs is specified; in addition the optional argument 'useInt' makes dsolve not evaluating the integral appearing in the answerdsolve(ode_L, [linear], useInt);Solutions like this one - before evaluating integrals - are useful to understand how the solution was obtained; integrals can be evaluated afterwards using valuevalue(This particular linear ODE is also separable, hence it can also be solved viadsolve(ode_L, [separable], useInt);value(
<Text-field style="Heading 2" layout="Heading 2" bookmark="bkmrk4">Integrating factors and ODEs</Text-field>As a general alternative, ODEs can be tackled by looking for an integrating factor. The relevant commands in this approach are: intfactor, firint, firtest, muchange, mutest, adjoint.
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk5">Example</Text-field>The linear first order ODE of the previous section can be solved by first determining an integrating factor for itmu := intfactor(ode_L);Integrating factors turn ODEs exact, that is: the product NiMtSSNtaUc2JEkqcHJvdGVjdGVkR0YmL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHNiRGJkkoX3N5c2xpYkdGKTYjUSUmbXU7Rik= times the ODE is a total derivative. One can combine the determination of an integrating factor with indicating to dsolve the use of the method for exact ODEs:dsolve(mu * ode_L, [exact]);simplify(convert(
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk6">Integrating factors for second and higher order linear ODEs</Text-field>For linear ODEs (LODEs) of order 2 or greater, it is possible to calculate integrating factors by solving the adjoint of the LODE. This could be as difficult as the original problem, or much easier, depending on the example. The set of DEtools available permits a discussion of such a strategy in details.
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk7">Example</Text-field>ode := diff(y(x), x, x) =
(y(x)*x+y(x)*ln(x)*x^2+diff(y(x), x)*ln(x)*x^2)/ln(x)/x^2*exp(x)-
y(x)/ln(x)/x^2;This ODE has the following adjointDEtools[adjoint](ode, y(x));This adjoint equation is in turn solvable by dsolvedsolve(Now the solutions to the adjoint equation are integrating factors of the original LODE, so the two independent solutions implied in the general solution aboveeval(rhs(eval(rhs(are integrating factors of ode. These integrating factors could also be found using the intfactor directlyMu := intfactor(ode);
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk8">Constructing solutions using integrating factors</Text-field>How are these integrating factors transformed into a solution to the original problem? By using them to construct two first integrals; that is: two ODEs of lower order (in this case two first order ODEs). For that purpose it is provided the firint command which receives an exact ODE and returns a first integral. The idea is simple: an exact ODE is a total derivative - say dR/dx; firint returns the R + _C1:firint(Mu[1]*ode);firint(Mu[2]*ode);Eliminating y' from these two first integrals (and replacing _C1 by _C2 in one of them) leads to the solution NiMvLUkiZkc2IjYmSSJ4R0YmLUkieUdGJjYjRihJJF9DMUdGJkkkX0MyR0YmIiIh to this ode. So all this process could be ran interactively, as shown, or in one stepdsolve(ode);
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk9">Integrating factors for second and higher order nonlinear ODEs</Text-field>There are algorithms in dsolve for determining integrating factors for nonlinear ODEs too:for second order ODEs, integrating factors depending on two variables (x, y) or (x, y') or (y, y') - when they exist - can be systematically determined;for third order ODEs, integrating factors depending only on (y'') can also be systematically determined.
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk10">Example</Text-field>infolevel[dsolve] := 0; # Turn OFF userinfos for dsolveode := diff(y(x), x, x, x) = -diff(y(x), x, x)^2/diff(y(x), x);For this ODE, three integrating factors areintfactor(The product of any of them times the ode is a total derivative, from where a first integral can be obtained; for instance taking the third onefirint(Solving for y'' this reduced ODE, isolate(we are able to calculate more integrating factors (in this case intfactor succeeds again):intfactor(and obtain a lower order first integral as in the previous stepfirint(Finally, this is a simple first order ODE which can be solved directly, leading to the general solution for the original ode problem:dsolve();map(odetest, [], ode);where in above we map the odetest command over each of the solutions. As a general comment, the integration constants entering the general solution of an ODE are arbitrary, we can always rename LUklbXJvd0c2JEkqcHJvdGVjdGVkR0YlL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHNiRGJUkoX3N5c2xpYkdGKDYlLUklbXN1cEc2JEYlL0YnRik2JC1JI21vRzYkRiUvRidGKTYjUS8mRXhwb25lbnRpYWxFO0YoLUkjbWlHNiRGJS9GJ0YpNiNRJF9DMUYoLUYzNiNRJyZyYXJyO0YoRjg=, simplifying a bit the solution. This ode here solved using the integrating factor approach can also be solved using the symmetry approach (following the steps shown in the next section).Also interesting in the integrating factor approach is the inverse problem; that is: to determine the most general ODE family having a given integrating factor (related worked examples are found in redode).
<Text-field style="Heading 2" layout="Heading 2" bookmark="bkmrk11">The Lie symmetry approach for solving ODEs</Text-field>dsolve includes symmetry methods for all differential order. The possibility of using separate tool-commands related to each of the symmetry steps makes approaching the method relatively easy. In addition, the possibility of also classifying the ODE according to standard methods, or looking for related integrating factors permits observing the natural relation existing among all these approaches. The most relevant related commands are symgen, canoni, transinv, reduce_order and buildsol; see also DEtools, Lie and dsolve, Lie.
<Text-field style="Heading 3" layout="Heading 3" bookmark="bkmrk12">Example</Text-field>The following worked example aims at illustrating how the solving process can be performed step-by-step, using the symmetry approach, and with instructions easy to re-use. The commands to be used are: symgen (for calculating the symmetries), reduce_order (for reducing the order using these symmetries), and buildsol (to build the solution to the original problem from the solutions to the reduced ODE problems)This is a fifth order ODE (from Kamke's book, high order ODE example 17):ode5 := 9*diff(y(x), x, x)^2*diff(y(x), x, x, x, x, x)
- 45*diff(y(x), x, x)*diff(y(x), x, x, x)*diff(y(x), x, x, x, x) +
40*diff(y(x), x, x, x)=0;Classifying using odeadvisor (classifying ODEs is now a menu option available when "right clicking" on the ODE above)odeadvisor(ode5);it is apparent that there are various possible departure points to start reducing the ODE order: the ODE is missing the dependent and independent variables, it also has linear symmetries. In connection with all these starting points there are the symmetries:X5 := symgen(ode5);The result above means, basically, that dsolve is able to solve the ODE by itself. With the purpose of illustrating the method, these symmetries are used below interactively to solve the ODE. The simplest manner of doing that is: reduce the order of the ODE by one and restart the discussion around this reduced ODE. When this approach is successful, build the solution to the original problem from the solution to the last reduced ODE. The steps below can be re-used with others ODE examples, as for instance the one solved interactively in the previous section by using integrating factors.So we start reducing the order using just one of the symmetries aboveOFF; # Turn OFF the enhanced DEdisplay featureR_5_to_4 := reduce_order(ode5, X5[1], u(t));The structure of the solution above contains the answer in terms of a new function, u(t), which satisfy the fourth order differential equation being shown.Now select this fourth order ODE and consider the same cycle again (finding symmetries plus reducing its order again):ode4 := op([2, 2, 1, 1], R_5_to_4);X4 := symgen(ode4);With the symmetries of ode4 in hands we can proceed in the same way to obtain a reduction of order from 4 to 3, now expressing the third order differential equation in terms of a new function s(r)R_4_to_3 := reduce_order(ode4, X4[1], s(r));Selecting the third order ODE and calculating its symmetries leads toode3 := op([2, 2, 1, 1], R_4_to_3);X3 := symgen(ode3);These symmetries can be used to reduced the order further, obtaining a second order ODE - we choose z(v) as new unknown function:R_3_to_2 := reduce_order(ode3, X3[1], z(v));ode2 := op([2, 2, 1, 1], R_3_to_2);One more cycle reduce the problem to a first order linear ODE which is a problem having solution in the general case in terms of integralsX2 := symgen(ode2);R_2_to_1 := reduce_order(ode2, X2[1], a(b));ode1 := op([2, 2, 1, 1], R_2_to_1);The answer to this easy ODE found at the end of the reduction process issol1 := dsolve(ode1);Now, how could we build the solution to the original fifth order ode5? As follows: first use this solution above to build the solution to ode2 (the second order ODE one step above and rename integration constants which appeared as _C1 in all reductions):buildsol(subs(_C1=_C2, R_2_to_1), sol1);The integral can be evaluated viasol2 := value();And now repeat the process until arriving at the solution to the original fifth order odesol3 := buildsol(subs(_C1=_C3, R_3_to_2), sol2);sol4 := buildsol(subs(_C1=_C4, R_4_to_3), sol3);sol5 := buildsol(subs(_C1=_C5, R_5_to_4), sol4);This result can be tested using odetestodetest(sol5, ode5);For more examples see dsolve, Lie, , reduce_order and the help pages linked from DEtools, Lie.Also interesting in the symmetry approach is the inverse problem; that is: to determine the most general ODE family having given symmetries (see equinv), or the symmetries of an 'unknown' ODE when its solution is given (see buildsym). Combining these two tools it is possible to depart from the form of the solution and arrive at the most general ODE problem having the symmetries of that type of solution (examples are found in the mentioned help-pages).
<Text-field style="Heading 2" layout="Heading 2" bookmark="bkmrk13">Singular solutions for nonlinear ODEs</Text-field>In addition to the general solution, Nonlinear ODEs may also have singular solutions (see references). When the ODE is polynomial in the unknown function y(x) and its derivatives, these singular solutions can be obtained separately by first splitting the ODE problem into cases. For example, considerON; # Turn ON the enhanced DEdisplayode := (y(x)*diff(y(x), x, x)-diff(y(x), x)^2)*diff(y(x), x, x, x, x)-diff(y(x), x, x)^3
-y(x)*diff(y(x), x, x, x)^2+2*diff(y(x), x)*diff(y(x), x, x)*diff(y(x), x, x, x);The set of general and singular solutions to this ODE is given by the union of the non-singular solutions to each of the following ODEs:casesplit(ode);In above we see three cases. The first one, which has the same differential order of the original problem ode leads to the general solution. The two second cases are of lower differential order and lead to singular solutions. So for this example dsolve returnsdsolve(ode);In some cases (e.g.: the one above) some of the singular solutions can be obtained by adjusting the integration constants in the other solutions (general or singular).