Search code examples
rmatlabcomplex-numbers

Complex numbers in R vs. Matlab


I observed the following phenomenon when using R and Matlab.

When I apply log to a negative number in R, I get the following error message:

Warning message: In log(-1) : NaNs produced

However, when I apply log to a negative number in Matlab, I get e.g., the following complex numbers:

log(-1): 0.0000 + 3.1416i

log(-5): 1.6094 + 3.1416i

Is there any way to achieve the same behavior in R? Or is there anything in favor of the default option in R?


Solution

  • log gives you complex when you give it complex in the first place.

    log(-1+0i)
    # [1] 0+3.141593i
    log(-5+0i)
    # [1] 1.609438+3.141593i
    

    I don't know why it doesn't give an option to do this by default, but then again I don't work in complex numbers all the time.

    If you want to do this programmatically, you can use as.complex:

    log(as.complex(-1))
    # [1] 0+3.141593i
    

    or even make a helper function simplify it for you:

    mylog <- function(x, ...) log(as.complex(x), ...)
    mylog(-1)
    # [1] 0+3.141593i