From b81b18e9a965fc4c523aeb0062e34be3af0fb8e9 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Thu, 4 Jul 2013 14:36:38 +0200 Subject: changes, thanks, integrate example --- CHANGES.md | 2 ++ THANKS.md | 4 ++++ examples/integrate.hs | 11 +++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 636792a..b0deee4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,8 @@ 0.15.0.0 -------- +- Data.Packed.Foreign (additional FFI helpers) + - diagBlock - NFData instance of Matrix diff --git a/THANKS.md b/THANKS.md index 9fcb93e..1bdf408 100644 --- a/THANKS.md +++ b/THANKS.md @@ -122,3 +122,7 @@ module reorganization, monadic mapVectorM, and many other improvements. - Alex Lang implemented uniRoot and uniRootJ for one-dimensional root-finding. +- Mike Ledger contributed alternative FFI helpers for matrix interoperation with C + +- Stephen J. Barr suggested flipping argument order in the double integral example + diff --git a/examples/integrate.hs b/examples/integrate.hs index 10f0269..3a03da6 100644 --- a/examples/integrate.hs +++ b/examples/integrate.hs @@ -4,14 +4,21 @@ import Numeric.GSL quad f a b = fst $ integrateQAGS 1E-9 100 f a b -- A multiple integral can be easily defined using partial application -quad2 f a b g1 g2 = quad h a b - where h x = quad (f x) (g1 x) (g2 x) +quad2 f y1 y2 g1 g2 = quad h y1 y2 + where + h y = quad (flip f y) (g1 y) (g2 y) volSphere r = 8 * quad2 (\x y -> sqrt (r*r-x*x-y*y)) 0 r (const 0) (\x->sqrt (r*r-x*x)) +-- wikipedia example +exw = quad2 f 7 10 (const 11) (const 14) + where + f x y = x**2 + 4*y + main = do print $ quad (\x -> 4/(x^2+1)) 0 1 print pi print $ volSphere 2.5 print $ 4/3*pi*2.5**3 + print $ exw -- cgit v1.2.3