Criticism

The volume and diversity of all the available numerical software is tremendous. Many software applications were constructed in the idea to help the practicians, like engineers, in solving real problems without consulting a mathematician (instead an "expert" application). The problems which are very simple can be easily solve with these applications.

In the case of initial value problems of ordinary differential equations, there are two main categories: for which we can construct an analytic solution and those for which we do not know how to construct an analytic solution.

In the first case, we can obtain a function which represent the exact solution, using one of the actual CAS (Computer Algebra Systems). A such software application does symbolic computations in order to solve a given problem. If the problem is simple, probably, the system will recognize very fast the exact solution. Otherwise, we must apply some transformations to the equation system, or we must use dedicated library procedures which are not in the system kernel (for example, in Maple we have a special routine package for ordinary differential equations). Unfortunately, an overall mathematical knowledge is not translated in databases for computer applications, like the actual CAS.

If we failed in obtaining an analytic solution (using the computer or an human expert), we must try to approximate the exact solution. The number of numerical methods which we can select in order to due this task is very large. The main question is which one is adequate to the given problem. The answer depends on what quality level we request for the approximation, the time in which we want to obtain the approximation, and the knowledge of the solving method class.

Most of the numerical software products used for ordinary differential equations are constructed with a fixed set of method including the most used numerical methods, like Euler's method or standard Runge-Kutta method. Simple problems can be solved using these applications. Troubles come when we want to solve problems with many number of equations or which cannot be solved with the classical methods. Take for example, the numerical procedure for solving ordinary differential equations from Maple. Since the intrinsic procedure is an explicit Runge-Kutta method, stiff systems cannot be integrated properly. If the application is not open to new methods, then we must search another product which satisfied us. If the application is open to new methods (for example, in Maple, we can construct a procedure to solve with a specific method the given problem), with a little effort, we can find an approximation of the exact solution. In this case, the user must pay attention to the application language in order to describe correctly the numerical method and the control procedure of the computational process. The application for describing the new method must be closed to the mathematical language in which are usually described the numerical methods (this is not the case if we use a collection of programs in a programming language, like Fortran for Odepack from http://netlib.org). We known that the CAS, which are open to new methods, are not indicated to do with them numerical computations, due to the fact that each computation is first tested in order to do it symbolically. It is preferable to use an numerical software product.

A hard problem is the selection of an adequate method from the method database. A correct selection can be done only knowing the problem properties. The method database must be organized in method classes depending on the properties of the problems for which the methods are working.