Complex¶
Overview¶
XAD implements specialisations of std::complex
for the XAD active data types AReal
and FReal
. They are are provided in the header XAD/Complex.hpp
, along with all the mathematical operations defined in the standard.
Note that the complex header is not automatically included with XAD/XAD.hpp
. Users must include it as needed.
std::complex
Specialisations¶
Both std::complex<AReal<T>>
and std::complex<FReal<T>>
are provided specialisations for the standard complex type (in std
namespace), for adjoint and forward modes respectively.
Member Functions¶
All standard complex member functions are implemented.
Below are the non-standard additions and changes of the interface only, using the placeholder XReal<T>
as a placeholder inner type, which can be FReal<T>
or AReal<T>
.
real
¶
XReal<T>& complex::real()
returns a reference rather than a copy of the real part, to allow for easy access and adjusting of derivatives using derivative()
. This applies to both the modifyable and the const
versions.
imag
¶
Returns a reference rather than a copy, for both the modifyable and the const
versions.
setDerivative
¶
void complex::setDerivative(const T& real_derivative, const T& imag_derivative = T())
sets the derivatives (either \(\dot{x}\) or \(\bar{x}\)) for both the real and imaginary parts.
setAdjoint
¶
void complex::setAdjoint(const T& real_derivative, const T& imag_derivative = T())
is an alias for setDerivative
getDerivative
¶
std::complex<T> getDerivative() const
gets the derivatives (either \(\dot{x}\) or \(\bar{x}\) for both the real and imaginary parts, represented as a complex of the underlying (double
) type.
getAdjoint
¶
std::complex<T> getAdjoint() const
is an alias for getDerivative
None-Member Functions¶
derivative
¶
Returns the adjoints of the z
variable, represented as a complex number of the underlying double type.
Note that since the return type is not a reference, setting derivatives should be done by using the member functions setDerivative
or using the real
and imag
member functions instead.
value
¶
Returns the value of the z
variable (underlying double type), represented as a complex number.
real
¶
Access to the real part by reference.
imag
¶
Access to the imaginary part by reference.
Math Operations¶
All arithmetic operators and mathematical functions in the C++11 standard have been specialised with the XAD complex data types as well. This also includes the stream read and write operations.