Halflife for decay function
This commit is contained in:
parent
ed93b767a3
commit
87c0509581
@ -140,10 +140,35 @@ y.init <- 10000
|
||||
|
||||
decay.ode45.sol <- ode45(f=function(t,y){decay.f(t,y,k=k)},
|
||||
y=y.init, t0=tmin, tfinal=tmax)
|
||||
plot(decay.ode45.sol$t,decay.ode45.sol$y)
|
||||
plot(decay.ode45.sol$t,decay.ode45.sol$y, xlab="t", ylab="y",
|
||||
main="Numerical Decay Model Solution Using Pracma ODE45")
|
||||
par(new=T)
|
||||
lines(seq(tmin,tmax,len=50),
|
||||
y.init*exp(-k*seq(tmin,tmax,len=50)))
|
||||
y.init*exp(-k*seq(tmin,tmax,len=50)), col="red")
|
||||
abline(h=y.init/2, lty="dashed", lwd=3)
|
||||
|
||||
#Solve for half-life with bisection
|
||||
findZeroBisect <- function(func, xl, xr, tol, maxsteps=1e6){
|
||||
steps <- 0
|
||||
if (func(xl) * func(xr) >= 0){
|
||||
stop("Bad interval: try again with different endpoints")
|
||||
}
|
||||
|
||||
repeat{
|
||||
xm <- (xl + xr)/2
|
||||
if(abs(func(xm)) < tol || steps >= maxsteps){
|
||||
break
|
||||
}
|
||||
|
||||
ifelse(func(xl) * func(xm) > 0, xl<-xm, xr<-xm)
|
||||
steps <- steps + 1
|
||||
}
|
||||
return(c(xm, func(xm), steps))
|
||||
}
|
||||
fun.hl <- function(x) {-5000+(y.init)*exp(-k*x)}
|
||||
|
||||
halflife <- findZeroBisect(fun.hl, 5000, 6500, 1e-8)[1]
|
||||
abline(v=halflife, lty="dotted", lwd=2, col="blue")
|
||||
|
||||
## 4. Solve the predator-prey model numerically
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user