Re: Precision of arguments to FunctionInterpolation
- To: mathgroup at smc.vnet.net
- Subject: [mg68412] Re: Precision of arguments to FunctionInterpolation
- From: Peter Pein <petsie at dordos.net>
- Date: Fri, 4 Aug 2006 03:59:26 -0400 (EDT)
- References: <eakeg1$r1j$1@smc.vnet.net> <easjk5$fti$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Andrew Moylan schrieb: > Here is some further information that makes the strangeness more > obvious: > > The following three different calls to FunctionInterpolation all fail: > > FunctionInterpolation[lowPrecisionSin[x], {x, 0, 1.`14}] > FunctionInterpolation[lowPrecisionSin[x], {x, 0, 1.`20}] > FunctionInterpolation[lowPrecisionSin[x], {x, 0, 1}] the latter works in Mathematica 5.1 for Windows > > The only way that I can successfully interpolate to an upper bound of > roughly 1 is by entering the upper bound as the > exactly-machine-precision number "1.": > > FunctionInterpolation[lowPrecisionSin[x], {x, 0, 1.}] > > Can anyone explain why higher-than-machine-precision (e.g. 1.`20), > lower-than-machine-precision (e.g. 1.`14), and infinite precision (1) > all fail, but exactly machine-precision succeeds here? > No, sorry. > Secondly, does anyone know the meaning of the InterpolationPrecision > option to FunctionInterpolation? In particular, with the default > setting of InterpolationPrecision->Automatic, what value is > automatically chosen? > > You can test this using Reap[FunctionInterpolation[((Sow[Precision[#1]]; #1) & )[lowPrecisionSin[x]], {x, 0., 1}]][[2, 1]] which gives: {5.1924023244417254, Infinity, Infinity, 4.999999999999999, 5.000000000000001, 5., 5., 5., 5.000000000000001, 4.999999999999999, 5., 5.000000000000001, 5., 5., 4.999999999999999, 5., 5., 4.999999999999999, 5.000000000000001, 5.000000000000001, 5.000000000000001, 5., 5.} If you know the maximum precision of the function you want to interpolate (5 in this case), you can use InterpolationPrecision->5: intfuns = {f14, f20, finf} = (FunctionInterpolation[lowPrecisionSin[x], {x, 0, SetPrecision[1., #1]}, InterpolationPrecision -> 5] & ) /@ {14, 20, Infinity}; SameQ @@ intfuns --> True Through[{f14, lowPrecisionSin, Sin}[0.6`14.000000000000002]] --> {0.5646420701356566528`4.127871245474387, 0.5646424733950353572`5.000000000000002, 0.5646424733950353572009454457`14.056991706843485} Peter