changeset 21596:07d30e6fcfde

Add demos to ode23 and ode45 * scripts/ode/ode{23,45}.m : Add new demo demonstrating order of convergence.
author Carlo de Falco <carlo.defalco@polimi.it>
date Sat, 09 Apr 2016 06:36:53 +0200
parents 3933d5073baa
children fe1447ae68cf
files scripts/ode/ode23.m scripts/ode/ode45.m
diffstat 2 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ode/ode23.m	Fri Apr 08 16:51:05 2016 -0400
+++ b/scripts/ode/ode23.m	Sat Apr 09 06:36:53 2016 +0200
@@ -590,3 +590,28 @@
 %!  opt = struct ("foo", 1);
 %!  [t, y] = ode23 (@fpol, [0 2], [2 0], opt);
 
+%!demo
+%!
+%! # Demonstrate convergence order for ode23
+%! tol = 1e-5 ./ 10.^[0:8];
+%! for ii = 1 : numel (tol)
+%!   opt = odeset ("RelTol", tol(ii), "AbsTol", realmin);
+%!   [t, y] = ode23 (@(t, y) -y, [0, 1], 1, opt);
+%!   h(ii) = 1 / (numel (t) - 1);
+%!   err(ii) = norm (y .* exp (t) - 1, inf);
+%! endfor
+%!
+%! # Estimate order numerically
+%! p = diff (log (err)) ./ diff (log (h))
+%!
+%! %! # Estimate order visually
+%! figure;
+%! loglog (h, tol, '-ob', h, err,
+%!         h, (h/h(end)) .^ 2 .* tol(end), "k--",
+%!         h, (h/h(end)) .^ 3 .* tol(end), "k-")
+%! axis tight
+%! xlabel ("h");
+%! ylabel ("err(h)");
+%! title ("Convergence plot for ode23");
+%! legend ("imposed tolerance", "ode23 (relative) error",
+%!         "order 2", "order 3");
--- a/scripts/ode/ode45.m	Fri Apr 08 16:51:05 2016 -0400
+++ b/scripts/ode/ode45.m	Sat Apr 09 06:36:53 2016 +0200
@@ -587,3 +587,29 @@
 %! opt = struct ("foo", 1);
 %! [t, y] = ode45 (@fpol, [0 2], [2 0], opt);
 
+
+%!demo
+%!
+%! # Demonstrate convergence order for ode45
+%! tol = 1e-5 ./ 10.^[0:8];
+%! for ii = 1 : numel (tol)
+%!   opt = odeset ("RelTol", tol(ii), "AbsTol", realmin);
+%!   [t, y] = ode45 (@(t, y) -y, [0, 1], 1, opt);
+%!   h(ii) = 1 / (numel (t) - 1);
+%!   err(ii) = norm (y .* exp (t) - 1, inf);
+%! endfor
+%!
+%! # Estimate order numerically
+%! p = diff (log (err)) ./ diff (log (h))
+%!
+%! %! # Estimate order visually
+%! figure;
+%! loglog (h, tol, '-ob', h, err,
+%!         h, (h/h(end)) .^ 4 .* tol(end), "k--",
+%!         h, (h/h(end)) .^ 5 .* tol(end), "k-")
+%! axis tight
+%! xlabel ("h");
+%! ylabel ("err(h)");
+%! title ("Convergence plot for ode45");
+%! legend ("imposed tolerance", "ode45 (relative) error",
+%!         "order 4", "order 5");