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

问题描述 投票:-1回答:1

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

我不确定你是如何编写该代码的;例如,在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)
© www.soinside.com 2019 - 2024. All rights reserved.