Description Format Value Methods Public fields Methods Author(s) Examples
This class provide all information about odes and methods for numerically solving odes.
R6Class
object.
an R6Class
object which can be used for gradient matching.
solve_ode(par_ode,xinit,tinterv)
This method is used to solve ode numerically.
optim_par(par,y_p,z_p)
This method is used to estimate ode parameters by standard gradient matching.
lossNODE(par,y_p,z_p)
This method is used to calculate the mismatching between gradient of interpolation and gradient from ode.
ode_par
vector(of length n_p) containing ode parameters. n_p is the number of ode parameters.
ode_fun
function containing the ode function.
t
vector(of length n_o) containing time points of observations. n_o is the length of time points.
new()
ode$new( sample = NULL, fun = NULL, grfun = NULL, t = NULL, ode_par = NULL, y_ode = NULL )
greet()
ode$greet()
solve_ode()
ode$solve_ode(par_ode, xinit, tinterv)
rmsfun()
ode$rmsfun(par_ode, state, M1, true_par)
gradient()
ode$gradient(y_p, par_ode)
lossNODE()
ode$lossNODE(par, y_p, z_p)
grlNODE()
ode$grlNODE(par, y_p, z_p)
loss32NODE()
ode$loss32NODE(par, y_p, z_p)
grl32NODE()
ode$grl32NODE(par, y_p, z_p)
optim_par()
ode$optim_par(par, y_p, z_p)
clone()
The objects of this class are cloneable with this method.
ode$clone(deep = FALSE)
deep
Whether to make a deep clone.
Mu Niu, mu.niu@glasgow.ac.uk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | noise = 0.1 ## set the variance of noise
SEED = 19537
set.seed(SEED)
## Define ode function, we use lotka-volterra model in this example.
## we have two ode states x[1], x[2] and four ode parameters alpha, beta, gamma and delta.
LV_fun = function(t,x,par_ode){
alpha=par_ode[1]
beta=par_ode[2]
gamma=par_ode[3]
delta=par_ode[4]
as.matrix( c( alpha*x[1]-beta*x[2]*x[1] , -gamma*x[2]+delta*x[1]*x[2] ) )
}
## Define the gradient of ode function against ode parameters
## df/dalpha, df/dbeta, df/dgamma, df/ddelta where f is the differential equation.
LV_grlNODE= function(par,grad_ode,y_p,z_p) {
alpha = par[1]; beta= par[2]; gamma = par[3]; delta = par[4]
dres= c(0)
dres[1] = sum( -2*( z_p[1,]-grad_ode[1,])*y_p[1,]*alpha )
dres[2] = sum( 2*( z_p[1,]-grad_ode[1,])*y_p[2,]*y_p[1,]*beta)
dres[3] = sum( 2*( z_p[2,]-grad_ode[2,])*gamma*y_p[2,] )
dres[4] = sum( -2*( z_p[2,]-grad_ode[2,])*y_p[2,]*y_p[1,]*delta)
dres
}
## create a ode class object
kkk0 = ode$new(2,fun=LV_fun,grfun=LV_grlNODE)
## set the initial values for each state at time zero.
xinit = as.matrix(c(0.5,1))
## set the time interval for the ode numerical solver.
tinterv = c(0,6)
## solve the ode numerically using predefined ode parameters. alpha=1, beta=1, gamma=4, delta=1.
kkk0$solve_ode(c(1,1,4,1),xinit,tinterv)
## Create another ode class object by using the simulation data from the ode numerical solver.
## If users have experiment data, they can replace the simulation data with the experiment data.
## set initial values for ode parameters.
init_par = rep(c(0.1),4)
init_yode = kkk0$y_ode
init_t = kkk0$t
kkk = ode$new(1,fun=LV_fun,grfun=LV_grlNODE,t=init_t,ode_par= init_par, y_ode=init_yode )
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.