On Sun, Nov 1, 2015 at 10:59 PM, Alasdair McAndrew amca01@gmail.com wrote:
Brilliant! - thank you so much - that works just as it should. Why cannot the input to integration-qagp be simply a list or a vector? As in
(gsll:integration-QAGp 'integration-test-f454 '(0.0d0 1.0d0 (sqrt 2.0d0) 3.0d0) 0.0d0 1.0d-3 1000)
or
(gsll:integration-QAGp 'integration-test-f454 (vector 0.0d0 1.0d0 (sqrt 2.0d0) 3.0d0) 0.0d0 1.0d-3 1000)
I'm not sure (told you I was a newbie!) what grid provides that a list or vector can't.
Grids can be thought of as generalized arrays. Since GSL is a foreign (C) library, its arrays are incompatible with CL arrays. The grid part of Antik provides a way to bridge that gap, so you can handle them with similarly-named functions. However, they are different, and foreign calls need foreign arrays.
And here's a tiny problem from my tiny brain: suppose the endpoints and singularities are given as a standard Lisp list, S say. Then (I'm using SBCL):
(defvar S2) (setf S2 (grid:make-foreign-array 'double-float :dimensions (length S) :initial-contents S))
turns the list into a foreign array grid (is there an easier way?).
There are multiple ways to convert lists to foreign-arrays. This should work.
But then, my attempts to use S2 as input to gaqp produces errors:
(gsll:integration-QAGp 'my-fun 'S2 0.0d0 1.0d-3 1000)
While you didn't provide the error, this will not work as you have quoted S2, so you are sending the symbol 'S2 where you need to send the foreign array as the argument. This has nothing to do with arrays and foreign-arrays, it is just a basic syntax error.
Basically I need a way of turning a numeric list into input for integration-QAGp. I'll keep fiddling!
You have it, you just have a syntax error.
Many thanks again, Alasdair
No problem, Liam
On Mon, Nov 2, 2015 at 1:34 PM, Liam Healy lhealy@common-lisp.net wrote:
On Sun, Nov 1, 2015 at 5:10 AM, Alasdair McAndrew amca01@gmail.com wrote:
Hello,
I am using the excellent gsll package (in the first instance), to provide an interface to quadpack for the mathematics system FriCAS. I'm slowly going through calculus/numerical-integration.lisp one function at a time and writing each one into FriCAS as I go. This means writing functions in FriCAS's own language SPAD which interface with gsll.
This is made harder by me being a lisp newbie.
However, I've come to integration-QAGP, and I've tried to run the test command (having first defined the function it calls). However, all I get is errors.
I'm using SBCL in emacs-slime, and I have installed gsll with quicklisp, so that I can call an integration routine with
- (gsll:integration-qng (lambda (x) (exp (- (* x x)))) 0.0 1.0)
But the commands
- (defun integration-test-f454 (x) (* (expt x 3) (* (log (abs (* (- (expt x 2) 1.0d0) (- (expt x 2)
2.0d0)))))))
- (gsll:integration-QAGp 'integration-test-f454 (grid:copy-to (vector 0.0d0 1.0d0 (sqrt 2.0d0) 3.0d0)) 0.0d0 1.0d-3 1000)
just produces a long list of errors. Is "grid" a standard library, or does it need to be loaded first? (Told you I was a newbie...)
Thanks Alasdair --
Try this
(setf grid:*default-grid-type* 'grid:foreign-array) (gsll:integration-QAGp 'integration-test-f454 (grid:grid 0.0d0 1.0d0 (sqrt 2.0d0) 3.0d0) 0.0d0 1.0d-3 1000)
and let us know what happens.
Thanks, Liam
-- [image: http://www.facebook.com/alasdair.mcandrew] http://www.facebook.com/alasdair.mcandrew [image: https://plus.google.com/+AlasdairMcAndrew/posts] https://plus.google.com/+AlasdairMcAndrew/posts [image: https://www.linkedin.com/pub/alasdair-mcandrew/a/178/108] https://www.linkedin.com/pub/alasdair-mcandrew/a/178/108 [image: https://twitter.com/amca01] https://twitter.com/amca01 [image: http://numbersandshapes.net] http://numbersandshapes.net