[问题] 微分方程式内含min/max function的数值解

楼主: biozoo (皮皮)   2016-04-19 11:36:19
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
请把以下不需要的部份删除
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
请简略描述你所要做的事情,或是这个程式的目的
我想要解一个微分方程组,方程式里面包括min function
目前使用deSolve package 的ode function 来解...但是似乎解不出来...
请问大家有无适合的function 可以解这样的问题,非常感谢~~~
[程式范例]:
http://codepad.org/lHHjGwvd
pars=c(Rm=30,u=5,v=5,m2=1.5,m3=0.3,ma=0.3,mb=0.5,Nex0=2,Pex=0.2,q=0.3,
f=16/106,f2=1/106,e1=1.5,e2=0.6,a1=0.1,s=1,w=0.75)
istate <- c(R=10,C=10,N=10,P=1)
feed=function(t,state, pars){
with(as.list(c(state, pars)),{
I=w/(1+exp(-(u*N-v)))
E=N^2-e1*N+e2
dri=I-(I/P)*R
dre=(E/P)*R
dR=(dri-dre)
m1=ma*R^mb
leig=min((m1*N)/(m2+N),(m1*P)/(m2+P)) ###主要是加了这一段
dC=(leig*C-m3*C)
dN=(q*(Nex-N)+f*(1-q)*m3*C-f*leig*C)
dP=(q*(Pex-P)+f2*(1-q)*m3*C-f2*leig*C)
list(c(dR,dC,dN,dP))
})
}
times <- seq(0,200,by=1/12)
out <- ode(y = istate, times = times, func = feed, parms = pars)
[环境叙述]:
Windows 8
R 3.2

Links booklink

Contact Us: admin [ a t ] ucptt.com