我们可以在R中使用deSolve
包用于常微分方程(ODE),但是,我找不到解决两个嵌套ODE方程的方法,假设b(t)'= beta - k * b (T); a(t)'= alpha -b(t)* gamma;
哪里'意味着差异化。那么我们如何解决a和b呢?作为'是b的函数,我们必须同时解决a和b。
我收到了一个错误:
lsoda(y,times,func,parms,...)出错:使用的求解器组合不能嵌套。
当我尝试在ode中添加ode求解b时,求解a。
答案 0 :(得分:1)
我可能会感到困惑,但你似乎正在描述耦合方程式,lsoda
可以很好地处理,如下所示(我实现了你的ODE,但由于我没有做出一些参数不知道你有什么想法。)
gfun <- function(t,y,parms,...) {
## 'with' trick lets us write gradient in terms of variable/parameter names
with(as.list(c(y,parms)),
list(c(b=beta-k*b,a=alpha-b*gamma),NULL))
}
library(deSolve)
L1 <- lsoda(y=c(b=1,a=1),
times=seq(0,10,by=0.1),
func=gfun,
parms=c(alpha=0.1,beta=0.2,gamma=0.05,k=0.01))
matplot(L1[,1],L1[,-1],type="l",lty=1,bty="l",las=1)
PS:这似乎是一组耦合的线性ODE,所以你实际上应该能够得到一个完整的闭合形式解决方案,而不是用数字解决它们。 (我现在懒得这样做; b(t)可以立即解决(“仿射”等式),a(t)可以通过积分来解决。)