test-autodiff/test/forward/2single_variable_function_w...

32 lines
827 B
C++

// 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;
}