specify_ode | R Documentation |
Define compiled code for ordinary differential equation.
specify_ode(code, fname = NULL, pname = c("dy", "x", "y", "p"))
code |
string with the body of the function definition (see details) |
fname |
Optional name of the exported C++ function |
pname |
Vector of variable names (results, inputs, states, parameters) |
The model (code
) should be specified as the body of of C++ function.
The following variables are defined bye default (see the argument pname
)
Vector with derivatives, i.e. the rhs of the ODE (the result).
Vector with the first element being the time, and the following elements additional exogenous input variables,
Vector with the dependent variable
Parameter vector
y'(t) = f_{p}(x(t), y(t))
All variables are treated as Armadillo (http://arma.sourceforge.net/) vectors/matrices.
As an example consider the Lorenz Equations
\frac{dx_{t}}{dt} = \sigma(y_{t}-x_{t})
\frac{dy_{t}}{dt} = x_{t}(\rho-z_{t})-y_{t}
\frac{dz_{t}}{dt} = x_{t}y_{t}-\beta z_{t}
We can specify this model as
ode <- 'dy(0) = p(0)*(y(1)-y(0));
dy(1) = y(0)*(p(1)-y(2));
dy(2) = y(0)*y(1)-p(2)*y(2);'
dy <- specify_ode(ode)
As an example of model with exogenous inputs consider the following ODE:
y'(t) = \beta_{0} + \beta_{1}y(t) + \beta_{2}y(t)x(t) + \beta_{3}x(t)\cdot t
This could be specified as
mod <- 'double t = x(0);
dy = p(0) + p(1)*y + p(2)*x(1)*y + p(3)*x(1)*t;'
dy <- specify_ode(mod)
##'
pointer (externalptr) to C++ function
Klaus Kähler Holst
solve_ode
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.