Я пытаюсь получить систему ODE, в которой переменная (FA2) меняется с через каждый временной шаг для работы.У меня есть следующий код.
Примечание: 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)
В настоящий момент проблема заключается в том, что решатель игнорирует различные значения FA2 из оператора ifelse
и просто выбирает первый элемент FA2[1]=12
из вектора FA2.
Я пытался просто дать функции оператор
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, когда временные шаги меняются.У кого-нибудь есть идеи, как решить эту проблему?