dde {PBSddesolve} | R Documentation |
A solver for systems of delay differential equations based on numerical routines from Simon Wood's solv95 program. This solver is also capable of solving systems of ordinary differential equations.
Please see the included demos for examples of how to use dde
.
To view available demos run demo(package="PBSddesolve")
.
The supplied demos require that the R package PBSmodelling
be installed.
dde(y, times, func, parms=NULL, switchfunc=NULL, mapfunc=NULL, tol=1e-08, dt=0.1, hbsize=10000)
y |
Vector of initial values of the DDE system. The size of the supplied vector determines the number of variables in the system. |
times |
Numeric vector of specific times to solve. |
func |
A user supplied function that computes the gradients in
the DDE system at time The argument |
parms |
Any constant parameters to pass to |
switchfunc |
An optional function that is used to manipulate
state values at given times. The switch function takes the
arguments |
mapfunc |
If |
tol |
Maximum error tolerated at each time step (as a proportion of the state variable concerned). |
dt |
Maximum initial time step. |
hbsize |
History buffer size required for solving DDEs. |
The user supplied function func
can access past values (lags)
of y
by calling the pastvalue
function. Past gradients are accessible by the
pastgradient
function. These functions
can only be called from func
and can only be passed values
of t
greater or equal to the start time, but less than the
current time of the integration point. For example, calling
pastvalue(t)
is not allowed, since these values are the
current values which are passed in as y
.
A data frame with one column for t
, a column for every
variable in the system, and a column for every additional value that
may (or may not) have been returned by func
in the second
element of the list.
If the initial y
values parameter was named, then the solved
values column will use the same names. Otherwise y1
,
y2
, ... will be used.
If func
returned a list, with a named vector as the second
element, then those names will be used as the column names. If the
vector was not named, then extra1
, extra2
, ... will be
used.
Alex Couture-Beil <alex@mofo.ca>
Maintainer: Rowan Haigh, Program Head – Offshore Rockfish
Pacific Biological Station (PBS), Fisheries & Oceans Canada (DFO), Nanaimo BC
locus opus: Institute of Ocean Sciences (IOS), Sidney BC
Last modified Rd: 2019-03-07
################################################## # This is just a single example of using dde. # For more examples see demo(package="PBSddesolve") # the demos require the package PBSmodelling ################################################## require(PBSddesolve) local(env=.PBSddeEnv, expr={ #create a func to return dde gradient yprime <- function(t,y,parms) { if (t < parms$tau) lag <- parms$initial else lag <- pastvalue(t - parms$tau) y1 <- parms$a * y[1] - (y[1]^3/3) + parms$m * (lag[1] - y[1]) y2 <- y[1] - y[2] return(c(y1,y2)) } #define initial values and parameters yinit <- c(1,1) parms <- list(tau=3, a=2, m=-10, initial=yinit) # solve the dde system yout <- dde(y=yinit,times=seq(0,30,0.1),func=yprime,parms=parms) # and display the results plot(yout$time, yout$y1, type="l", col="red", xlab="t", ylab="y", ylim=c(min(yout$y1, yout$y2), max(yout$y1, yout$y2))) lines(yout$time, yout$y2, col="blue") legend("topleft", legend = c("y1", "y2"),lwd=2, lty = 1, xjust = 1, yjust = 1, col = c("red","blue")) })