You are on page 1of 3

Ejemplo solucin numrica de Ecuaciones

diferenciales en R
Antes que nada instalar la libreria odesolve
adjunto
'http://cran.fr.r-project.org/bin/windows/contrib/2.8/odesolve_0.5-20.zip'
library(odesolve)
require(odesolve)
lake <- function(t, x, parms) {
qin <- parms["qin"] # flujo de entrada en m3 por s
qout <- parms["qout"] # flujo de salida en m3 por s
cin <- parms["cn"] # concentracion de entrada en mucrog por l
rx
<- parms["rx"] # velocidad reaccion en kg por dia
v
<- parms["v"] # volumen del sistema en m3
C
<- x[1] # concentracion en el sistema en microg por l
with(as.list(parms),{

dC <- (qin*cin*0.0864/v)-(qout*C*0.0864/v)-(rx/v)
list(c(dC))
})

}
# vectors of parameters, timesteps and initial values
qin <-10.0
qout <-10.0
cin <- 100.0
rx <- 50.0
v <- 100.0
C0 <- 0.0

#m3/s (Long)
#m3/s
#ug/l
# Kg/d
# l
# conc salida ug/l

times <- seq(0, 1000, 10)


parms <- c(qin=qin, qout=qout, cin=cin, rx=rx, v=v)
xstart <- c(C=C0)
out <- as.data.frame(lsoda(xstart, times, lake, parms))
par(mfrow=c(1,1))
plot(out$time, out$C, col="green", type="l", xlab="time",
ylab="contaminante")

Two polluted rivers


library(odesolve)
require(odesolve)

#-version1 de balance cuando dos flujos se mezclan, con un componente


conservativo
# con rk4
dosaguas <- function(t, y, params) {
c
<- y[1]
qm <- params[1]+ params[2]
v <-params[5]
dc <- (params[1]*params[3]*1000/v)+(params[2]*params[4]*1000/v)(qm*c*1000/v)
list(c(dc))
}
x0 <- c(0)
times <- seq(0, 40, .1)
params <- c(10, 5, 20, 40, 100000)
out <- rk4(x0, times, dosaguas, params)
matplot(out[,1], out[,2], col="green", type="l", xlab="time",
ylab="cloro mg/l")

lake <- function(t, x, parms) {


qin <- parms["qin"] # flujo de entrada en m3 por s
qout <- parms["qout"] # flujo de salida en m3 por s
cin <- parms["cn"] # concentracion de entrada en mucrog por l
rx
<- parms["rx"] # velocidad reaccion en kg por dia
v
<- parms["v"] # volumen del sistema en m3
C
<- x[1] # concentracion en el sistema en microg por l
C1
<- x[2] # concentracion en el sistema en microg por l
C2
<- x[3] # concentracion en el sistema en microg por l
C3
<- x[4] # concentracion en el sistema en microg por l
with(as.list(parms),{
s <-5*sin(t)

dC1 <- s*(qin*cin*0.0864/v)


dC2 <- -(qout*C*0.0864/v)
dC3 <- -(rx/v)
dC <- (qin*cin*0.0864/v)-(qout*C*0.0864/v)-(rx/v)
list(c(dC, dC1, dC2, dC3))
})

}
# vectors of parameters, timesteps and initial values
qin <-10.0
qout <-10.0
cin <- 100.0
rx <- 50.0
v <- 100.0
C0 <- 0.0
times

#m3/s (Long)
#m3/s
#ug/l
# Kg/d
# l
# conc salida ug/l

<- seq(0, 100, 10)

parms <- c(qin=qin, qout=qout, cin=cin, rx=rx, v=v)


xstart <- c(C=C0, C1=0, C2=0, C3=0)
out <- as.data.frame(lsoda(xstart, times, lake, parms))
par(mfrow=c(2,2))
plot(out$time, out$C, col="green", type="l", xlab="time",
ylab="contaminante")
#lines(out$time, (out$C1+out$C2+out$C3), col="blue", lty="dotted")
plot(out$time, out$C1, col="red", type="l")
plot(out$time, out$C2, col="pink", type="l")
plot(out$time, out$C3, col="brown", type="l")
#plot(out$time, out$C3, col="pink", type="l")

require(deSolve)
params<-c(tau=0.01,k=0.01)

state <-c(C=100)
enzyme<-function(t,state,parameters)
{with(as.list(c(state,parameters)),{
dC <- C/tau-(1/tau + k)*C
list(c(dC))
})
}
times <-seq(0,100,0.1)
out <as.data.frame(ode(state,times,enzyme,params))
plot (times,out$C,type="l",main="[C]",
xlab="time, hours", ylab="mol/m3",lwd=2)
mtext(outer=TRUE,side=3,"enzymatic reaction
",cex=1.5)

You might also like