Re: Evaluate a spline function
- To: mathgroup at smc.vnet.net
- Subject: [mg74104] Re: Evaluate a spline function
- From: "Dana DeLouis" <dana.del at gmail.com>
- Date: Sat, 10 Mar 2007 06:51:46 -0500 (EST)
Hi. As others have mentioned, a Spline function is a Parametric Equation. When given a value such as 3.5 in a Spline Function, the integer part (3) is used to determine "Which" equation to use, and the fractional part (.5) is used in that equation to calculate x & y. I use the variable "p" to help remind me that it is a (p)ercentage from 0 to 1. If given an "x" value, we need to solve for which values of p fall between 0 & 1. Once we find p, we go back and recalculate x & y. One can do it a little better than this, but I tried to break the steps down. When solving for exact solutions, we need to be careful of Complex Solutions, and eliminate them from consideration. Needs["NumericalMath`SplineFit`"] data={{0,0},{1,2},{-1,3},{0,1},{3,0}}; sf = SplineFit[data, Cubic]; ParametricPlot[sf[t], {t, 0, 4}, PlotRange -> All, Epilog -> {AbsolutePointSize[5], Point /@ data}]; Let's find Y values given an X value. As you can see from the above plot, there may be more than one solution. FindYs[sf_, x_] := Module[ {equ, n, m, t}, equ = Map[Tr[#*{1, p, p^2, p^3} ] &, sf[[4]], {2} ]; n = Length[equ]; m = Map[p /. NSolve[# == x, p] &, equ[[All, 1]]]; m = Map[Chop, m]; m = DeleteCases[m, _Complex, 2]; t = Table[Select[m[[j]], 0 ? # ? 1 &], {j, n}]; t = Flatten[t + Range[0, n - 1]]; Map[sf, t][[All, 2]] ] FindYs[sf,.5] {0.5308262763331024,2.5446163293838877,0.6782327706023245} FindYs[sf,1.6] {0.27138844421503144} The t + Range[0, n - 1] part may be confusing. Once we find a fractional value such as 0.7, we need to add an integer part to this value. The integer part is its location. (Zero based, so the first one is 0.) For example, when Plotting 0.5, the 0 means to use the "first" equation. -- HTH :>) Dana DeLouis Windows XP & Mathematica 5.2 (& waiting for 6.0) "Ivan" <darknails at gmail.com> wrote in message news:esola2$ef5$1 at smc.vnet.net... > 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. > > regards, > >