;; Example spline ;; Liam Healy, Sat Nov 10 2007 - 21:18 ;; Time-stamp: <2009-02-16 09:46:57EST spline-example.lisp> ;; \$Id\$ (in-package :gsl) (defun spline-example (&optional (step 0.01d0)) "The first example in Sec. 26.7 of the GSL manual." (let* ((acc (make-acceleration)) (xarr (make-marray 'double-float :initial-contents (loop for i from 0.0d0 below 10.0d0 collect (+ i (* 0.5d0 (sin i)))))) (yarr (make-marray 'double-float :initial-contents (loop for i from 0.0d0 below 10.0d0 collect (+ i (cos (expt i 2)))))) (spline (make-spline +cubic-spline-interpolation+ xarr yarr))) (loop for xi from (maref xarr 0) below (maref xarr 9) by step collect (list xi (evaluate spline xi :acceleration acc))))) (save-test interpolation (spline-example 0.1d0)) (defun evaluate-integral-example (&optional (intervals 4)) "Evaluate integral of sin(x) in interval 0-pi. sin(x) is tabulated over a 0-2pi interval and interpolated with +periodic-cubic-spline-interpolation+" (let* ((nodes (1+ intervals)) (max-node (1- nodes)) (xarr (loop with step = (/ (* 2.0 pi) intervals) for i from 0 upto max-node collect (* i step))) (xmarr (make-marray 'double-float :initial-contents xarr)) ;; cannot use (loop for x on (cl-array xmarr)...) -- c function gives error (ymarr (make-marray 'double-float :initial-contents (loop for x in xarr collect (sin x)))) (acc (make-acceleration)) (spline (make-spline +periodic-cubic-spline-interpolation+ xmarr ymarr))) (evaluate-integral spline 0d0 (coerce pi 'double-float) :acceleration acc)))