Invoking the dsolve function with the numeric option and output&equals;procedurelist (default), output&equals;listprocedure or output=operator causes dsolve to return procedure(s) to numerically solve the input ODE system.

•

Prior to returning this procedure, the input system is converted to a first order system (by introduction of new variables if necessary), then solved with respect to those first order derivatives giving a system of the form:

During the course of the numerical solution of the ODE system, it is necessary to evaluate the functions f1, f2 above for different values of t, x, y, to obtain the values of the derivatives x&apos;, y&apos;.

The option maxfun=n in the call to dsolve,numeric gives an upper limit of n on the total number of evaluations performed on f1, f2 for any single call to the procedure returned by dsolve. Note that the evaluation of both f1, f2 at one set of values of t, x, y is considered to be a single evaluation.

•

This option is provided as a means of limiting the amount of work performed on any single call to the solution procedure, and as a means of preventing the computation from running forever when it encounters a singularity in the solution of the ODE.

•

When the maxfun function evaluation limit is exceeded, the solution procedure halts with an error of the form Error, (in <proc>) too many function evaluations in <method>.

For the dverk78, lsode, and gear methods, this option is disabled by default. For the rkf45, ck45, and rosenbrock methods, the default setting is maxfun=30000, while for the classical methods, the default setting is maxfun=50000.

•

A setting of maxfun=0 disables the option.

•

This option is useful for some variable step methods, as without this limit it is possible for a calculation to run forever, and never get past a certain point in the integration (if the step size were, for example, halving at each step of the numerical integration). This can happen when singularities are present. It is also useful when the function to be evaluated is large and complex or is expensive to evaluate (say, for example, a procedure call that does a numerical sum).

Integrating this DE out to t&equals;200 actually requires nearly half a million function evaluations due to the O&ApplyFunction;t2 increase in the rate of change of the function on the right-hand side. This can take some time for computation, so maxfun acts like a stopcheck here.

If we really want this value, we can increase the value of maxfun from its default of 30000 to 500000, and obtain a solution as follows:

we see that we still hit the maxfun barrier, though the integration does proceed a small bit further.

Since there is an actual singularity, this is a case where the singularity detection fails and maxfun set to 30000 prevents the calculation from running for an excessive time while serving no useful purpose.