Automatic Differentiation
 
Loading...
Searching...
No Matches
operator_unary_negative.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_REV_CORE_OPERATOR_UNARY_NEGATIVE_HPP
2#define STAN_MATH_REV_CORE_OPERATOR_UNARY_NEGATIVE_HPP
3
9
10namespace stan {
11namespace math {
12
37inline var operator-(const var& a) {
38 return make_callback_var(
39 -a.val(), [a](const auto& vi) mutable { a.adj() -= vi.adj(); });
40}
41
49template <typename T, require_var_matrix_t<T>* = nullptr>
50inline auto operator-(const T& a) {
51 return make_callback_var(-a.val(), [a](const auto& vi) mutable {
52 for (Eigen::Index j = 0; j < a.cols(); ++j) {
53 for (Eigen::Index i = 0; i < a.rows(); ++i) {
54 a.adj().coeffRef(i, j) -= vi.adj().coeff(i, j);
55 }
56 }
57 });
58}
59
60} // namespace math
61} // namespace stan
62#endif
fvar< T > operator-(const fvar< T > &x1, const fvar< T > &x2)
Return the difference of the specified arguments.
var_value< plain_type_t< T > > make_callback_var(T &&value, F &&functor)
Creates a new var initialized with a callback_vari with a given value and reverse-pass callback funct...
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...