Re: tol, atol and rtol behavior of scipy.sparse.linalg solvers

Robert Kern <[email protected]> Tue, 2 May 2023 15:03:35 -0400
Newsgroups gmane.comp.python.scientific.devel
Message-ID <CAF6FJisk0_mBGMA+688_S8a+xPT5WCYE9EMRqT744Jb=1a2Mjw@mail.gmail.com>
On Mon, May 1, 2023 at 9:04 PM Charles R Harris <[email protected]>
wrote:

>
> On Mon, May 1, 2023 at 5:21 PM Stefan van der Walt <[email protected]>
> wrote:
>
>> On Mon, May 1, 2023, at 11:49, Ilhan Polat wrote:
>>
>> If atol is actually set to something, then we return max(atol,
>> tol*norm(b)). Why max is used I don't understand.
>>
>> Typically, atol, rtol pair is used as tol = atol + rtol*<some metric>.
>> This is more or less what everybody expects from this pair and their naming
>> is chosen to reflect this. But I'm a bit lost in all the issues I could
>> read.
>>
>>
>> The first formulation — max(atol, rtol*norm(b)) — is what I'd expect.
>> I.e., you use atol when answers are small, or rtol for larger answers.  I'm
>> a bit surprised to see them summed; is this standard?
>>
>
> IIRC, I first saw it in *Numerical Recipes* (1986).
>

To be fair, I *think* it ultimately derives from a principled combination
of sources of numerical error. If your inputs have absolute roundoff error
(i.e. rounded to the nearest 0.0001) and the floating point computation
contributes `rtol` amount of relative roundoff error during the computation
(usually something like `n_flops * eps`), then the total error should be
about the sum of the two.

In general, I still lean towards `max()`. The principled application of the
sum depends on knowing the details of the computation and the data sources
to properly scale each of the tolerances. I'm _pretty_ okay with
understanding the details of these things, but in reality, I'll just stick
with the defaults and tweak up or down when it doesn't work. And in that
scenario, `max()` is more interpretable to me.

-- 
Robert Kern

_______________________________________________
SciPy-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/scipy-dev.python.org/
Member address: [email protected]