diff options
author | Johannes Ranke <jranke@uni-bremen.de> | 2015-11-13 11:01:49 +0100 |
---|---|---|
committer | Johannes Ranke <jranke@uni-bremen.de> | 2015-11-13 11:20:59 +0100 |
commit | 6f596ecec2c54d7d91cf3ca16b8643b64b903e57 (patch) | |
tree | 57425adb3cff023b3996602aa4f0a6110e98aa3c | |
parent | ba07744bf3933402d4ef815cf5c2575253b1fd7e (diff) |
Add plots to compiled_models vignette, rebuild staticdocs
51 files changed, 238 insertions, 207 deletions
diff --git a/DESCRIPTION b/DESCRIPTION index bf32104d..313015b4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -3,7 +3,7 @@ Type: Package Title: Routines for Fitting Kinetic Models with One or More State Variables to Chemical Degradation Data Version: 0.9.41.9000 -Date: 2015-11-09 +Date: 2015-11-13 Authors@R: c(person("Johannes", "Ranke", role = c("aut", "cre", "cph"), email = "jranke@uni-bremen.de"), person("Katrin", "Lindenberger", role = "ctb"), @@ -19,7 +19,7 @@ Description: Calculation routines based on the FOCUS Kinetics Report (2006). for a particular purpose. Depends: minpack.lm, rootSolve, inline, parallel Imports: stats, graphics, methods, FME, deSolve, R6 -Suggests: knitr, testthat, microbenchmark +Suggests: knitr, testthat, microbenchmark, ggplot2 License: GPL LazyLoad: yes LazyData: yes diff --git a/GNUmakefile b/GNUmakefile index 7dd9b3a1..40be37c9 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -91,6 +91,8 @@ sd: @echo Now execute @echo "\n staticdocs::build_site()\n" $(RBIN)/R + git add -A + git commit -m 'Static documentation rebuilt by staticdocs::build_site()' -e r-forge: sd rm -rf $(SDDIR)/* @@ -99,8 +101,6 @@ r-forge: sd git archive master > $(HOME)/mkin.tar;\ cd $(RFDIR) && rm -r `ls` && tar -xf $(HOME)/mkin.tar;\ svn add --force .; svn rm --force `svn status | grep "\!" | cut -d " " -f 8`; cd $(RFSVN) && svn commit -m 'sync with git' - git add -A - git commit -m 'Vignettes rebuilt by staticdocs::build_site() for static documentation on r-forge' winbuilder: build date @@ -2,7 +2,9 @@ ## mkin 0.9.41.9000 +### Minor changes +- Add plots to `compiled_models` vignette ## mkin 0.9-41 (2015-11-09) diff --git a/inst/web/DFOP.solution.html b/inst/web/DFOP.solution.html index 87f3ea21..b5bdbc33 100644 --- a/inst/web/DFOP.solution.html +++ b/inst/web/DFOP.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>DFOP.solution. mkin 0.9-41</title> +<title>DFOP.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/Extract.mmkin.html b/inst/web/Extract.mmkin.html index 6a175a02..4effdf0e 100644 --- a/inst/web/Extract.mmkin.html +++ b/inst/web/Extract.mmkin.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>[.mmkin. mkin 0.9-41</title> +<title>[.mmkin. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -181,7 +181,7 @@ $calls $time user system elapsed - 0.268 0.000 0.269 + 0.260 0.000 0.259 $mkinmod <mkinmod> model generated with @@ -367,7 +367,7 @@ function (P) } return(mC) } -<environment: 0x2d96b00> +<environment: 0x36e8dd8> $cost_notrans function (P) @@ -389,7 +389,7 @@ function (P) scaleVar = scaleVar) return(mC) } -<environment: 0x2d96b00> +<environment: 0x36e8dd8> $hessian_notrans parent_0 alpha beta @@ -455,7 +455,7 @@ $bparms.state 99.66619 $date -[1] "Mon Nov 9 10:11:49 2015" +[1] "Fri Nov 13 11:14:06 2015" attr(,"class") [1] "mkinfit" "modFit" @@ -540,7 +540,7 @@ $calls $time user system elapsed - 0.112 0.000 0.112 + 0.080 0.008 0.087 $mkinmod <mkinmod> model generated with @@ -727,7 +727,7 @@ function (P) } return(mC) } -<environment: 0x2fa3d28> +<environment: 0x33c0330> $cost_notrans function (P) @@ -749,7 +749,7 @@ function (P) scaleVar = scaleVar) return(mC) } -<environment: 0x2fa3d28> +<environment: 0x33c0330> $hessian_notrans parent_0 k_parent_sink @@ -812,7 +812,7 @@ $bparms.state 99.17407 $date -[1] "Mon Nov 9 10:11:48 2015" +[1] "Fri Nov 13 11:14:06 2015" attr(,"class") [1] "mkinfit" "modFit" @@ -890,7 +890,7 @@ $calls $time user system elapsed - 0.112 0.000 0.112 + 0.080 0.008 0.087 $mkinmod <mkinmod> model generated with @@ -1077,7 +1077,7 @@ function (P) } return(mC) } -<environment: 0x2fa3d28> +<environment: 0x33c0330> $cost_notrans function (P) @@ -1099,7 +1099,7 @@ function (P) scaleVar = scaleVar) return(mC) } -<environment: 0x2fa3d28> +<environment: 0x33c0330> $hessian_notrans parent_0 k_parent_sink @@ -1162,7 +1162,7 @@ $bparms.state 99.17407 $date -[1] "Mon Nov 9 10:11:48 2015" +[1] "Fri Nov 13 11:14:06 2015" attr(,"class") [1] "mkinfit" "modFit" diff --git a/inst/web/FOCUS_2006_DFOP_ref_A_to_B.html b/inst/web/FOCUS_2006_DFOP_ref_A_to_B.html index 19ec4c4b..b009f6e6 100644 --- a/inst/web/FOCUS_2006_DFOP_ref_A_to_B.html +++ b/inst/web/FOCUS_2006_DFOP_ref_A_to_B.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOCUS_2006_DFOP_ref_A_to_B. mkin 0.9-41</title> +<title>FOCUS_2006_DFOP_ref_A_to_B. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/FOCUS_2006_FOMC_ref_A_to_F.html b/inst/web/FOCUS_2006_FOMC_ref_A_to_F.html index ff7883ec..c28cd888 100644 --- a/inst/web/FOCUS_2006_FOMC_ref_A_to_F.html +++ b/inst/web/FOCUS_2006_FOMC_ref_A_to_F.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOCUS_2006_FOMC_ref_A_to_F. mkin 0.9-41</title> +<title>FOCUS_2006_FOMC_ref_A_to_F. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/FOCUS_2006_HS_ref_A_to_F.html b/inst/web/FOCUS_2006_HS_ref_A_to_F.html index 5786889a..ad779e12 100644 --- a/inst/web/FOCUS_2006_HS_ref_A_to_F.html +++ b/inst/web/FOCUS_2006_HS_ref_A_to_F.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOCUS_2006_HS_ref_A_to_F. mkin 0.9-41</title> +<title>FOCUS_2006_HS_ref_A_to_F. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/FOCUS_2006_SFO_ref_A_to_F.html b/inst/web/FOCUS_2006_SFO_ref_A_to_F.html index 7663cb53..391aa699 100644 --- a/inst/web/FOCUS_2006_SFO_ref_A_to_F.html +++ b/inst/web/FOCUS_2006_SFO_ref_A_to_F.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOCUS_2006_SFO_ref_A_to_F. mkin 0.9-41</title> +<title>FOCUS_2006_SFO_ref_A_to_F. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/FOCUS_2006_datasets.html b/inst/web/FOCUS_2006_datasets.html index 92e069b5..64ae3bd7 100644 --- a/inst/web/FOCUS_2006_datasets.html +++ b/inst/web/FOCUS_2006_datasets.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOCUS_2006_datasets. mkin 0.9-41</title> +<title>FOCUS_2006_datasets. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/FOMC.solution.html b/inst/web/FOMC.solution.html index 0f3f265b..06d2d233 100644 --- a/inst/web/FOMC.solution.html +++ b/inst/web/FOMC.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>FOMC.solution. mkin 0.9-41</title> +<title>FOMC.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/HS.solution.html b/inst/web/HS.solution.html index 80cc543b..b7573295 100644 --- a/inst/web/HS.solution.html +++ b/inst/web/HS.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>HS.solution. mkin 0.9-41</title> +<title>HS.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/IORE.solution.html b/inst/web/IORE.solution.html index d90724eb..b2b60111 100644 --- a/inst/web/IORE.solution.html +++ b/inst/web/IORE.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>IORE.solution. mkin 0.9-41</title> +<title>IORE.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/SFO.solution.html b/inst/web/SFO.solution.html index b7d81cb7..a30000d8 100644 --- a/inst/web/SFO.solution.html +++ b/inst/web/SFO.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>SFO.solution. mkin 0.9-41</title> +<title>SFO.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/SFORB.solution.html b/inst/web/SFORB.solution.html index 9388a848..42c6baa9 100644 --- a/inst/web/SFORB.solution.html +++ b/inst/web/SFORB.solution.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>SFORB.solution. mkin 0.9-41</title> +<title>SFORB.solution. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/endpoints.html b/inst/web/endpoints.html index 458d359c..8c9b557f 100644 --- a/inst/web/endpoints.html +++ b/inst/web/endpoints.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>endpoints. mkin 0.9-41</title> +<title>endpoints. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/geometric_mean.html b/inst/web/geometric_mean.html index 93962dca..2323a337 100644 --- a/inst/web/geometric_mean.html +++ b/inst/web/geometric_mean.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>geometric_mean. mkin 0.9-41</title> +<title>geometric_mean. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/ilr.html b/inst/web/ilr.html index 07076e73..b75c111f 100644 --- a/inst/web/ilr.html +++ b/inst/web/ilr.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>ilr. mkin 0.9-41</title> +<title>ilr. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" René Lehmann and Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/index.html b/inst/web/index.html index 71fdee45..bb85e72f 100644 --- a/inst/web/index.html +++ b/inst/web/index.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>Index. mkin 0.9-41</title> +<title>Index. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -430,7 +430,7 @@ You can also browse the source code at <a href="http://cgit.jrwb.de/mkin">cgit.j <ul> <li><strong>Depends</strong>: minpack.lm, rootSolve, inline, parallel</li> <li><strong>Imports</strong>: stats, graphics, methods, FME, deSolve, R6</li> - <li><strong>Suggests</strong>: knitr, testthat, microbenchmark</li> + <li><strong>Suggests</strong>: knitr, testthat, microbenchmark, ggplot2</li> </ul> <h2>Authors</h2> diff --git a/inst/web/mccall81_245T.html b/inst/web/mccall81_245T.html index cd8d4d73..c959f114 100644 --- a/inst/web/mccall81_245T.html +++ b/inst/web/mccall81_245T.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mccall81_245T. mkin 0.9-41</title> +<title>mccall81_245T. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -112,10 +112,10 @@ fixed_parms = "k_phenol_sink", quiet = TRUE) summary(fit.2, data = FALSE) </div> -<div class='output'>mkin version: 0.9.41 +<div class='output'>mkin version: 0.9.41.9000 R version: 3.2.2 -Date of fit: Mon Nov 9 10:11:56 2015 -Date of summary: Mon Nov 9 10:11:56 2015 +Date of fit: Fri Nov 13 11:14:13 2015 +Date of summary: Fri Nov 13 11:14:13 2015 Equations: d_T245 = - k_T245_sink * T245 - k_T245_phenol * T245 @@ -124,7 +124,7 @@ d_anisole = + k_phenol_anisole * phenol - k_anisole_sink * anisole Model predictions using solution type deSolve -Fitted with method Port using 246 model solutions performed in 1.39 s +Fitted with method Port using 246 model solutions performed in 1.369 s Weighting: none diff --git a/inst/web/mkin_long_to_wide.html b/inst/web/mkin_long_to_wide.html index 7c459da7..3bb32a4d 100644 --- a/inst/web/mkin_long_to_wide.html +++ b/inst/web/mkin_long_to_wide.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkin_long_to_wide. mkin 0.9-41</title> +<title>mkin_long_to_wide. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkin_wide_to_long.html b/inst/web/mkin_wide_to_long.html index 57e3e8ef..82dba968 100644 --- a/inst/web/mkin_wide_to_long.html +++ b/inst/web/mkin_wide_to_long.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkin_wide_to_long. mkin 0.9-41</title> +<title>mkin_wide_to_long. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinds.html b/inst/web/mkinds.html index 5ff5e40c..d883c8e0 100644 --- a/inst/web/mkinds.html +++ b/inst/web/mkinds.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinds. mkin 0.9-41</title> +<title>mkinds. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinerrmin.html b/inst/web/mkinerrmin.html index d8a90977..0aafc760 100644 --- a/inst/web/mkinerrmin.html +++ b/inst/web/mkinerrmin.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinerrmin. mkin 0.9-41</title> +<title>mkinerrmin. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinfit.html b/inst/web/mkinfit.html index 0550ee65..c2998ae6 100644 --- a/inst/web/mkinfit.html +++ b/inst/web/mkinfit.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinfit. mkin 0.9-41</title> +<title>mkinfit. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -315,17 +315,17 @@ fit <- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE) summary(fit) </div> -<div class='output'>mkin version: 0.9.41 +<div class='output'>mkin version: 0.9.41.9000 R version: 3.2.2 -Date of fit: Mon Nov 9 10:11:58 2015 -Date of summary: Mon Nov 9 10:11:58 2015 +Date of fit: Fri Nov 13 11:14:16 2015 +Date of summary: Fri Nov 13 11:14:16 2015 Equations: d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent Model predictions using solution type analytical -Fitted with method Port using 64 model solutions performed in 0.194 s +Fitted with method Port using 64 model solutions performed in 0.171 s Weighting: none @@ -401,7 +401,7 @@ print(system.time(fit <- mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE))) </div> <div class='output'> user system elapsed - 1.188 1.228 0.910 + 1.200 1.188 0.898 </div> <div class='input'>coef(fit) </div> diff --git a/inst/web/mkinmod.html b/inst/web/mkinmod.html index 7b43beb7..ea549f29 100644 --- a/inst/web/mkinmod.html +++ b/inst/web/mkinmod.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinmod. mkin 0.9-41</title> +<title>mkinmod. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinparplot.html b/inst/web/mkinparplot.html index 396e1428..8027af58 100644 --- a/inst/web/mkinparplot.html +++ b/inst/web/mkinparplot.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinparplot. mkin 0.9-41</title> +<title>mkinparplot. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinplot.html b/inst/web/mkinplot.html index 74c8c29f..c8787242 100644 --- a/inst/web/mkinplot.html +++ b/inst/web/mkinplot.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinplot. mkin 0.9-41</title> +<title>mkinplot. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinpredict.html b/inst/web/mkinpredict.html index 900ee26f..ee452a18 100644 --- a/inst/web/mkinpredict.html +++ b/inst/web/mkinpredict.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinpredict. mkin 0.9-41</title> +<title>mkinpredict. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -315,7 +315,7 @@ 201 20 4.978707 27.46227 </div> <div class='output'> user system elapsed - 0.020 0.000 0.003 + 0.016 0.004 0.002 </div> <div class='input'> system.time( print(mkinpredict(SFO_SFO, c(k_parent_m1 = 0.05, k_parent_sink = 0.1, k_m1_sink = 0.01), @@ -326,7 +326,7 @@ 201 20 4.978707 27.46227 </div> <div class='output'> user system elapsed - 0.092 0.000 0.092 + 0.056 0.000 0.054 </div></pre> </div> <div class="span4"> diff --git a/inst/web/mkinresplot.html b/inst/web/mkinresplot.html index 579c047e..ec82518b 100644 --- a/inst/web/mkinresplot.html +++ b/inst/web/mkinresplot.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinresplot. mkin 0.9-41</title> +<title>mkinresplot. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mkinsub.html b/inst/web/mkinsub.html index 94e650ff..73b19907 100644 --- a/inst/web/mkinsub.html +++ b/inst/web/mkinsub.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mkinsub. mkin 0.9-41</title> +<title>mkinsub. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/mmkin.html b/inst/web/mmkin.html index e09e6859..cec39fc8 100644 --- a/inst/web/mmkin.html +++ b/inst/web/mmkin.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>mmkin. mkin 0.9-41</title> +<title>mmkin. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/plot.mkinfit.html b/inst/web/plot.mkinfit.html index 5308ecec..8acf1e19 100644 --- a/inst/web/plot.mkinfit.html +++ b/inst/web/plot.mkinfit.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>plot.mkinfit. mkin 0.9-41</title> +<title>plot.mkinfit. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/plot.mmkin.html b/inst/web/plot.mmkin.html index 49b5d3af..11a1ba54 100644 --- a/inst/web/plot.mmkin.html +++ b/inst/web/plot.mmkin.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>plot.mmkin. mkin 0.9-41</title> +<title>plot.mmkin. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/print.mkinds.html b/inst/web/print.mkinds.html index d2f5f806..fdaaa64a 100644 --- a/inst/web/print.mkinds.html +++ b/inst/web/print.mkinds.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>print.mkinds. mkin 0.9-41</title> +<title>print.mkinds. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/print.mkinmod.html b/inst/web/print.mkinmod.html index dd94db34..457ac78f 100644 --- a/inst/web/print.mkinmod.html +++ b/inst/web/print.mkinmod.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>print.mkinmod. mkin 0.9-41</title> +<title>print.mkinmod. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/schaefer07_complex_case.html b/inst/web/schaefer07_complex_case.html index 403e7229..e23bc962 100644 --- a/inst/web/schaefer07_complex_case.html +++ b/inst/web/schaefer07_complex_case.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>schaefer07_complex_case. mkin 0.9-41</title> +<title>schaefer07_complex_case. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/summary.mkinfit.html b/inst/web/summary.mkinfit.html index 2958b020..1c63e7b9 100644 --- a/inst/web/summary.mkinfit.html +++ b/inst/web/summary.mkinfit.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>summary.mkinfit. mkin 0.9-41</title> +<title>summary.mkinfit. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -157,17 +157,17 @@ <h2 id="examples">Examples</h2> <pre class="examples"><div class='input'> summary(mkinfit(mkinmod(parent = list(type = "SFO")), FOCUS_2006_A, quiet = TRUE)) </div> -<div class='output'>mkin version: 0.9.41 +<div class='output'>mkin version: 0.9.41.9000 R version: 3.2.2 -Date of fit: Mon Nov 9 10:12:08 2015 -Date of summary: Mon Nov 9 10:12:08 2015 +Date of fit: Fri Nov 13 11:14:26 2015 +Date of summary: Fri Nov 13 11:14:26 2015 Equations: d_parent = - k_parent_sink * parent Model predictions using solution type analytical -Fitted with method Port using 35 model solutions performed in 0.105 s +Fitted with method Port using 35 model solutions performed in 0.151 s Weighting: none diff --git a/inst/web/synthetic_data_for_UBA.html b/inst/web/synthetic_data_for_UBA.html index 3694bcb9..2ae4c868 100644 --- a/inst/web/synthetic_data_for_UBA.html +++ b/inst/web/synthetic_data_for_UBA.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>synthetic_data_for_UBA_2014. mkin 0.9-41</title> +<title>synthetic_data_for_UBA_2014. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=""> @@ -32,7 +32,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> diff --git a/inst/web/transform_odeparms.html b/inst/web/transform_odeparms.html index 36dfecf8..49639b47 100644 --- a/inst/web/transform_odeparms.html +++ b/inst/web/transform_odeparms.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> -<title>transform_odeparms. mkin 0.9-41</title> +<title>transform_odeparms. mkin 0.9.41.9000</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="author" content=" Johannes Ranke @@ -34,7 +34,7 @@ <div class="navbar"> <div class="navbar-inner"> <div class="container"> - <a class="brand" href="#">mkin 0.9-41</a> + <a class="brand" href="#">mkin 0.9.41.9000</a> <div class="nav"> <ul class="nav"> <li><a href="index.html"><i class="icon-home icon-white"></i> Index</a></li> @@ -133,10 +133,10 @@ backtransform_odeparms(transparms, mkinmod, transform_rates = TRUE, t fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE) summary(fit, data=FALSE) # See transformed and backtransformed parameters </div> -<div class='output'>mkin version: 0.9.41 +<div class='output'>mkin version: 0.9.41.9000 R version: 3.2.2 -Date of fit: Mon Nov 9 10:12:09 2015 -Date of summary: Mon Nov 9 10:12:09 2015 +Date of fit: Fri Nov 13 11:14:27 2015 +Date of summary: Fri Nov 13 11:14:27 2015 Equations: d_parent = - k_parent_sink * parent - k_parent_m1 * parent @@ -144,7 +144,7 @@ d_m1 = + k_parent_m1 * parent - k_m1_sink * m1 Model predictions using solution type deSolve -Fitted with method Port using 153 model solutions performed in 0.632 s +Fitted with method Port using 153 model solutions performed in 0.619 s Weighting: none diff --git a/inst/web/vignettes/FOCUS_D.html b/inst/web/vignettes/FOCUS_D.html index 557ceb03..d9fc6e18 100644 --- a/inst/web/vignettes/FOCUS_D.html +++ b/inst/web/vignettes/FOCUS_D.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Example evaluation of FOCUS Example Dataset D</title> @@ -64,7 +64,7 @@ img { <div id="header"> <h1 class="title">Example evaluation of FOCUS Example Dataset D</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> diff --git a/inst/web/vignettes/FOCUS_L.html b/inst/web/vignettes/FOCUS_L.html index 9bb60153..9584aee5 100644 --- a/inst/web/vignettes/FOCUS_L.html +++ b/inst/web/vignettes/FOCUS_L.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Example evaluation of FOCUS Laboratory Data L1 to L3</title> @@ -65,7 +65,7 @@ img { <div id="header"> <h1 class="title">Example evaluation of FOCUS Laboratory Data L1 to L3</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> <div id="TOC"> diff --git a/inst/web/vignettes/FOCUS_Z.pdf b/inst/web/vignettes/FOCUS_Z.pdf Binary files differindex 31480019..1d08173a 100644 --- a/inst/web/vignettes/FOCUS_Z.pdf +++ b/inst/web/vignettes/FOCUS_Z.pdf diff --git a/inst/web/vignettes/compiled_models.html b/inst/web/vignettes/compiled_models.html index 7722d95a..c7f4fbea 100644 --- a/inst/web/vignettes/compiled_models.html +++ b/inst/web/vignettes/compiled_models.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Performance benefit by using compiled model definitions in mkin</title> @@ -65,7 +65,7 @@ img { <div id="header"> <h1 class="title">Performance benefit by using compiled model definitions in mkin</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> <div id="TOC"> @@ -89,28 +89,36 @@ SFO_SFO <- mkinmod( <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <p>We can compare the performance of the Eigenvalue based solution against the compiled version and the R implementation of the differential equations using the microbenchmark package.</p> <pre class="r"><code>library("microbenchmark") +library("ggplot2") mb.1 <- microbenchmark( - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", use_compiled = FALSE, - quiet = TRUE), - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE), - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE), + "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "deSolve", + use_compiled = FALSE, quiet = TRUE), + "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "eigen", quiet = TRUE), + "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "deSolve", quiet = TRUE), times = 3, control = list(warmup = 1)) -smb.1 <- summary(mb.1)[-1] -rownames(smb.1) <- c("deSolve, not compiled", "Eigenvalue based", "deSolve, compiled") -print(smb.1)</code></pre> -<pre><code>## min lq mean median uq -## deSolve, not compiled 9442.5119 9447.2060 9458.3420 9451.9001 9466.2571 -## Eigenvalue based 868.6312 872.4552 895.3422 876.2792 908.6977 -## deSolve, compiled 691.9663 697.5653 701.1004 703.1643 705.6674 -## max neval cld -## deSolve, not compiled 9480.6141 3 c -## Eigenvalue based 941.1163 3 b -## deSolve, compiled 708.1706 3 a</code></pre> -<p>We see that using the compiled model is by a factor of 13.4 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> -<pre class="r"><code>smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> + +smb.1 <- summary(mb.1) +print(mb.1)</code></pre> +<pre><code>## Unit: milliseconds +## expr min lq mean median uq +## deSolve, not compiled 9538.4007 9570.3211 9605.6503 9602.2416 9639.2752 +## Eigenvalue based 881.9438 885.9337 901.1558 889.9236 910.7618 +## deSolve, compiled 692.0913 695.6109 697.9629 699.1304 700.8987 +## max neval cld +## 9676.3087 3 c +## 931.5999 3 b +## 702.6669 3 a</code></pre> +<pre class="r"><code>autoplot(mb.1)</code></pre> +<p><img src="data:image/png;base64,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" title alt width="672" /></p> +<p>We see that using the compiled model is by a factor of 13.7 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> +<pre class="r"><code>rownames(smb.1) <- smb.1$expr +smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> <pre><code>## median -## deSolve, not compiled 13.441951 -## Eigenvalue based 1.246194 +## deSolve, not compiled 13.734549 +## Eigenvalue based 1.272901 ## deSolve, compiled 1.000000</code></pre> </div> <div id="benchmark-for-a-model-that-can-not-be-solved-with-eigenvalues" class="section level2"> @@ -121,24 +129,27 @@ print(smb.1)</code></pre> m1 = mkinsub( "SFO"))</code></pre> <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <pre class="r"><code>mb.2 <- microbenchmark( - mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE), - mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE), + "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, + use_compiled = FALSE, quiet = TRUE), + "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE), times = 3, control = list(warmup = 1)) -smb.2 <- summary(mb.2)[-1] -rownames(smb.2) <- c("deSolve, not compiled", "deSolve, compiled") -print(smb.2)</code></pre> -<pre><code>## min lq mean median uq -## deSolve, not compiled 20.444632 20.48824 20.557595 20.531857 20.614077 -## deSolve, compiled 1.251733 1.25179 1.275227 1.251846 1.286973 -## max neval cld -## deSolve, not compiled 20.6963 3 b -## deSolve, compiled 1.3221 3 a</code></pre> +smb.2 <- summary(mb.2) +print(mb.2)</code></pre> +<pre><code>## Unit: seconds +## expr min lq mean median uq +## deSolve, not compiled 20.475764 20.494740 20.507391 20.513716 20.523205 +## deSolve, compiled 1.244022 1.244327 1.261983 1.244631 1.270963 +## max neval cld +## 20.532695 3 b +## 1.297295 3 a</code></pre> <pre class="r"><code>smb.2["median"]/smb.2["deSolve, compiled", "median"]</code></pre> -<pre><code>## median -## deSolve, not compiled 16.40126 -## deSolve, compiled 1.00000</code></pre> -<p>Here we get a performance benefit of a factor of 16.4 using the version of the differential equation model compiled from C code using the inline package!</p> -<p>This vignette was built with mkin 0.9.41 on</p> +<pre><code>## median +## 1 NA +## 2 NA</code></pre> +<pre class="r"><code>autoplot(mb.2)</code></pre> +<p><img src="data:image/png;base64,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oJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQ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9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAirQkC3be3laN/sCWgUAgphFQjoN9/2lk09HO6bPQGNQkAhrAIBvaJWO7uHw32zJ6BRCCiEVSCga2u1hT0c7ps9AY1CQCGsAgG9uFab38PhvtkT0CgEFMIqENALa7XBHg73zZ6ARiGgEFaBgK6p1eb1cLhv9gQ0CgGFsAoE9IJaLfVwuG/2BDQKAYWwCgR0Va12Wg+H+2ZPQKMQUAirQEBX1mqn9nC4b/YENAoBhbBqBPRTPRzumz0BjUJAIawCAT2vVvtkD4f7Zk9AoxBQCKtAQJfzCrTMCCiEVSOgp/RwuG/2BDQKAYWwCgR0Wa32iR4O982egEYhoBBWgYCeU6t9vIfDfbMnoFEIKIQRUMs3ewIahYBCWDUC+rEeDvfNnoBGIaAQVoGALqnV/qWHw32zJ6BRCCiEVSCgiwlomRFQCKtAQM8moGVGQCGsAgE9i4CWGQGFsAoE9EwCWmYEFMIqENBFBLTMCCiEVSCgZxDQMiOgEFaBgPIKtNQIKIRVIKALCWiZEVAII6CWb/YENAoBhbAKBHQBAS0zAgphBNTyzZ6ARiGgEFaBgM4noGVGQCGsAgEdIqBlRkAhrAIBHSSgZUZAIawCAZ1HQMuMgEIYAbV8syegUQgohBFQyzd7AhqFgEJYBQKaCGiZEVAIq0BATyOgZUZAIYyAWr7ZE9AoBBTCKhDQUwlomRFQCKtAQD9NQMuMgEJYBQL6KQJaZgQUwioQ0E8S0DIjoBBWgYDyCrTUCCiEVSCgpxDQMiOgEFaBgH6CgJYZAYUwAmr5Zk9AoxBQCKtAQD9OQMuMgEJYBQL6rwS0zAgohFUgoB8joGVGQCGsAgH9FwJaZgQUwgio5Zs9AY1CQCGMgFq+2RPQKAQUwioQ0I8S0DIjoBBWgYB+hICWGQGFsAoE9EMEtMwIKIQRUMs3ewIahYBCWAUC+s8EtMwIKIRVIKAfJKBlRkAhrAIB/QABLTMCCmEE1PLNnoBGIaAQVoGAvo+AlhkBhbAKBPSvCWiZEVAIm/sB/c5vEdAyI6AQNvcD+lCNgJYZAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5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l38WdAYQUICAdvDNvsQBPUYIKEBAO/hmT0AJKEBAO/hmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAI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" title alt width="672" /></p> +<p>Here we get a performance benefit of a factor of 16.5 using the version of the differential equation model compiled from C code using the inline package!</p> +<p>This vignette was built with mkin 0.9.41.9000 on</p> <pre><code>## R version 3.2.2 (2015-08-14) ## Platform: x86_64-pc-linux-gnu (64-bit) ## Running under: Debian GNU/Linux 8 (jessie)</code></pre> diff --git a/inst/web/vignettes/mkin.pdf b/inst/web/vignettes/mkin.pdf Binary files differindex 9f9f9af0..e9ee9ed1 100644 --- a/inst/web/vignettes/mkin.pdf +++ b/inst/web/vignettes/mkin.pdf diff --git a/vignettes/FOCUS_D.html b/vignettes/FOCUS_D.html index 557ceb03..d9fc6e18 100644 --- a/vignettes/FOCUS_D.html +++ b/vignettes/FOCUS_D.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Example evaluation of FOCUS Example Dataset D</title> @@ -64,7 +64,7 @@ img { <div id="header"> <h1 class="title">Example evaluation of FOCUS Example Dataset D</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> diff --git a/vignettes/FOCUS_L.html b/vignettes/FOCUS_L.html index 9bb60153..9584aee5 100644 --- a/vignettes/FOCUS_L.html +++ b/vignettes/FOCUS_L.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Example evaluation of FOCUS Laboratory Data L1 to L3</title> @@ -65,7 +65,7 @@ img { <div id="header"> <h1 class="title">Example evaluation of FOCUS Laboratory Data L1 to L3</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> <div id="TOC"> diff --git a/vignettes/FOCUS_Z.pdf b/vignettes/FOCUS_Z.pdf Binary files differindex 31480019..1d08173a 100644 --- a/vignettes/FOCUS_Z.pdf +++ b/vignettes/FOCUS_Z.pdf diff --git a/vignettes/compiled_models.Rmd b/vignettes/compiled_models.Rmd index 8dc74692..8f6df55d 100644 --- a/vignettes/compiled_models.Rmd +++ b/vignettes/compiled_models.Rmd @@ -16,7 +16,7 @@ vignette: > ```{r, include = FALSE}
library(knitr)
-opts_chunk$set(tidy = FALSE, cache = TRUE)
+opts_chunk$set(tidy = FALSE, cache = FALSE)
```
## Benchmark for a model that can also be solved with Eigenvalues
@@ -46,24 +46,30 @@ the microbenchmark package. ```{r benchmark_SFO_SFO}
library("microbenchmark")
+library("ggplot2")
mb.1 <- microbenchmark(
- mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", use_compiled = FALSE,
- quiet = TRUE),
- mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE),
- mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE),
+ "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D,
+ solution_type = "deSolve",
+ use_compiled = FALSE, quiet = TRUE),
+ "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D,
+ solution_type = "eigen", quiet = TRUE),
+ "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D,
+ solution_type = "deSolve", quiet = TRUE),
times = 3, control = list(warmup = 1))
-smb.1 <- summary(mb.1)[-1]
-rownames(smb.1) <- c("deSolve, not compiled", "Eigenvalue based", "deSolve, compiled")
-print(smb.1)
+
+smb.1 <- summary(mb.1)
+print(mb.1)
+autoplot(mb.1)
```
We see that using the compiled model is by a factor of
-`r round(smb.1["deSolve, not compiled", "median"]/smb.1["deSolve, compiled", "median"], 1)`
+`r round(smb.1[1, "median"]/smb.1[3, "median"], 1)`
faster than using the R version with the default ode solver, and it is even
faster than the Eigenvalue based solution implemented in R which does not need
iterative solution of the ODEs:
```{r}
+rownames(smb.1) <- smb.1$expr
smb.1["median"]/smb.1["deSolve, compiled", "median"]
```
@@ -77,17 +83,18 @@ FOMC_SFO <- mkinmod( m1 = mkinsub( "SFO"))
mb.2 <- microbenchmark(
- mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE),
- mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE),
+ "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D,
+ use_compiled = FALSE, quiet = TRUE),
+ "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE),
times = 3, control = list(warmup = 1))
-smb.2 <- summary(mb.2)[-1]
-rownames(smb.2) <- c("deSolve, not compiled", "deSolve, compiled")
-print(smb.2)
+smb.2 <- summary(mb.2)
+print(mb.2)
smb.2["median"]/smb.2["deSolve, compiled", "median"]
+autoplot(mb.2)
```
Here we get a performance benefit of a factor of
-`r round(smb.2["deSolve, not compiled", "median"]/smb.2["deSolve, compiled", "median"], 1)`
+`r round(smb.2[1, "median"]/smb.2[2, "median"], 1)`
using the version of the differential equation model compiled from C code using
the inline package!
diff --git a/vignettes/compiled_models.html b/vignettes/compiled_models.html index 7722d95a..c7f4fbea 100644 --- a/vignettes/compiled_models.html +++ b/vignettes/compiled_models.html @@ -10,7 +10,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2015-11-09" /> +<meta name="date" content="2015-11-13" /> <title>Performance benefit by using compiled model definitions in mkin</title> @@ -65,7 +65,7 @@ img { <div id="header"> <h1 class="title">Performance benefit by using compiled model definitions in mkin</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2015-11-09</em></h4> +<h4 class="date"><em>2015-11-13</em></h4> </div> <div id="TOC"> @@ -89,28 +89,36 @@ SFO_SFO <- mkinmod( <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <p>We can compare the performance of the Eigenvalue based solution against the compiled version and the R implementation of the differential equations using the microbenchmark package.</p> <pre class="r"><code>library("microbenchmark") +library("ggplot2") mb.1 <- microbenchmark( - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", use_compiled = FALSE, - quiet = TRUE), - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE), - mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE), + "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "deSolve", + use_compiled = FALSE, quiet = TRUE), + "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "eigen", quiet = TRUE), + "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "deSolve", quiet = TRUE), times = 3, control = list(warmup = 1)) -smb.1 <- summary(mb.1)[-1] -rownames(smb.1) <- c("deSolve, not compiled", "Eigenvalue based", "deSolve, compiled") -print(smb.1)</code></pre> -<pre><code>## min lq mean median uq -## deSolve, not compiled 9442.5119 9447.2060 9458.3420 9451.9001 9466.2571 -## Eigenvalue based 868.6312 872.4552 895.3422 876.2792 908.6977 -## deSolve, compiled 691.9663 697.5653 701.1004 703.1643 705.6674 -## max neval cld -## deSolve, not compiled 9480.6141 3 c -## Eigenvalue based 941.1163 3 b -## deSolve, compiled 708.1706 3 a</code></pre> -<p>We see that using the compiled model is by a factor of 13.4 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> -<pre class="r"><code>smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> + +smb.1 <- summary(mb.1) +print(mb.1)</code></pre> +<pre><code>## Unit: milliseconds +## expr min lq mean median uq +## deSolve, not compiled 9538.4007 9570.3211 9605.6503 9602.2416 9639.2752 +## Eigenvalue based 881.9438 885.9337 901.1558 889.9236 910.7618 +## deSolve, compiled 692.0913 695.6109 697.9629 699.1304 700.8987 +## max neval cld +## 9676.3087 3 c +## 931.5999 3 b +## 702.6669 3 a</code></pre> +<pre class="r"><code>autoplot(mb.1)</code></pre> +<p><img src="data:image/png;base64,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" title alt width="672" /></p> +<p>We see that using the compiled model is by a factor of 13.7 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> +<pre class="r"><code>rownames(smb.1) <- smb.1$expr +smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> <pre><code>## median -## deSolve, not compiled 13.441951 -## Eigenvalue based 1.246194 +## deSolve, not compiled 13.734549 +## Eigenvalue based 1.272901 ## deSolve, compiled 1.000000</code></pre> </div> <div id="benchmark-for-a-model-that-can-not-be-solved-with-eigenvalues" class="section level2"> @@ -121,24 +129,27 @@ print(smb.1)</code></pre> m1 = mkinsub( "SFO"))</code></pre> <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <pre class="r"><code>mb.2 <- microbenchmark( - mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE), - mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE), + "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, + use_compiled = FALSE, quiet = TRUE), + "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE), times = 3, control = list(warmup = 1)) -smb.2 <- summary(mb.2)[-1] -rownames(smb.2) <- c("deSolve, not compiled", "deSolve, compiled") -print(smb.2)</code></pre> -<pre><code>## min lq mean median uq -## deSolve, not compiled 20.444632 20.48824 20.557595 20.531857 20.614077 -## deSolve, compiled 1.251733 1.25179 1.275227 1.251846 1.286973 -## max neval cld -## deSolve, not compiled 20.6963 3 b -## deSolve, compiled 1.3221 3 a</code></pre> +smb.2 <- summary(mb.2) +print(mb.2)</code></pre> +<pre><code>## Unit: seconds +## expr min lq mean median uq +## deSolve, not compiled 20.475764 20.494740 20.507391 20.513716 20.523205 +## deSolve, compiled 1.244022 1.244327 1.261983 1.244631 1.270963 +## max neval cld +## 20.532695 3 b +## 1.297295 3 a</code></pre> <pre class="r"><code>smb.2["median"]/smb.2["deSolve, compiled", "median"]</code></pre> -<pre><code>## median -## deSolve, not compiled 16.40126 -## deSolve, compiled 1.00000</code></pre> -<p>Here we get a performance benefit of a factor of 16.4 using the version of the differential equation model compiled from C code using the inline package!</p> -<p>This vignette was built with mkin 0.9.41 on</p> +<pre><code>## median +## 1 NA +## 2 NA</code></pre> +<pre class="r"><code>autoplot(mb.2)</code></pre> +<p><img src="data:image/png;base64,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oJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQ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9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAgjoJZv9gQ0CgGFMAJq+WZPQKMQUAirQkC3be3laN/sCWgUAgphFQjoN9/2lk09HO6bPQGNQkAhrAIBvaJWO7uHw32zJ6BRCCiEVSCga2u1hT0c7ps9AY1CQCGsAgG9uFab38PhvtkT0CgEFMIqENALa7XBHg73zZ6ARiGgEFaBgK6p1eb1cLhv9gQ0CgGFsAoE9IJaLfVwuG/2BDQKAYWwCgR0Va12Wg+H+2ZPQKMQUAirQEBX1mqn9nC4b/YENAoBhbBqBPRTPRzumz0BjUJAIawCAT2vVvtkD4f7Zk9AoxBQCKtAQJfzCrTMCCiEVSOgp/RwuG/2BDQKAYWwCgR0Wa32iR4O982egEYhoBBWgYCeU6t9vIfDfbMnoFEIKIQRUMs3ewIahYBCWDUC+rEeDvfNnoBGIaAQVoGALqnV/qWHw32zJ6BRCCiEVSCgiwlomRFQCKtAQM8moGVGQCGsAgE9i4CWGQGFsAoE9EwCWmYEFMIqENBFBLTMCCiEVSCgZxDQMiOgEFaBgPIKtNQIKIRVIKALCWiZEVAII6CWb/YENAoBhbAKBHQBAS0zAgphBNTyzZ6ARiGgEFaBgM4noGVGQCGsAgEdIqBlRkAhrAIBHSSgZUZAIawCAZ1HQMuMgEIYAbV8syegUQgohBFQyzd7AhqFgEJYBQKaCGiZEVAIq0BATyOgZUZAIYyAWr7ZE9AoBBTCKhDQUwlomRFQCKtAQD9NQMuMgEJYBQL6KQJaZgQUwioQ0E8S0DIjoBBWgYDyCrTUCCiEVSCgpxDQMiOgEFaBgH6CgJYZAYUwAmr5Zk9AoxBQCKtAQD9OQMuMgEJYBQL6rwS0zAgohFUgoB8joGVGQCGsAgH9FwJaZgQUwgio5Zs9AY1CQCGMgFq+2RPQKAQUwioQ0I8S0DIjoBBWgYB+hICWGQGFsAoE9EMEtMwIKIQRUMs3ewIahYBCWAUC+s8EtMwIKIRVIKAfJKBlRkAhrAIB/QABLTMCCmEE1PLNnoBGIaAQVoGAvo+AlhkBhbAKBPSvCWiZEVAIm/sB/c5vEdAyI6AQNvcD+lCNgJYZAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5Zk9AoxBQCCOglm/2BDQKAYUwAmr5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l38WdAYQUICAdvDNvsQBPUYIKEBAO/hmT0AJKEBAO/hmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAII6CWb/YENAoBhTACavlmT0CjEFAI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" title alt width="672" /></p> +<p>Here we get a performance benefit of a factor of 16.5 using the version of the differential equation model compiled from C code using the inline package!</p> +<p>This vignette was built with mkin 0.9.41.9000 on</p> <pre><code>## R version 3.2.2 (2015-08-14) ## Platform: x86_64-pc-linux-gnu (64-bit) ## Running under: Debian GNU/Linux 8 (jessie)</code></pre> diff --git a/vignettes/mkin.pdf b/vignettes/mkin.pdf Binary files differindex 9f9f9af0..e9ee9ed1 100644 --- a/vignettes/mkin.pdf +++ b/vignettes/mkin.pdf |