Numerical Algorithms

Continuing with our example, there remain a few pieces of information which we have not yet entered into DsTool. We modify the last lines of code in bball_init() to obtain:
int        mapping_toggle=TRUE;         /* this is a map? TRUE or FALSE         */
int        inverse_toggle=EXPLICIT_INV; /* if so, is inverse FALSE, APPROX_INV, */
                                        /* or EXPLICIT_INV? FALSE for vec field */ 

/*  In this section, input NULL or the name of the function which contains...   */
int     (*def_name)()=bball;            /* the eqns of motion                   */
int     (*jac_name)()=bball_jac;        /* the jacobian (deriv w.r.t. space)    */
int     (*aux_func_name)()=bball_aux;   /* the auxiliary functions              */
int     (*inv_name)()=bball_inv;        /* the inverse or approx inverse        */
int     (*dfdt_name)()=NULL;            /* the deriv w.r.t time                 */
int     (*dfdparam_name)()=NULL;        /* the derivs w.r.t. parameters         */
The first line means that our system is a mapping; if it were a vector field, we would set mapping_toggle to FALSE. The second line means that we have an explicit inverse for our system. In the event that a mapping does not have an explicit inverse, then Newton's method will be used to calculate inverse iterates. In this event, we need to tell DsTool if there exists an approximate inverse (see Section 4.2.3 or the Reference Manual) which can be used as an initial guess for Newton's method. If there is, then inverse_toggle is set to APPROX_INV; otherwise, it is set to FALSE. We remark that if mapping_toggle is set to FALSE (that is, the system is a vector field), then the value of inverse_toggle is ignored by DsTool.

In the last section of code, we provide DsTool with the names of any functions we defined previously. For our example, this means filling in the names of the functions which compute the equations of motion, the Jacobian, auxiliary functions, and the inverse. If any of these functions were omitted, then the user should enter NULL instead of a name. For example, the function which defines the inverse will be NULL if you are installing a vector field, and the function which defines the derivative with respect to time should always be NULL for mappings.

At this point, the user should save and exit the file bball_def.c.

Adrian Bunk 2001-08-22