numeric-ode-0.0.0.0: src/Math/Integrators/RK.hs
{-# LANGUAGE QuasiQuotes, FlexibleContexts #-}
{-# OPTIONS_GHC -Wwarn #-}
-- | Runge-Kutta module
-- TODO: add description and history notes
-- add informations about methods properties
module Math.Integrators.RK
( -- * explicit methods
-- rk45
-- , rk46
-- -- * implicit methods
-- , gauss4
-- , gauss6
-- , lobattoIIIA4
-- , lobattoIIIA6
-- , lobattoIIIB4
) where
-- import Linear
-- import Math.Integrators.RK.Template
-- import Math.Integrators.RK.Types
-- import Math.Integrators.Internal
-- import Math.Integrators.Implicit
{-
rk45 :: (VectorSpace a, Floating (Scalar a)) => (Double -> a -> a) -> Integrator (Double,a)
rk45 = [qrk|
0 |
0.5 | 0.5
0.5 | 0 & 0.5
1 | 0 & 0 & 1
- - + - - - - - - - -
| 1/6 & 2/6 & 2/6 & 1/6
|]
rk46 :: (VectorSpace a, Floating (Scalar a)) => (Double -> a -> a) -> Integrator (Double,a)
rk46 = [qrk|
0 |
1/3 | 1/3
2/3 | -1/3 & 1
1 | 1 & -1 & 1
- - + - - - - - - - -
| 1/8 & 3/8 & 3/8 & 1/8
|]
gauss4 :: (VectorSpace a, Floating (Scalar a)) => (ImplicitRkType (a,a)) -> (Double -> a -> a) -> Integrator (Double,a)
gauss4 = [qrk|
0.5 - sqrt(3)/6 | 0.25 & 0.25 - sqrt(3)/6
0.5 + sqrt(3)/6 | 0.25 + sqrt(3)/6 & 1/4
- - - - - - - - + - - - - - - - - - - -
| 0.5 & 0.5
|]
gauss6 :: (VectorSpace a, Floating (Scalar a)) => (ImplicitRkType (a,a,a)) -> (Double -> a -> a) -> Integrator (Double,a)
gauss6 = [qrk|
0.5 - sqrt(15)/10 | 5/36 & 2/9 - sqrt(15)/15 & 5/36 - sqrt(15)/30
0.5 | 5/36 + sqrt(15)/24 & 2/9 & 5/36 - sqrt(15)/24
0.5 + sqrt(15)/10 | 5/36 + sqrt(15)/30 & 2/9+sqrt(15)/15 & 5/36
- - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - -
| 5/18 & 4/9 & 5/18
|]
lobattoIIIA4 :: (VectorSpace a, Floating (Scalar a)) => (ImplicitRkType (a,a,a)) -> (Double -> a -> a) -> Integrator (Double,a)
lobattoIIIA4 = [qrk|
0 | 0 & 0 & 0
0.5 | 5/24 & 1/3 & -1/24
1 | 1/6 & 2/3 & 1/6
- - + - - - - - - - - - -
| 1/6 & 2/3 & 1/6
|]
lobattoIIIA6 :: (VectorSpace a, Floating (Scalar a)) => (ImplicitRkType (a,a,a,a)) -> (Double -> a -> a) -> Integrator (Double,a)
lobattoIIIA6 = [qrk|
0 | 0 & 0 & 0 & 0
(5-sqrt(5))/10 | (11+sqrt(5))/120 & (25-sqrt(5))/120 & (25 - 13 *sqrt(5)/120) & (-1+sqrt(5))/120
(5+sqrt(5))/10 | (11-sqrt(5))/120 & (25+13*sqrt(5))/120 & (25+sqrt(5))/120 & (-1-sqrt(5))/120
1 | 1/12 & 5/12 & 5/12 & 1/12
- - - - - - - - + - - - -
| 1/12 & 5/12 & 5/12 & 1/12
|]
lobattoIIIB4 :: (VectorSpace a, Floating (Scalar a)) => (ImplicitRkType (a,a,a)) -> (Double -> a -> a) -> Integrator (Double,a)
lobattoIIIB4 = [qrk|
0 | 1/6 & -1/6 & 0
0.5 | 1/6 & 1/3 & 0
1 | 1/6 & 5/6 & 0
- - + - - - - - - - - -
| 1/6 & 2/3 & 1/6
|]
-}