rxTest({
# Test Scaling Factors
ode <-
rxode2({
b <- -1
d / dt(X) <- a * X + Y * Z
d / dt(Y) <- b * (Y - Z)
d / dt(Z) <- -X * Y + c * Y - Z
})
et <- eventTable() # default time units
et$add.sampling(seq(from = 0, to = 100, by = 0.01))
et$c <- et$time + 1
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1)
)
x1 <- out$X
y1 <- out$Y
z1 <- out$Z
## Test scaling factor
test_that("Scaling factors specified by S#= work", {
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
S1 = 2
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1)
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
S2 = 2
)
expect_equal(out$X, x1)
expect_equal(out$Y, y1 / 2)
expect_equal(out$Z, z1)
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
S3 = 2
)
expect_equal(out$X, x1)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1 / 2)
})
test_that("Multiple Scaling Factors", {
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
S1 = 2, S2 = 2
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1 / 2)
expect_equal(out$Z, z1)
})
test_that("Lower Case scaling factor", {
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
s1 = 2
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1)
})
test_that("Duplicate Scaling factors raise error", {
expect_error(out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
s1 = 2, s1 = 4
))
})
test_that("Scaling with two methods creates an error", {
expect_error(out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = c(X = 2),
s1 = 2
))
})
test_that("Scaling for a unnumbered compartment rases a warning", {
expect_warning(out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
s1 = 2, s7 = 3
))
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1)
})
test_that("Scaling factors specified by scale(X=...) work", {
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = c(X = 2)
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1)
## Issue #18
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = list(X = 2)
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1)
expect_error(rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = list(X = 1:2)
))
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = c(Y = 2)
)
expect_equal(out$X, x1)
expect_equal(out$Y, y1 / 2)
expect_equal(out$Z, z1)
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = c(Z = 2)
)
expect_equal(out$X, x1)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1 / 2)
out <- rxSolve(ode,
params = c(a = -8 / 3, b = -10),
events = et,
inits = c(X = 1, Y = 1, Z = 1),
scale = c(X = 2, Z = 2)
)
expect_equal(out$X, x1 / 2)
expect_equal(out$Y, y1)
expect_equal(out$Z, z1 / 2)
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.