﻿ c05aw Method
c05aw attempts to locate a zero of a continuous function using a continuation method based on a secant iteration.

# Syntax

C#
```public static void c05aw(
ref double x,
double eps,
double eta,
C05..::..C05AW_F f,
int nfmax,
out int ifail
)```
Visual Basic
```Public Shared Sub c05aw ( _
ByRef x As Double, _
eps As Double, _
eta As Double, _
f As C05..::..C05AW_F, _
nfmax As Integer, _
<OutAttribute> ByRef ifail As Integer _
)```
Visual C++
```public:
static void c05aw(
double% x,
double eps,
double eta,
C05..::..C05AW_F^ f,
int nfmax,
[OutAttribute] int% ifail
)```
F#
```static member c05aw :
x : float byref *
eps : float *
eta : float *
f : C05..::..C05AW_F *
nfmax : int *
ifail : int byref -> unit
```

#### Parameters

x
Type: System..::..Double%
On entry: an initial approximation to the zero.
On exit: the final approximation to the zero, unless ${\mathbf{ifail}}={1}$${2}$ or ${5}$, in which case it contains no useful information.
eps
Type: System..::..Double
On entry: an absolute tolerance to control the accuracy to which the zero is determined. In general, the smaller the value of eps the more accurate x will be as an approximation to $\alpha$. Indeed, for very small positive values of eps, it is likely that the final approximation will satisfy $\left|{\mathbf{x}}-\alpha \right|<{\mathbf{eps}}$. You are advised to call the method with more than one value for eps to check the accuracy obtained.
Constraint: ${\mathbf{eps}}>0.0$.
eta
Type: System..::..Double
On entry: a value such that if $\left|f\left(x\right)\right|<{\mathbf{eta}}$, $x$ is accepted as the zero. eta may be specified as $0.0$ (see [Accuracy]).
f
Type: NagLibrary..::..C05..::..C05AW_F
f must evaluate the function $f$ whose zero is to be determined.

A delegate of type C05AW_F.

nfmax
Type: System..::..Int32
On entry: the maximum permitted number of calls to f from c05aw. If f is inexpensive to evaluate, nfmax should be given a large value (say $\text{}>1000$).
Constraint: ${\mathbf{nfmax}}>0$.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

# Description

c05aw attempts to obtain an approximation to a simple zero $\alpha$ of the function $f\left(x\right)$ given an initial approximation $x$ to $\alpha$. The zero is found by a call to c05ax whose specification should be consulted for details of the method used.
The approximation $x$ to the zero $\alpha$ is determined so that at least one of the following criteria is satisfied:
 (i) $\left|x-\alpha \right|\sim {\mathbf{eps}}$, (ii) $\left|f\left(x\right)\right|<{\mathbf{eta}}$.

None.

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{eps}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{eps}}>0.0$.
On entry, ${\mathbf{nfmax}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{nfmax}}>0$.
${\mathbf{ifail}}=2$
Internal scale factor invalid for this problem. Consider using c05ax instead and setting scal.
${\mathbf{ifail}}=3$
Either f has no zero near x or too much accuracy has been requested. Check the coding of f or increase eps.
${\mathbf{ifail}}=4$
More than nfmax calls have been made to f.
nfmax may be too small for the problem (because x is too far away from the zero), or f has no zero near x, or too much accuracy has been requested in calculating the zero. Increase nfmax, check the coding of f or increase eps.
${\mathbf{ifail}}=5$
A serious error occurred in an internal call to an auxiliary method.
${\mathbf{ifail}}=-9000$
An error occured, see message report.
${\mathbf{ifail}}=-8000$
Negative dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$

# Accuracy

The levels of accuracy depend on the values of eps and eta. If full machine accuracy is required, they may be set very small, resulting in an exit with ${\mathbf{ifail}}={3}$ or ${4}$, although this may involve many more iterations than a lesser accuracy. You are recommended to set ${\mathbf{eta}}=0.0$ and to use eps to control the accuracy, unless you have considerable knowledge of the size of $f\left(x\right)$ for values of $x$ near the zero.

# Parallelism and Performance

None.

The time taken by c05aw depends primarily on the time spent evaluating the function $f$ (see [Parameters]) and on how close the initial value of x is to the zero.
If a more flexible way of specifying the function $f$ is required or if you wish to have closer control of the calculation, then the reverse communication method c05ax is recommended instead of c05aw.
This example calculates the zero of $f\left(x\right)={e}^{-x}-x$ from a starting value ${\mathbf{x}}=1.0$. Two calculations are made with ${\mathbf{eps}}=\text{1.0E−3}$ and $\text{1.0E−4}$ for comparison purposes, with ${\mathbf{eta}}=0.0$ in both cases.