# Get ODE solution at specific time(s)

Hi, I am working with an ODE. model I have data which is measured at specific time points of the time span. But I will need to solve the ODE for the entire time span and than need extract ODE output at observed time points for modelling. I would like to know how to change my code so that I could extract solutions of ODE at specific time span.
As an example, I use the following ODE model from Stan’s manual.

``````functions {
real[] sho(real t,       //time
real[] y,     // state
real[] theta, //parameters
real[] x_r,   // data (real)
int[] x_i){  //data(integer)

real dydt[2];

dydt[1] = y[2];
dydt[2] = -y[1] -theta[1] * y[2];

return dydt;
}
}
data {
int<lower=1> T;
real y[T, 2];
real y0[2];
real t0;
real ts[T];
}
transformed data {
real x_r[0];
int x_int[0];
}
parameters {
real theta[1];
real<lower = 0> sigma;
}
transformed parameters{
real y_hat[T, 2];
y_hat = integrate_ode_bdf(sho,y0, t0, ts, theta, x_r, x_int);
}
model {
for (t in 1:T)
y[t] ~ normal(y_hat[t], sigma);
sigma ~ normal(0, 1);
theta ~ normal(0, 1);
}
``````

I use the following R code to simulate fake data.

``````sim_data = list(T = 10, y0 = c(1, 0), t0 = 0,
ts = 1:10, theta = array(0.15,1))

fake_data = stan("sho.stan", data = sim_data,
chains = 1, iter = 1,
algorithm = "Fixed_param", seed =4838282)
y<- extract(fake_data, pars = "y_hat")\$y_hat[1,,]

stan_data = list(T = 10, y0 = c(1, 0), t0 = 0,
ts = 1:10, y =y )
fit <- stan("sho.stan", data =stan_data,
chains = 4, iter = 1000,
seed =4838282)
``````

Now, suppose I have observed data at times 5:10, how would the above code be changed to model these observed data. The data block would be like:

``````  int<lower=1> T;
real y[T, 2];
real y0[2];
real t0;
real ts[T];
real t_obs[5, 2]
real y_obs[5, 2]
}
``````

and the data in the R code would be like:

``````stan_data = list(T = 10, y0 = c(1, 0), t0 = 0,
ts = 1:10, y =y , y_obs = y[5:10, ], t_obs =data.frame(5:10, 5:10))
``````

How should I modify the transformed data block so that I could extract ODE solution at the observed times . How should the model block be changed such that it models y_obs instead of y with mean as ODE solution corresponding to observed data.
THanks

Use `T=5` and `ts = 5:10`, as `ts` is the time points where the ODE solution is retrieved into `y_hat`. `ts` is not the time step, which is determined adaptively.

Thanks @yizhang.