View source: R/system_derivatives.R

system_derivatives | R Documentation |

Solving a BioCro model using one of R's available differential equation solvers

```
system_derivatives(
parameters = list(),
drivers,
direct_module_names = list(),
differential_module_names = list()
)
```

`parameters` |
Identical to the corresponding argument from |

`drivers` |
Identical to the corresponding argument from |

`direct_module_names` |
Identical to the corresponding argument from |

`differential_module_names` |
Identical to the corresponding argument from |

`system_derivatives`

accepts the same input arguments as
`run_biocro`

with the exceptions of `ode_solver`

and
`initial_values`

; this function is intended to be passed to an ODE solver
in R, which will solve for the system's time dependence as its diffferential
quantities evolve from their initial values, so `ode_solver`

and
`initial_values`

are not required here.

When using one of the pre-defined crop growth models, it may be helpful to
use the `with`

command to pass arguments to `system_derivatives`

;
see the documentation for `crop_model_definitions`

for more
information.

The return value of `system_derivatives`

is a function with three inputs
(`t`

, `differential_quantities`

, and `parms`

) that returns
derivatives for each of the differential quantities in the dynamical system
determined by the original inputs (`parameters`

, `drivers`

,
`direct_module_names`

, and
`differential_module_names`

).

This function signature and the requirements for its inputs are set by the
`LSODES`

function from the `deSolve`

package. The `t`

input
should be a single time value and the `differential_quantities`

input
should be a vector with the names of the differential quantities defined by
the modules. `parms`

is required by `LSODES`

, but we don't use it
for anything.

This function can be passed to `LSODES`

as an alternative integration
method, rather than using one of BioCro's built-in solvers.

`run_biocro`

```
# Note: Example 3 below may take several minutes to run. Patience is required!
# Example 1: calculating a single derivative using a soybean model
soybean_system <- system_derivatives(
soybean$parameters,
soybean_weather$'2002',
soybean$direct_modules,
soybean$differential_modules
)
derivs <- soybean_system(0, unlist(soybean$initial_values), NULL)
# Example 2: a simple oscillator with only one module
times = seq(0, 5, length=100)
oscillator_system_derivatives <- system_derivatives(
list(
timestep = 1,
mass = 1,
spring_constant = 1
),
data.frame(time=times),
c(),
'BioCro:harmonic_oscillator'
)
result <- as.data.frame(deSolve::lsodes(
c(position=0, velocity=1),
times,
oscillator_system_derivatives
))
lattice::xyplot(
position + velocity ~ time,
type='l',
auto=TRUE,
data=result
)
# Example 3: solving 500 hours of a soybean simulation. This will run slowly
# compared to a regular call to `run_biocro`.
soybean_system <- system_derivatives(
soybean$parameters,
soybean_weather$'2002',
soybean$direct_modules,
soybean$differential_modules
)
times = seq(from=0, to=500, by=1)
result <- as.data.frame(deSolve::lsodes(unlist(soybean$initial_values), times, soybean_system))
lattice::xyplot(Leaf + Stem ~ time, type='l', auto=TRUE, data=result)
```

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.