Learn R Programming

deSolve (version 1.2-1)

rkMethod: Collection of Parameter Sets (Butcher Arrays) for the Runge-Kutta Family of ODE Solvers

Description

This function returns a list specifying coefficients and properties of ODE solver methods from the Runge-Kutta family.

Usage

rkMethod(method = NULL, ...)

Arguments

method
a string constant naming one of the pre-defined methods of the Runge-Kutta family of solvers. The most common methods are the fixed-step methods "euler", "rk2", "rk4" or the variable step methods "rk23bs", "rk34f", "rk45f" or "rk45dp7".
...
specification of a user-defined solver, see Value and example below.

Value

  • A list with the following elements:
  • IDname of the method (character)
  • varstepboolean value specifying if the method allows for variable time step (TRUE) or not (FALSE).
  • FSAL(first same as last) boolean value specifying if the method allows re-use of the last function evaluation (TRUE) or not (FALSE or NULL).
  • Acoefficient matrix of the method. As link{rk} supports only explicit methods, this matrix must be lower triangular. A can also be a vector if only the subdiagonal values are different from zero.
  • b1weighting coefficients for averaging the function evaluations of method 1.
  • b2weighting coefficients for averaging the function evaluations of method 2 (optional, for embedded methods that allow variable time step).
  • ccoefficients for calculating the intermediate time steps.
  • dcoefficients for polynomial interpolation of the outputs from internal steps (dense output), currently only available for method rk45dp7 (Dormand-Prince).
  • stagenumber of function evaluations needed (corresponds to number of rows in A).
  • Qerrglobal error order of the method, important for automatic time-step adjustment.

Details

This function supplies method settings for rk or ode. If called without arguments, the names of all implemented solvers of the Runge-Kutta family is returned. The following comparison gives an idea how the algorithms of deSolve are related to similar algorithms of other simulation languages: lll{ rkMethod | Description "euler" | Euler's Method "rk2" | 2nd order Runge-Kutta, fixed time step (Heun's method) "rk4" | classical 4th order Runge-Kutta, fixed time step "rk23" | Runge-Kutta, order 2(3), Octave: ode23 "rk23bs", "ode23" | Bogacki-Shampine, order 2(3), Matlab: ode23 "rk34f" | Runge-Kutta-Fehlberg, order 3(4) "rk45f" | Runge-Kutta-Fehlberg, order 4(5), Octave: ode45, pair=1 "rk45e" | Runke-Kutta-England, order 4(5) "rk45dp6" | Dormand-Prince, order 4(5), local order 6 "rk45dp7", "ode45" | Dormand-Prince 4(5), local order 7 | (also known as dopri5, MATLAB: ode45, Octave: ode45, pair=0) } Note that this table is based on the Runge-Kutta coefficients only, but the algorithms do also differ in their implementation and in their stepsize adaption strategy and interpolation methods.

References

Bogacki, P. and Shampine L.F. (1989) A 3(2) pair of Runge-Kutta formulas, Appl. Math. Lett. 2, 1--9. Butcher, J. C. (1987) The numerical analysis of ordinary differential equations, Runge-Kutta and general linear methods, Wiley, Chichester and New York. Dormand, J. R. and Prince, P. J. (1980) A family of embedded Runge-Kutta formulae, J. Comput. Appl. Math. 6(1), 19--26. Dormand, J. R. and Prince, P. J. (1981) High order embedded Runge-Kutta formulae, J. Comput. Appl. Math. 7(1), 67--75. Engeln-Muellges, G. and Reutter, F. (1996) Numerik Algorithmen: Entscheidungshilfe zur Auswahl und Nutzung. VDI Verlag, Duesseldorf. Fehlberg, E. (1967) Klassische Runge-Kutta-Formeln fuenfter and siebenter Ordnung mit Schrittweiten-Kontrolle, Computing (Arch. Elektron. Rechnen) 4, 93--106. Kutta, W. (1901) Beitrag zur naeherungsweisen Integration totaler Differentialgleichungen, Z. Math. Phys. 46, 435--453. Octave-Forge - Extra Packages for GNU Octave, Package OdePkg. http://octave.sourceforge.net/doc/odepkg.html Runge, C. (1895) Ueber die numerische Aufloesung von Differentialgleichungen, Math. Ann. 46, 167--178. MATLAB (R) is a registed property of The Mathworks Inc. http://www.mathworks.com/

See Also

rk, ode

Examples

Run this code
rkMethod()          # returns the names of all available methods
rkMethod("rk45dp7") # parameters of the Dormand-Prince 5(4) method
rkMethod("ode45")   # an alias for the same method

func <- function(t, x, parms) {
  with(as.list(c(parms, x)),{
    dP  <- a * P        - b * K * P
    dK  <- b * P * K  - c * K
    res <- c(dP, dK)
    list(res)
  })
}
times  <- seq(0, 20, length = 21)
parms  <- c(a = 0.1, b = 0.1, c = 0.1)
x <- c(P=2, K=1)

ode(x, times, func, parms, method = rkMethod("rk4"))

ode(x, times, func, parms, method = "ode45")

## disable polynomial interpolation (dense output)
## and fall back to linear approximation
ode(x, times, func, parms, method = rkMethod("rk45dp7", d = NULL))

## define and use a new rk method
ode(x, times, func, parms, 
  method = rkMethod(ID = "midpoint",
    varstep = FALSE,
    #A       = matrix(c(0, 0, 1/2, 0), nrow=2, byrow=TRUE), 
    # or simply, because this A is nonzero only in the subdiagonal
    A      = c(0, 1/2),
    b1      = c(0, 1),
    c       = c(0, 1/2),
    stage   = 2,
    Qerr    = 1
  )
)

Run the code above in your browser using DataLab