41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
#include <cmath>
|
|
#include <iostream>
|
|
#include <autodiff/forward/dual.hpp>
|
|
using namespace autodiff;
|
|
|
|
dual sqrt1(dual x){
|
|
dual res = 0.0;
|
|
res.val = std::sqrt(x.val);
|
|
if (x.grad !=0.0){
|
|
std::cout << "x.grad: " << x.grad << std::endl;
|
|
res.grad += 0.5/res.val*x.grad;
|
|
}
|
|
return res;
|
|
}
|
|
dual test_exp(dual x){
|
|
dual res = 0.0;
|
|
std::cout << "x.val: " << x.val << std::endl;
|
|
res.val = std::exp(x.val);
|
|
std::cout << "res.val: " << res.val << std::endl;
|
|
std::cout << "res.grad: " << res.grad << std::endl;
|
|
if(x.grad != 0.0) res.grad += x.grad*res.val;
|
|
std::cout << "res.val: " << res.val << std::endl;
|
|
std::cout << "res.grad: " << res.grad << std::endl;
|
|
return res;
|
|
}
|
|
|
|
dual test_exp0(dual x){
|
|
return 1.0+exp(x);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
dual x = 1.2;
|
|
dual u = sqrt1(x);
|
|
double dfdx = derivative(sqrt1, wrt(x), at(x));
|
|
double dfdx2 = derivative(test_exp, wrt(x), at(x));
|
|
double dfdx3 = derivative(test_exp0, wrt(x), at(x));
|
|
std::cout << "dfdx: " << dfdx << std::endl;
|
|
std::cout << "dfdx2: " << dfdx2 << std::endl;
|
|
std::cout << "dfdx3: " << dfdx3 << std::endl;
|
|
} |