A limited set of complex number operations can be used when constructing AD tapes. The available methods are listed in this help page.
adcomplex(real, imag = rep(advector(0), length(real)))# S3 method for adcomplex
Re(z)
# S3 method for adcomplex
Im(z)
# S4 method for adcomplex
show(object)
# S3 method for adcomplex
dim(x)
# S3 method for adcomplex
dim(x) <- value
# S3 method for adcomplex
[(x, ...)
# S3 method for adcomplex
[(x, ...) <- value
# S3 method for adcomplex
t(x)
# S3 method for adcomplex
length(x)
# S3 method for adcomplex
Conj(z)
# S3 method for adcomplex
Mod(z)
# S3 method for adcomplex
Arg(z)
# S3 method for adcomplex
+(x, y)
# S3 method for adcomplex
-(x, y)
# S3 method for adcomplex
*(x, y)
# S3 method for adcomplex
/(x, y)
# S3 method for adcomplex
exp(x)
# S3 method for adcomplex
log(x, base)
# S3 method for adcomplex
sqrt(x)
# S4 method for adcomplex
fft(z, inverse = FALSE)
# S4 method for advector
fft(z, inverse = FALSE)
# S3 method for adcomplex
rep(x, ...)
# S3 method for adcomplex
as.vector(x, mode = "any")
# S3 method for adcomplex
is.matrix(x)
# S3 method for adcomplex
as.matrix(x, ...)
# S4 method for adcomplex,ANY
%*%(x, y)
# S4 method for adcomplex,ANY
solve(a, b)
# S4 method for adcomplex
colSums(x)
# S4 method for adcomplex
rowSums(x)
# S4 method for adcomplex,ANY,ANY
diag(x)
# S4 method for advector,adcomplex
Ops(e1, e2)
# S4 method for adcomplex,advector
Ops(e1, e2)
Object of class "adcomplex"
.
Real part
Imaginary part
An object of class 'adcomplex'
An object of class 'adcomplex'
An object of class 'adcomplex'
Replacement value
As [
An object of class 'adcomplex'
Not implemented
As fft
As as.vector
matrix
matrix, vector or missing
Left operand
Right operand
adcomplex()
: Construct adcomplex
vector
Re(adcomplex)
: As complex
Im(adcomplex)
: As complex
show(adcomplex)
: Print method
dim(adcomplex)
: As dim
dim(adcomplex) <- value
: As dim
[
: As [
`[`(adcomplex) <- value
: As [<-
t(adcomplex)
: As t
length(adcomplex)
: As length
Conj(adcomplex)
: As complex
Mod(adcomplex)
: As complex
Arg(adcomplex)
: As complex
+
: As complex
-
: As complex
*
: As complex
/
: As complex
exp(adcomplex)
: As complex
log(adcomplex)
: As complex
sqrt(adcomplex)
: As complex
fft(adcomplex)
: Fast Fourier Transform equivalent to fft. Notably this is the multivariate transform when x
is an array.
fft(advector)
: If real input is supplied it is first converted to complex.
rep(adcomplex)
: As rep
as.vector(adcomplex)
: Apply for each of real/imag
is.matrix(adcomplex)
: Apply for real
as.matrix(adcomplex)
: Apply for each of real/imag
x %*% y
: Complex matrix multiply
solve(a = adcomplex, b = ANY)
: Complex matrix inversion and solve
colSums(adcomplex)
: Apply for each of real/imag
rowSums(adcomplex)
: Apply for each of real/imag
diag(x = adcomplex, nrow = ANY, ncol = ANY)
: Apply for each of real/imag
Ops(e1 = advector, e2 = adcomplex)
: Mixed real/complex arithmetic
Ops(e1 = adcomplex, e2 = advector)
: Mixed real/complex arithmetic
## Tape using complex operations
F <- MakeTape(function(x) {
x <- as.complex(x)
y <- exp( x * ( 1 + 2i ) )
c(Re(y), Im(y))
}, numeric(1))
F
F(1)
## Complex FFT on the tape
G <- MakeTape(function(x) sum(Re(fft(x))), numeric(3))
G$simplify()
G$print()
Run the code above in your browser using DataLab