我不确定如何为函数方程中的输入参数做些什么。我需要将第二个输入作为向量吗?或者我需要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)
我不确定你是如何编写该代码的;例如,在R或我所知道的任何包中都不存在ode45
。你真的在翻译Matlab代码吗?
你的问题不清楚。此代码运行没有错误并输出一些东西,所以它可能会帮助你。祝好运。
此外the manual of the ode
function可能会帮助你,特别是关于你的函数Keq
应该期望作为输入和返回作为输出。
附:如果你按照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)