Re: Evaluate a spline function
- To: mathgroup at smc.vnet.net
- Subject: [mg74081] Re: Evaluate a spline function
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Fri, 9 Mar 2007 02:00:00 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <esola2$ef5$1@smc.vnet.net>
Ivan wrote:
> Hi,
> I have used the SplineFit to interpolate my data points for a curve
> y(x) and now
> would like to get the interpolated value between my data points.
> Is there a easy way to evaluate y(x) by directly inputting the value
> of x?
>
> i.e.
>
> y = SplineFit["data.dat",Cubic]
>
> how to get y(x) with x being the value of variable instead of the
> order of the data points.
Knowing nothing about your actual data points, one can only guess.
*SplineFit* returns a parametric function. If you have a single-valued
curve (as below), you just have to rescale the value of x to fit the
value of the spline parameter, say t.
In[1]:=
data = Transpose[{Range[10], Table[Random[Integer, {0, 5}], {10}]}];
Needs["NumericalMath`SplineFit`"]
sp = SplineFit[data, Cubic]
sp[1.4]
ParametricPlot[sp[t], {t, 0, 9}, PlotRange -> All,
Compiled -> False, Epilog ->
{AbsolutePointSize[4], Point /@ data,
RGBColor[1, 0, 0], Point[sp[1.4]]}];
Out[3]=
SplineFunction[NumericalMath`SplineFit`Cubic, {0., 9.}, <>]
Out[4]=
{2.4, 0.782727}
[...graphics deleted...]
However, if your curve is multi-valued, as in the example below, you
cannot. For instance,
In[1]:=
data = {{0, 0}, {1, 2}, {-1, 3}, {0, 1}, {3, 0}};
Needs["NumericalMath`SplineFit`"]
sp = SplineFit[data, Cubic]
sp[1.4]
ParametricPlot[sp[t], {t, 0, 4}, PlotRange -> All, Compiled -> False,
Epilog -> {AbsolutePointSize[4], Point /@ data, Red, Point[sp[1.4]]}];
Out[3]=
SplineFunction[Cubic, {0., 4.}, <>]
Out[4]=
{0.265143, 2.70171}
[...graphics deleted...]
Regards,
Jean-Marc