Я пытаюсь решить стационарную 1D модель с помощью пакета R «rootSolve». Это система PDE. Существуют 3 глобальные переменные, которые необходимо заранее решить из системы алгебраических уравнений, а затем участвовать в вычислении других переменных.
Я попытался включить алгебраическое уравнение в функцию модели с функцией «multiroot», а затем решить всю модель с помощью «stable.1D».
PMECmodel<- function(time=0,State,parms)
{
PinS<-State[1]
AinS<-State[2]
FinS<-State[3]
HinS<-State[4]
MinS<-State[5]
PinB<-State[6:(N+5)]
AinB<-State[(N+6):(2*N+5)]
FinB<-State[(2*N+6):(3*N+5)]
HinB<-State[(3*N+6):(4*N+5)]
X_F<-State[4*N+6]
X_A<-State[4*N+7]
X_M<-State[4*N+8]
X_E<-State[4*N+9]
...
# equation system of j, eta and qinB
ebalance<-function(x){
F1<-E_anode-Lf*x[1]/kbio/4-E_KA[9]-x[4]
F2<-E_anode-Lf*x[2]/kbio/4-E_KA[8]-x[5]
F3<-E_anode-Lf*x[3]/kbio/4-E_KA[7]-x[6]
F4<-3.36*10^3*X_E*(1-fs0[9])*x[7]*Lf-x[1]
F5<-3.36*10^3*X_E*(1-fs0[8])*x[8]*Lf-x[2]
F6<-3.36*10^3*X_E*(1-fs0[7])*x[9]*Lf-x[3]
F7<-qmax[9]*mean(AinB)/(mean(AinB)+Ks[9])*(1-fs0[9])*(1/(1+exp(-F*x[4]/R/T)))-x[7]
F8<-qmax[8]*mean(FinB)/(mean(FinB)+Ks[8])*(1-fs0[8])*(1/(1+exp(-F*x[5]/R/T)))-x[8]
F9<-qmax[7]*mean(HinB)/(mean(HinB)+Ks[7])*(1-fs0[7])*(1/(1+exp(-F*x[6]/R/T)))-x[9]
c(F1=F1,F2=F2,F3=F3,F4=F4,F5=F5,F6=F6,F7=F7,F8=F8,F9=F9)}
x<-seq(0,0.1,length.out=9)
sol_e<-multiroot(f=ebalance,start=x)
j_a<-sol_e$root[1]
j_f<-sol_e$root[2]
j_h<-sol_e$root[3]
eta_a<-sol_e$root[4]
eta_f<-sol_e$root[5]
eta_h<-sol_e$root[6]
qinB_a<-sol_e$root[7]
qinB_f<-sol_e$root[8]
qinB_h<-sol_e$root[9]
...
#rate of change of state variables
dPinS<- -X_F*qinS[1]-X_F*qinS[2]-As*Dp[1]/(24*L)*(PinS-PinB[N])
dAinS<- -X_M*qinS[6]+(1-Y[1])*qinS[1]*f_pa1*X_F+(1-Y[2])*qinS[2]*f_pa2*X_F+(1-Y[3])*qinS[3]*f_ha*X_A+(1-Y[4])*qinS[4]*f_fa*X_A-As*Dp[6]/(24*L)*(AinS-AinB[N])
dFinS<- -X_A*qinS[4]+(1-Y[2])*qinS[2]*f_pf*X_F-As*Dp[4]/(24*L)*(FinS-FinB[N])
dHinS<- -X_A*qinS[3]-X_A*qinS[5]+(1-Y[1])*qinS[1]*f_ph*X_F+Y_h2*sum(c(j_a,j_f,j_h))*As/F-As*Dp[3]/(24*L)*(HinS-HinB[N])
dMinS<- -X_M*qinS[5]-X_M*qinS[6]
dPinB<- diff(MassFlux_p)/thick
dAinB<- -X_E*qinB_a+diff(MassFlux_a)/thick
dFinB<- -X_E*qinB_f+diff(MassFlux_f)/thick
dHinB<- -X_E*qinB_h+diff(MassFlux_h)/thick
dX_F<- Y[1]*qinS[1]+Y[2]*qinS[2]-b_ina[1]/24*X_F
dX_A<- Y[3]*qinS[3]+Y[4]*qinS[4]-b_ina[3]/24*X_A
dX_M<- Y[5]*qinS[5]+Y[6]*qinS[6]-b_ina[5]/24*X_M
dX_E<- sum(Y[7:9]*c(qinB_h,qinB_f,qinB_a))-b_ina[7]/24*X_E-b_res[7]/24*X_E*(1/(1+exp(-F*mean(c(eta_a,eta_f,eta_h))/R/T)))
return(list(c(dPinS,dAinS,dFinS,dHinS,dMinS,dPinB,dAinB,dFinB,dHinB,dX_F,dX_A,dX_M,dX_E),
j_a=j_a,j_f=j_f,j_h=j_h,
eta_a=eta_a,eta_f=eta_f,eta_h=eta_h,
qinB_a=qinB_a,qinB_f=qinB_f,qinB_h=qinB_h,qinS=qinS,
MassFlux_p=MassFlux_p,MassFlux_a=MassFlux_a,MassFlux_f=MassFlux_f,MassFlux_h=MassFlux_h))
}
Когда я запускаюалгебраические уравнения и multiroot () независимо, это работает. Но когда я пытаюсь решить всю модель с помощью устойчивых 1D (), иногда получаю эту ошибку:
Ошибка в stode (y, times, func, parms = parms, ...): функция модели должна возвращатьсписок значений, из которых первый элемент имеет длину = длина y
, а иногда Rstudio даже преуменьшает значение «R сессия прервана».
Подходит ли включение системы алгебраических уравнений внутрисистема PDE? Или есть какой-нибудь подход к этой проблеме?
Заранее спасибо.