hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_roots_contfn_cntin_rcomm (c05ax)

Purpose

nag_roots_contfn_cntin_rcomm (c05ax) 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.

Syntax

[x, c, ind, ifail] = c05ax(x, fx, tol, ir, c, ind, 'scal', scal)
[x, c, ind, ifail] = nag_roots_contfn_cntin_rcomm(x, fx, tol, ir, c, ind, 'scal', scal)

Description

nag_roots_contfn_cntin_rcomm (c05ax) uses a modified version of an algorithm given in Swift and Lindfield (1978) to compute a zero αα of a continuous function f(x) f(x) . The algorithm used is based on a continuation method in which a sequence of problems
f(x)θrf(x0),  r = 0,1,,m
f(x)-θrf(x0),  r=0,1,,m
are solved, where 1 = θ0 > θ1 > > θm = 0 1 = θ0 > θ1 > > θm = 0  (the value of mm is determined as the algorithm proceeds) and where x0 x0  is your initial estimate for the zero of f(x) f(x) . For each θr θ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 θm=0 ) in the continuation method, and sqrt(tol) tol  is used to control the accuracy in the intermediate problems ( θ1 , θ2 , , θm1 θ1 , θ2 , , θm-1 ).

References

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

Parameters

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 parameter ind. Between intermediate exits and re-entries, all parameters other than fx must remain unchanged.

Compulsory Input Parameters

1:     x – double scalar
On initial entry: an initial approximation to the zero.
2:     fx – double scalar
On initial entry: if ind = 1 ind=1 , fx need not be set.
If ind = 1 ind=-1 , fx must contain f(x) f(x)  for the initial value of x.
On intermediate re-entry: must contain f(x) f(x)  for the current value of x.
3:     tol – double scalar
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 θm=0  in Section [Description]), and sqrt(tol) tol  is used for the problem defined by θr θr , r < m 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 tol>0.0 .
4:     ir – int64int32nag_int scalar
On initial entry: indicates the type of error test required, as follows. Solving the problem defined by θr θr , 1rm 1rm , involves computing a sequence of secant iterates xr0,xr1, xr0,xr1, . This sequence will be considered to have converged only if:
for ir = 0ir=0,
|xr(i + 1)xr(i)|eps × max (1.0,|xr(i)|),
|xr (i+1) -xr(i) |eps×max(1.0,|xr(i) |),
for ir = 1ir=1,
|xr(i + 1)xr(i)|eps,
|xr (i+1) -xr(i) |eps,
for ir = 2ir=2,
|xr(i + 1)xr(i)|eps × |xr(i)|,
|xr (i+1) -xr(i) |eps×|xr(i) |,
for some i > 1 i>1 ; here eps eps  is either tol or sqrt(tol) 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 = 0ir=0, 11 or 22.
5:     c(2626) – double array
( c(5) c5  contains the current θr θr , this value may be useful in the event of an error exit.)
6:     ind – int64int32nag_int scalar
On initial entry: must be set to 11 or 1 -1 .
ind = 1 ind=1
fx need not be set.
ind = 1 ind=-1
fx must contain f(x) f(x) .
Constraint: on entry ind = -1ind=-1, 11, 22, 33 or 44.

Optional Input Parameters

1:     scal – double scalar
On initial entry: a factor for use in determining a significant approximation to the derivative of f(x) f(x)  at x = x0 x=x0 , the initial value. A number of difference approximations to f(x0) f(x0)  are calculated using
f(x0)(f(x0 + h)f(x0)) / h
f(x0)(f(x0+h)-f(x0))/h
where |h| < |scal| |h|<|scal|  and hh 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: sqrt(ε)ε, where εε is the machine precision returned by nag_machine_precision (x02aj).
Default: sqrt(machine precision) machine precision
Constraint: scal scal  must be sufficiently large that x + scalx x+scalx  on the computer.

Input Parameters Omitted from the MATLAB Interface

None.

Output Parameters

1:     x – double scalar
On intermediate exit: the point at which ff must be evaluated before re-entry to the function.
On final exit: the final approximation to the zero.
2:     c(2626) – double array
3:     ind – int64int32nag_int scalar
On intermediate exit: contains 22, 33 or 44. The calling program must evaluate ff at x, storing the result in fx, and re-enter nag_roots_contfn_cntin_rcomm (c05ax) with all other parameters unchanged.
On final exit: contains 00.
4:     ifail – int64int32nag_int scalar
ifail = 0ifail=0 unless the function detects an error (see [Error Indicators and Warnings]).

Error Indicators and Warnings

Errors or warnings detected by the function:
  ifail = 1ifail=1
On entry, tol0.0 tol0.0 ,
orir0ir0, 11 or 22.
  ifail = 2ifail=2
The parameter ind is incorrectly set on initial or intermediate entry.
  ifail = 3ifail=3
scal is too small, or significant derivatives of ff cannot be computed (this can happen when ff is almost constant and nonzero, for any value of scal).
  ifail = 4ifail=4
The current problem in the continuation sequence cannot be solved, see c(5) c5  for the value of θr θr . The most likely explanation is that the current problem has no solution, either because the original problem had no solution or because the continuation path passes through a set of insoluble problems. This latter reason for failure should occur rarely, and not at all if the initial approximation to the zero is sufficiently close. Other possible explanations are that tol is too small and hence the accuracy requirement is too stringent, or that tol is too large and the initial approximation too poor, leading to successively worse intermediate solutions.
  ifail = 5ifail=5
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.
  ifail = 6ifail=6
The final problem (with θm = 0 θm=0 ) cannot be solved. It is likely that too much accuracy has been requested, or that the zero is at α = 0 α=0  and ir = 2 ir=2 .

Accuracy

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 ir=2 ).
If the zero is at x = 0 x=0 , or if the initial value of x and the zero bracket the point x = 0 x=0 , it is likely that an error exit with ifail = 4ifail=4, 55 or 66 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 tolmachine precision  should not be input and may lead to an error exit with ifail = 4ifail=4, 55 or 66. For the reasons discussed under ifail = 4ifail=4 in Section [Error Indicators and Warnings], tol should not be taken too large, say no larger than tol = 1.0e−3 tol=1.0e−3 .

Further Comments

For most problems, the time taken on each call to nag_roots_contfn_cntin_rcomm (c05ax) will be negligible compared with the time spent evaluating f(x) f(x)  between calls to nag_roots_contfn_cntin_rcomm (c05ax). 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 ff 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.

Example

function nag_roots_contfn_cntin_rcomm_example
fx = 0;
c = zeros(26, 1);
for k=3:4
  x = 1;
  tol = 10^-k;
  ir = int64(0);
  ind = int64(1);

  while (ind ~= 0)
    [x, c, ind, ifail] = nag_roots_contfn_cntin_rcomm(x, fx, tol, ir, c, ind);
    fx = x - exp(-x);
  end

  if ifail == 4 || ifail ==6
    fprintf('FTol = %11.4e, final value = %11.4e, theta = %10.2e\n', tol, x, c(5));
  elseif ifail == 0
    fprintf('Tol is %11.4e, Root is %11.4e\n', tol, x);
  end
end
 
Tol is  1.0000e-03, Root is  5.6715e-01
Tol is  1.0000e-04, Root is  5.6715e-01

function c05ax_example
fx = 0;
c = zeros(26, 1);
for k=3:4
  x = 1;
  tol = 10^-k;
  ir = int64(0);
  ind = int64(1);

  while (ind ~= 0)
    [x, c, ind, ifail] = c05ax(x, fx, tol, ir, c, ind);
    fx = x - exp(-x);
  end

  if ifail == 4 || ifail ==6
    fprintf('FTol = %11.4e, final value = %11.4e, theta = %10.2e\n', tol, x, c(5));
  elseif ifail == 0
    fprintf('Tol is %11.4e, Root is %11.4e\n', tol, x);
  end
end
 
Tol is  1.0000e-03, Root is  5.6715e-01
Tol is  1.0000e-04, Root is  5.6715e-01


PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013