EDIT: I just realized this is closely related to a question I asked two years ago, Is FindRoot wrong about its WorkingPrecision? (which is still unanswered). I don't know if the current question counts as a duplicate, but it may ask the same thing more clearly. I hope you still read this one and see if the different phrasing triggers any insights.
I have a similar question as Precision of FindRoot but slightly different. Consider getting an InterpolatingFunction
f[t]
from NDSolve
then finding a root with FindRoot
:
Clear[f]
fsol = NDSolve[{f''[t] - f'[t] + f[t] - 1 == 0, f[0] == 1,
f'[0] == 1}, f, {t, 0, 20}, WorkingPrecision -> $MachinePrecision];
f[t_] = Evaluate[f[t] /. fsol];
Plot[f[SetPrecision[t, Infinity]], {t, 0, 20}, PlotRange -> All]
t0 = t /. FindRoot[f[t] == 10, {t, 18}, WorkingPrecision -> 50]
Precision@f[t0]
Precision@t0
Output:
18.136956334574359755720315216764489747727661914414
11.6327
50.
The precision of my root t0
is equal to the WorkingPrecision
I gave in FindRoot
, despite that that is higher than the Precision
of f
itself, which came from NDSolve
. My intuition about precision as a concept may be failing me here, but this does not seem right. My hunch is that if you use FindRoot to solve f[t]==number
, then your answer for t
should be no more precise than the precision of f
at that t
.
Even if Mathematica is technically right (is it?), I feel it's failing my purposes. There's real error introduced by the imprecision of my f[t]
. Once I get t0
and plug it in (in my actual code it won't be back into f[t]
!), I want it to reflect that t0
is imprecise because it was solving for an f[t]
that was imprecise.
So I'd like answers to (a) Is Mathematica misusing precision here? And if not, then (b) Is there a way to make it reflect precision in a way that seems honest to me?