StepODE: Create a function for advancing the state of an ODE model by...

View source: R/StepODE.R

StepODER Documentation

Create a function for advancing the state of an ODE model by using the deSolve package

Description

This function creates a function for advancing the state of an ODE model using an integration method from the deSolve package. The resulting function (closure) can be used in conjunction with other functions (such as simTs) for simulating realisations of ODE models. This function is used similarly to StepEuler, but StepODE should be more accurate and efficient.

Usage

StepODE(RHSfun)

Arguments

RHSfun

A function representing the RHS of the ODE model. RHSfun should have prototype RHSfun(x,t,parms,...), with t representing current system time, x representing current system state and parms representing the model parameters. The value of the function should be a vector of the same dimension as x, representing the infinitesimal change in state.

Value

An R function which can be used to advance the state of the ODE model RHSfun by using an efficient ODE solver. The function closure has interface function(x0,t0,deltat,parms,...), where t0 and x0 represent the initial time and state, and deltat represents the amount of time by which the process should be advanced. The function closure returns a vector representing the simulated state of the system at the new time.

See Also

StepEulerSPN, StepEuler, simTs, ode

Examples

# Build a RHS for the Lotka-Volterra system
LVrhs <- function(x,t,parms)
{
        with(as.list(c(x,parms)),{
                c( c1*x1 - c2*x1*x2 ,
                      c2*x1*x2 - c3*x2 )
        })
}
# create a stepping function
stepLV = StepODE(LVrhs)
# step the function
print(stepLV(c(x1=50,x2=100),0,1,parms=c(c1=1,c2=0.005,c3=0.6)))
# integrate the process and plot it
out = simTs(c(x1=50,x2=100),0,50,0.1,stepLV,parms=c(c1=1,c2=0.005,c3=0.6))
plot(out,plot.type="single",lty=1:2)

smfsb documentation built on Jan. 13, 2024, 3:02 a.m.