Decomposition Modeling

This commit is contained in:
Noah L. Schrick 2023-02-15 19:39:47 -06:00
parent f68c9b10fb
commit 7b48a4a5e2

View File

@ -329,7 +329,54 @@ sir.ode.sol.b <- ode45(f = function(t,y){sir.f(t,y,k=sir.params.b)},
plot.sir(sir.ode.sol.b, "ODE45 with a=3")
## 6. Decomp of dinitrogen pentoxygen into nitrogen dioxide and molecular oxygen
decomp.f <- function(t, y, k) {
dA <- -k[1]*y[1] + k[2]* y[2]*y[4]
dB <- k[1]*y[1] - k[2]*y[2]*y[4] + 2*k[4]*y[4]*y[5]
dC <- k[3]*y[2]*y[4]
dD <- k[1]*y[1] - k[2]*y[2]*y[4] - k[3]*y[2]*y[4] - k[4]*y[4]*y[5]
dE <- k[3]*y[2]*y[4] - k[4]*y[4]*y[5]
return(as.matrix(c(dA, dB, dC, dD, dE)))
}
# a) k1=1.0, k2=0.5, k3=0.2,k4=1.5, [N2O5]o=1, all other IC's=0, t=0 -> 10
decomp.params <- c(1.0, 0.5, 0.2, 1.5)
A0 <- 1
B0 <- 0; C0 <- 0; D0 <- 0; E0 <- 0
tmin <- 0
tmax <- 10
decomp.ode.sol <- ode45(f = function(t,y){decomp.f(t,y,k=decomp.params)},
y = c(A0, B0, C0, D0, E0),
t0 = tmin, tfinal = tmax)
# plot
plot.decomp <- function(sol, method){
# - pred/prey columns melted to 1 column called "value"
sol.melted <- melt(data.frame(time=sol$t,
N2O5=sol$y[,1],
NO2=sol$y[,2],
O2=sol$y[,3],
NO3=sol$y[,4],
NO=sol$y[,5]),
id = "time") # melt based on time
# New column created with variable names, called “variable”
colnames(sol.melted)[2] <- "Group" # used in legend
g <- ggplot(data = sol.melted,
aes(x = time, y = value, color = Group))
g <- g + geom_point(size=2)
g <- g + xlab("time [seconds]") + ylab("Concentration")
g <- g + ggtitle(paste("Decomposition Model Using", method))
show(g)
}
plot.decomp(decomp.ode.sol, "ODE45")
# b) Increase k4 to make the intermediate species -> 0
k4 <- 10
decomp.params.b <- c(1.0, 0.5, 0.2, k4)
decomp.ode.sol.b <- ode45(f = function(t,y){decomp.f(t,y,k=decomp.params.b)},
y = c(A0, B0, C0, D0, E0),
t0 = tmin, tfinal = 100)
plot.decomp(decomp.ode.sol.b, paste("ODE45 Using k4 =", k4))
decomp.ode.sol.b$y[,5]