A couple of ideas for improving the ODE solver capabilities are listed on 
the GSoC project ideas page:
https://github.com/sympy/sympy/wiki/GSoC-Ideas#other-ode-ideas

I propose a roadmap for a (first order) ODE solver that leads to a 
structured and modular workflow where the individual functionalities can be 
reused for other, more advanced solvers. Currently, the first order ODE 
solver consists of a collection of solvers based mainly on pattern matching 
for well-known ODEs. More general methods for first order and second order 
ODEs exist that do not depend on pattern matching, but on searching for 
integrating factors or symmetry generators (that construct an integrating 
factor) of a certain type. 

For first order ODEs, the key is that an integrating factor will solve the 
ODE. You can either search directly for integrating factors of a certain 
type, or you can search for a symmetry generator that will then in turn 
lead to an integrating factor. 

Darboux methods search directly for integrating factors of a certain type. 
This method will find all solutions of first order ODEs with Liouvillian 
solutions, which is a very broad class. The idea is that you assume a 
polynomial shape for the integrating factor of a certain degree and then 
find the coefficients of using the method of undetermined coefficients. 
This method works well, but you need a solver for nonlinear systems of 
equations, so a Groebner basis computation, like the F5 algorithm would be 
needed in general. 

Another approach is symmetry methods. A symmetry generator of the ODE is 
found, which directly leads to an integrating factor. Once the integrating 
factor is found, you can construct the first integral of the ODE, which is 
an implicit solution. If possible, you can then try to write the first 
integral as an explicit solution of the ODE. In general, we would also need 
Groebner basis computations for finding symmetries, but we can avoid this 
by implementing searches for specific symmetry generators. 

So the workflow for the symmetry method is:
1. compute symmetry generator using several available options
2. compute integrating factor from symmetry generator
3. compute first integral using integrating factor
4. write first integral as explicit solution of the ODE

ODE solvers that can fit into this workflow are solvers for linear, inverse 
linear, exact, separable, Bernoulli, Abel (constant coefficient) and 
homogeneous ODEs

Some first order ODEs need special treatment, like Riccati ODEs and ODEs 
that have special functions as the solution (Bessel, Airy,...). That is 
because you need to solve the ODE first to find the symmetry generators. A 
solver for Rational Riccati ODEs will be important because many problems 
can be reduced to the solution of a Riccati ODE, like for instance second 
order ODEs

Performance and robustness is important. We need a regression test 
containing a large collection of ODEs for testing. The books of Kamke and 
Murphy contain such lists. 

So I propose the following projects, which could be part of a GSOC project:
1. Create regression test for the Kamke and Murphy ODEs
2. Create workflow as stated above, and write auxiliary functions like 
computeFirstIntegralFromIntegratingFactor, testIntegratingFactor,  etc
3. Implement more structured symmetry search for well known ODEs, and make 
existing symmetry searches robust
4. Add more advanced symmetry search like from the paper of Kolokolnikov 
(https://arxiv.org/abs/math-ph/0007023)
5. Add rational Riccati solver

With this basis, methods can then be added that use this functionality:
6. Kovacic method for second order ODEs with Liouvillian solutions
7. Solver for rational first order ODEs 
9. Implicit and higher degree first order ODEs
10. Computation of Janet bases for general linear second order ODEs.
11. Symmetry method for second order ODEs
12. Second order nonlinear ODEs
13. Computation of Invariant Algebraic Curves

Let me know what you think of this plan. All we need now is somebody who 
will do all of this :-) 

Best regards,
Nijso










-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/f6bcbe4b-26a1-4948-b12c-0048e6fb9e88n%40googlegroups.com.

Reply via email to