root/trunk/special-functions/gegenbauer.lisp

Revision 34, 2.5 kB (checked in by lhealy, 9 months ago)

The classes/types in the different contexts are now gathered together
in one place, in *type-names* for the types and in *data-class-name*
for data classes, populated by #'add-data-class. Both defdata and
defmfun-all use the table and so mapping between various names is
consistent. The data class names are now different, *-double-float
and *-single-float replaces *-double and *-single. The regression
tests give the same results as before.

  • Property svn:keywords set to Id
Line 
1;; Gegenbauer polynomials
2;; Liam Healy, Fri Apr 28 2006 - 20:40
3;; Time-stamp: <2008-03-09 19:29:18EDT gegenbauer.lisp>
4;; $Id$
5
6(in-package :gsl)
7
8(defmfun gegenbauer-1 (lambda x)
9  "gsl_sf_gegenpoly_1_e" ((lambda :double) (x :double) (ret sf-result))
10  :documentation                        ; FDL
11  "The Gegenbauer polynomial C^{(\lambda)}_1(x)}.")
12
13(defmfun gegenbauer-2 (lambda x)
14  "gsl_sf_gegenpoly_2_e" ((lambda :double) (x :double) (ret sf-result))
15  :documentation                        ; FDL
16  "The Gegenbauer polynomial C^{(\lambda)}_2(x)}.")
17
18(defmfun gegenbauer-3 (lambda x)
19  "gsl_sf_gegenpoly_3_e" ((lambda :double) (x :double) (ret sf-result))
20  :documentation                        ; FDL
21  "The Gegenbauer polynomial C^{(\lambda)}_3(x)}.")
22
23(defmfun gegenbauer (n lambda x)
24  "gsl_sf_gegenpoly_n_e"
25  ((n :int) (lambda :double) (x :double) (ret sf-result))
26  :documentation                        ; FDL
27  "The Gegenbauer polynomial C^{(\lambda)}_n(x)} for a specific value of n,
28  lambda, x subject to \lambda > -1/2, n >= 0.")
29
30(defmfun gegenbauer-array (lambda x result)
31  "gsl_sf_gegenpoly_array"
32  (((1- (dim0 result)) :int)
33   (lambda :double) (x :double) ((gsl-array result) :pointer))
34  :invalidate (result)
35  :documentation                        ; FDL
36  "Compute an array of Gegenbauer polynomials C^{(\lambda)}_n(X)}
37   for n = 0, 1, 2, ..., length(result)-1}, subject to \lambda > -1/2.")
38
39;;; (defparameter vec (make-data 'vector nil 3))
40;;; (gegenbauer-array 1.0d0 3.0d0 vec)
41
42;;;;****************************************************************************
43;;;; Examples and unit test
44;;;;****************************************************************************
45
46#|
47(make-tests gegenbauer
48  (gegenbauer-1 1.0d0 3.0d0)
49  (gegenbauer-2 1.0d0 3.0d0)
50  (gegenbauer-3 1.0d0 3.0d0)
51  (gegenbauer 4 1.0d0 3.0d0)
52  (letm ((arr (vector-double-float 4)))
53      (gegenbauer-array 1.0d0 3.0d0 arr) (data arr)))
54|#
55
56(LISP-UNIT:DEFINE-TEST GEGENBAUER
57  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
58   (LIST 6.0d0 5.329070518200751d-15)
59   (MULTIPLE-VALUE-LIST (GEGENBAUER-1 1.0d0 3.0d0)))
60  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
61   (LIST 35.0d0 1.5765166949677223d-14)
62   (MULTIPLE-VALUE-LIST (GEGENBAUER-2 1.0d0 3.0d0)))
63  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
64   (LIST 204.0d0 9.126033262418787d-14)
65   (MULTIPLE-VALUE-LIST (GEGENBAUER-3 1.0d0 3.0d0)))
66  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
67   (LIST 1189.0d0 1.056044141023449d-12)
68   (MULTIPLE-VALUE-LIST (GEGENBAUER 4 1.0d0 3.0d0)))
69  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
70   (LIST #(1.0d0 6.0d0 35.0d0 204.0d0))
71   (MULTIPLE-VALUE-LIST
72    (LETM ((ARR (VECTOR-DOUBLE-FLOAT 4)))
73      (GEGENBAUER-ARRAY 1.0d0 3.0d0 ARR) (DATA ARR)))))
Note: See TracBrowser for help on using the browser.