我试图得到一个ODE系统,其中一个变量(FA2)正在改变 every 时间步骤工作 . 我有以下代码 .

注意:FA2定义为FA2 = b a * i且不能大于90

模型功能:

model <- function(times, y, pars) {
  with(as.list(c(pars, y)), {
    # set up vector of FA2 values   
    FA2_1=c()
    for (i in 1:90){
      FA2_1[i]=b+i*a
    }
    FA2_1=c(b,FA2_1)
 # make ifelse statement   
    FA=ifelse(FA2_1>=90,90,FA2_1)
    FA2=c()
     for (i in 1:length(times)){
      FA2[i]=ifelse(times[i]>TR,FA[i],FA[1])
    }

# the ode system
dS <- -k1*S-(1/T1s)*S-S*(1-cos(FA1*pi/180))/TR 
dP <-  k1*S-(1/T1p)*P-P*(1-cos(FA2*pi/180))/TR 

list(c(dS,dP))
  })
}

y = c(S = 1 ,P=0) # initial values

parms=c(k1=0.016,T1p=57,T1s=36) # pars

times=c(0,2,4,6,8,10) # time vector

a=1 # can be any positive value this is just an example
b=12 # can be any positive value this is just an example
TR=2 # can be any positive value
FA1=1 # cen be any positive value

Output

out1=ode(y, times, model,parms)
    out1=data.frame(out1)

现在的问题似乎是求解器忽略了 ifelse 语句中FA2的不同值,只是从FA2向量中选取 FA2[1]=12 的第一个元素 .

我试过给函数声明

FA2=ifelse(times>=2,FA[2],FA[1])

而不是在函数中发布的语句:

FA2=c()
   for (i in 1:length(times)){
          FA2[i]=ifelse(times[i]>TR,FA[i],FA[1])
        }

并且没有循环的小 ifelse 语句似乎使求解器对a的值的变化作出反应 . 但是,当时间步长发生变化时,我需要的不仅仅是FA矢量的第一个值 . 有没有人知道如何解决这个问题?