// NOTE: 使用自定义标量(复数)的单变量函数的导数 // C++ includes #include <iostream> #include <complex> using namespace std; // autodiff include #include <autodiff/forward/dual.hpp> using namespace autodiff; // Specialize isArithmetic for complex to make it compatible with dual namespace autodiff::detail { template<typename T> struct ArithmeticTraits<complex<T>>: ArithmeticTraits<T> {}; } // autodiff::detail using cxdual = Dual<complex<double>, complex<double>>; cxdual f(cxdual x){ return 1+x+x*x+1/x+log(x); } int main(){ cxdual x = 2.0; // the input variable x cxdual u = f(x); // the output variable u cxdual dudx = derivative(f, wrt(x), at(x)); // evaluate the derivative du/dx cout << "u = " << u << endl; cout << "du/dx = " << dudx << endl; return 0; }