我不确定如何为函数方程中的输入参数做些什么。我需要将第二个输入作为向量吗?或者我需要IF声明吗?以下是我目前的代码。
ti <- 0
X0 <- .0005
S0 <- .04
P0 <- 0
umax <- .5
Pmax <- .109
ks <- .001
m <- 1
ms <- .008
Yh <- 2
Y <- 1
tf <- 15
Z <- c(S, P)
Keq <- function(X, S, P) {
dX <- umax*X*(S/ks+S)*(1-(P/Pmax))^m
dS <- -(dX/Y) - (ms*X)
dP <- -(dX/Y) - (dX/Yh)+ms*X
return(c(dX, dS, dP))
}
Y0 <- c(X0, S0, P0)
Rx <- ode45(Keq, ti, tf, Y0)
答案 0 :(得分:0)
我不确定你是如何编写该代码的;例如,R中不存在ode45
或我知道的任何包。你真的在翻译Matlab代码吗?
你的问题不清楚。此代码运行时没有错误,并输出某些内容,所以它可能对您有所帮助。祝好运。
同样the manual of the ode
function可能会对您有所帮助,特别是关于您的函数Keq
应该作为输入和输出返回的内容。
P.S。如果您按照Best Practice guidelines以及如何撰写Minimal Reproducable Example的指南,您可能会在几个小时内收到有用的答案。
代码:
library(deSolve) # if you get an error, run install.packages('deSolve') once
ti <- 0
X0 <- .0005
S0 <- .04
P0 <- 0
umax <- .5
Pmax <- .109
ks <- .001
m <- 1
ms <- .008
Yh <- 2
Y <- 1
tf <- 15
#Z <- c(S, P)
Keq <- function(time, state, params) {
X <- state[1]
S <- state[2]
P <- state[3]
dX <- umax*X*(S/ks+S)*(1-(P/Pmax))^m
dS <- -(dX/Y) - (ms*X)
dP <- -(dX/Y) - (dX/Yh)+ms*X
return(list(c(dX, dS, dP)))
}
Y0 <- c(X0, S0, P0)
x <- seq(1,100,0.1)
Rx <- ode(Y0, x, Keq)