library(rODE)
##
## Attaching package: 'rODE'
## The following object is masked from 'package:stats':
##
## step
# ODETest.R
setClass("ODETest", slots = c(
n = "numeric" # counts the number of getRate evaluations
),
contains = c("ODE")
)
setMethod("initialize", "ODETest", function(.Object, ...) {
.Object@n <- 0
.Object@state <- c(5.0, 0.0)
return(.Object)
})
## [1] "initialize"
setMethod("getExactSolution", "ODETest", function(object, t, ...) {
# analytical solution
return(5.0 * exp(-t))
})
## [1] "getExactSolution"
setMethod("getState", "ODETest", function(object, ...) {
object@state
})
## [1] "getState"
setMethod("getRate", "ODETest", function(object, state, ...) {
object@rate[1] <- - state[1]
object@rate[2] <- 1 # rate of change of time, dt/dt
object@n <- object@n + 1
object@rate
})
## [1] "getRate"
# constructor
ODETest <- function() {
odetest <- new("ODETest")
odetest
}
# This script can also be found in:
# ComparisonRK45App.R
#
# Compares the solution by the RK45 ODE solver versus the analytical solution
ComparisonRK45App <- function(verbose = FALSE) {
ode <- new("ODETest")
ode_solver <- RK45(ode)
ode_solver <- setStepSize(ode_solver, 1)
ode_solver <- setTolerance(ode_solver, 1e-8)
time <- 0
while (time < 50) {
ode_solver <- step(ode_solver)
stepSize <- ode_solver@stepSize # update the step size
time <- time + stepSize
# ode <- ode_solver@ode
state <- getState(ode_solver@ode)
if (verbose)
cat(sprintf("time=%10f xl=%14e error=%14e n=%5d \n",
time, state[1],
(state[1] - getExactSolution(ode_solver@ode, time)),
ode_solver@ode@n))
}
cat("rate steps evaluated #", ode_solver@ode@n)
}
ComparisonRK45App(verbose = TRUE)
## time= 0.063874 xl= 4.690617e+00 error= -4.288925e-11 n= 0
## time= 0.127748 xl= 4.400378e+00 error= -8.047341e-11 n= 0
## time= 0.191621 xl= 4.128097e+00 error= -1.132419e-10 n= 0
## time= 0.255495 xl= 3.872665e+00 error= -1.416458e-10 n= 0
## time= 0.319369 xl= 3.633037e+00 error= -1.661009e-10 n= 0
## time= 0.383243 xl= 3.408238e+00 error= -1.869878e-10 n= 0
## time= 0.447116 xl= 3.197347e+00 error= -2.046545e-10 n= 0
## time= 0.510990 xl= 2.999506e+00 error= -2.194187e-10 n= 0
## time= 0.574864 xl= 2.813907e+00 error= -2.315725e-10 n= 0
## time= 0.638738 xl= 2.639792e+00 error= -2.413807e-10 n= 0
## time= 0.702611 xl= 2.476451e+00 error= -2.490892e-10 n= 0
## time= 0.766485 xl= 2.323217e+00 error= -2.549192e-10 n= 0
## time= 0.830359 xl= 2.179464e+00 error= -2.590741e-10 n= 0
## time= 0.894233 xl= 2.044606e+00 error= -2.617395e-10 n= 0
## time= 0.958107 xl= 1.918093e+00 error= -2.630831e-10 n= 0
## time= 1.021980 xl= 1.799408e+00 error= -2.632583e-10 n= 0
## time= 1.085854 xl= 1.688067e+00 error= -2.624043e-10 n= 0
## time= 1.149728 xl= 1.583615e+00 error= -2.606482e-10 n= 0
## time= 1.213602 xl= 1.485626e+00 error= -2.581049e-10 n= 0
## time= 1.277475 xl= 1.393701e+00 error= -2.548779e-10 n= 0
## time= 1.341349 xl= 1.307463e+00 error= -2.510621e-10 n= 0
## time= 1.405223 xl= 1.226562e+00 error= -2.467428e-10 n= 0
## time= 1.469097 xl= 1.150666e+00 error= -2.419969e-10 n= 0
## time= 1.561338 xl= 1.079467e+00 error= 3.019212e-02 n= 0
## time= 1.653580 xl= 9.843494e-01 error= 2.753173e-02 n= 0
## time= 1.745822 xl= 8.976131e-01 error= 2.510576e-02 n= 0
## time= 1.838064 xl= 8.185195e-01 error= 2.289356e-02 n= 0
## time= 1.930306 xl= 7.463954e-01 error= 2.087628e-02 n= 0
## time= 2.022548 xl= 6.806264e-01 error= 1.903676e-02 n= 0
## time= 2.114789 xl= 6.206528e-01 error= 1.735933e-02 n= 0
## time= 2.207031 xl= 5.659637e-01 error= 1.582970e-02 n= 0
## time= 2.299273 xl= 5.160936e-01 error= 1.443486e-02 n= 0
## time= 2.391515 xl= 4.706178e-01 error= 1.316293e-02 n= 0
## time= 2.483757 xl= 4.291491e-01 error= 1.200307e-02 n= 0
## time= 2.575999 xl= 3.913345e-01 error= 1.094542e-02 n= 0
## time= 2.668240 xl= 3.568519e-01 error= 9.980957e-03 n= 0
## time= 2.760482 xl= 3.254077e-01 error= 9.101481e-03 n= 0
## time= 2.852724 xl= 2.967343e-01 error= 8.299501e-03 n= 0
## time= 2.944966 xl= 2.705874e-01 error= 7.568187e-03 n= 0
## time= 3.037208 xl= 2.467445e-01 error= 6.901313e-03 n= 0
## time= 3.129450 xl= 2.250025e-01 error= 6.293201e-03 n= 0
## time= 3.221692 xl= 2.051763e-01 error= 5.738673e-03 n= 0
## time= 3.313933 xl= 1.870971e-01 error= 5.233007e-03 n= 0
## time= 3.446050 xl= 1.706110e-01 error= 1.125464e-02 n= 0
## time= 3.578167 xl= 1.494959e-01 error= 9.861751e-03 n= 0
## time= 3.710284 xl= 1.309941e-01 error= 8.641246e-03 n= 0
## time= 3.842401 xl= 1.147821e-01 error= 7.571792e-03 n= 0
## time= 3.974518 xl= 1.005765e-01 error= 6.634696e-03 n= 0
## time= 4.106635 xl= 8.812897e-02 error= 5.813576e-03 n= 0
## time= 4.238752 xl= 7.722200e-02 error= 5.094079e-03 n= 0
## time= 4.370869 xl= 6.766489e-02 error= 4.463628e-03 n= 0
## time= 4.502986 xl= 5.929059e-02 error= 3.911203e-03 n= 0
## time= 4.635103 xl= 5.195269e-02 error= 3.427147e-03 n= 0
## time= 4.767220 xl= 4.552295e-02 error= 3.002998e-03 n= 0
## time= 4.899337 xl= 3.988896e-02 error= 2.631343e-03 n= 0
## time= 5.031454 xl= 3.495225e-02 error= 2.305684e-03 n= 0
## time= 5.163571 xl= 3.062650e-02 error= 2.020329e-03 n= 0
## time= 5.352264 xl= 2.683612e-02 error= 3.149051e-03 n= 0
## time= 5.540957 xl= 2.222140e-02 error= 2.607541e-03 n= 0
## time= 5.729650 xl= 1.840022e-02 error= 2.159150e-03 n= 0
## time= 5.918343 xl= 1.523612e-02 error= 1.787863e-03 n= 0
## time= 6.107037 xl= 1.261613e-02 error= 1.480423e-03 n= 0
## time= 6.295730 xl= 1.044667e-02 error= 1.225850e-03 n= 0
## time= 6.484423 xl= 8.650262e-03 error= 1.015054e-03 n= 0
## time= 6.673116 xl= 7.162767e-03 error= 8.405055e-04 n= 0
## time= 6.861809 xl= 5.931061e-03 error= 6.959726e-04 n= 0
## time= 7.050503 xl= 4.911159e-03 error= 5.762935e-04 n= 0
## time= 7.320555 xl= 4.066638e-03 error= 7.576659e-04 n= 0
## time= 7.590608 xl= 3.104224e-03 error= 5.783559e-04 n= 0
## time= 7.860661 xl= 2.369576e-03 error= 4.414816e-04 n= 0
## time= 8.130714 xl= 1.808790e-03 error= 3.370001e-04 n= 0
## time= 8.400767 xl= 1.380720e-03 error= 2.572453e-04 n= 0
## time= 8.670820 xl= 1.053958e-03 error= 1.963654e-04 n= 0
## time= 8.940872 xl= 8.045272e-04 error= 1.498934e-04 n= 0
## time= 9.210925 xl= 6.141271e-04 error= 1.144194e-04 n= 0
## time= 9.615977 xl= 4.687872e-04 error= 1.355111e-04 n= 0
## time= 10.021029 xl= 3.126539e-04 error= 9.037796e-05 n= 0
## time= 10.426081 xl= 2.085220e-04 error= 6.027679e-05 n= 0
## time= 10.831133 xl= 1.390720e-04 error= 4.020108e-05 n= 0
## time= 11.236185 xl= 9.275297e-05 error= 2.681176e-05 n= 0
## time= 11.817853 xl= 6.186084e-05 error= 2.500200e-05 n= 0
## time= 12.399521 xl= 3.457798e-05 error= 1.397517e-05 n= 0
## time= 12.981189 xl= 1.932785e-05 error= 7.811593e-06 n= 0
## time= 13.562857 xl= 1.080357e-05 error= 4.366385e-06 n= 0
## time= 14.439904 xl= 6.038807e-06 error= 3.360875e-06 n= 0
## time= 15.316950 xl= 2.512251e-06 error= 1.398206e-06 n= 0
## time= 16.193997 xl= 1.045141e-06 error= 5.816875e-07 n= 0
## time= 17.553692 xl= 4.347974e-07 error= 3.158107e-07 n= 0
## time= 18.913387 xl= 1.118798e-07 error= 8.133131e-08 n= 0
## time= 20.956872 xl= 2.878834e-08 error= 2.482998e-08 n= 0
## time= 23.000357 xl= 4.112791e-09 error= 3.599880e-09 n= 0
## time= 26.781657 xl= 5.875659e-10 error= 5.758751e-10 n= 0
## time= 30.562957 xl= 6.386756e-10 error= 6.384091e-10 n= 0
## time= 34.344257 xl= 6.942310e-10 error= 6.942249e-10 n= 0
## time= 38.125556 xl= 7.546190e-10 error= 7.546188e-10 n= 0
## time= 41.906856 xl= 8.202598e-10 error= 8.202598e-10 n= 0
## time= 45.688156 xl= 8.916104e-10 error= 8.916104e-10 n= 0
## time= 49.469456 xl= 9.691675e-10 error= 9.691675e-10 n= 0
## time= 53.250756 xl= 1.053471e-09 error= 1.053471e-09 n= 0
## rate steps evaluated # 0
The figure sizes have been customised so that you can easily put two images side-by-side.
plot(1:10)
plot(10:1)
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | 4 | 2 |
Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 |