如何在r中同时求解三个微分方程

时间:2017-12-20 00:26:41

标签: r

我不确定如何为函数方程中的输入参数做些什么。我需要将第二个输入作为向量吗?或者我需要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)

1 个答案:

答案 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)