12345678910111213141516171819202122232425262728293031323334 |
- // Copyright Matthew Pulver 2018 - 2019.
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // https://www.boost.org/LICENSE_1_0.txt)
- #include <boost/math/differentiation/autodiff.hpp>
- #include <iostream>
- template <typename T>
- T fourth_power(T const& x) {
- T x4 = x * x; // retval in operator*() uses x4's memory via NRVO.
- x4 *= x4; // No copies of x4 are made within operator*=() even when squaring.
- return x4; // x4 uses y's memory in main() via NRVO.
- }
- int main() {
- using namespace boost::math::differentiation;
- constexpr unsigned Order = 5; // Highest order derivative to be calculated.
- auto const x = make_fvar<double, Order>(2.0); // Find derivatives at x=2.
- auto const y = fourth_power(x);
- for (unsigned i = 0; i <= Order; ++i)
- std::cout << "y.derivative(" << i << ") = " << y.derivative(i) << std::endl;
- return 0;
- }
- /*
- Output:
- y.derivative(0) = 16
- y.derivative(1) = 32
- y.derivative(2) = 48
- y.derivative(3) = 48
- y.derivative(4) = 24
- y.derivative(5) = 0
- **/
|