I have a simple list of data points to which I would like to fit an interpolation function. However, the results given by Interpolation[] gives an oscillating function which is not warranted by the data. The data is as follows:
list = {{3.272492347489368`*^-13,
3.393446032644599`*^24}, {7.635815477475192`*^-13,
1.1419553951933573`*^25}, {1.1999138607461015`*^-12,
6.25421894208354`*^24}, {1.636246173744684`*^-12,
6.099735099368696`*^25}, {2.0725784867432662`*^-12,
1.7770407891508593`*^28}, {2.5089107997418487`*^-12,
5.666293158766728`*^30}, {2.945243112740431`*^-12,
1.4673042757432113`*^33}, {3.3815754257390136`*^-12,
2.7847878750945815`*^35}, {3.817907738737596`*^-12,
3.70906787022051`*^37}, {4.2542400517361785`*^-12,
3.411500191373945`*^39}, {4.690572364734761`*^-12,
2.1558621505149318`*^41}, {5.126904677733343`*^-12,
9.344524755261095`*^42}, {5.563236990731926`*^-12,
2.771851542592801`*^44}, {5.999569303730508`*^-12,
5.5961200001183325`*^45}, {6.435901616729091`*^-12,
7.60451894430725`*^46}, {6.872233929727673`*^-12,
6.8161973406557206`*^47}};
f = Interpolation[list];
Clearly the function should be positive and monotonic (except a small dip in the beginning) but when I try to interpolate it gives me a function that oscillates around zero.
I suspect it's because the numbers are very large and I am able to circumvent the issue by taking the log of the data and fitting to that instead so it's not a big deal. However, since Mathematica doesn't display any error messages how can I be sure that Intepolation[] gives reasonable results in general? What's going on here?
P.S. The figure is produced by (leaving out the legends)
style[scheme_, num_] :=
Table[Directive[Thick, ColorData[scheme][(i - 1)/(num - 1)]], {i, 1,
num}];
fs = Interpolation[list, Method -> "Spline"];
fh = Interpolation[list, Method -> "Hermite"];
fncplot =
LogPlot[{fs[x], -fs[x], fh[x], -fh[x]}, {x, First@First@list,
First@Last@list}, Frame -> True,
PlotStyle -> style["DarkRainbow", 4]];
dataplot =
ListLogPlot[list, Frame -> True,
PlotMarkers -> {Automatic, Small}];
Show[fncplot, dataplot]
InterpolationOrder -> 1
(instead of Spline or Hermite), then the plot looks fine. $\endgroup$