我试图得到一个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矢量的第一个值 . 有没有人知道如何解决这个问题?