Changeset 39 for trunk/polynomial.lisp

Show
Ignore:
Timestamp:
03/18/08 01:40:50 (8 months ago)
Author:
lhealy
Message:

Changed #'divided-difference in ~liam/mathematics/gsl/polynomial.lisp
to be more like a standard GSLL interface, with a single function
definition in terms of the GSL function. Example/test for it added.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/polynomial.lisp

    r34 r39  
    11;; Polynomials 
    22;; Liam Healy, Tue Mar 21 2006 - 18:33 
    3 ;; Time-stamp: <2008-03-09 19:29:15EDT polynomial.lisp> 
     3;; Time-stamp: <2008-03-17 21:35:52EDT polynomial.lisp> 
    44;; $Id$ 
    55 
     
    2424;;;;**************************************************************************** 
    2525 
    26 (defmfun divided-difference-int (dd xa ya) 
     26(defmfun divided-difference (dd xa ya) 
    2727  "gsl_poly_dd_init" 
    2828  (((gsl-array dd) :pointer) 
    2929   ((gsl-array xa) :pointer) ((gsl-array ya) :pointer) 
    3030   ((dim0 xa) size)) 
    31   :return (dd) 
    32   :export nil 
    33   :index divided-difference) 
    34  
    35 (export '(divided-difference)) 
    36 (defun divided-difference (xa ya) 
    37   ;; FDL 
    38   "Compute a divided-difference representation of the 
    39   interpolating polynomial for the points (xa, ya) stored in 
    40   the arrays xa and ya.  The output is the 
    41   divided-differences of (xa,ya) stored in an gsl-vector 
    42   of the same length as xa and ya." 
    43   (letm ((xad (vector-double-float xa)) 
    44          (yad (vector-double-float ya))) 
    45     (divided-difference-int 
    46      (make-data 'vector-double-float nil (length xa)) 
    47      xad yad))) 
     31  :return (dd)) 
    4832 
    4933(defmfun polynomial-eval-divided-difference (dd xa x) 
     
    178162#| 
    179163(make-tests polynomial 
    180   (letm ((vec (vector-double-float #(1.0d0 2.0d0 3.0d0)))) 
    181      (polynomial-eval vec -1.0d0)) 
    182   (solve-quadratic 1.0d0 0.0d0 1.0d0) 
    183   (solve-quadratic 1.0d0 -2.0d0 1.0d0) 
    184   (solve-quadratic-complex 1.0d0 -2.0d0 1.0d0) 
    185   (solve-cubic -6.0d0 -13.0d0 42.0d0) 
    186   (solve-cubic-complex -1.0d0 1.0d0 -1.0d0) 
    187   ;; Example from GSL manual 
    188   (polynomial-solve #(-1.0d0 0.0d0 0.0d0 0.0d0 0.0d0 1.0d0))) 
     164 (letm ((xa (vector-double-float #(0.0d0 1.0d0 2.0d0 3.0d0))) 
     165        (ya (vector-double-float #(2.5d0 7.2d0 32.7d0 91.0d0))) 
     166        (dd (vector-double-float 4))) 
     167   (divided-difference dd xa ya) 
     168   (list 
     169    (polynomial-eval-divided-difference dd xa 0.0d0) 
     170    (polynomial-eval-divided-difference dd xa 1.0d0) 
     171    (polynomial-eval-divided-difference dd xa 2.0d0) 
     172    (polynomial-eval-divided-difference dd xa 3.0d0))) 
     173 (letm ((vec (vector-double-float #(1.0d0 2.0d0 3.0d0)))) 
     174   (polynomial-eval vec -1.0d0)) 
     175 (solve-quadratic 1.0d0 0.0d0 1.0d0) 
     176 (solve-quadratic 1.0d0 -2.0d0 1.0d0) 
     177 (solve-quadratic-complex 1.0d0 -2.0d0 1.0d0) 
     178 (solve-cubic -6.0d0 -13.0d0 42.0d0) 
     179 (solve-cubic-complex -1.0d0 1.0d0 -1.0d0) 
     180 ;; Example from GSL manual 
     181 (polynomial-solve #(-1.0d0 0.0d0 0.0d0 0.0d0 0.0d0 1.0d0))) 
    189182|# 
    190183 
    191184(LISP-UNIT:DEFINE-TEST POLYNOMIAL 
     185  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL 
     186   (LIST (LIST 2.5d0 7.2d0 32.7d0 91.0d0)) 
     187   (MULTIPLE-VALUE-LIST 
     188    (LETM 
     189        ((XA (VECTOR-DOUBLE-FLOAT #(0.0d0 1.0d0 2.0d0 3.0d0))) 
     190         (YA (VECTOR-DOUBLE-FLOAT #(2.5d0 7.2d0 32.7d0 91.0d0))) 
     191         (DD (VECTOR-DOUBLE-FLOAT 4))) 
     192      (DIVIDED-DIFFERENCE DD XA YA) 
     193      (LIST 
     194       (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 0.0d0) 
     195       (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 1.0d0) 
     196       (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 2.0d0) 
     197       (POLYNOMIAL-EVAL-DIVIDED-DIFFERENCE DD XA 3.0d0))))) 
    192198  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL 
    193199   (LIST 2.0d0)