Dear Sebastian, Thank you for letting me know of these problems. I think I fixed the extrapolation now, and have posted corrected versions of csaps and csaps_sel in the Subversion repository.
> (i) My usual call of > "y_interp=csaps(t, y, -1, t_interp);" > , i.e. automatic(?) relaxation between cubic spline interpolation and > regression, produced different results for the "old" and "new" function. > Indeed, this became a minor issue, when I noticed that the reproduction > of the "old" results became better by applying > "y_interp=csaps_sel(t, y, t_interp, [], "gcv");" If I get the chance, I will take a look at the implementation in spline-gcvspl to try and understand the reason for the difference. > (Also, I am not sure if the documentation "p<0 or not given: an > intermediate amount of smoothing is chosen (the smoothing term and the > interpolation term are scaled to be of the same magnitude)" is not > misleading.) Why is it misleading? > Additionally (but this is not an issue for me but might belong to any > possible solution), there is a different method of extrapolation (csaps: > constant, csaps_sel: spline). I am not sure if this should be mentioned > in the documentation. The extrapolation should be linear in both cases. I found some mistakes in how I implemented this originally. I used the following code (slightly non-equally-spaced points) to test the extrapolation: x = ([1:10 10.5 11.3])'; y = sin(x); xx = 0:0.1:12; [yy, p] = csaps(x,y,1,xx); plot(x, y, 's', xx, yy) > (ii) In my point of view, there is a more severe issue: application of > non-equidistant sampling points. In the latter case, the solution > appears to be alright, but the first derivatives have discontinuities > (at least for the difference quotient). In my testing file SmoothingSpline, > the different > behaviour (equidistant/non-equidistant) can be switched by > commenting/uncommenting the line below "MAJOR ISSUE". The first derivative of a cubic spline should be continuous and piecewise quadratic. To get the derivative, you can use ppder. For the test case above, [pp, p] = csaps(x,y,1); ppd = ppder(pp, 1); yyd = ppval(ppd, xx); plot(xx, yyd) which looks to be continuous and, inside the domain, reasonably in agreement with the derivative of sin(x). Using csaps_sel in this case returns p=0.41 so there is some smoothing compared with p = 1, but the derivative is still continuous: x = ([1:10 10.5 11.3])'; y = sin(x); xx = 0:0.1:12; [pp, p] = csaps_sel(x,y); yy = ppval(pp, xx); ppd = ppder(pp, 1); yyd = ppval(ppd, xx); plot(xx, yyd)
SmoothingSpline.m
Description: application/vnd.wolfram.mathematica.package
------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev