Skip to content
Prev 33444 / 63424 Next

Inaccurate complex arithmetic of R (Matlab is accurate)

Dear Ravi,

the inaccuracy seems to creep in when powers are calculated. Apparently, 
some quite general function is called to calculate the squares, and one 
can avoid the error by reformulating the example as follows:

rosen <- function(x) {
  n <- length(x)
  x1 <- x[2:n]
  x2 <- x[1:(n-1)]
  sum(100*(x1-x2*x2)*(x1-x2*x2) + (1-x2)*(1-x2))
}

x0 <- c(0.0094, 0.7146, 0.2179, 0.6883, 0.5757, 0.9549, 0.7136, 0.0849, 0.4147, 0.4540)
h <- c(1.e-15*1i, 0, 0, 0, 0, 0, 0, 0, 0, 0)
xh <- x0 + h

rx <- rosen(xh)
Re(rx)
Im (rx)


I don't know which arithmetics are involved in the application you 
mentioned, but writing some auxiliary function for the calculation of 
x^n when x is complex and n is (a not too large) integer may solve some 
of the numerical issues. A simple version is:

powN <- function(x,n) sapply(x,function(x) prod(rep(x,n)))

The corresponding summation in 'rosen' would then read:

sum(100*powN(x1-powN(x2,2),2) + powN(1-x2,2))


HTH,

  Martin
Ravi Varadhan wrote: