changeset 23958:36e86c8150cc

Fix warning in quadgk with zero size interval (bug #51867) * quadgk.m: set q = err = 0 when the interval has size zero. New test.
author Marco Caliari <marco.caliari@univr.it>
date Mon, 28 Aug 2017 10:20:26 +0200
parents 382cc01a60e1
children 01db45487d04
files scripts/general/quadgk.m
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/general/quadgk.m	Sun Aug 27 20:54:21 2017 +0200
+++ b/scripts/general/quadgk.m	Mon Aug 28 10:20:26 2017 +0200
@@ -434,10 +434,11 @@
   t = (halfwidth * abscissa) + center;
   x = trans ([t(:,1), t(:,end)]);
 
-  ## Shampine suggests 100 * eps1.
-  ## FIXME: reference for suggestion?
+  ## Shampine suggests 100 * eps1, beginning of section 6.
   if (any (abs (diff (x, [], 2) ./ max (abs (x), [], 2))) < 100 * eps1)
     too_close = true;
+    q = 0;
+    err = 0;
     return;
   endif
 
@@ -463,6 +464,7 @@
 %!assert (quadgk ("sin",-pi,pi), 0, 1e-6)
 %!assert (quadgk (@sin,-pi,pi, "waypoints", 0, "MaxIntervalCount", 100, "reltol", 1e-3, "abstol", 1e-6, "trace", false), 0, 1e-6)
 %!assert (quadgk (@sin,-pi,pi, 1e-6,false), 0, 1e-6)
+%!assert <51867> (quadgk (@(x) x, 0, 0), 0, 0)
 
 %!assert (quadgk (@sin,-pi,0), -2, 1e-6)
 %!assert (quadgk (@sin,0,pi), 2, 1e-6)