Solves a numerical or symbolic system of ordinary differential equations.
ode(
f,
var,
times,
timevar = NULL,
params = list(),
method = "rk4",
drop = FALSE
)
vector of characters
, or a function
returning a numeric vector, giving the values of the derivatives in the ODE system at time timevar
. See examples.
vector giving the initial conditions. See examples.
discretization sequence, the first value represents the initial time.
the time variable used by f
, if any.
list
of additional parameters passed to f
.
the solver to use. One of "rk4"
(Runge-Kutta) or "euler"
(Euler).
if TRUE
, return only the final solution instead of the whole trajectory.
Vector of final solutions if drop=TRUE
, otherwise a matrix
with as many
rows as elements in times
and as many columns as elements in var
.
Guidotti E (2022). "calculus: High-Dimensional Numerical and Symbolic Calculus in R." Journal of Statistical Software, 104(5), 1-37. doi:10.18637/jss.v104.i05
Other integrals:
integral()
## ==================================================
## Example: symbolic system
## System: dx = x dt
## Initial: x0 = 1
## ==================================================
f <- "x"
var <- c(x=1)
times <- seq(0, 2*pi, by=0.001)
x <- ode(f, var, times)
plot(times, x, type = "l")
## ==================================================
## Example: time dependent system
## System: dx = cos(t) dt
## Initial: x0 = 0
## ==================================================
f <- "cos(t)"
var <- c(x=0)
times <- seq(0, 2*pi, by=0.001)
x <- ode(f, var, times, timevar = "t")
plot(times, x, type = "l")
## ==================================================
## Example: multivariate time dependent system
## System: dx = x dt
## dy = x*(1+cos(10*t)) dt
## Initial: x0 = 1
## y0 = 1
## ==================================================
f <- c("x", "x*(1+cos(10*t))")
var <- c(x=1, y=1)
times <- seq(0, 2*pi, by=0.001)
x <- ode(f, var, times, timevar = "t")
matplot(times, x, type = "l", lty = 1, col = 1:2)
## ==================================================
## Example: numerical system
## System: dx = x dt
## dy = y dt
## Initial: x0 = 1
## y0 = 2
## ==================================================
f <- function(x, y) c(x, y)
var <- c(x=1, y=2)
times <- seq(0, 2*pi, by=0.001)
x <- ode(f, var, times)
matplot(times, x, type = "l", lty = 1, col = 1:2)
## ==================================================
## Example: vectorized interface
## System: dx = x dt
## dy = y dt
## dz = y*(1+cos(10*t)) dt
## Initial: x0 = 1
## y0 = 2
## z0 = 2
## ==================================================
f <- function(x, t) c(x[1], x[2], x[2]*(1+cos(10*t)))
var <- c(1,2,2)
times <- seq(0, 2*pi, by=0.001)
x <- ode(f, var, times, timevar = "t")
matplot(times, x, type = "l", lty = 1, col = 1:3)