complex {base} | R Documentation

## Complex Vectors

### Description

These are basic functions which support complex arithmetic in R.

### Usage

    complex(length.out = 0, real = numeric(), imaginary = numeric(),
            modulus = 1, argument = 0)
    as.complex(x, ...)
    is.complex(x)

    Re(x)
    Im(x)
    Mod(x)
    Arg(x)
    Conj(x)

### Arguments

`length.out` | numeric. Desired length of the output vector, inputs being recycled as needed.
`real` | numeric vector.
`imaginary` | numeric vector.
`modulus` | numeric vector.
`argumetn` | numeric vector.
`x` | an object, probably of mode `complex`.

### Details

Complex vectors can be created with `complex`. The vector can be specified either by giving its length, its real and imaginary parts, or modulus and argument. (Giving just the length generates a vector of complex zeroes.)

Note that `is.complex` and `is.numeric` are never both `TRUE`.

The functions `Re`, `Im`, `Mod`, `Arg` and `Conj` have their usual interpretation as returning the real part, imaginary part, modulus, argument and complex conjugate for complex values. Modulus and argument are also called the polar coordinates. If z = x + i y with real x and y, `Mod`(z) = sqrt{x^2 + y^2}, and for phi= Arg(z), x = cos(phi) and y = sin(phi).

In addition, the elementary trigonometric, logarithmic and exponential functions are available for complex values.

### Examples

    ( z <- 0i ^ (-3:3) )
    stopifnot(Re(z) == 0 ^ (-3:3))
    matrix(1i^ (-6:5), nr=4)#- all columns are the same
    0 ^ 1i # a complex NaN

    ## create a complex normal vector
    z <- complex(real = rnorm(100), imag = rnorm(100))
    ## or also (less efficiently):
    z2 <- 1:2 + 1i*(8:9)

    all(Mod ( 1 -  sin(z) / ( (exp(1i*z)-exp(-1i*z))/(2*1i) ))
        < 100*.Machine$double.eps)
    ## The Arg(.) is an angle:
    zz <- (rep(1:4,len=9) + 1i*(9:1))/10
    zz.shift <- complex(modulus = Mod(zz), argument= Arg(zz) + pi)
    plot(zz, xlim=c(-1,1), ylim=c(-1,1), col="red", asp = 1,
         main = expression(paste("Rotation by "," ", pi == 180^o)))
    abline(h=0,v=0, col="blue", lty=3)
    points(zz.shift, col="orange")