I’ve improved my initial code greatly.  You can find it here:

http://bazaar.launchpad.net/~jfcaron/+junk/my_steffen/files

You can compile it into GSL by adding in the interpolation/Makefile references 
to “steffen.c”, “steffen.lo”, and “steffen.Plo” exactly where there are 
currently references to “akima.*”.

I’ve tried adding an “integ” method, but I’m afraid I don’t even understand the 
workings of the integ methods for the existing interpolation types.  I couldn’t 
just copy from the akima.c integ method because they use a build-in spline 
calculation function (which I also don’t understand).  Reading uncommented C 
code is pretty hard.  My test program shows that the integration method isn’t 
obviously broken, but it fails the tests I wrote in interpolation/test.c  The 
actual interpolation and derivatives seem to work and pass the tests.

I’ve not used github before, so I guess my next move should be to learn the 
basics and start using that, since otherwise describing my additions & changes 
are hard to follow.  In the meantime, is anyone able to explain how the heck 
the “integ” methods work?

Jean-François

On Mar 20, 2014, at 11:30 , Patrick Alken <[email protected]> wrote:

> Yes that green curve is rather strange and doesn't seem much better than the 
> cubic spline. I like simplicity too so lets proceed with importing the 
> steffen code.
> 
> On 03/20/2014 12:18 PM, Jean-François Caron wrote:
>> Definitely an advantage of a) is that it is conceptually simple.  b) is 44 
>> pages while a) is only 7.  Even if b) is somehow mathematically superior, I 
>> like the idea of understanding the tools that I am using (and being able to 
>> explain it to my academic supervisor/conference attendees).
>> 
>> The MESA astrophysics library (C++ unfortunately) actually includes both 
>> types, and has a little graph to show differences:
>> http://mesa.sourceforge.net/interp_1D.html
>> 
>> Actually their graph is confusing, blue is supposed to be a), green b), but 
>> the green curve isn’t piece-wise monotonic between the data points.  I’m 
>> starting to think maybe Stetten and Huynh mean different things when they 
>> say “monotonic”.  I’ll try to read Huynh’s paper to see if they define what 
>> they are trying to do.  Steffen is pretty clear about his technique being a 
>> for an interpolating function that is monotonic between data points - i.e. 
>> the interpolating function doesn’t change sign between data points, and 
>> extrema can only occur at said data points.
>> 
>> Jean-François
>> 
>> On Mar 20, 2014, at 11:03 , Patrick Alken <[email protected]> wrote:
>> 
>>> I see question 1) is answered by section 4 of Steffen's paper - the method 
>>> works on all data sets, and preserves monotonicity in each interval, which 
>>> is nice. They also state that method (c) has some serious drawbacks.
>>> 
>>> Unfortunately paper (b) doesn't reference (a) and so its difficult to tell 
>>> whether (b) offers any advantage over (a)
>>> 
>>> On 03/20/2014 11:52 AM, Patrick Alken wrote:
>>>> Hi, I'm moving this discussion over to gsl-discuss which is more suited
>>>> for development issues.
>>>> 
>>>> I have 2 naive questions which you may be able to answer since you've
>>>> been working on this code.
>>>> 
>>>> 1) If the Steffen algorithm is applied to non-monotonic data, will it
>>>> still provide a solution or does the method encounter an error?
>>>> 
>>>> 2) Earlier on the GSL list it was mentioned that there are 3 different
>>>> methods for interpolating monotonic data:
>>>> 
>>>> (a) M.Steffen, "A simple method for monotonic interpolation in one
>>>> dimension", Astron. Astrophys. 239, 443-450 (1990).
>>>> 
>>>> (b) H.T.Huynh, "Accurate Monotone Cubic Interpolation", SIAM J. Numer.
>>>> Anal. 30, 57-100 (1993).
>>>> 
>>>> (c) Fritsch, F. N.; Carlson, R. E., "Monotone Piecewise Cubic
>>>> Interpolation", SIAM J. Numer. Anal. 17 (2), 238–246 (1980).
>>>> 
>>>> I haven't looked at (c) but it seems that (a) and (b) both use piecewise
>>>> cubic polynomials and preserve monotonicity. Do you happen to know if
>>>> one method is superior to the other? If one method is significantly
>>>> better than the other two it would make more sense to include that one
>>>> in GSL.
>>>> 
>>>> Patrick
>>>> 
>>>> On 03/20/2014 11:37 AM, Jean-François Caron wrote:
>>>>> Yes, I didn’t bother doing the integration function at the time because I 
>>>>> was having trouble just compiling.  I will add the integration function, 
>>>>> and re-write the eval and deriv/deriv2 functions to use Horner’s scheme 
>>>>> for the polynomials.  I can generate some comparison graphs using fake 
>>>>> data like in Steffen’s paper, that sounds easy enough.
>>>>> 
>>>>> I’ll look at the interpolation/test.c file and see if I can come up with 
>>>>> similar tests.
>>>>> 
>>>>> Thanks for offering to help with the integration into GSL itself.  I 
>>>>> don’t know a lot of the procedures (or even politics sometimes!) involved.
>>>>> 
>>>>> Jean-François
>>>>> 
>>>>> On Mar 20, 2014, at 10:22 , Patrick Alken <[email protected]> 
>>>>> wrote:
>>>>> 
>>>>>> I did notice you talking about 1.6 in your earlier messages, but assumed 
>>>>>> it was a typo and you meant 1.16, oops.
>>>>>> 
>>>>>> On 03/20/2014 11:11 AM, Jean-François Caron wrote:
>>>>>>> My original problem was that I wanted to add an interpolation type to 
>>>>>>> GSL.  Specifically I want monotonic cubic-splines following the 
>>>>>>> description in Steffen (1990): 
>>>>>>> http://adsabs.harvard.edu/full/1990A%26A...239..443S
>>>>>> I took a quick look at your code earlier and it looks pretty nice. I 
>>>>>> noticed you commented out the _integ function - is this something you 
>>>>>> could add to make it feature complete with the other interpolation types?
>>>>>> 
>>>>>> It is important to add automated tests for this. Can you look at 
>>>>>> interpolation/test.c and design similar tests for your new method? Also 
>>>>>> I think it would be nice to add a figure to the manual illustrating the 
>>>>>> differences between cubic, akima, and your new steffen method (similar 
>>>>>> to the figures in the Steffen paper). This would help users a lot when 
>>>>>> trying to decide what method to use. Do you happen to have a dataset 
>>>>>> which shows a nice contrast like Figs 1, 3 and 8 from that paper?
>>>>>> 
>>>>>> When everything is ready I would be happy to add it to GSL, as we are 
>>>>>> already planning to update the interpolation module for the next 
>>>>>> release. When I find some time I want to import the 2D interpolation 
>>>>>> extension discussed previously, and also add Hermite interpolation.
>>>>>> 
>>>>>> It would be easiest for us if you could clone the GSL git repository and 
>>>>>> make your changes there. You could make a new branch called 'steffen' or 
>>>>>> something and publish it to github, or just send a patch file to me, 
>>>>>> whichever is easiest.
>>>>>> 
>>>>>> Patrick
>>>>>> 
>>>>>> On Mar 19, 2014, at 18:40 , Dave Allured - NOAA Affiliate 
>>>>>> <[email protected]> wrote:
>>>>>>>> More data.  I tried the same plain build recipe, GSL 1.16 on our test
>>>>>>>> machine which is at Mac OS 10.9.3.  Got another perfect build, no make
>>>>>>>> check errors, no PPC-related issues.  Outputs on request, please be
>>>>>>>> specific.
>>>>>>>> 
>>>>>>>> CC=clang
>>>>>>>> CFLAGS=-g
>>>>>>>> ./configure --prefix /Users/dallured/Disk/3rd/gsl/1.16.os10.9
>>>>>>>> 
>>>>>>>> mac27:~/Disk/3rd/gsl/1.16.os10.9 57> sw_vers
>>>>>>>> ProductName: Mac OS X
>>>>>>>> ProductVersion: 10.9.3
>>>>>>>> BuildVersion: 13D17
>>>>>>>> 
>>>>>>>> mac27:~/Disk/3rd/gsl/1.16.os10.9/src 36> \
>>>>>>>> ? grep -i '# [a-z]' ../logfiles/make-check.0319a.log | sort | uniq -c
>>>>>>>>   45 # ERROR: 0
>>>>>>>>   45 # FAIL:  0
>>>>>>>>   42 # PASS:  1
>>>>>>>>    3 # PASS:  2
>>>>>>>>   45 # SKIP:  0
>>>>>>>>   42 # TOTAL: 1
>>>>>>>>    3 # TOTAL: 2
>>>>>>>>   45 # XFAIL: 0
>>>>>>>>   45 # XPASS: 0
>>>>>>>> 
>>>>>>>> mac27:~/Disk/3rd/gsl/1.16.os10.9 62> \
>>>>>>>> ? grep -c -i ppc logfiles/*319a*log
>>>>>>>> logfiles/configure.0319a.os10.9.log:0
>>>>>>>> logfiles/install.0319a.log:0
>>>>>>>> logfiles/make-check.0319a.log:0
>>>>>>>> logfiles/make.0319a.log:0
>>>>>>>> 
>>>>>>>> mac27:~/Disk/3rd/gsl/1.16.os10.9 65> \
>>>>>>>> ? grep -i ppc src/config.h src/config.log src/config.status
>>>>>>>> src/config.h:/* #undef HAVE_GNUPPC_IEEE_INTERFACE */
>>>>>>>> src/config.log:HAVE_GNUPPC_IEEE_INTERFACE=''
>>>>>>>> src/config.status:S["HAVE_GNUPPC_IEEE_INTERFACE"]=""
>>>>>>>> 
>>>>>>>> --Dave
>>>>>>>> 
>>>>>>>> On Wed, Mar 19, 2014 at 5:27 PM, Jean-Francois Caron 
>>>>>>>> <[email protected]>
>>>>>>>> wrote:
>>>>>>>>> Dave is correct, I am using an "i686" 64-bit x86 mac.  For some reason
>>>>>>>>> it is still looking for the PPC mac header file.  The ./configure
>>>>>>>>> stage correctly identifies my system, so it's a bit strange.  Also GSL
>>>>>>>>> installs without errors when I do it from MacPorts, and MacPorts
>>>>>>>>> doesn't seem to do anything other than ./configure && make, from my
>>>>>>>>> reading of the portfile.
>>>>>>>>> 
>>>>>>>>> When I get back to my Mac, I will look at the NOTES file to see if
>>>>>>>>> anything needs to be done for 10.9.
>>>>>>>>> 
>>>>>>>>> Jean-François
> 

Reply via email to