R中循环内的ODE

R中循环内的ODE,r,R,我是编程新手,特别是R。我发现有时候事情比Matlab更容易实现,但要给出的东西更复杂。我正在尝试重新创建一个循环,我已经在一个“script.m”中创建了这个循环,但是我还没有在R上得到任何东西。 有谁能告诉我如何运行以下三次吗 提前感谢您提供的任何帮助 pars <- c(...) times <- seq(ti, tf, delta) state <- c(S = 50, X = 20, P = 0.5) SOLVE <- function(pars)

我是编程新手,特别是R。我发现有时候事情比Matlab更容易实现,但要给出的东西更复杂。我正在尝试重新创建一个循环,我已经在一个“script.m”中创建了这个循环,但是我还没有在R上得到任何东西。 有谁能告诉我如何运行以下三次吗

提前感谢您提供的任何帮助

pars  <- c(...)

times <- seq(ti, tf, delta)

state <- c(S = 50, X = 20, P = 0.5)   

SOLVE <- function(pars) { 

    derivs <- function(time, state, pars) {

        with(as.list(c(state, pars)), {
         .
         .
         .
            return(list(c(St, Xt, Pt)))

        })

    }

    return(as.data.frame(ode(y = state, times = times, func = derivs, parms = pars)))  
}


for(i in seq(ti, tf-span, span)) {

     times <- seq(i, i+span, delta)  

     out   <- SOLVE(pars) 

     state <- c(state[1], tail(out[3], 1), tail(out[4], 1))

 }

pars注释太长。尝试:

state <- c(state[1], tail(out[[3]], 1), tail(out[[4]], 1))
您生成的是一个列表,而不是一个数字,这是导致错误的原因


如果引用,例如,
out[[3]]
则返回一个向量,其中的元素是
out
的第三列。这是因为,在R中,data.frame根据定义是一个向量列表,因此
out[[3]]
返回该列表中的第三个元素(向量)。

我假设它至少在一次循环迭代中工作正常,然后在尝试更新
状态后被破坏?您应该
cat()
打开循环中的状态,以查看它被分配给了什么。亲爱的jlhoward,感谢您的解释。现在,在“out”中,我得到了上一次迭代的值,您现在能知道如何得到所有三次迭代的所有值,以绘制从0到12的整个日期吗?例如,(i在seq(ti,tf span,span))中,{次您的问题中没有足够的信息来回答这个问题。您没有定义
ti
tf'
span
,或
delta
,例如。注释中的代码将为循环的每次迭代生成一个图。期望的结果以何种方式不同?
c(state[1],tail(out[3],1),...)