rxTest({
## https://cran.r-project.org/web/packages/diffEq/vignettes/ODEinR.pdf p15
Vtpol <- rxode2("
d/dt(y) = dy
d/dt(dy) = mu*(1-y^2)*dy - y
## Initial conditions
y(0) = 2
dy(0) = 0
## mu
mu = 1 ## nonstiff; 10 moderately stiff; 1000 stiff
")
Vtpol2 <- rxode2("
d/dt(y) = dy
d/dt(dy) = mu*(1-y^2)*dy - y
## Jacobian
df(y)/dy(dy) = 1
df(dy)/dy(y) = -2*dy*mu*y - 1
df(dy)/dy(dy) = mu*(1-y^2)
## Initial conditions
y(0) = 2
dy(0) = 0
## mu
mu = 1 ## nonstiff; 10 moderately stiff; 1000 stiff
")
et <- eventTable()
et$add.sampling(seq(0, 30, by = 0.01))
stiff <- solve(Vtpol, et)
## plot(stiff$time,stiff$y,type="l")
counts <- data.frame(stiff$counts, mu = 1, digest = digest::digest(round(as.data.frame(stiff), 3)))
for (i in 10^(1:7)) {
stiff$mu <- i
## plot(stiff$time,stiff$y,type="l");
## title(sprintf("mu=%s",i));
counts <- rbind(counts, data.frame(stiff$counts, mu = i, digest = digest::digest(round(as.data.frame(stiff), 3))))
}
test_that("No User jacobian are called.", {
expect_true(all(counts$jac == 0))
})
## Data sets match
## Changes based on platform.
## test_that("Solving of stiff systems by automatic jacobians is expected",{
## expect_equal(digest(counts),"982ce8816e9e1f5db6ee315c71b6a7dc")
## })
counts0 <- counts
stiff <- solve(Vtpol2, et)
## plot(stiff$time,stiff$y,type="l")
counts <- data.frame(stiff$counts, mu = 1, digest = digest::digest(round(as.data.frame(stiff), 3)))
for (i in 10^(1:7)) {
stiff$mu <- i
## plot(stiff$time,stiff$y,type="l");
## title(sprintf("mu=%s",i));
counts <- rbind(counts, data.frame(stiff$counts, mu = i, digest = digest::digest(round(as.data.frame(stiff), 3))))
}
## print(counts)
## changes based on platform.
## test_that("Some User jacobian are called.",{
## expect_true(!all(counts$user_jac == 0))
## })
test_that("Same solutions", {
expect_true(all(counts0$digest == counts$digest))
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.