在R中使用deSolve的微分均衡器
很抱歉,我之前不清楚。我现在对函数有了更多的了解,但在几个方面需要一些帮助 我想得到转换(X)和体积(V)的关系,或者反过来也可以。在我看来,传统的“时间”项是我想用一个0-1的X序列来代替的,X是以0和1.0为界的 下面,rw是反应速率,是任何给定时刻分压的函数,分压被描述为p.w、p.x、p.y和p.z,其本身是初始条件(p.w0、v.0)和转换的函数,同样是x 先谢谢你在R中使用deSolve的微分均衡器,r,ode,differential-equations,R,Ode,Differential Equations,很抱歉,我之前不清楚。我现在对函数有了更多的了解,但在几个方面需要一些帮助 我想得到转换(X)和体积(V)的关系,或者反过来也可以。在我看来,传统的“时间”项是我想用一个0-1的X序列来代替的,X是以0和1.0为界的 下面,rw是反应速率,是任何给定时刻分压的函数,分压被描述为p.w、p.x、p.y和p.z,其本身是初始条件(p.w0、v.0)和转换的函数,同样是x 先谢谢你 rm(list = ls()) weight <- function( Vols, State, Pars )
rm(list = ls())
weight <- function( Vols, State, Pars ) {
with(as.list(c(State, Pars)), {
y = 1
delta = 2
ya.0 = 0.4
eps = ya.0 * delta
temp = 800
R = 8.314
k.2 = exp( (35000 / ( R*temp )) - 7.912 )
K.3 = exp( 4.084 / temp - 4.33 )
P.w <- P.w0 * ( 1 - X ) * y / ( 1 + eps * X )
P.x <- P.w0 * ( 1 - 2*X ) * y / ( 1 + eps * X )
P.y <- P.w0 * ( 1 + X ) * y / ( 1 + eps * X )
P.z <- P.w0 * ( 1 + 4*X ) * y / ( 1 + eps * X )
r.w <- k.2 * ( K.3 * P.w * P.x ^ 2 - P.y * P.z^4 )
F.w0 <- P.w0 * v.0 / ( R * temp )
dX.dq <- r.w / F.w0
res <- dX.dq
return(list(res))
})
}
pars <- c( y = 1,
P.w0 = 23,
v.0 = 120 )
yini <- c( X = 0 )
vols <- seq( 0 , 100 , by = 1 )
out <- ode( yini , vols , weight , pars )
rm(list=ls())
体重刚刚跑步
vol.func(0,0,params)
i、 e.在初始条件下计算梯度,得出NaN
。正确的诊断方法是将复杂的梯度表达式分成不同的项,然后看看哪个项会引起麻烦。我不打算详细讨论这个问题,但正如@Sixiang.Hu在上面的评论中指出的那样,你在梯度函数中除以V
,如果分子是有限的,这将导致无穷大的值;如果分子是零,这将导致NaN
值
更一般地说,不清楚您是否理解梯度函数(您的vol.func
)的第一个参数应该是当前时间,而不是状态变量的值。也许V
应该是你的状态变量,X
应该是一个参数…?我不知道你的问题是从哪里来的,但请不要使用t
作为变量名T
是R中的布尔值。在ode
中输入的V
是0
,因此在vol.func
函数中它被0除?