Purpose
Multi-threaded determination of the argument values
x
,
in the interval
[a, b]
(where
a < b
),
such that
f(x) = 0
.
Thread
It is assumed that this function is called by thread zero,
and all the other threads are blocked (waiting).
Method
For
i = 0 , \ldots , n
,
we define the i-th grid point
g_i
by
g_i = a \frac{n - i}{n} + b \frac{i}{n}
For
i = 0 , \ldots , n-1
,
we define the i-th sub-interval of
[a, b]
by
I_i = [ g_i , g_{i+1} ]
Newton's method is applied starting
at the center of each of the sub-intervals
I_i
for
i = 0 , \ldots , n-1
and at most one zero is found for each sub-interval.
ok
The return value
ok
has prototype
bool ok
If an error occurs, it is false, otherwise it is true.
xout
The argument
xout
has the prototype
vector<double>& xout
The input size and value of the elements of
xout
do not matter.
Upon return from multi_newton,
the size of
xout
is less than or equal
the number of sub-intervals
n
and
| f( xout[i] ) | \leq epsilon
for each valid index
0 <= i < xout.size()
.
Two
x
solutions are considered equal (and joined as one) if
the absolute difference between the solutions is less than
(b - a) / n
.
fun
The argument
fun
has prototype
void fun (double x, double& f, double& df)
This function must evaluate
f(x)
,
and its derivative
f^{(1)} (x)
,
using the syntax
fun(x, f, df)
where the arguments to
fun
have the prototypes
double x
double& f
double& df
.
The input values of
f
and
df
do not matter.
Upon return they are
f(x)
and
f^{(1)} (x)
respectively.
num_sub
The argument
num_sub
has prototype
size_t num_sub
It specifies the number of sub-intervals; i.e.,
n
.
xlow
The argument
xlow
has prototype
double xlow
It specifies the lower limit for the entire search interval; i.e.,
a
.
xup
The argument
xup
has prototype
double xup
It specifies the upper limit for the entire search interval; i.e.,
b
.
epsilon
The argument
epsilon
has prototype
double epsilon
It specifies the convergence criteria for Newton's method in terms
of how small the function value must be.
max_itr
The argument
max_itr
has prototype
size_t max_itr
It specifies the maximum number of iterations of Newton's method to try
before giving up on convergence (on each sub-interval).
num_threads
This argument has prototype
size_t num_threads
It specifies the number of threads that are available for this test.
If it is zero, the test is run without the multi-threading environment.