Copyright | (c) Alberto Ruiz 2010 |
---|---|
License | GPL |
Maintainer | Alberto Ruiz |
Stability | provisional |
Safe Haskell | None |
Language | Haskell98 |
Solution of ordinary differential equation (ODE) initial value problems.
http://www.gnu.org/software/gsl/manual/html_node/Ordinary-Differential-Equations.html
A simple example:
import Numeric.GSL.ODE import Numeric.LinearAlgebra import Graphics.Plot(mplot) xdot t [x,v] = [v, -0.95*x - 0.1*v] ts = linspace 100 (0,20 :: Double) sol = odeSolve xdot [10,0] ts main = mplot (ts : toColumns sol)
- odeSolve :: (Double -> [Double] -> [Double]) -> [Double] -> Vector Double -> Matrix Double
- odeSolveV :: ODEMethod -> Double -> Double -> Double -> (Double -> Vector Double -> Vector Double) -> Vector Double -> Vector Double -> Matrix Double
- odeSolveVWith :: ODEMethod -> StepControl -> Double -> (Double -> Vector Double -> Vector Double) -> Vector Double -> Vector Double -> Matrix Double
- data ODEMethod
- type Jacobian = Double -> Vector Double -> Matrix Double
- data StepControl
Documentation
:: (Double -> [Double] -> [Double]) | x'(t,x) |
-> [Double] | initial conditions |
-> Vector Double | desired solution times |
-> Matrix Double | solution |
A version of odeSolveV
with reasonable default parameters and system of equations defined using lists.
:: ODEMethod | |
-> Double | initial step size |
-> Double | absolute tolerance for the state vector |
-> Double | relative tolerance for the state vector |
-> (Double -> Vector Double -> Vector Double) | x'(t,x) |
-> Vector Double | initial conditions |
-> Vector Double | desired solution times |
-> Matrix Double | solution |
A version of odeSolveVWith
with reasonable default step control.
:: ODEMethod | |
-> StepControl | |
-> Double | initial step size |
-> (Double -> Vector Double -> Vector Double) | x'(t,x) |
-> Vector Double | initial conditions |
-> Vector Double | desired solution times |
-> Matrix Double | solution |
Evolution of the system with adaptive step-size control.
Stepping functions
RK2 | Embedded Runge-Kutta (2, 3) method. |
RK4 | 4th order (classical) Runge-Kutta. The error estimate is obtained by halving the step-size. For more efficient estimate of the error, use the embedded methods. |
RKf45 | Embedded Runge-Kutta-Fehlberg (4, 5) method. This method is a good general-purpose integrator. |
RKck | Embedded Runge-Kutta Cash-Karp (4, 5) method. |
RK8pd | Embedded Runge-Kutta Prince-Dormand (8,9) method. |
RK2imp Jacobian | Implicit 2nd order Runge-Kutta at Gaussian points. |
RK4imp Jacobian | Implicit 4th order Runge-Kutta at Gaussian points. |
BSimp Jacobian | Implicit Bulirsch-Stoer method of Bader and Deuflhard. The method is generally suitable for stiff problems. |
RK1imp Jacobian | Implicit Gaussian first order Runge-Kutta. Also known as implicit Euler or backward Euler method. Error estimation is carried out by the step doubling method. |
MSAdams | A variable-coefficient linear multistep Adams method in Nordsieck form. This stepper uses explicit Adams-Bashforth (predictor) and implicit Adams-Moulton (corrector) methods in P(EC)^m functional iteration mode. Method order varies dynamically between 1 and 12. |
MSBDF Jacobian | A variable-coefficient linear multistep backward differentiation formula (BDF) method in Nordsieck form. This stepper uses the explicit BDF formula as predictor and implicit BDF formula as corrector. A modified Newton iteration method is used to solve the system of non-linear equations. Method order varies dynamically between 1 and 5. The method is generally suitable for stiff problems. |
data StepControl Source #
Adaptive step-size control functions