DEtools
buildsol
build a solution to an ODE using a reduction of order returned by dsolve and a solution to the reduced ODE
Calling Sequence
Parameters
Description
Examples
buildsol(ODESolStructure, sol_reduced_ODE)
ODESolStructure
-
answer returned by dsolve expressed in terms of ODESolStruc
sol_reduced_ODE
solution to the reduced ODE found inside ODESolStruc
For high order ODEs it may happen that dsolve succeeds in reducing the order of the ODE but not in solving the problem to the end. In those cases, the solution is expressed using ODESolStruc. You can obtain a solution for the reduced ODE by using the tools available in DEtools, as a series expansion, or by other means. If a solution to the reduced ODE is obtained, you can build a solution to the original problem using the buildsol command.
The buildsol command is a function of two arguments. The first argument is the structure returned by dsolve as the solution to an ODE (see ODESolStruc). The second argument is a solution found by the user to the reduced ODE present inside the first argument. That solution may be a particular one; buildsol will not check whether the given solution actually solves the reduced ODE.
This function is part of the DEtools package, and so it can be used in the form buildsol(..) only after executing the command with(DEtools). However, it can always be accessed through the long form of the command by using DEtools[buildsol](..).
with⁡DEtools:
A third order nonlinear ODE
ODE≔diff⁡y⁡x,x,x,x=diff⁡y⁡x,x,x⁢−1+diff⁡y⁡x,x⁢exp⁡y⁡x−x
ODE≔ⅆ3ⅆx3y⁡x=ⅆ2ⅆx2y⁡x⁢−1+ⅆⅆxy⁡x⁢ⅇy⁡x−x
This ODE is reducible:
odeadvisor⁡ODE
_3rd_order,_with_linear_symmetries,_3rd_order,_reducible,_mu_y2,_3rd_order,_reducible,_mu_poly_yn
It can be solved by dsolve directly by determining an appropriate integrating factor (see odeadvisor,reducible), but let's consider a possible answer for it as a reduction of order from 3 to 1:
sol≔y⁡x=ODESolStruc⁡_c+Int⁡exp⁡Int⁡_f1⁡_c,_c+_C1,_c+_C2,diff⁡_f1⁡_c,_c=2⁢_f1⁡_c2+_f1⁡_c⁢exp⁡_c,_c=y⁡x−x,_f1⁡_c=−diff⁡diff⁡y⁡x,x,x−1+diff⁡y⁡x,x2,x=Int⁡exp⁡Int⁡_f1⁡_c,_c+_C1,_c+_C2,y⁡x=_c+Int⁡exp⁡Int⁡_f1⁡_c,_c+_C1,_c+_C2
sol≔y⁡x=_c+∫ⅇ∫_f1⁡_cⅆ_c+_C1ⅆ_c+_C2whereⅆⅆ_c_f1⁡_c=2⁢_f1⁡_c2+_f1⁡_c⁢ⅇ_c,_c=y⁡x−x,_f1⁡_c=−ⅆ2ⅆx2y⁡x−1+ⅆⅆxy⁡x2,x=∫ⅇ∫_f1⁡_cⅆ_c+_C1ⅆ_c+_C2,y⁡x=_c+∫ⅇ∫_f1⁡_cⅆ_c+_C1ⅆ_c+_C2
Test that the above solves the ODE by using odetest:
odetest⁡sol,ODE
0
Now, the reduced ODE is of Bernoulli type, and can be selected using the mouse or through the following commands:
reduced_ODE≔op⁡2,2,1,1,sol
reduced_ODE≔ⅆⅆ_c_f1⁡_c=2⁢_f1⁡_c2+_f1⁡_c⁢ⅇ_c
odeadvisor⁡reduced_ODE
_Bernoulli
From the above, it is clear that a particular solution to the reduced_ODE is given by
sol_red_1≔_f1⁡_c=0
from which a particular solution to the original ODE above can be built using
particular_sol≔buildsol⁡sol,sol_red_1
particular_sol≔y⁡x=−−ⅇc__1⁢x+c__2−xⅇc__1
odetest⁡particular_sol,ODE
In this "blackboard" example, dsolve succeeds in solving the reduced_ODE too, as follows:
sol_red_2≔dsolve⁡reduced_ODE
sol_red_2≔_f1⁡_c=ⅇⅇ_c2⁢Ei1⁡−ⅇ_c+c__1
Passing this solution to buildsol, the general solution to ODE follows:
general_sol≔buildsol⁡sol,sol_red_2
general_sol≔y⁡x=x+RootOf⁡−x+2⁢∫` `_Zⅇc__12⁢Ei1⁡−ⅇ_b+c__3ⅆ_b+c__2
odetest⁡general_sol,ODE
See Also
DESol
dsolve
odeadvisor,reducible
ODESolStruc
odetest
PDEtools
series
Download Help Document