[section:remez Sample Article (The Remez Method)]

The [@http://en.wikipedia.org/wiki/Remez_algorithm Remez algorithm]
is a methodology for locating the minimax rational approximation
to a function.  This short article gives a brief overview of the method, but
it should not be regarded as a thorough theoretical treatment, for that you
should consult your favorite textbook.

Imagine that you want to approximate some function f(x) by way of a rational
function R(x), where R(x) may be either a polynomial P(x) or a ratio of two
polynomials P(x)/Q(x) (a rational function).  Initially we'll concentrate on the 
polynomial case, as it's by far the easier to deal with, later we'll extend 
to the full rational function case.  

We want to find the "best" rational approximation, where
"best" is defined to be the approximation that has the least deviation
from f(x).  We can measure the deviation by way of an error function:

E[sub abs](x) = f(x) - R(x)

which is expressed in terms of absolute error, but we can equally use
relative error:

E[sub rel](x) = (f(x) - R(x)) / |f(x)|

And indeed in general we can scale the error function in any way we want, it
makes no difference to the maths, although the two forms above cover almost
every practical case that you're likely to encounter.

The minimax rational function R(x) is then defined to be the function that
yields the smallest maximal value of the error function.  Chebyshev showed
that there is a unique minimax solution for R(x) that has the following
properties:

* If R(x) is a polynomial of degree N, then there are N+2 unknowns:
the N+1 coefficients of the polynomial, and maximal value of the error
function.
* The error function has N+1 roots, and N+2 extrema (minima and maxima).
* The extrema alternate in sign, and all have the same magnitude.

That means that if we know the location of the extrema of the error function
then we can write N+2 simultaneous equations:

R(x[sub i]) + (-1)[super i]E = f(x[sub i])

where E is the maximal error term, and x[sub i] are the abscissa values of the
N+2 extrema of the error function.  It is then trivial to solve the simultaneous
equations to obtain the polynomial coefficients and the error term.

['Unfortunately we don't know where the extrema of the error function are located!]

[h4 The Remez Method]

The Remez method is an iterative technique which, given a broad range of
assumptions, will converge on the extrema of the error function, and therefore
the minimax solution.

In the following discussion we'll use a concrete example to illustrate
the Remez method: an approximation to the function e[super x][space] over
the range \[-1, 1\].

Before we can begin the Remez method, we must obtain an initial value
for the location of the extrema of the error function.  We could "guess"
these, but a much closer first approximation can be obtained by first  
constructing an interpolated polynomial approximation to f(x).

In order to obtain the N+1 coefficients of the interpolated polynomial
we need N+1 points (x[sub 0]...x[sub N]): with our interpolated form 
passing through each of those points
that yields N+1 simultaneous equations:

f(x[sub i]) = P(x[sub i]) = c[sub 0] + c[sub 1]x[sub i] ... + c[sub N]x[sub i][super N]

Which can be solved for the coefficients c[sub 0]...c[sub N] in P(x).

Obviously this is not a minimax solution, indeed our only guarantee is that f(x) and 
P(x) touch at N+1 locations, away from those points the error may be arbitrarily
large.  However, we would clearly like this initial approximation to be as close to
f(x) as possible, and it turns out that using the zeros of an orthogonal polynomial
as the initial interpolation points is a good choice.  In our example we'll use the 
zeros of a Chebyshev polynomial as these are particularly easy to calculate, 
interpolating for a polynomial of degree 4, and measuring /relative error/
we get the following error function:

[$images/remez-2.png]

Which has a peak relative error of 1.2x10[super -3].

While this is a pretty good approximation already, judging by the 
shape of the error function we can clearly do better.  Before starting
on the Remez method propper, we have one more step to perform: locate
all the extrema of the error function, and store
these locations as our initial ['Chebyshev control points].

[note
In the simple case of a polynomial approximation, by interpolating through
the roots of a Chebyshev polynomial we have in fact created a ['Chebyshev
approximation] to the function: in terms of /absolute error/
this is the best a priori choice for the interpolated form we can
achieve, and typically is very close to the minimax solution.

However, if we want to optimise for /relative error/, or if the approximation
is a rational function, then the initial Chebyshev solution can be quite far
from the ideal minimax solution.  

A more technical discussion of the theory involved can be found in this
[@http://math.fullerton.edu/mathews/n2003/ChebyshevPolyMod.html online course].]

[h4 Remez Step 1]

The first step in the Remez method, given our current set of
N+2 Chebyshev control points x[sub i], is to solve the N+2 simultaneous
equations:

P(x[sub i]) + (-1)[super i]E = f(x[sub i])

To obtain the error term E, and the coefficients of the polynomial P(x).

This gives us a new approximation to f(x) that has the same error /E/ at
each of the control points, and whose error function ['alternates in sign]
at the control points.  This is still not necessarily the minimax 
solution though: since the control points may not be at the extrema of the error
function.  After this first step here's what our approximation's error
function looks like:

[$images/remez-3.png]

Clearly this is still not the minimax solution since the control points
are not located at the extrema, but the maximum relative error has now
dropped to 5.6x10[super -4].

[h4 Remez Step 2]

The second step is to locate the extrema of the new approximation, which we do 
in two stages:  first, since the error function changes sign at each
control point, we must have N+1 roots of the error function located between
each pair of N+2 control points.  Once these roots are found by standard root finding 
techniques, we know that N extrema are bracketed between each pair of
roots, plus two more between the endpoints of the range and the first and last roots.
The N+2 extrema can then be found using standard function minimisation techniques.

We now have a choice: multi-point exchange, or single point exchange.

In single point exchange, we move the control point nearest to the largest extrema to
the absissa value of the extrema.

In multi-point exchange we swap all the current control points, for the locations
of the extrema.

In our example we perform multi-point exchange.

[h4 Iteration]

The Remez method then performs steps 1 and 2 above iteratively until the control
points are located at the extrema of the error function: this is then
the minimax solution.

For our current example, two more iterations converges on a minimax
solution with a peak relative error of
5x10[super -4] and an error function that looks like:

[$images/remez-4.png]

[h4 Rational Approximations]

If we wish to extend the Remez method to a rational approximation of the form

f(x) = R(x) = P(x) / Q(x)

where P(x) and Q(x) are polynomials, then we proceed as before, except that now
we have N+M+2 unknowns if P(x) is of order N and Q(x) is of order M.  This assumes
that Q(x) is normalised so that it's leading coefficient is 1, giving
N+M+1 polynomial coefficients in total, plus the error term E.

The simultaneous equations to be solved are now:

P(x[sub i]) / Q(x[sub i]) + (-1)[super i]E = f(x[sub i])

Evaluated at the N+M+2 control points x[sub i].

Unfortunately these equations are non-linear in the error term E: we can only
solve them if we know E, and yet E is one of the unknowns!

The method usually adopted to solve these equations is an iterative one: we guess the
value of E, solve the equations to obtain a new value for E (as well as the polynomial
coefficients), then use the new value of E as the next guess.  The method is
repeated until E converges on a stable value.

These complications extend the running time required for the development
of rational approximations quite considerably. It is often desirable
to obtain a rational rather than polynomial approximation none the less:
rational approximations will often match more difficult to approximate
functions, to greater accuracy, and with greater efficiency, than their
polynomial alternatives.  For example, if we takes our previous example
of an approximation to e[super x], we obtained 5x10[super -4] accuracy
with an order 4 polynomial.  If we move two of the unknowns into the denominator
to give a pair of order 2 polynomials, and re-minimise, then the peak relative error drops
to 8.7x10[super -5].  That's a 5 fold increase in accuracy, for the same number 
of terms overall.

[h4 Practical Considerations]

Most treatises on approximation theory stop at this point.  However, from
a practical point of view, most of the work involves finding the right
approximating form, and then persuading the Remez method to converge
on a solution.

So far we have used a direct approximation:

f(x) = R(x)

But this will converge to a useful approximation only if f(x) is smooth.  In
addition round-off errors when evaluating the rational form mean that this
will never get closer than within a few epsilon of machine precision.  
Therefore this form of direct approximation is often reserved for situations
where we want efficiency, rather than accuracy.

The first step in improving the situation is generally to split f(x) into
a dominant part that we can compute accurately by another method, and a 
slowly changing remainder which can be approximated by a rational approximation.
We might be tempted to write:

f(x) = g(x) + R(x)

where g(x) is the dominant part of f(x), but if f(x)\/g(x) is approximately
constant over the interval of interest then:

f(x) = g(x)(c + R(x))

Will yield a much better solution: here /c/ is a constant that is the approximate
value of f(x)\/g(x) and R(x) is typically tiny compared to /c/.  In this situation
if R(x) is optimised for absolute error, then as long as its error is small compared
to the constant /c/, that error will effectively get wiped out when R(x) is added to
/c/.

The difficult part is obviously finding the right g(x) to extract from your
function: often the asymptotic behaviour of the function will give a clue, so
for example the function __erfc becomes proportional to 
e[super -x[super 2]]\/x as x becomes large.  Therefore using:

erfc(z) = (C + R(x)) e[super -x[super 2]]/x

as the approximating form seems like an obvious thing to try, and does indeed
yield a useful approximation.

However, the difficulty then becomes one of converging the minimax solution.
Unfortunately, it is known that for some functions the Remez method can lead
to divergent behaviour, even when the initial starting approximation is quite good.
Furthermore, it is not uncommon for the solution obtained in the first Remez step
above to be a bad one: the equations to be solved are generally "stiff", often
very close to being singular, and assuming a solution is found at all, round-off
errors and a rapidly changing error function, can lead to a situation where the
error function does not in fact change sign at each control point as required.
If this occurs, it is fatal to the Remez method.  It is also possible to
obtain solutions that are perfectly valid mathematically, but which are
quite useless computationally: either because there is an unavoidable amount
of roundoff error in the computation of the rational function, or because
the denominator has one or more roots over the interval of the approximation.
In the latter case while the approximation may have the correct limiting value at
the roots, the approximation is nonetheless useless.

Assuming that the approximation does not have any fatal errors, and that the only
issue is converging adequately on the minimax solution, the aim is to
get as close as possible to the minimax solution before beginning the Remez method.
Using the zeros of a Chebyshev polynomial for the initial interpolation is a 
good start, but may not be ideal when dealing with relative errors and\/or
rational (rather than polynomial) approximations.  One approach is to skew
the initial interpolation points to one end: for example if we raise the
roots of the Chebyshev polynomial to a positive power greater than 1 
then the roots will be skewed towards the middle of the \[-1,1\] interval, 
while a positive power less than one
will skew them towards either end.  More usefully, if we initially rescale the
points over \[0,1\] and then raise to a positive power, we can skew them to the left 
or right.  Returning to our example of e[super x][space] over \[-1,1\], the initial
interpolated form was some way from the minimax solution:

[$images/remez-2.png]

However, if we first skew the interpolation points to the left (rescale them
to \[0, 1\], raise to the power 1.3, and then rescale back to \[-1,1\]) we
reduce the error from 1.3x10[super -3][space]to 6x10[super -4]:

[$images/remez-5.png]

It's clearly still not ideal, but it is only a few percent away from
our desired minimax solution (5x10[super -4]).

[h4 Remez Method Checklist]

The following lists some of the things to check if the Remez method goes wrong, 
it is by no means an exhaustive list, but is provided in the hopes that it will
prove useful.

* Is the function smooth enough?  Can it be better separated into
a rapidly changing part, and an asymptotic part?
* Does the function being approximated have any "blips" in it?  Check
for problems as the function changes computation method, or
if a root, or an infinity has been divided out.  The telltale
sign is if there is a narrow region where the Remez method will
not converge.
* Check you have enough accuracy in your calculations: remember that
the Remez method works on the difference between the approximation
and the function being approximated: so you must have more digits of
precision available than the precision of the approximation
being constructed.  So for example at double precision, you
shouldn't expect to be able to get better than a float precision
approximation.
* Try skewing the initial interpolated approximation to minimise the
error before you begin the Remez steps.
* If the approximation won't converge or is ill-conditioned from one starting
location, try starting from a different location.
* If a rational function won't converge, one can minimise a polynomial
(which presents no problems), then rotate one term from the numerator to
the denominator and minimise again.  In theory one can continue moving
terms one at a time from numerator to denominator, and then re-minimising, 
retaining the last set of control points at each stage.
* Try using a smaller interval.  It may also be possible to optimise over
one (small) interval, rescale the control points over a larger interval,
and then re-minimise.
* Keep absissa values small: use a change of variable to keep the abscissa
over, say \[0, b\], for some smallish value /b/.

[h4 References]

The original references for the Remez Method and it's extension
to rational functions are unfortunately in Russian:

Remez, E.Ya., ['Fundamentals of numerical methods for Chebyshev approximations], 
"Naukova Dumka", Kiev, 1969.

Remez, E.Ya., Gavrilyuk, V.T., ['Computer development of certain approaches 
to the approximate construction of solutions of Chebyshev problems 
nonlinearly depending on parameters], Ukr. Mat. Zh. 12 (1960), 324-338.

Gavrilyuk, V.T., ['Generalization of the first polynomial algorithm of 
E.Ya.Remez for the problem of constructing rational-fractional 
Chebyshev approximations], Ukr. Mat. Zh. 16 (1961), 575-585.

Some English language sources include:

Fraser, W., Hart, J.F., ['On the computation of rational approximations 
to continuous functions], Comm. of the ACM 5 (1962), 401-403, 414.

Ralston, A., ['Rational Chebyshev approximation by Remes' algorithms], 
Numer.Math. 7 (1965), no. 4, 322-330.

A. Ralston, ['Rational Chebyshev approximation, Mathematical 
Methods for Digital Computers v. 2] (Ralston A., Wilf H., eds.), 
Wiley, New York, 1967, pp. 264-284.

Hart, J.F. e.a., ['Computer approximations], Wiley, New York a.o., 1968.

Cody, W.J., Fraser, W., Hart, J.F., ['Rational Chebyshev approximation 
using linear equations], Numer.Math. 12 (1968), 242-251.

Cody, W.J., ['A survey of practical rational and polynomial 
approximation of functions], SIAM Review 12 (1970), no. 3, 400-423.

Barrar, R.B., Loeb, H.J., ['On the Remez algorithm for non-linear 
families], Numer.Math. 15 (1970), 382-391.

Dunham, Ch.B., ['Convergence of the Fraser-Hart algorithm for rational 
Chebyshev approximation], Math. Comp. 29 (1975), no. 132, 1078-1082.

G. L. Litvinov, ['Approximate construction of rational
approximations and the effect of error autocorrection],
Russian Journal of Mathematical Physics, vol.1, No. 3, 1994.

[endsect][/section:remez The Remez Method]



