NAG C Library Function Document

nag_zero_cont_func_cntin_rcomm (c05axc)


nag_zero_cont_func_cntin_rcomm (c05axc) attempts to locate a zero of a continuous function using a continuation method based on a secant iteration. It uses reverse communication for evaluating the function.


#include <nag.h>
#include <nagc05.h>
void  nag_zero_cont_func_cntin_rcomm (double *x, double fx, double tol, Nag_ErrorControl ir, double scal, double c[], Integer *ind, NagError *fail)


nag_zero_cont_func_cntin_rcomm (c05axc) uses a modified version of an algorithm given in Swift and Lindfield (1978) to compute a zero α of a continuous function fx . The algorithm used is based on a continuation method in which a sequence of problems
fx-θrfx0,  r=0,1,,m  
are solved, where 1 = θ0 > θ1 > > θm = 0  (the value of m is determined as the algorithm proceeds) and where x0  is your initial estimate for the zero of fx . For each θr  the current problem is solved by a robust secant iteration using the solution from earlier problems to compute an initial estimate.
You must supply an error tolerance tol. tol is used directly to control the accuracy of solution of the final problem ( θm=0 ) in the continuation method, and tol  is used to control the accuracy in the intermediate problems ( θ1 , θ2 , , θm-1 ).


Swift A and Lindfield G R (1978) Comparison of a continuation method for the numerical solution of a single nonlinear equation Comput. J. 21 359–362


Note: this function uses reverse communication. Its use involves an initial entry, intermediate exits and re-entries, and a final exit, as indicated by the argument ind. Between intermediate exits and re-entries, all arguments other than fx must remain unchanged.
1:     x double *Input/Output
On initial entry: an initial approximation to the zero.
On intermediate exit: the point at which f must be evaluated before re-entry to the function.
On final exit: the final approximation to the zero.
2:     fx doubleInput
On initial entry: if ind=1, fx need not be set.
If ind=-1, fx must contain fx  for the initial value of x.
On intermediate re-entry: must contain fx  for the current value of x.
3:     tol doubleInput
On initial entry: a value that controls the accuracy to which the zero is determined. tol is used in determining the convergence of the secant iteration used at each stage of the continuation process. It is used directly when solving the last problem ( θm=0  in Section 3), and tol  is used for the problem defined by θr , r<m . Convergence to the accuracy specified by tol is not guaranteed, and so you are recommended to find the zero using at least two values for tol to check the accuracy obtained.
Constraint: tol>0.0 .
4:     ir Nag_ErrorControlInput
On initial entry: indicates the type of error test required, as follows. Solving the problem defined by θr , 1rm , involves computing a sequence of secant iterates xr0,xr1, . This sequence will be considered to have converged only if:
for ir=Nag_Mixed,
xr i+1 -xri eps×max1.0,xri ,  
for ir=Nag_Absolute,
xr i+1 -xri eps,  
for ir=Nag_Relative,
xr i+1 -xri eps×xri ,  
for some i>1 ; here eps  is either tol or tol  as discussed above. Note that there are other subsidiary conditions (not given here) which must also be satisfied before the secant iteration is considered to have converged.
Constraint: ir=Nag_Mixed, Nag_Absolute or Nag_Relative.
5:     scal doubleInput
On initial entry: a factor for use in determining a significant approximation to the derivative of fx  at x=x0 , the initial value. A number of difference approximations to fx0  are calculated using
where h<scal  and h has the same sign as scal. A significance (cancellation) check is made on each difference approximation and the approximation is rejected if insignificant.
Suggested value: ε, where ε is the machine precision returned by nag_machine_precision (X02AJC).
Constraint: scal  must be sufficiently large that x+scalx  on the computer.
6:     c[26] doubleCommunication Array
( c[4]  contains the current θr , this value may be useful in the event of an error exit.)
7:     ind Integer *Input/Output
On initial entry: must be set to 1 or -1 .
fx need not be set.
fx must contain fx .
On intermediate exit: contains 2, 3 or 4. The calling program must evaluate f at x, storing the result in fx, and re-enter nag_zero_cont_func_cntin_rcomm (c05axc) with all other arguments unchanged.
On final exit: contains 0.
Constraint: on entry ind=-1, 1, 2, 3 or 4.
Note: any values you return to nag_zero_cont_func_cntin_rcomm (c05axc) as part of the reverse communication procedure should not include floating-point NaN (Not a Number) or infinity values, since these are not handled by nag_zero_cont_func_cntin_rcomm (c05axc). If your code inadvertently does return any NaNs or infinities, nag_zero_cont_func_cntin_rcomm (c05axc) is likely to produce unexpected results.
8:     fail NagError *Input/Output
The NAG error argument (see Section 3.7 in How to Use the NAG Library and its Documentation).

Error Indicators and Warnings

Dynamic memory allocation failed.
See Section in How to Use the NAG Library and its Documentation for further information.
On entry, argument value had an illegal value.
Continuation away from the initial point is not possible. This error exit will usually occur if the problem has not been properly posed or the error requirement is extremely stringent.
Current problem in the continuation sequence cannot be solved. Perhaps the original problem had no solution or the continuation path passes through a set of insoluble problems: consider refining the initial approximation to the zero. Alternatively, tol is too small, and the accuracy requirement is too stringent, or too large and the initial approximation too poor.
Final problem (with θm=0) cannot be solved. It is likely that too much accuracy has been requested, or that the zero is at α=0 and ir=Nag_Relative.
On initial entry, ind=value.
Constraint: ind=-1 or 1.
On intermediate entry, ind=value.
Constraint: ind=2, 3 or 4.
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 2.7.6 in How to Use the NAG Library and its Documentation for further information.
Your licence key may have expired or may not have been installed correctly.
See Section 2.7.5 in How to Use the NAG Library and its Documentation for further information.
On entry, scal=value.
Constraint: x+scal or x (to machine accuracy).
On entry, tol=value.
Constraint: tol>0.0.
Significant derivatives of f cannot be computed. This can happen when f is almost constant and nonzero, for any value of scal.


The accuracy of the approximation to the zero depends on tol and ir. In general decreasing tol will give more accurate results. Care must be exercised when using the relative error criterion ( ir=2 ).
If the zero is at x=0 , or if the initial value of x and the zero bracket the point x=0 , it is likely that an error exit with fail.code= NE_CONTIN_AWAY_NOT_POSS, NE_CONTIN_PROB_NOT_SOLVED or NE_FINAL_PROB_NOT_SOLVED will occur.
It is possible to request too much or too little accuracy. Since it is not possible to achieve more than machine accuracy, a value of tolmachine precision  should not be input and may lead to an error exit with fail.code= NE_CONTIN_AWAY_NOT_POSS, NE_CONTIN_PROB_NOT_SOLVED or NE_FINAL_PROB_NOT_SOLVED. For the reasons discussed under fail.code= NE_CONTIN_PROB_NOT_SOLVED in Section 6, tol should not be taken too large, say no larger than tol=1.0e−3 .

Parallelism and Performance

nag_zero_cont_func_cntin_rcomm (c05axc) is not threaded in any implementation.

Further Comments

For most problems, the time taken on each call to nag_zero_cont_func_cntin_rcomm (c05axc) will be negligible compared with the time spent evaluating fx  between calls to nag_zero_cont_func_cntin_rcomm (c05axc). However, the initial value of x and the choice of tol will clearly affect the timing. The closer that x is to the root, the less evaluations of f required. The effect of the choice of tol will not be large, in general, unless tol is very small, in which case the timing will increase.


This example calculates a zero of x - e-x  with initial approximation x0=1.0 , and tol=1.0e−3  and 1.0e−4 .

Program Text

Program Text (c05axce.c)

Program Data


Program Results

Program Results (c05axce.r)