The 'ode' class object
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
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 )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.