Go to the first, previous, next, last section, table of contents.

Adaptive Step-size Control

The control function examines the proposed change to the solution and its error estimate produced by a stepping function and attempts to determine the optimal step-size for a user-specified level of error.

Function: gsl_odeiv_control * gsl_odeiv_control_standard_new (double eps_abs, double eps_rel, double a_y, double a_dydt)
The standard control object is a four parameter heuristic based on absolute and relative errors eps_abs and eps_rel, and scaling factors a_y and a_dydt for the system state @math{y(t)} and derivatives @math{y'(t)} respectively.

The step-size adjustment procedure for this method begins by computing the desired error level @math{D_i} for each component,

and comparing it with the observed error @math{E_i = |yerr_i|}. If the observed error E exceeds the desired error level D by more than 10% for any component then the method reduces the step-size by an appropriate factor,

where @math{q} is the consistency order of method (e.g. @math{q=4} for 4(5) embedded RK), and @math{S} is a safety factor of 0.9. The ratio @math{D/E} is taken to be the maximum of the ratios @math{D_i/E_i}.

If the observed error @math{E} is less than 50% of the desired error level D for the maximum ratio @math{D_i/E_i} then the algorithm takes the opportunity to increase the step-size to bring the error in line with the desired level,

This encompasses all the standard error scaling methods.

Function: gsl_odeiv_control * gsl_odeiv_control_y_new (double eps_abs, double eps_rel)
This function creates a new control object which will keep the local error on each step within an absolute error of eps_abs and relative error of eps_rel with respect to the solution @math{y_i(t)}. This is equivalent to the standard control object with a_y=1 and a_dydt=0.

Function: gsl_odeiv_control * gsl_odeiv_control_yp_new (double eps_abs, double eps_rel)
This function creates a new control object which will keep the local error on each step within an absolute error of eps_abs and relative error of eps_rel with respect to the derivatives of the solution @math{y'_i(t)} . This is equivalent to the standard control object with a_y=0 and a_dydt=1.

Function: gsl_odeiv_control * gsl_odeiv_control_alloc (const gsl_odeiv_control_type * T)
This function returns a pointer to a newly allocated instance of a control function of type T. This function is only needed for defining new types of control functions. For most purposes the standard control functions described above should be sufficient.

Function: int gsl_odeiv_control_init (gsl_odeiv_control * c, double eps_abs, double eps_rel, double a_y, double a_dydt)
This function initializes the control function c with the parameters eps_abs (absolute error), eps_rel (relative error), a_y (scaling factor for y) and a_dydt (scaling factor for derivatives).

Function: void gsl_odeiv_control_free (gsl_odeiv_control * c)
This function frees all the memory associated with the control function c.

Function: int gsl_odeiv_control_hadjust (gsl_odeiv_control * c, gsl_odeiv_step * s, const double y0[], const double yerr[], const double dydt[], double * h)
This function adjusts the step-size h using the control function c, and the current values of y, yerr and dydt. The stepping function step is also needed to determine the order of the method. If the error in the y-values yerr is found to be too large then the step-size h is reduced and the function returns GSL_ODEIV_HADJ_DEC. If the error is sufficiently small then h may be increased and GSL_ODEIV_HADJ_INC is returned. The function returns GSL_ODEIV_HADJ_NIL if the step-size is unchanged. The goal of the function is to estimate the largest step-size which satisfies the user-specified accuracy requirements for the current point.

Function: const char * gsl_odeiv_control_name (const gsl_odeiv_control * c)
This function returns a pointer to the name of the control function. For example,

printf("control method is '%s'\n", 
       gsl_odeiv_control_name (c));

would print something like control method is 'standard'


Go to the first, previous, next, last section, table of contents.