32 lines
827 B
C++
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;
|
|
} |