Problem following an R bug fix to integrate()
This, i.e. quadrature, is another area where the "default" or "base" R functionality needs enhancement, just like the functionality for optimization. While `integrate' is good, it can be improved. Hans Werner, what routines do you use for quadrature? Best, Ravi -----Original Message----- From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf Of Hans W Borchers Sent: Wednesday, July 17, 2013 3:36 PM To: Martyn Plummer Cc: r-devel at r-project.org Subject: Re: [Rd] Problem following an R bug fix to integrate() Thanks for the help. What bothers me is that it works on most systems and does not work on some more 'exotic' systems -- though it should work everywhere however small the user chooses the tolerance (with some warnings, maybe). I decided I will apply my own integration routines in this example as they appear to work more reliably. Hans Werner
On Wed, Jul 17, 2013 at 7:37 PM, Martyn Plummer <plummerm at iarc.fr> wrote:
On Tue, 2013-07-16 at 13:55 +0200, Hans W Borchers wrote:
I have been told by the CRAN administrators that the following code generated an error on 64-bit Fedora Linux (gcc, clang) and on Solaris machines (sparc, x86), but runs well on all other systems):
> fn <- function(x, y) ifelse(x^2 + y^2 <= 1, 1 - x^2 - y^2, 0)
> tol <- 1.5e-8
> fy <- function(x) integrate(function(y) fn(x, y), 0, 1,
subdivisions = 300, rel.tol = tol)$value
> Fy <- Vectorize(fy)
> xa <- -1; xb <- 1
> Q <- integrate(Fy, xa, xb,
subdivisions = 300, rel.tol = tol)$value
Error in integrate(Fy, xa, xb, subdivisions = 300, rel.tol = tol) :
roundoff error was detected
Obviously, this realizes a double integration, split up into two
1-dimensional integrations, and the result shall be pi/4. I wonder what a 'roundoff error'
means in this situation.
In my package, this test worked well, w/o error or warnings, since
July 2011, on Windows, Max OS X, and Ubuntu Linux. I have no chance
to test it on one of the above mentioned systems. Of course, I can
simply disable these tests, but I would not like to do so w/o good reason.
If there is a connection to a bug fix to integrate(), with NEWS item
"integrate() reverts to the pre-2.12.0 behaviour. (PR#15219)",
then I do not understand what this pre-2.12.0 behavior really means.
Thanks for any help or a hint to what shall be changed.
You can see the bug report here: https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=15219 It concerns the behaviour of integrate with a small error tolerance. From 2.12.0 to 3.0.1 integrate was not working correctly with small error tolerance values, in the sense that small values did not improve accuracy and the accuracy was mis-reported. The tolerance in your example (1.5e-8) is considerably smaller than the default (1.2e-4). My guess is that the rounding error always existed but was not detected due to the bug. You might try a larger tolerance. I have tested your example and increasing the tolerance to 1.5e-7 removes the error. Martyn
Hans W Borchers PS: This kind of tricky definition in function 'fn' has caused some discussion on this list in July 2009. I still think it should be allowed to proceed in this way.
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
----------------------------------------------------------------------
- This message and its attachments are strictly
confiden...{{dropped:8}}
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel